Mettre en œuvre un robot de négociation quantitative démarrage ou arrêt gadget chronométré en utilisant Python

Auteur:Je ne sais pas., Créé: 2022-12-20 14:35:09, Mis à jour: 2023-09-20 10:21:21

img

Mettre en œuvre un robot de négociation quantitative démarrage ou arrêt gadget chronométré en utilisant Python

En tant que plateforme de trading quantitative puissante, flexible et facile à utiliser pour l'ensemble du réseau, la plateforme de trading quantitatif FMZ présente de très faibles obstacles à l'utilisation et le programme de robot ne prend que peu de ressources. Par exemple, l'heure de non-ouverture représente la grande majorité de la journée entière lors de la conduite du programme et du trading quantitatif des contrats à terme sur matières premières. De cette façon, nous espérons que le robot ne fonctionnera qu'à l'heure d'ouverture, et qu'il ne fonctionnera qu'à l'heure d'ouverture chaque jour pour économiser de l'argent. N'est-ce pas excitant? Pour répondre à cette exigence, nous pouvons utiliser le langage Python pour écrire un robot de stratégie fonctionnant sur la plateforme de trading FMZ Quant, et laisser le robot contrôler le démarrage et l'arrêt du robot à intervalles réguliers via l'interface API étendue de la plateforme de trading FMZ Quant.

S'il y a un besoin, faisons-le!

En fait, l'ensemble du code est très simple. L'exemple d'appel de l'interface API d'extension de la plateforme de trading quantique FMZ peut être utilisé directement.

Adresse:https://www.fmz.com/api#simpleexemple

Utilisez la fonction dans l'exemple directement:def api (method, *args)L'interface que nous devons appeler est également très simple. Les deux interfaces suivantes sont utilisées (peut être trouvé dans le document FMZ)

  • Redémarrer le robot Redémarrez l'interface du robot et passez les paramètres à l'ID du robot. Utilisation spécifiqueidPour appeler:api ('RestartRobot', id)

  • ArrêtezRobot Pour arrêter l'interface robot, les paramètres sont également le robotIDJe suis désolée. Le robotID:

img

Pour appeler l'API d'extension FMZ Quant Trading Platform, vous devez utiliser leAPI KEYde la plateforme de négociation quantitative FMZ. Vous pouvez générer votre propre API KEY dans la gestion de compte. Nous passons dans leAPI KEYcomme paramètre stratégique. La capture d'écran de l'obtention du compte de la plateforme de trading FMZ QuantAPI KEY:

img

Le reste est d'écrire une logique de synchronisation, qui est aussi très simple.

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

L'ellipse indique que plus de paramètres comme"175708,14:55:33-15:10:33"peut être réglée. Le paramètre de synchronisation est une chaîne JSON, qui sera analysée dans une liste dans le code de stratégie. À savoir:

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

Ils sont séparés par des virgules.175708est l'ID du robot, et la partie après la virgule est l'heure de démarrage/arrêt. Dans l'exemple ci-dessus, le robot avec ID 175708 démarre à 14:55:33 et s'arrête à 15:10:33.

Ensuite, dans la stratégie, le robot continuera à tourner. Chaque rotation ronde obtiendra d'abord l'heure actuelle, puis jugera s'il faut déclencher le démarrage ou l'arrêt du robot en fonction de la comparaison entre l'heure actuelle et l'heure de chronométrage. Si cela est déclenché, appelez l'API ('RestartRobot', id) ou l'API (StopRobot, id) pour démarrer et arrêter le robot.

Code de stratégie complet:

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

Paramètres du robot:

img

Stratégie en cours d' exécution:

Captures d'écran:

img img

Adresse stratégique:https://www.fmz.com/strategy/184600

Finition

À titre d'exemple, l'API étendue de la plateforme de trading quantitative FMZ est toujours très puissante. Le robot de chronométrage est simple dans sa conception, il doit démarrer à l'heure et s'arrêter à l'heure. Il n'inclut pas de mécanismes tels que le démarrage est-il réussi, l'inspection, la réessai d'exception, etc. Si vous êtes intéressé, vous pouvez ajouter des fonctions et les étendre. La stratégie est à titre de référence.


Relationnée

Plus de