Type/to search
8
Follow
1364
Followers
Verwenden Sie Python, um einen quantitativen Handelsroboter zum Starten oder Stoppen eines Gadgets zu implementieren
Discussions
Created 2020-02-14 21:56:58  Updated 2023-10-10 21:13:38
 4
 3273

img

Verwenden Sie Python, um einen quantitativen Handelsroboter zum Starten oder Stoppen eines Gadgets zu implementieren

Als leistungsstarke, flexible und benutzerfreundliche quantitative Handelsplattform im gesamten Netzwerk weist die Inventor Quantitative Trading Platform eine sehr niedrige Nutzungsschwelle auf und das Roboterprogramm beansprucht nur sehr wenige Ressourcen. Wir hoffen jedoch weiterhin, dass der Roboter gestartet werden kann, wenn er laufen muss, und gestoppt werden kann, wenn er nicht laufen muss.
Beim programmierten und quantitativen Handel mit Rohstoff-Futures beispielsweise nimmt die Zeit außerhalb der Marktöffnungszeiten den größten Teil des Tages ein. Auf diese Weise hoffen wir sehr, den Roboter nur während der Marktöffnungszeiten laufen zu lassen. Es ist spannend, darüber nachzudenken, wie viel Kosten gespart werden können, wenn man ihn jeden Tag nur während der Marktöffnungszeiten laufen lässt. Um diese Anforderung zu erfüllen, können wir Python verwenden, um einen Strategieroboter zu schreiben, der auf der quantitativen Handelsplattform FMZ läuft.
Die erweiterte API-Schnittstelle der quantitativen Handelsplattform des Erfinders steuert den Start und Stopp des Roboters zu einem festen Zeitpunkt.

Wenn eine Nachfrage besteht, dann tun Sie es einfach!

Tatsächlich ist der gesamte Code sehr einfach. Das Beispiel des Aufrufs der erweiterten API-Schnittstelle der quantitativen Handelsplattform des Erfinders kann direkt verwendet werden

Adresse: https://www.fmz.com/api#简单的例子

Verwenden Sie die Funktion im Beispiel direkt:def api(method, *args)
Die Schnittstelle, die wir aufrufen müssen, ist ebenfalls sehr einfach und verwendet die folgenden beiden Schnittstellen (zu finden im FMZ-Dokument):

  • RestartRobot
    Starten Sie die Roboterschnittstelle neu und übergeben Sie die Roboter-ID als Parameter.
    Verwenden Sie spezifischeid, können Sie es folgendermaßen aufrufen:api('RestartRobot', id)

  • StopRobot
    Stoppen Sie die Roboterschnittstelle, die Parameter sind auch der RoboterID

    RoboterIDAnzeigen, abrufen, Screenshot:
    img

Um die Inventor Quantitative Trading Platform-Erweiterungs-API aufzurufen, müssen Sie die Inventor Quantitative Trading Platform verwenden.API KEY
Sie können Ihr eigenes Konto in der Kontoverwaltung erstellen.API KEY
Wir setzenAPI KEYWird als Parameter an die Strategie übergeben.
Holen Sie sich das Inventor Quantitative Trading Platform-KontoAPI KEYScreenshot:
img

Jetzt muss nur noch die Timing-Logik geschrieben werden, was ebenfalls sehr einfach ist. Legen Sie die Timing-Parameter fest:

["175708,14:55:33-15:10:33", ...]

Die Auslassungspunkte zeigen an, dass ähnlichere"175708,14:55:33-15:10:33"Einstellungen.
Der Timing-Parameter ist eine JSON-Zeichenfolge, die im Richtliniencode in eine Liste analysiert wird. Jedes Element in der Liste ist ein Satz von Start-/Stopp-Einstellungen für den Roboter.
Im Augenblick:

"175708,14:55:33-15:10:33"

Zur Trennung werden Kommas verwendet. Der Teil vor dem Komma175708ist die Roboter-ID und der Teil nach dem Komma ist die Startzeit/Stoppzeit.
Im obigen Beispiel wurde der Roboter mit der ID 175708 um 14:55:33 gestartet und um 15:10:33 gestoppt.

Anschließend sucht die Strategie weiter, ruft jedes Mal zuerst die aktuelle Zeit ab und vergleicht dann die aktuelle Zeit mit der geplanten Zeit, um zu bestimmen, ob der Start oder Stopp des Roboters ausgelöst werden muss.
Rufen Sie bei Auslösung api('RestartRobot', id) oder api('StopRobot', id) auf, um den Roboter zu starten oder zu stoppen.

Der vollständige Strategiecode:

