マルチメーカーの菜刈り機から高周波戦略設計について

作者: リン・ハーン小さな夢, 作成日:2021-03-09 13:41:54, 更新日:2023-09-26 20:53:41

img

マルチメーカーの菜刈り機から高周波戦略設計について

この記事の先数では,原作の現貨版の菜刈り機の高周波戦略の考えとコードの実装を分析しました.

菜食機戦略解剖 (1) 菜食機の策略解剖 (2)

通貨圈の量化については,多くのユーザーが関心を持っています.印刷するお金の戦術は印刷するお金の戦略は,BINANUSDTの契約取引である. 観察と多くの注目の分析から,この高周波戦略は菜刈り機のような原理 (草神も高周波戦略の原理を比較して近似している) に似ていることがわかる. しかし,戦略に安定した勝利率と適切な利益損失比率を実現するために,確かに細かいところがある.

技師の小僧も魔法の変更を止めることができませんでした. 魔法の変更の戦略効果は,大神の戦略によってスクラッドに圧縮されています. しかし,それは高周波戦略の学習実践であり,興味のあるFMZer同級生が一緒に探求し,学びましょう.

魔法の菜食器

var TickInterval = 100

function LeeksReaper() {
    var self = {}
    self.numTick = 0
    self.lastTradeId = 0
    self.vol = 0
    self.askPrice = 0
    self.bidPrice = 0
    self.orderBook = {
        Asks: [],
        Bids: []
    }
    self.prices = []
    self.tradeOrderId = 0
    self.account = null
    self.buyPrice = 0
    self.sellPrice = 0
    self.state = 0
    self.depth = null

    self.updateTrades = function() {
        var trades = _C(exchange.GetTrades)
        if (self.prices.length == 0) {
            while (trades.length == 0) {
                trades = trades.concat(_C(exchange.GetTrades))
            }
            for (var i = 0; i < 15; i++) {
                self.prices[i] = trades[trades.length - 1].Price
            }
        }
        self.vol = 0.7 * self.vol + 0.3 * _.reduce(trades, function(mem, trade) {
            // Huobi not support trade.Id
            if ((trade.Id > self.lastTradeId) || (trade.Id == 0 && trade.Time > self.lastTradeId)) {
                self.lastTradeId = Math.max(trade.Id == 0 ? trade.Time : trade.Id, self.lastTradeId)
                mem += trade.Amount
            }
            return mem
        }, 0)

    }
    self.updateOrderBook = function() {
        var orderBook = _C(exchange.GetDepth)
        self.depth = orderBook
        self.buyPrice = orderBook.Bids[pendingLevel].Price
        self.sellPrice = orderBook.Asks[pendingLevel].Price
        self.orderBook = orderBook
        if (orderBook.Bids.length < 3 || orderBook.Asks.length < 3) {
            return
        }
        self.bidPrice = orderBook.Bids[0].Price * 0.618 + orderBook.Asks[0].Price * 0.382 + 0.01
        self.askPrice = orderBook.Bids[0].Price * 0.382 + orderBook.Asks[0].Price * 0.618 - 0.01
        self.prices.shift()
        self.prices.push(_N((orderBook.Bids[0].Price + orderBook.Asks[0].Price) * 0.15 +
            (orderBook.Bids[1].Price + orderBook.Asks[1].Price) * 0.1 +
            (orderBook.Bids[2].Price + orderBook.Asks[2].Price) * 0.1 +
            (orderBook.Bids[3].Price + orderBook.Asks[3].Price) * 0.075 +
            (orderBook.Bids[4].Price + orderBook.Asks[4].Price) * 0.05 +
            (orderBook.Bids[5].Price + orderBook.Asks[5].Price) * 0.025))
    }

    self.updateAccount = function() {
        var account = exchange.GetAccount()
        if (!account) {
            return
        }
        self.account = account
        LogProfit(parseFloat(account.Info.totalWalletBalance), account)
    }

    self.CancelAll = function() {
        while (1) {
            var orders = _C(exchange.GetOrders)
            if (orders.length == 0) {
                break
            }
            for (var i = 0; i < orders.length; i++) {
                exchange.CancelOrder(orders[i].Id)
            }
            Sleep(100)
        }
    }

    self.poll = function() {
        self.numTick++
        self.updateTrades()
        self.updateOrderBook()
        var pos = _C(exchange.GetPosition)

        var burstPrice = self.prices[self.prices.length - 1] * burstThresholdPct
        var bull = false
        var bear = false
        LogStatus(_D(), "\n", 'Tick:', self.numTick, 'self.vol:', self.vol, ', lastPrice:', self.prices[self.prices.length - 1], ', burstPrice: ', burstPrice)

        if (self.numTick > 2 && (
                self.prices[self.prices.length - 1] - _.max(self.prices.slice(-6, -1)) > burstPrice ||
                self.prices[self.prices.length - 1] - _.max(self.prices.slice(-6, -2)) > burstPrice && self.prices[self.prices.length - 1] > self.prices[self.prices.length - 2]
            )) {
            bull = true
        } else if (self.numTick > 2 && (
                self.prices[self.prices.length - 1] - _.min(self.prices.slice(-6, -1)) < -burstPrice ||
                self.prices[self.prices.length - 1] - _.min(self.prices.slice(-6, -2)) < -burstPrice && self.prices[self.prices.length - 1] < self.prices[self.prices.length - 2]
            )) {
            bear = true            
        }

        if (pos.length != 0) {
            if (pos[0].Type == PD_LONG) {
                self.state = 1
            } else {
                self.state = 2
            }
        } else {
            self.state = 0
        }


        if ((!bull && !bear)) {
            return
        }

        if (bull) {
            var price = (self.state == 0 || self.state == 1) ? self.buyPrice : self.depth.Bids[coverPendingLevel].Price
            var amount = (self.state == 0 || self.state == 1) ? pendingAmount : pos[0].Amount
            exchange.SetDirection("buy")
            exchange.Buy(price, amount)
        } else if (bear) {
            var price = (self.state == 0 || self.state == 2) ? self.sellPrice : self.depth.Asks[coverPendingLevel].Price
            var amount = (self.state == 0 || self.state == 2) ? pendingAmount : pos[0].Amount
            exchange.SetDirection("sell")
            exchange.Sell(price, amount)                    
        }
        self.numTick = 0
        Sleep(TickInterval)
        self.CancelAll()
        self.updateAccount()
    }

    while (!self.account) {
        self.updateAccount()
        Sleep(500)
    }
    Log("self.account:", self.account)

    return self
}

