Menerapkan ide dengan 60 baris kode -- Strategi Penangkapan Ikan Bagian Bawah Kontrak

Penulis:Lydia, Dibuat: 2022-11-08 15:30:01, Diperbarui: 2023-09-20 09:05:08

img

Strategi grid, strategi Martingale, yang lebih memilih fluktuasi pasar, memiliki kelemahan mereka sendiri, dan mereka telah diuji untuk beberapa waktu di pasar kontrak ETH.FMZ.COMsatu hal tentang strategi semacam ini sangat setuju dengan seorang teman, yaitu, seperti untuk kontrak, pergi panjang memiliki risiko yang lebih rendah daripada pergi pendek di pasar mata uang digital. atau untuk menjadi sederhana, yang terburuk adalah menurun ke nol, tetapi meningkat adalah tak terbatas.

Jadi, apakah Martingale, Grid dan strategi lain hanya akan panjang, tidak akan pendek, dan menyebarkan risiko memancing dasar dalam jangkauan panjang akan lebih baik daripada posisi bilateral? ide ini terdengar sangat bagus, tetapi tidak ada yang tahu apakah itu dapat dipraktekkan. tapi, setidaknya, kita dapat backtest dengan mudah. jadi kita memiliki hari ini topik artikel merancang strategi penangkapan dasar kontrak.

Perkembangan cepat berdasarkanFMZ.COM

Kode untuk mengimplementasikan ide ini sangat sederhana, berkat fleksibilitas platform, enkapsulasi antarmuka, sistem backtesting yang kuat dan sebagainya.

Ide desain strategi ini sangat sederhana. Letakkan pesanan beli ke bawah pada interval sesuai dengan harga awal di awal logika dan jika harga terus menurun, kita terus menempatkan pesanan beli, dan terus pergi memancing bawah. Kemudian kita menempatkan pesanan posisi penutupan berdasarkan harga posisi meningkatkan margin keuntungan tertentu, dan menunggu posisi ditutup. Jika posisi ditutup, logika di atas akan diulang dengan harga saat ini sebagai harga awal. Strategi tidak akan short untuk mempertahankan posisi, tetapi hanya long.

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

Desain parameter juga sangat sederhana:

img

Dengan 6 parameter ini saja.

Lihatlah hasil backtesting

Atur rentang waktu backtesting secara acak:

img

Uji balik:

img

img

img

Ini terlihat seperti strategi grid, strategi Martingale sangat banyak ~. Siswa yang pemula biasanya takut dengan strategi dengan kode panjang, yang mudah dicegah. Strategi singkat dan ringkas untuk memulai lebih mudah dan lebih tepat untuk memahami ide-ide strategi dan mempelajari desain logis.

Kode strategi hanya untuk tujuan studi dan penelitian.


Berkaitan

Lebih banyak