Die Ressourcen sind geladen. Beförderung...

Handschrift zeigt Ihnen, wie Sie eine Python-Politik kostengünstig verpacken können

Schriftsteller:Die Erfinder quantifizieren - Kleine Träume, Erstellt: 2020-06-30 10:48:18, Aktualisiert: 2024-12-10 20:27:04

手把手教你把一个Python策略封装成本地文件

Handschrift zeigt Ihnen, wie Sie eine Python-Politik kostengünstig verpacken können

In diesem Artikel werden zwei Möglichkeiten beschrieben, die andere am Ende des Artikels ist einfacher (empfohlen).

Es gibt viele Entwickler, die mit der Python-Sprache Strategien schreiben, die sich wegen der Sicherheit der Strategien interessieren, weil sie ihre Code-Dateien vor Ort aufbewahren wollen.FMZ APIEiner der Vorschläge, die in den Dokumenten vorgestellt werden:

Strategische Sicherheit Die Entwicklung von Strategien auf der Inventor-Quantified-Trading-Plattform ist nur für die Inventor-Quantified-Kontoinhaber sichtbar. Und auf der Inventor-Quantified-Trading-Plattform kann die Strategiecode vollständig lokalisiert werden, z. B. indem die Strategie in ein Python-Paket verpackt und in den Strategiecode geladen wird.https://www.fmz.com/api#%E7%AD%96%E7%95%A5%E5%AE%89%E5%85%A8%E6%80%A7

Diese Sorge ist zwar unnötig, aber wenn eine Lösung vorhanden ist, bietet sie ein vollständiges Beispiel für die Umsetzung.

Eine Strategie verpacken

Wir haben eine einfache Python-Strategie für eine Demonstration gefunden, die die klassischen Methoden verwendet.Dual ThrustDie Strategie, die Strategie-Adresse:https://www.fmz.com/strategy/21856Wir haben uns bemüht, keinen Teilcode der Strategie zu verändern, die Strategie in ein Dokument zu wickeln, das von der Strategie auf der FMZ-Plattform aufgerufen werden kann, und die Ausführung ist vollständig mit der direkten Ausführung der Strategie übereinstimmend. Das größte Problem mit der Wickelung ist, dass die globalen Objekte, globalen Funktionen und Konstanten, die in der Strategie auf der FMZ-Plattform aufgerufen werden, nicht in unserer Wickelungsdatei zugänglich sind, so dass wir einen Weg finden müssen, diese Objekte, Funktionen, Variablen und Konstanten in die Wickelungsdatei zu übertragen.

手把手教你把一个Python策略封装成本地文件

Passt TestA in die Datei, die im lokalen Editor geöffnet wurde.

手把手教你把一个Python策略封装成本地文件

  • Hinzufügen von Code, um den Code für das Kopieren und Einfügen der Politik unverändert zu halten
  # 函数、对象
  exchanges = None
  exchange = None
  Log = None
  Sleep = None
  TA = None
  Chart = None
  LogProfitReset = None
  LogStatus = None
  _N = None
  _C = None 
  LogProfit = None  
  

  # 策略参数
  ContractTypeIdx = None
  MarginLevelIdx = None
  NPeriod = None
  Ks = None
  Kx = None
  AmountOP = None
  Interval = None
  LoopInterval = None
  PeriodShow = None  

  # 常量
  ORDER_STATE_PENDING = 0
  ORDER_STATE_CLOSED = 1
  ORDER_STATE_CANCELED = 2
  ORDER_STATE_UNKNOWN = 3
  ORDER_TYPE_BUY = 0 
  ORDER_TYPE_SELL = 1
  PD_LONG = 0
  PD_SHORT = 1  
  

  def SetExchanges(es):
      global exchanges, exchange
      exchanges = es
      exchange = es[0]  

  def SetFunc(pLog, pSleep, pTA, pChart, pLogStatus, pLogProfitReset, p_N, p_C, pLogProfit):
      global Log, Sleep, TA, Chart, LogStatus, LogProfitReset, _N, _C, LogProfit
      Log = pLog
      Sleep = pSleep
      TA = pTA
      Chart = pChart
      LogStatus = pLogStatus
      LogProfitReset = pLogProfitReset
      _N = p_N
      _C = p_C
      LogProfit = pLogProfit  

  def SetParams(pContractTypeIdx, pMarginLevelIdx, pNPeriod, pKs, pKx, pAmountOP, pInterval, pLoopInterval, pPeriodShow):
      global ContractTypeIdx, MarginLevelIdx, NPeriod, Ks, Kx, AmountOP, Interval, LoopInterval, PeriodShow
      ContractTypeIdx = pContractTypeIdx
      MarginLevelIdx = pMarginLevelIdx
      NPeriod = pNPeriod
      Ks = pKs
      Kx = pKx
      AmountOP = pAmountOP
      Interval = pInterval
      LoopInterval = pLoopInterval
      PeriodShow = pPeriodShow

