Implementieren Sie ein quantitatives Trading-Roboter-Zeitbeginn oder Stopp-Gadget mit Python

Schriftsteller:Lydia., Erstellt: 2022-12-20 14:35:09, Aktualisiert: 2023-09-20 10:21:21

img

Implementieren Sie ein quantitatives Trading-Roboter-Zeitbeginn oder Stopp-Gadget mit Python

Als leistungsfähige, flexible und einfach zu bedienende quantitative Handelsplattform für das gesamte Netzwerk hat die FMZ Quant Trading Platform sehr geringe Einsatzbarrieren und das Roboterprogramm nimmt nur wenige Ressourcen in Anspruch. Zum Beispiel macht die Nichtöffnungszeit den überwiegenden Teil des ganzen Tages aus, wenn man Programm- und quantitativen Handel mit Rohstoff-Futures durchführt. Auf diese Weise hoffen wir, dass der Roboter nur zur Öffnungszeit läuft und dass er nur jeden Tag zur Öffnungszeit läuft, um Geld zu sparen. Ist es nicht aufregend? Um dieser Anforderung gerecht zu werden, können wir mit der Python-Sprache einen auf der FMZ Quant Trading Platform laufenden Strategie-Roboter schreiben und den Roboter den Start und den Stopp des Roboters in regelmäßigen Abständen über die erweiterte API-Schnittstelle der FMZ Quant Trading Platform steuern lassen.

Wenn es eine Notwendigkeit gibt, dann machen wir es!

In der Tat ist der gesamte Code sehr einfach. Das Beispiel der Anrufung der FMZ Quant Trading Platform Erweiterung API-Schnittstelle kann direkt verwendet werden.

Anschrift:https://www.fmz.com/api#simpleBeispiel

Verwenden Sie die Funktion im Beispiel direkt:def api (method, *args)Die Schnittstelle, die wir anrufen müssen, ist auch sehr einfach. Die folgenden zwei Schnittstellen werden verwendet (kann im FMZ Dokument gefunden werden)

  • NeustartRobot Starten Sie die Roboteroberfläche neu und geben Sie die Parameter in die Roboter-ID ein. Spezifische VerwendungidAnrufen:api ('RestartRobot', id)

  • StoppRobot Um die Roboter-Schnittstelle zu stoppen, die Parameter sind auch der RoboterID- Ich weiß. RoboterID:

img

Um die FMZ Quant Trading Platform Erweiterung API aufzurufen, müssen Sie dieAPI KEYder FMZ Quant Trading Plattform. Sie können Ihren eigenen API-Schlüssel im Account Management generieren. Wir kommen durch dieAPI KEYals Strategieparameter. Der Screenshot des FMZ Quant Trading Platform KontosAPI KEY:

img

Der Rest besteht darin, eine Zeitlogik zu schreiben, die ebenfalls sehr einfach ist.

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

Die Ellipsis zeigt, dass mehr Einstellungen wie"175708,14:55:33-15:10:33"kann eingestellt werden. Der Timing-Parameter ist eine JSON-String, die in einer Liste im Strategiecode analysiert wird. Jedes Element in der Liste ist eine Reihe von Roboterstart/Stop-Einstellungen. Siehe:

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

Sie sind durch Kommas getrennt.175708ist die Roboter-ID, und der Teil nach dem Komma ist die Start-/Stoppzeit. In dem obigen Beispiel startet der Roboter mit ID 175708 um 14:55:33 und hört um 15:10:33.

Bei jeder Runde wird zunächst die aktuelle Uhrzeit ermittelt und dann nach dem Vergleich zwischen der aktuellen Uhrzeit und der Timing-Zeit entschieden, ob der Roboter gestartet oder gestoppt werden soll. Wenn ausgelöst, rufen Sie die API ('RestartRobot', id) oder API (StopRobot, id) an, um den Roboter zu starten und zu stoppen.

Vollständiger 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("String configuration error: delimiter,")
        param["id"] = arr[0]
        param["isProcessOpenThisDay"] = False
        param["isProcessCloseThisDay"] = False

        arr = arr[1].split("-")
        if len(arr) != 2:
            raise Exception("String configuration error: delimiter-")

        begin = arr[0]
        arrBegin = begin.split(":")
        if len(arrBegin) != 3:
            raise Exception("String configuration error: start time separator:")
        
        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("String configuration error: end time separator:")            
        
        param["end"] = {}
        param["end"]["hour"] = float(arrEnd[0])
        param["end"]["min"] = float(arrEnd[1])
        param["end"]["sec"] = float(arrEnd[2])
        arrParams.append(param)

    # Test
    Log("Output parameters", 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", "Did you perform a start today", "Did you perform a stop today"],
            "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("Robot ID:", arrParams[i]["id"], "Execution started, please log in to the platform to check if it started successfully", "Extended API return value:", 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("Robot ID:", arrParams[i]["id"], "Execution stopped, please log in to the platform to check if it stopped successfully", "Extended API return value:", ret, strPush)
        
        if nowDay != nowTime.tm_mday:
            nowDay = nowTime.tm_mday

        LogStatus(_D(), nowTime, "\n`" + json.dumps(tbl) + "`")
        Sleep(500)

Einstellungen der Parameter des Roboters:

img

Strategie läuft:

Bildschirmaufnahmen:

img img

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

Ende

Zum Beispiel ist die erweiterte API der FMZ Quant Trading Platform immer noch sehr leistungsstark. Der Timing-Roboter ist einfach gestaltet, er startet und stoppt zu dem Zeitpunkt. Er enthält keine Mechanismen wie Erfolg des Starts, Inspektion, Ausnahmerückversuch usw. Wenn Sie interessiert sind, können Sie Funktionen hinzufügen und erweitern. Die Strategie dient nur als Referenz.


Verwandt

Mehr