Menyampaikan idea dengan 60 baris kod -- Strategi Penangkapan Ikan Bawah Kontrak

Penulis:Lydia, Dicipta: 2022-11-08 15:30:01, Dikemas kini: 2023-09-20 09:05:08

img

Strategi grid, strategi Martingale, yang lebih suka turun naik pasaran, mempunyai kelemahan mereka sendiri, dan mereka telah diuji untuk beberapa waktu di pasaran kontrak ETH.FMZ.COMSatu perkara mengenai strategi ini saya sangat bersetuju dengan seorang kawan, iaitu, untuk kontrak, pergi panjang mempunyai risiko yang lebih rendah daripada pergi pendek di pasaran mata wang digital. atau untuk menjadi mudah, yang paling teruk adalah menurun kepada sifar, tetapi peningkatan adalah tanpa had.

Oleh itu, akan Martingale, Grid dan strategi lain hanya pergi panjang, tidak pergi pendek, dan menyebarkan risiko memancing bawah dalam jarak yang panjang lebih baik daripada kedudukan dua hala? idea ini terdengar sangat baik, tetapi tidak ada yang tahu sama ada ia boleh diamalkan. tetapi, sekurang-kurangnya, kita boleh backtest ia dengan mudah. jadi kita mempunyai hari ini topik artikel merancang strategi memancing bawah kontrak.

Pembangunan pantas berdasarkanFMZ.COM

Kod untuk melaksanakan idea ini adalah sangat mudah, terima kasih kepada fleksibiliti platform, pengelupasan antara muka, sistem backtesting yang kuat dan sebagainya.

Idea reka bentuk strategi ini sangat mudah. Letakkan pesanan beli ke bawah pada selang waktu mengikut harga awal pada awal logik dan jika harga terus menurun, kita terus meletakkan pesanan beli, dan terus memancing bawah. Kemudian kita meletakkan pesanan kedudukan penutupan berdasarkan harga kedudukan meningkatkan margin keuntungan tertentu, dan menunggu kedudukan ditutup. Jika kedudukan ditutup, logik di atas akan diulangi dengan harga semasa sebagai harga awal. Strategi tidak akan pendek untuk memegang kedudukan, tetapi hanya panjang.

Kod sumber strategi:

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)
    }
}

Reka bentuk parameter juga sangat mudah:

img

Dengan 6 parameter ini sahaja.

Lihatlah hasil backtesting.

Tetapkan julat masa backtesting secara rawak:

img

Ujian belakang:

img

img

img

Ia kelihatan seperti strategi grid, strategi Martingale sangat ~. Pelajar yang pemula biasanya takut dengan strategi dengan kod yang panjang, yang mudah untuk dihalang. Strategi pendek dan ringkas untuk memulakan adalah lebih mudah dan lebih sesuai untuk memahami idea strategi dan mempelajari reka bentuk logik.

Kod strategi adalah untuk tujuan kajian dan penyelidikan sahaja.


Berkaitan

Lebih lanjut