# -*- coding: utf-8 -*- import time import json try: import md5 import urllib2 from urllib import urlencode except: import hashlib as md5 import urllib.request as urllib2 from urllib.parse import urlencode def api(method, *args): d = { 'version': '1.0', 'access_key': accessKey, 'method': method, 'args': json.dumps(list(args)), 'nonce': int(time.time() * 1000), } d['sign'] = md5.md5(('%s|%s|%s|%d|%s' % (d['version'], d['method'], d['args'], d['nonce'], secretKey)).encode('utf-8')).hexdigest() return json.loads(urllib2.urlopen('https://www.fmz.com/api/v1', urlencode(d).encode('utf-8')).read().decode('utf-8')) RobotParams = json.loads(strRobotParams) def main(): global RobotParams arrParams = [] nowDay = 0 strPush = "" if isPushMsg: strPush = "@" for i in range(len(RobotParams)): param = {} arr = RobotParams[i].split(",") if len(arr) != 2: raise Exception("字符串配置错误:分隔符号,") param["id"] = arr[0] param["isProcessOpenThisDay"] = False param["isProcessCloseThisDay"] = False arr = arr[1].split("-") if len(arr) != 2: raise Exception("字符串配置错误:分隔符号-") begin = arr[0] arrBegin = begin.split(":") if len(arrBegin) != 3: raise Exception("字符串配置错误:起始时间分隔符号:") param["begin"] = {} param["begin"]["hour"] = float(arrBegin[0]) param["begin"]["min"] = float(arrBegin[1]) param["begin"]["sec"] = float(arrBegin[2]) end = arr[1] arrEnd = end.split(":") if len(arrEnd) != 3: raise Exception("字符串配置错误:结束时间分隔符号:") param["end"] = {} param["end"]["hour"] = float(arrEnd[0]) param["end"]["min"] = float(arrEnd[1]) param["end"]["sec"] = float(arrEnd[2]) arrParams.append(param) # 测试 Log("输出参数", arrParams, "#FF0000") while True: nowTime = time.localtime(time.time()) nowHour = nowTime.tm_hour nowMin = nowTime.tm_min nowSec = nowTime.tm_sec tbl = { "type" : "table", "title" : "msg", "cols" : ["id", "begin", "end", "今天是否执行过启动", "今天是否执行过停止"], "rows" : [] } for i in range(len(arrParams)): tbl["rows"].append([arrParams[i]["id"], json.dumps(arrParams[i]["begin"]), json.dumps(arrParams[i]["end"]), arrParams[i]["isProcessOpenThisDay"], arrParams[i]["isProcessCloseThisDay"]]) if nowDay != nowTime.tm_mday: arrParams[i]["isProcessOpenThisDay"] = False arrParams[i]["isProcessCloseThisDay"] = False if arrParams[i]["isProcessOpenThisDay"] == False: if nowTime.tm_hour == arrParams[i]["begin"]["hour"] and nowTime.tm_min >= arrParams[i]["begin"]["min"] and nowTime.tm_sec >= arrParams[i]["begin"]["sec"]: ret = api('RestartRobot', int(arrParams[i]["id"])) arrParams[i]["isProcessOpenThisDay"] = True Log("机器人ID:", arrParams[i]["id"], "执行启动,请登录平台检查是否启动成功", "扩展API返回值:", ret, strPush) if arrParams[i]["isProcessCloseThisDay"] == False: if nowTime.tm_hour == arrParams[i]["end"]["hour"] and nowTime.tm_min >= arrParams[i]["end"]["min"] and nowTime.tm_sec >= arrParams[i]["end"]["sec"]: ret = api('StopRobot', int(arrParams[i]["id"])) arrParams[i]["isProcessCloseThisDay"] = True Log("机器人ID:", arrParams[i]["id"], "执行停止,请登录平台检查是否停止成功", "扩展API返回值:", ret, strPush) if nowDay != nowTime.tm_mday: nowDay = nowTime.tm_mday LogStatus(_D(), nowTime, "\n`" + json.dumps(tbl) + "`") Sleep(500)

Roboterparametereinstellungen:

img

Strategiebetrieb:

Screenshot
img

Roboter, die mit dieser Strategie betrieben werden:
img

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

Abschluss

Als Ausgangspunkt ist die erweiterte API der quantitativen Handelsplattform Inventor sehr leistungsstark. Es ist durchaus möglich, diese erweiterten APIs zu verwenden, um Ihre eigene quantitative Handelsplattform auf Basis der FMZ-Plattform aufzubauen.
Das Design dieses Timing-Roboters ist relativ einfach. Er startet und stoppt einfach, wenn die Zeit gekommen ist. Es enthält keine Mechanismen wie z. B. ob der Start erfolgreich war, Überprüfung, abnormaler Wiederholungsversuch usw. Wer interessiert ist, kann Funktionen hinzufügen und erweitern Es.
Die Strategie dient nur als Lernreferenz

Related Recommendations
Comment
All comments (0)
No data
No data
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)