function main() {
    LogProfitReset()
    exchange.SetPrecision(pricePrecision, amountPrecision)
    exchange.SetContractType("swap")
    var reaper = LeeksReaper()  
    while (true) {
        reaper.poll()
        Sleep(100)
    }
}

img

戦略的な考え方

戦略は,BINANUSDTの契約市場での取引を計画し,BINANの契約は単方向持有をサポートする.したがって,戦略は単方向持有の特性 (単方向持有がより便利な戦略の変更) に基づいて設計を変更し,平衡を考慮せず,販売を考慮する.この考えは,現貨版に近い菜刈り機に近い.

戦略は基本的には原版の短期価格トレンド突破を決定する基準を維持し,短期価格突破幅はパラメータによって決定される.burstThresholdPct短期間の価格を判断する条件はbull(牛) それともbear(熊) ┃

ポリシーは,元のバージョンのバランスモジュールなどのいくつかのモジュールを削除した.大きな変更は,下注定を注文シートにリストアップし,取引を待機するよう変更した. 多空賭けの激しい混沌とした盤盤の中で,低コストで取引を開くことを期待し,短期間のトレンドをフォローし,短期間のトレンドが逆転するときに平衡し,逆向きに取引を継続する.

戦略は,他の役に立たないコードを削除し,非常に短く,そしてシンプルである. 戦略は,収益を上げない,または損をする戦略であるにもかかわらず,FMZerとして,高周波戦略を学び,高周波戦略の行動を観察し,市場の微小法則を観察し,多くの実践,経験,理論を基礎として行うことが可能なモデルである. プログラム化取引,量化取引は,多くの実践,経験,理論を基礎として必要である.

リアル・ランニング

img

市場が活発でないとき,平衡を始めるのは難しい.

戦略の最適化

改善方法については,まだ良い方向が見つかっていない. 興味のある生徒は,ぜひ参加して,議論してください.

戦略アドレスは:https://www.fmz.com/strategy/260806

この戦略は学習のみであり,市場が平坦で,損失が起こり得る.


関連性

もっと

焼いた菜契約のレバレッジ倍数はどのように設定されますか?

ベンソン著作権意識に注意してください. 著作権の意識に注意してください. 著作権の意識に注意してください.

虫2独断的な取引の場合,どのように対処すべきか.

軌道生物取引量を増やせるか,または自動通貨を決定できるか.

Qslllデータを共有できるでしょうか?

量化されたカバノキupdateOrderBookの計算価格では,元のバージョンの加重後の価格は,取引先の買い買い nの中位数に近いもので,この記事では加重後の価格は2倍である (買い買い中位数に近い),ここではよく理解できません.

168ドラム・神 (Dream God) は,可測性のある,現貨で使えるバージョンを設定できますか?ありがとうございました.

168main:68:43 - TypeError: undefined のプロパティ 'totalWalletBalance' を読み取れない 微夢は,これは再テストできない,リアルディスクでなければならない? どのように調整する?

ベンバンリアルタイムの画像は太い

悲しい契約のトレードが手に入らないように見えるし,戦略がうまくいかないように見えるし,大がうまくいかないように見える.

小さな夢低周波は少しでも可能だが,利害はある.この高周波戦略には,プレスの深さや多空遊戯が激しいシーンが必要である.

焼いた菜この戦略を計算すると,この掲示板は100ms以内に取引が終わるとキャンセルされます.私は1晩 (ほぼ5時間) 走りました.

小さな夢取引所にレバレッジを直接設定することもできます.

小さな夢ハハ,いいね,思い出させてくれてありがとう.

小さな夢この戦略は,教育戦略であり,主に思想を眺め,単に教育である.

m0606価格制限もいいと思うけど...

小さな夢INFOはマール語です.

通り過ぎるテストはINFO情報をサポートしていません

ベンバンTick 限定価格 デザインはいい

小さな夢!>_>!これはただのプロトタイプで,お金がかからない,学習用で,研究対象に過ぎない.