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

Python-Version der Gleichgewichtsstrategie für eine einzelne Plattform

Erstellt in: 2020-02-05 10:02:03, aktualisiert am: 2023-10-12 21:20:47
comments   1
hits   2701

Python-Version der Gleichgewichtsstrategie für eine einzelne Plattform

Python-Version der Gleichgewichtsstrategie für eine einzelne Plattform

JavaScript-Version

Strategieadresse: https://www.fmz.com/strategie/345

Lassen Sie uns in diesem Artikel das Portieren einer einfachen JavaScript-Strategie üben. Durch das Übertragen von Strategien werden Sie mit den Aufrufen der Inventor Quantitative Trading Platform-Schnittstelle vertrauter und verstehen die geringfügigen Unterschiede zwischen verschiedenen Sprachen bei der Entwicklung von Strategien auf der Plattform. Tatsächlich ist der Unterschied zwischen der JavaScript-Version der Strategie und der Python-Version Die Strategie ist sehr gering, da die Schnittstellenaufrufe grundsätzlich gleich sind.

Strategiebeschreibung

Zitat aus der JavaScript-Version der Anweisungen:

Dazu muss eine Position eröffnet werden. Wenn das Konto beispielsweise 5.000 Yuan und 1 Münze hat, der Wert der Münze größer ist als der Kontostand von 5.000 und die Preisdifferenz den Schwellenwert überschreitet, ist die Münze jetzt beispielsweise 6.000 wert Yuan, dann verkaufen (6.000-5.000)/6.000. /2 Münzen, es bedeutet, dass die Münze aufgewertet hat, tauschen Sie das Geld zurück, wenn die Münze beispielsweise auf 4000 Yuan abwertet, kaufen (5000-4000)/4000/2 Münzen, kaufe einige zurück, wenn der Kurs der Münze fällt, und wenn er wieder steigt, verkaufe ich sie wieder, genau wie eine Bilanz, mit unterschiedlichen Absicherungen auf beiden Seiten, deshalb habe ich es eine ausgewogene Strategie genannt.

Das Strategieprinzip ist sehr einfach und die JavaScript-Version des Codes ist nicht lang, nur mehr als 70 Zeilen. Durch die Übertragung auf die Python-Sprachstrategie mit prägnanterer Syntax ist der Code kürzer und sehr gut für Anfänger geeignet. Auf der Inventor Quantitative Trading Platform werden viele Codes von Entwicklern gemeinsam genutzt, und die Sprache unterstütztJavaScript/C++/PythonUsw., daher ist die Beherrschung einer weiteren Entwicklungssprache nicht nur für Lern-, Forschungs- und Entwicklungsstrategien hilfreich, sondern ermöglicht Ihnen auch, sich mit den verschiedenen API-Schnittstellen der Plattform vertraut zu machen.

Strategiecode

'''backtest
start: 2019-12-01 00:00:00
end: 2020-02-01 11:00:00
period: 1m
exchanges: [{"eid":"OKEX","currency":"BTC_USDT","stocks":1}]
'''

InitAccount = None

def CancelPendingOrders():
    ret = False
    while True:
        orders = _C(exchange.GetOrders)
        if len(orders) == 0 :
            return ret

        for j in range(len(orders)):
            exchange.CancelOrder(orders[j].Id)
            ret = True
            if j < len(orders) - 1:
                Sleep(Interval)
    return ret 

def onTick():
    acc = _C(exchange.GetAccount)
    ticker = _C(exchange.GetTicker)
    spread = ticker.Sell - ticker.Buy
    diffAsset = (acc.Balance - (acc.Stocks * ticker.Sell)) / 2
    ratio = diffAsset / acc.Balance
    LogStatus("ratio:", ratio, _D())
    if abs(ratio) < threshold:
        return False
    if ratio > 0 :
        buyPrice = _N(ticker.Sell + spread, ZPrecision)
        buyAmount = _N(diffAsset / buyPrice, XPrecision)
        if buyAmount < MinStock:
            return False
        exchange.Buy(buyPrice, buyAmount, diffAsset, ratio)
    else :
        sellPrice = _N(ticker.Buy - spread, ZPrecision)
        sellAmount = _N(-diffAsset / sellPrice, XPrecision)
        if sellAmount < MinStock:
            return False 
        exchange.Sell(sellPrice, sellAmount, diffAsset, ratio)
    return True

def main():
    global InitAccount, LoopInterval
    InitAccount = _C(exchange.GetAccount)
    LoopInterval = max(LoopInterval, 1)
    while True:
        if onTick():
            Sleep(1000)
            CancelPendingOrders()
            Log(_C(exchange.GetAccount))
        Sleep(LoopInterval * 1000)

Der Code beginnt mit

'''backtest
start: 2019-12-01 00:00:00
end: 2020-02-01 11:00:00
period: 1m
exchanges: [{"eid":"OKEX","currency":"BTC_USDT","stocks":1}]
'''

Es handelt sich um die Backtest-Konfiguration, was bedeutet, dass die Backtest-Konfiguration (Einstellungen) in Form von Code gespeichert werden und der Backtest automatisch entsprechend dieser Einstellung konfiguriert wird. Dieser Teil kann gelöscht werden. Wenn er gelöscht wird, müssen Sie die Backtest-Konfigurationsinformationen während des Backtests manuell auf der Backtest-Seite festlegen. Referenz: https://www.fmz.com/bbs-topic/859

Die Parameter dieser Strategie sind genau dieselben wie die der JavaScript-Version. Der Strategiecode wird ebenfalls Satz für Satz übernommen, die Programmstruktur hat sich nicht geändert. Sie können sie Satz für Satz vergleichen, um die Unterschiede zwischen Strategien zu sehen, die in verschiedenen Sprachen geschrieben sind. Sprachen.

Backtesting

Parameterkonfiguration Python-Version der Gleichgewichtsstrategie für eine einzelne Plattform

Statistiken Python-Version der Gleichgewichtsstrategie für eine einzelne Plattform

Python-Version der Gleichgewichtsstrategie für eine einzelne Plattform

Strategieadresse: https://www.fmz.com/strategy/183374

Die Strategie dient nur zu Referenzzwecken, zum Backtesting und zum Testen. Bei Interesse können Sie sie optimieren und aktualisieren.