60行コードで"つのアイデアを実現する - 契約底釣り

作者: リン・ハーンニナバダス, 作成日: 2022-04-02 18:27:54, 更新日: 2022-04-02 18:29:47

60行コードで"つのアイデアを実現する - 契約底釣り

格子戦略とMartingale戦略は,市場価格の振動が好きですが,固有の欠点があり,類似の戦略は,ETH契約市場でしばらくテストされています.FMZ.COMこのタイプの戦略について,友人と本当に同意していることがあります. それは,通貨循環で契約を行うことです. そして,ロングするリスクはショートするリスクよりも少なくなります. または,単純に言えば,最悪の落ちはゼロに戻ります. しかし,上昇は無限です.

では,マルティンゲールやグリッドのような戦略は,短くではなく,長くなっているのでしょうか? 双方向的に行うよりも,長距離で底部漁のリスクを分散させることの方が良いのでしょうか? このアイデアは非常に良いように聞こえますが,実際の戦闘に耐えられるかどうか誰も知りません. しかし,少なくともこのアイデアをバックテストすることができます. したがって,今日の記事のテーマは - 契約底部漁戦略をデザインします.

急速な発展FMZ.COM

このアイデアを実装するコードは,柔軟性,インターフェイスエンカプスレーション,FMZプラットフォームの強力なバックテストシステムなどのおかげで非常にシンプルです. コード全体が60行だけです (コード書き仕様については,短縮できる多くの行が短縮されていません).

戦略のアイデアのデザインは非常にシンプルです.論理の初めの価格に従って,間隔距離が減少している場合,購入注文をします.価格が低下し続けると,購入注文を継続し,底部釣りを続けます.その後,ポジション価格の後に特定の利益のスプレッドを追加して,閉じるのを待って,ポジションが閉ざされた場合,上記の論理は,現在の価格を初期価格として繰り返します.戦略はショートではなく,ただロングです.

戦略のソースコード:

function cancelAll() {
    while (true) {
        var orders = _C(exchange.GetOrders)
        if (orders.length == 0) { 
            break 
        }
        for (var i = 0 ; i < orders.length ; i++) {
            exchange.CancelOrder(orders[i].Id, orders[i])
            Sleep(interval)
        }
    }
}

function getLong(arr, kind) {
    var ret = null 
    for (var i = 0 ; i < arr.length ; i++) {
        if (arr[i].Type == (kind == "pos" ? PD_LONG : ORDER_TYPE_BUY)) {
            ret = arr[i]
        }
    }
    return ret
}

function pendingBidOrders(firstPrice) {
    var index = 0
    var amount = baseAmount
    while (true) {
        var pos = _C(exchange.GetPosition)
        var price = firstPrice - index * baseSpacing
        amount *= ratio
        index++
        exchange.SetDirection("buy")
        exchange.Buy(price, amount)        
        if (pos.length != 0) {
            var longPos = getLong(pos, "pos")
            if (longPos) {
                exchange.SetDirection("closebuy")
                exchange.Sell(longPos.Price + profitTarget, longPos.Amount)
            }
        }
        while (true) {
            Sleep(interval)
            if (!getLong(_C(exchange.GetOrders), "orders")) {
                cancelAll()
                break
            }
            if (!getLong(_C(exchange.GetPosition), "pos")) {
                cancelAll()
                return 
            }
        }
    }
}

function main() {
    exchange.SetContractType(symbol)
    while (true) {
        pendingBidOrders(_C(exchange.GetTicker).Last)
    }
}

パラメータの設計もとてもシンプルです

img

数つのパラメータしかありません

数十行のコードのバックテスト結果を見てみましょう

バックテストの時間範囲をランダムに設定します:

img

バックテスト:

img

img

格子やマルティンゲール型戦略のように見える.新しい学習者が始まったばかりで,このような長い戦略を非常に恐れて,簡単に諦めるように説得されるのでしょうか? 簡潔で簡潔な戦略紹介はより適しており,戦略のアイデアを消化し,論理設計を学ぶことが容易です.

上記の戦略コードは研究と研究のためにのみ使用されます.


もっと