アイデアを実装するための 60 行のコード - 契約ボトムピッキング戦略

作成日:: 2022-03-19 14:37:08, 更新日:: 2024-12-02 21:32:02
comments   14
hits   2888

アイデアを実装するための 60 行のコード - 契約ボトムピッキング戦略

グリッド戦略やマーチンゲール戦略など、変動の激しい市場を好む戦略には、固有の欠点があります。同様の戦略は、ETH 契約市場でしばらく前からテストされてきました。また、FMZ.COM で新旧のプレイヤーとチャットしたり、経験を共有したりすることもよくあります。この種の戦略に関して、友人の言ったことに強く同意する点が 1 つあります。つまり、暗号通貨業界で契約を行う場合、ロングポジションを取るリスクはショートポジションを取るリスクよりもわずかに低くなります。あるいは簡単に言えば、最悪の下落はゼロだが、上昇の可能性は無限大だ。

では、マーチンゲールやグリッドのような戦略はロングのみでショートは行わず、ボトムピッキングのリスクを長期にわたって分散させる方が、二国間取引を行うよりも良いのでしょうか?このアイデアは良いように思えますが、実際の実行に耐えられるかどうかは誰にもわかりません。しかし、少なくともこのアイデアを単純にバックテストすることはできます。さて、今日の記事のテーマは、契約のボトムピッキング戦略の設計です。

FMZ.COM をベースにした迅速な開発

プラットフォームの柔軟性、インターフェースのカプセル化、強力なバックテスト システムなどのおかげで、このアイデアを実装するコードは実に非常にシンプルです。コード全体は 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)
    }
}

パラメータの設計も非常にシンプルです。

アイデアを実装するための 60 行のコード - 契約ボトムピッキング戦略

パラメータはこれだけです。

数十行のコードのバックテスト効果を見てください

バックテストの時間範囲を設定するだけです:

アイデアを実装するための 60 行のコード - 契約ボトムピッキング戦略

バックテストの実行:

アイデアを実装するための 60 行のコード - 契約ボトムピッキング戦略

アイデアを実装するための 60 行のコード - 契約ボトムピッキング戦略

グリッド型やマーティン型の戦略にとても似ていますね〜。学習を始めたばかりの新入生は、長い戦略を恐れ、すぐに落胆してしまうのでしょうか?戦略についての簡潔な紹介の方が適しており、戦略的なアイデアを理解し、論理的な設計を学びやすくなります。

戦略コードは学習および研究目的のみに使用されます。