avatar of 发明者量化-小小梦 发明者量化-小小梦
konzentrieren Sie sich auf Private Nachricht
4
konzentrieren Sie sich auf
1271
Anhänger

60 Zeilen Code zur Umsetzung einer Idee - Contract Bottom-Picking Strategie

Erstellt in: 2022-03-19 14:37:08, aktualisiert am: 2024-12-02 21:32:02
comments   14
hits   3439

60 Zeilen Code zur Umsetzung einer Idee - Contract Bottom-Picking Strategie

Strategien, die volatile Märkte bevorzugen, wie die Grid-Strategie und die Martingale-Strategie, haben inhärente Nachteile. Ähnliche Strategien werden seit einiger Zeit auf dem ETH-Vertragsmarkt getestet. Außerdem chatte ich häufig mit neuen und alten Spielern auf FMZ.COM und tausche Erfahrungen aus. Bei dieser Art von Strategie gibt es einen Punkt, bei dem ich der Aussage eines Freundes voll und ganz zustimme. Das heißt, beim Abschluss von Verträgen im Kryptowährungskreis ist das Risiko einer Long-Position etwas geringer als das einer Short-Position. Oder, um es einfacher auszudrücken: Der schlimmstmögliche Rückgang liegt bei Null, die Oberseite ist jedoch unbegrenzt.

Wären Strategien wie Martingale und Grid also besser, nur Long und nicht Short zu gehen und die Bottom-Picking-Risiken über einen langen Bereich zu verteilen, als bilaterales Trading zu betreiben? Die Idee klingt gut, doch ob sie in der Praxis Bestand hat, weiß niemand. Aber wir können diese Idee zumindest einfach einem Backtest unterziehen. Damit kommen wir zum Thema des heutigen Artikels: der Entwicklung einer Strategie zum Bottom-Picking von Verträgen.

Schnelle Entwicklung auf Basis von FMZ.COM

Der Code zur Implementierung dieser Idee ist dank der Flexibilität der Plattform, der Schnittstellenkapselung, des leistungsstarken Backtesting-Systems usw. wirklich sehr einfach. Der gesamte Code umfasst nur 60 Zeilen (aus Gründen der Code-Schreibstandards werden viele Abkürzungen nicht verwendet).

Das Strategiedesign ist sehr einfach. Entsprechend dem Anfangspreis zu Beginn der Logik werden Kaufaufträge in Abständen nach unten erteilt. Wenn der Preis weiter sinkt, werden weiterhin Kaufaufträge erteilt, um das Bottom Fishing fortzusetzen. Platzieren Sie dann eine Schließungsorder basierend auf dem Positionspreis zuzüglich einer bestimmten Gewinndifferenz und warten Sie, bis die Position geschlossen wird. Wenn die Position geschlossen wird, wird die obige Logik mit dem aktuellen Preis als Anfangspreis wiederholt. Die Strategie hält keine Short-Positionen, sondern nur Long-Positionen.

Quellcode der Strategie:

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

Auch die Parametergestaltung ist denkbar einfach:

60 Zeilen Code zur Umsetzung einer Idee - Contract Bottom-Picking Strategie

Es gibt nur diese wenigen Parameter.

Schauen Sie sich den Backtest-Effekt dieser Dutzenden von Codezeilen an

Legen Sie einfach den Backtest-Zeitraum fest:

60 Zeilen Code zur Umsetzung einer Idee - Contract Bottom-Picking Strategie

Backtest-Lauf:

60 Zeilen Code zur Umsetzung einer Idee - Contract Bottom-Picking Strategie

60 Zeilen Code zur Umsetzung einer Idee - Contract Bottom-Picking Strategie

Es sieht sehr nach einer Grid- oder Martin-Strategie aus~. Haben neue Schüler, die gerade erst mit dem Lernen beginnen, Angst vor langwierigen Strategien und lassen sich leicht entmutigen? Besser geeignet ist eine kurze und prägnante Einführung in Strategien, die das Verstehen strategischer Ideen und das Erlernen logischer Gestaltung erleichtert.

Der Strategiecode dient ausschließlich Lern- und Forschungszwecken.