Die Ressourcen sind geladen. Beförderung...

Timing-Start-oder-Stopp-Wizine für Quantitative-Trading-Roboter mit Python

Schriftsteller:Die Erfinder quantifizieren - Kleine Träume, Erstellt: 2020-02-14 21:56:58, Aktualisiert: 2023-10-10 21:13:38

img

Timing-Start-oder-Stopp-Wizine für Quantitative-Trading-Roboter mit Python

Als eine leistungsstarke, flexible und einfach zu nutzende quantitative Handelsplattform für das gesamte Internet, haben die Erfinder die Quantitative Handelsplattform entwickelt, die zwar sehr niedrige Einsatzschwellen und wenig Ressourcen für Roboterprogramme hat. Wir hoffen jedoch, dass die Roboter gestartet werden, wenn sie laufen müssen, und nicht gestoppt werden, wenn sie laufen müssen. Wenn wir beispielsweise Commodity Futures Programmieren oder Quantitative Trades machen, nehmen wir den größten Teil des Tages nicht an Marktzeiten teil. Wir hoffen sehr, dass der Roboter nur an Marktzeiten arbeitet und jeden Tag nur an Marktzeiten arbeitet. Die Erfinder quantifizieren die erweiterte API-Schnittstelle der Handelsplattform, die das Starten und Stoppen des Roboters zeitlich steuert.

Wenn es eine Nachfrage gibt, dann tun Sie es!

Der gesamte Code ist sehr einfach und kann direkt mit dem Beispiel der API-Erweiterung verwendet werden, die von den Erfindern aufgerufen wurde.

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

Die Funktion, die in diesem Beispiel direkt verwendet wird:def api(method, *args)Die Benutzeroberfläche, die wir anrufen müssen, ist auch sehr einfach, indem wir die folgenden zwei Schnittstellen verwenden (siehe FMZ-Dokumentation).

  • WiederherstellenRobot Der Roboter-Interface wird neu gestartet, und die Parameter werden in die Roboter-ID übertragen. Spezifische VerwendungidDas ist ein einfacher Anruf:api('RestartRobot', id)

  • StopRobot Stoppen Sie die Roboter-Schnittstelle, die Parameter sind auch RoboterID

    Die RoboterIDSiehe, erhalte, Screenshot:img

Die Erfinder-Quantitative-Trading-Plattform-Erweiterung API erfordert die Verwendung von Erfinder-Quantitative-Trading-PlattformAPI KEYDas ist nicht wahr. Sie können Ihre eigenen Konten in der Verwaltung erstellen.API KEYDas ist nicht wahr. Wir habenAPI KEYDas ist ein sehr schwieriger Fall. Erhalten Sie die Quantifizierung der Inventoren-Account-PlattformAPI KEYBildschirm:img

Die Schreibweise ist einfach, die Zeitlogik zu schreiben und die Zeitparameter festzulegen:

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

Sie können mehr ähnliches setzen."175708,14:55:33-15:10:33"Ich bin ein großer Freund von Ihnen. Ein Timing-Parameter ist eine JSON-String, die in der Strategiecode als Liste analysiert wird. Jedes Element in der Liste ist eine Gruppe von botischen Start-/Stopp-Einstellungen. Das heißt:

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

Die Komma-Abstände sind die Teile vor dem Komma.175708Für die Roboter-ID wird der Teil hinter dem Komma als Start-/Stoppzeit bezeichnet. In diesem Beispiel ist die ID: 175708 für den Roboter, 14:55:33 gestartet, 15:10:33 gestoppt.

Die Strategie wird dann ständig durchsucht, um die aktuelle Zeit zu erhalten, und dann zu entscheiden, ob der Roboter gestartet oder gestoppt werden muss, basierend auf dem Vergleich zwischen der aktuellen Zeit und der Timing-Zeit. Wenn dies der Fall ist, rufen Sie API (RestartRobot button, id) oder API (StopRobot button, id) an, um den Roboter zu starten oder zu stoppen.

Der vollständige Strategie-Code:

# -*- 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)

Die Roboterparameter:

img

Die Strategie läuft:

Bildschirmimg

Der Roboter, der von dieser Strategie betrieben wird:img

Die Strategie ist unter:https://www.fmz.com/strategy/184600

Das Ende

Die Erfinder haben eine sehr starke API für die Quantitative Trading Plattform, die sie für ihre eigene Quantitative Trading Plattform auf der Basis der FMZ-Plattform verwenden können. Die Zeitplaner-Roboter sind relativ einfach konzipiert, sie sind nur unintelligent, sie starten und stoppen, sie haben keine erfolgreichen Start-, Prüf-, Ausnahmerückversuch- usw. Mechanismen, die von Interesse sind, um Funktionen zu erweitern. Die Strategien sind nur für Lernzwecke.


Verwandt

Mehr