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

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

Erstellt in: 2020-02-14 21:56:58, aktualisiert am: 2023-10-10 21:13:38
comments   4
hits   3047

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

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#%E7%AE%80%E5%8D%95%E7%9A%84%E4%BE%8B%E5%AD%90

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: Verwenden Sie Python, um einen quantitativen Handelsroboter zum Starten oder Stoppen eines Gadgets zu implementieren

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: Verwenden Sie Python, um einen quantitativen Handelsroboter zum Starten oder Stoppen eines Gadgets zu implementieren

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:

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

Strategiebetrieb:

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

Roboter, die mit dieser Strategie betrieben werden: Verwenden Sie Python, um einen quantitativen Handelsroboter zum Starten oder Stoppen eines Gadgets zu implementieren

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