Die Hauptaufgabe des oben genannten Codes ist es, die in der aktuellen Datei verwendeten globalen Funktionen oder Variablen zu deklarieren.SetExchangesSetParamsSetFuncIn der FMZ-Plattform werden diese Funktionen aufgerufen und einige der verwendeten Funktionen, Objekte usw. weitergegeben.

Startstrategie auf der FMZ-Plattform

Die Anlaufstrategie ist einfach:

手把手教你把一个Python策略封装成本地文件

Wenn wir das tun, dann müssen wir die Funktionsweise des FMZ-Plattforms ändern, und wenn wir die Funktionsweise des FMZ-Plattforms ändern, dann müssen wir die Funktionsweise des FMZ-Plattforms ändern.Dual Thrust OKCoin Futures für die Python VersionDas gleiche ist der Fall, wenn man einfach die Strategie "Python Version Dual Thrust OKCoin Futures" kopiert, und den Code für die Strategie leert und auf "Python Version Dual Thrust OKCoin Futures" kleben kann.

import sys
# 这里我写的是自己放置testA文件的路径,具体我替换为xxx了,简单说就是设置自己的testA文件路径就可以了
sys.path.append("/Users/xxx/Desktop/pythonPlayground/")
import testA

def main():
    # 传递交易所对象
    testA.SetExchanges(exchanges)
    # 传递全局函数 SetFunc(pLog, pSleep, pTA, pChart, pLogStatus, pLogProfitReset, p_N, p_C, pLogProfit)
    testA.SetFunc(Log, Sleep, TA, Chart, LogStatus, LogProfitReset, _N, _C, LogProfit)
    # 传递策略参数 SetParams(pContractTypeIdx, pMarginLevelIdx, pNPeriod, pKs, pKx, pAmountOP, pInterval, pLoopInterval, pPeriodShow)
    testA.SetParams(ContractTypeIdx, MarginLevelIdx, NPeriod, Ks, Kx, AmountOP, Interval, LoopInterval, PeriodShow)
    # 执行封装的testA文件中的策略主函数
    testA.main()

So können wir die Strategie-Logik-Subjekte in Test-A-Dateien verpacken und auf dem Gerät des Hosts lokalisieren, und auf der FMZ-Plattform können wir unsere lokalen Dateien direkt in den Hosts laden, indem wir nur eine Startup-Politik speichern und den Roboter, der diese Startup-Politik erstellt hat, direkt ausführen.

Wiederholung des Kontrastes

  • Lokal laden testA-Dateien zurück

手把手教你把一个Python策略封装成本地文件

  • Original-Richtlinie, auf dem öffentlichen Server überprüft

手把手教你把一个Python策略封装成本地文件

Ein einfacherer Weg.

Sie können das Dokument direkt in die Ausführung laden. Diesmal haben wir eine Test-B-Datei vorbereitet, in der wir den Code für die Strategie "Python-Version Dual Thrust OKCoin Futures" platziert haben.

import time
class Error_noSupport(BaseException):
    def __init__(self):
        Log("只支持OKCoin期货!#FF0000")

class Error_AtBeginHasPosition(BaseException):
    def __init__(self):
        Log("启动时有期货持仓! #FF0000")

ChartCfg = {
    '__isStock': True,
    'title': {
        'text': 'Dual Thrust 上下轨图'
    },
    'yAxis': {

...

Wenn die Strategie zu lang ist, wird sie ausgelassen und der Strategie-Code muss nicht geändert werden. Dann wird die "Python-Version Dual Thrust OKCoin-Futures" vorbereitet, das ist unsere Strategie auf der FMZ-Plattform, einen Roboter zu erstellen, die Test-B-Dateien direkt zu laden und direkt auszuführen.

手把手教你把一个Python策略封装成本地文件

if __name__ == '__main__':
    Log("run...")
    try:
        # 文件路径做了处理,可以写入自己testB文件放置的实际路径
        f = open("/Users/xxx/Desktop/pythonPlayground/testB.py", "r")
        code = f.read()
        exec(code)
    except Exception as e:
        Log(e)

Erfüllen Sie die Nachprüfung:手把手教你把一个Python策略封装成本地文件

Die Ergebnisse der Re-Tests stimmen mit den oben genannten Tests überein.

Die zweite Methode ist offensichtlich einfacher und ich empfehle, sie zu verwenden.


Inhalte dazu

Weitere Informationen

- Ich weiß nicht.Das hat mich inspiriert und ich habe das Gefühl, dass es noch mehr Funktionen mit Selen gibt.

- Ich weiß nicht.Lernen

Die Erfinder quantifizieren - Kleine TräumeHa ha, wenn ihr irgendeine Idee habt, die ihr gemeinsam diskutieren könnt.