Strategi mata uang digital berjangka dengan titik balik dua garis lurus (Pendidikan)

Penulis:Mimpi kecil, Tanggal: 2021-12-03 11:25:28
Tag:

Artikel terkait:https://www.fmz.com/bbs-topic/8479


/*backtest
start: 2021-09-01 00:00:00
end: 2021-12-02 00:00:00
period: 1h
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

var LONG = 1 
var SHORT = -1
var IDLE = 0

function getPosition(positions, direction) {
    var ret = {Price : 0, Amount : 0, Type : ""}
    _.each(positions, function(pos) {
        if (pos.Type == direction) {
            ret = pos
        }
    })
    return ret 
}

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

function cover(tradeFunc, direction) {
    var mapDirection = {"closebuy": PD_LONG, "closesell": PD_SHORT}
    var positions = _C(exchange.GetPosition)
    var pos = getPosition(positions, mapDirection[direction])
    if (pos.Amount > 0) {
        cancellAll()
        exchange.SetDirection(direction)
        if (tradeFunc(-1, pos.Amount)) {
            return true 
        } else {
            return false 
        }
    }
    return true 
}

function main() {
    if (okexSimulate) {
        exchange.IO("simulate", true) // 切换到OKEX V5模拟盘测试 
        Log("切换到OKEX V5模拟盘")
    }    
    exchange.SetContractType(ct)
    var state = IDLE
    var holdPrice = 0
    var preTime = 0

    while (true) {
        var r = _C(exchange.GetRecords)
        var l = r.length
        if (l < Math.max(ema1Period, ema2Period)) {
            Sleep(1000)
            continue
        }
        var ema1 = TA.EMA(r, ema1Period)
        var ema2 = TA.EMA(r, ema2Period)
        
        // 画图
        $.PlotRecords(r, 'K线')
        if(preTime !== r[l - 1].Time){
            $.PlotLine('ema1', ema1[l - 2], r[l - 2].Time)
            $.PlotLine('ema2', ema2[l - 2], r[l - 2].Time)
            
            $.PlotLine('ema1', ema1[l - 1], r[l - 1].Time)
            $.PlotLine('ema2', ema2[l - 1], r[l - 1].Time)
            preTime = r[l - 1].Time
        } else {
            $.PlotLine('ema1', ema1[l - 1], r[l - 1].Time)
            $.PlotLine('ema2', ema2[l - 1], r[l - 1].Time)
        }
        
        var up = (ema1[l - 2] > ema1[l - 3] && ema1[l - 4] > ema1[l - 3]) && (ema2[l - 2] > ema2[l - 3] && ema2[l - 4] > ema2[l - 3])
        var down = (ema1[l - 2] < ema1[l - 3] && ema1[l - 4] < ema1[l - 3]) && (ema2[l - 2] < ema2[l - 3] && ema2[l - 4] < ema2[l - 3])
        if (up && (state == SHORT || state == IDLE)) {
            if (state == SHORT && cover(exchange.Buy, "closesell")) {
                state = IDLE
                holdPrice = 0
                $.PlotFlag(r[l - 1].Time, 'coverShort', 'CS')
            }
            exchange.SetDirection("buy")
            if (exchange.Buy(-1, amount)) {
                state = LONG
                holdPrice = r[l - 1].Close
                $.PlotFlag(r[l - 1].Time, 'openLong', 'L')
            }
        } else if (down && (state == LONG || state == IDLE)) {
            if (state == LONG && cover(exchange.Sell, "closebuy")) {
                state = IDLE
                holdPrice = 0
                $.PlotFlag(r[l - 1].Time, 'coverLong', 'CL')
            }
            exchange.SetDirection("sell")
            if (exchange.Sell(-1, amount)) {
                state = SHORT
                holdPrice = r[l - 1].Close
                $.PlotFlag(r[l - 1].Time, 'openShort', 'S')
            }
        }
        
        // 止盈
        if (state == LONG && r[l - 1].Close - holdPrice > profitTarget && cover(exchange.Sell, "closebuy")) {            
            state = IDLE
            holdPrice = 0
            $.PlotFlag(r[l - 1].Time, 'coverLong', 'CL')
        } else if (state == SHORT && holdPrice - r[l - 1].Close > profitTarget && cover(exchange.Buy, "closesell")) {            
            state = IDLE
            holdPrice = 0
            $.PlotFlag(r[l - 1].Time, 'coverShort', 'CS')
        }
        LogStatus(_D())
        Sleep(500)        
    }
}

Lebih banyak

xxs1xxs1Saya telah membuat sedikit perubahan pada tulisan Anda, dan hasilnya terlihat bagus. Anda memberikan saran tentang risiko dan optimasi. https://www.fmz.com/m/edit-strategy/359761

Kekuatan langitGuru: Berapa kali strategi pengajaran Anda dalam tes ini?

Kekuatan langit"Mulai bermain, tidak ada respon"

Kekuatan langit/upload/asset/2152afd2a78355e8ce25b.png

Kekuatan langitBuy ((-1, 5): 400: {"code":-2019, "msg:"Margin is insufficient. "} Apa artinya ya~ satu menit sekali

Kekuatan langitGuru Little Dream: Bisakah Anda menambahkan pesan Anda, silakan berbicara secara pribadi?

Kekuatan langitApakah strategi ini bisa berjalan dengan benar?

cylk9macd cross buy up buy down jual balik pada saat yang sama, bukan hanya menang, hanya berhenti kehilangan bagaimana menulis

13826543292Terima kasih Tuhan, sangat bagus.

Mimpi kecilBaiklah, penelitian ini adalah penelitian.

xxs1xxs1Apakah Anda bisa membuat strategi untuk mengunci dan membuka gudang? Atau ide itu juga berhasil. "Kami tidak bisa melakukan apa-apa, kami hanya ingin mengunci saham dan menunggu pasar berikutnya.

Mimpi kecilBaiklah, platform akan berbagi lebih banyak strategi di masa depan, terima kasih atas dukungan FMZ.

xxs1xxs1Yang bisa saya katakan, bos, adalah Anda benar-benar 666 Saya hanya menggunakan keuntungan tambahan. Anda harus mencoba uji coba EOS. Untuk tahun ini dan sekarang. 10.000% Saya sedang melakukan penelitian untuk melihat apakah mungkin tidak. Saat ini, perkiraan ini tidak cukup untuk membayar biaya operasi.

Mimpi kecil"Saya tidak tahu apa yang akan terjadi", katanya.

Mimpi kecilPada umumnya, leverage saat retesting adalah 10 kali lipat.

Mimpi kecilX. X jumlah, saya juga mengatakan tidak boleh... Tapi, bagaimana dengan versi teroptimalkan Anda, 666, Sharp? /upload/asset/16ab6c51ed93be64d383.png

Kekuatan langitApakah itu kontrak Anda sendiri atau bukan tuas?

Mimpi kecilAnda memiliki rekening, tidak cukup uang jaminan, tidak cukup untuk membayar.

Mimpi kecilDi sini, Anda dapat menemukan beberapa contoh dari kode yang ditulis sesuai dengan kebutuhan.