Die Ressourcen sind geladen. Beförderung...

Eine Idee mit 60 Zeilen Code verwirklichen - Vertragsbottom Fishing Strategie

Schriftsteller:FMZ~Lydia, Erstellt: 2022-11-08 15:30:01, Aktualisiert: 2024-12-02 21:41:40

img

Die Gitter-Strategie, Martingale-Strategie, die Marktschwankungen bevorzugen, haben ihre eigenen Nachteile, und sie wurden für einige Zeit auf dem ETH-Kontraktmarkt getestet.FMZ.COMEine Sache über diese Art von Strategie stimme ich sehr mit einem Freund überein, nämlich, wie bei den Verträgen, ist Long gehen weniger Risiko als kurz gehen auf dem digitalen Währungsmarkt.

Wird also Martingale, Grid und andere Strategien einfach lang gehen, nicht kurz gehen, und das Risiko der Bodenfischung in einer langen Reichweite verbreiten, besser als eine bilaterale Position? Diese Idee klingt sehr gut, aber niemand weiß, ob sie in die Praxis umgesetzt werden kann. Aber zumindest können wir es einfach zurücktesten.

Schnelle Entwicklung auf der GrundlageFMZ.COM

Der Code, um diese Idee umzusetzen, ist dank der Flexibilität der Plattform, der Schnittstellenverkapselung, des leistungsstarken Backtesting-Systems und so weiter wirklich einfach.

Die Konstruktionsidee der Strategie ist sehr einfach. Legen Sie den Kauf Auftrag in Abständen nach dem Anfangspreis am Anfang der Logik und wenn der Preis weiter sinkt, setzen wir den Kauf Auftrag weiter und gehen weiter nach unten Fischen. Dann platzieren wir die Schließposition Auftrag basierend auf der Position Preis eine bestimmte Gewinnspanne erhöht, und warten auf die Position Schließung. Wenn die Position geschlossen ist, wird die obige Logik mit dem aktuellen Preis als Anfangspreis wiederholt werden. Die Strategie wird nicht kurz gehen, um die Position zu halten, sondern nur lang gehen.

Strategie-Quellcode:

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

Das Parameterdesign ist ebenfalls sehr einfach:

img

Mit nur diesen 6 Parametern.

Schauen Sie sich das Rücktestresultat an.

Setzen Sie den Backtesting-Zeitrahmen zufällig:

img

Rücktest:

img

img

img

Es sieht aus wie die Gitterstrategie, Martingale-Strategie sehr ~. Studenten, die Anfänger sind, haben in der Regel Angst vor der Strategie mit langem Code, die leicht abgeschreckt werden kann. Eine kurze und prägnante Strategie zu beginnen ist einfacher und angemessener, um die Strategieideen zu verstehen und das logische Design zu lernen.

Der Strategiecode ist nur für Studien- und Forschungszwecke bestimmt.


Verwandt

Mehr