avatar of 发明者量化-小小梦 发明者量化-小小梦
Suivre Messages privés
4
Suivre
1271
Abonnés

Utilisez Python pour implémenter un robot de trading quantitatif pour démarrer ou arrêter un gadget

Créé le: 2020-02-14 21:56:58, Mis à jour le: 2023-10-10 21:13:38
comments   4
hits   3047

Utilisez Python pour implémenter un robot de trading quantitatif pour démarrer ou arrêter un gadget

Utilisez Python pour implémenter un robot de trading quantitatif pour démarrer ou arrêter un gadget

En tant que plateforme de trading quantitative puissante, flexible et facile à utiliser sur l’ensemble du réseau, la plateforme de trading quantitative Inventor a un seuil d’utilisation très bas et le programme robotique prend très peu de ressources. Mais nous espérons toujours que le robot pourra être démarré lorsqu’il doit fonctionner et arrêté lorsqu’il n’a pas besoin de fonctionner. Par exemple, lors d’un trading programmé et quantitatif de contrats à terme sur matières premières, les heures hors marché représentent la grande majorité de la journée. Nous espérons ainsi pouvoir laisser le robot fonctionner uniquement pendant les heures d’ouverture du marché. Il est passionnant de penser aux économies que l’on pourrait réaliser en le faisant fonctionner uniquement pendant les heures d’ouverture du marché, tous les jours. Pour répondre à cette exigence, nous pouvons utiliser Python pour écrire un robot de stratégie qui s’exécute sur la plateforme de trading quantitatif FMZ. L’interface API étendue de la plateforme de trading quantitative de l’inventeur contrôle le démarrage et l’arrêt du robot à une heure fixe.

Quand il y a une demande, faites-le !

En fait, l’ensemble du code est très simple. L’exemple d’appel de l’interface API étendue de la plateforme de trading quantitative de l’inventeur peut être utilisé directement

Adresse : https://www.fmz.com/api#%E7%AE%80%E5%8D%95%E7%9A%84%E4%BE%8B%E5%AD%90

Utilisez directement la fonction de l’exemple :def api(method, *args) L’interface que nous devons appeler est également très simple, utilisant les deux interfaces suivantes (peuvent être trouvées dans le document FMZ)

  • RestartRobot Redémarrez l’interface du robot et transmettez l’ID du robot en tant que paramètre. Utiliser des spécifiquesid, vous pouvez l’appeler comme ceci :api('RestartRobot', id)

  • StopRobot Arrêtez l’interface du robot, les paramètres sont aussi le robotID

robotIDAfficher, obtenir, capture d’écran : Utilisez Python pour implémenter un robot de trading quantitatif pour démarrer ou arrêter un gadget

Pour appeler l’API d’extension de la plateforme de trading quantitative Inventor, vous devez utiliser la plateforme de trading quantitative InventorAPI KEY。 Vous pouvez générer le vôtre dans la gestion de compteAPI KEY。 Nous mettonsAPI KEYTransmis en tant que paramètre à la stratégie. Obtenez le compte de la plateforme de trading quantitative InventorAPI KEYcapture d’écran: Utilisez Python pour implémenter un robot de trading quantitatif pour démarrer ou arrêter un gadget

Il ne reste plus qu’à écrire la logique de timing, qui est également très simple. Définissez les paramètres de timing :

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

Les points de suspension indiquent que des éléments plus similaires"175708,14:55:33-15:10:33"paramètres. Le paramètre de synchronisation est une chaîne JSON, qui est analysée dans une liste dans le code de la politique. Chaque élément de la liste est un ensemble de paramètres de démarrage/arrêt du robot. Tout de suite:

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

Les virgules sont utilisées pour les séparer. La partie avant la virgule175708est l’ID du robot et la partie après la virgule est l’heure de début/heure de fin. Dans l’exemple ci-dessus, le robot avec l’ID 175708 a été démarré à 14:55:33 et arrêté à 15:10:33.

Ensuite, la stratégie continue la recherche, à chaque fois elle obtient d’abord l’heure actuelle, puis compare l’heure actuelle avec l’heure programmée pour déterminer s’il est nécessaire de déclencher le démarrage ou l’arrêt du robot. Si déclenché, appelez api(‘RestartRobot’, id) ou api(‘StopRobot’, id) pour démarrer ou arrêter le robot.

Le 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("字符串配置错误:分隔符号,")
        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)

Réglages des paramètres du robot :

Utilisez Python pour implémenter un robot de trading quantitatif pour démarrer ou arrêter un gadget

Opération de stratégie :

capture d’écran Utilisez Python pour implémenter un robot de trading quantitatif pour démarrer ou arrêter un gadget

Robots exploités par cette stratégie : Utilisez Python pour implémenter un robot de trading quantitatif pour démarrer ou arrêter un gadget

Adresse de la stratégie : https://www.fmz.com/strategy/184600

Conclusion

Pour commencer, l’API étendue de la plateforme de trading quantitatif Inventor est très puissante. Il est tout à fait possible d’utiliser ces API étendues pour créer votre propre plateforme de trading quantitative basée sur la plateforme FMZ. La conception de ce robot de chronométrage est relativement simple. Il démarre et s’arrête simplement lorsque le moment est venu. Il n’inclut aucun mécanisme tel que la réussite du démarrage, la vérification, la nouvelle tentative anormale, etc. Ceux qui sont intéressés peuvent ajouter des fonctions et étendre il. La stratégie est destinée à l’apprentissage à titre de référence uniquement