Die Strategie der doppelten Gleichlinien-Kernpunkte für digitale Währungs-Futures (Teaching)

Schriftsteller:Kleine Träume, Datum: 2021-12-03 11:25:28
Tags:

Siehe auch: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)        
    }
}

Mehr

xxs1xxs1Herr, ich habe deine Kleine modifiziert und die Ergebnisse sehen gut aus. Du gibst einen Tipp: Risiko und Optimierung. Ich habe das Gefühl, dass ich das nicht kann.

Der RegenbogenLehrerin: Wie vielfach hast du die Lehrstrategie für diesen Test verwendet?

Der RegenbogenIch habe das Video nicht gesehen, aber ich habe es gesehen.

Der Regenbogen/upload/asset/2152afd2a78355e8ce25b.png

Der RegenbogenBuy ((-1, 5): 400: {"code":-2019, "msg:"Margin is insufficient. "} Was soll das heißen?

Der RegenbogenLehrerin Little Dream: Kannst du mir deine WeChat-Nachricht geben?

Der RegenbogenKann diese Strategie auf einer echten Platte funktionieren?

Zylk9Macd kreuzt aufwärts, kauft nach unten und verkauft gleichzeitig umgekehrte Aufträge, nicht nur Gewinn, sondern auch Verlust.

13826543292Dank Gottes, das ist toll.

Kleine TräumeIch bin der Meinung, dass es eine gute Idee ist, diese Studie zu starten.

xxs1xxs1Kannst du eine Strategie finden, wie du die Lager aufschließst? Oder kann die Idee auch funktionieren. Die Strategie des direkten Stopps ist zu heftig.

Kleine TräumeIch hoffe, dass wir in Zukunft mehr Strategien teilen werden.

xxs1xxs1Ich kann nur sagen, Boss, du bist wirklich 666. Ich benutze nur den Gewinnvorteil. Ich bin auf der Suche nach einer Studie, um herauszufinden, ob das nicht der Fall ist. Derzeit ist die Schätzung nicht ausreichend, um die Gebühren zu bezahlen.

Kleine TräumeDas bedeutet, dass die Konten nicht ausreichend ausgestattet sind.

Kleine TräumeIm Allgemeinen ist der Hebel bei der Nachprüfung 10 mal höher.

Kleine TräumeX. X-Menge, ich sage auch nicht..... Aber was deine optimierte Version 666 angeht, wie hoch ist Sharp?

Der RegenbogenIst das ein Vertrag, oder ist es ein Hebel?

Kleine TräumeSie haben nicht genügend Geld für Ihr Konto, Sie haben nicht genügend Geld für Ihre Bestellung.

Kleine TräumeDas Programm wird von den Entwicklern und Anbietern der Software entwickelt.