Strategi mata wang digital berjangka dua garis lurus (pengkhususan)

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

Artikel berkaitan: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 lanjut

xxs1xxs1Saya telah membuat sedikit penyesuaian pada gambar anda, dan hasilnya kelihatan baik. Anda memberi nasihat yang baik. https://www.fmz.com/m/edit-strategy/359761

Harta yang turun dari langitGuru: Berapa kali lagi strategi pengajaran ujian anda?

Harta yang turun dari langitSaya mula bermain dan tidak bertindak balas.

Harta yang turun dari langit/upload/asset/2152afd2a78355e8ce25b.png

Harta yang turun dari langitBuy ((-1, 5): 400: {"code":-2019, "msg:"Margin is insufficient. "} Apa yang dimaksudkan ~ setiap satu minit

Harta yang turun dari langitCik Dream, boleh tambah mesej awak, tolong beritahu saya?

Harta yang turun dari langitAdakah strategi ini boleh berjalan pada cakera sebenar?

cylk9macd memintas membeli ke atas dan menjual ke bawah pada masa yang sama membalikkan pesanan, bukan hanya menang, tetapi hanya berhenti kehilangan

13826543292Syukurlah, hebat.

Mimpi kecilBaiklah, kajian ini adalah kajian.

xxs1xxs1Adakah anda boleh membuat strategi untuk mengunci dan membuka set? Kami tidak mahu menghalang mereka daripada melakukan tindakan yang tidak sesuai dengan undang-undang, dan kami tidak mahu mereka melakukan tindakan yang tidak sesuai.

Mimpi kecilBaiklah, platform akan berkongsi lebih banyak strategi pada masa akan datang, terima kasih untuk menyokong FMZ.

xxs1xxs1Saya hanya boleh katakan tuan, anda benar-benar 666. Saya hanya menggunakan keuntungan tambahan. Anda boleh mencuba EOS. Untuk tahun ini. 10000%. Saya sedang membuat kajian untuk melihat mungkin tidak. Pada masa ini, anggaran ini tidak mencukupi untuk membayar bayaran. Bolehkah saya cuba membuat kontrak BUSD yang murah.

Mimpi kecilIni bermakna akaun tidak cukup aset.

Mimpi kecilBiasanya, penjanaan adalah 10 kali ganda apabila diuji semula.

Mimpi kecilX. X jumlah, saya juga tidak boleh berkata.... Namun, bagaimana dengan versi optimum 666 anda, Sharp sangat tinggi / upload/asset/16ab6c51ed93be64d383.png

Harta yang turun dari langitAdakah ia kontrak anda sendiri atau bukan tuas?

Mimpi kecilJika anda mempunyai akaun, tidak cukup jaminan, tidak mencukupi untuk membuat pesanan.

Mimpi kecilKod ditulis mengikut keperluan. Contoh boleh didapati di Strategy Square.