Les ressources ont été chargées... Je charge...

Utilisez Python pour réaliser des robots de transactions quantitatives.

Auteur:L'inventeur de la quantification - un petit rêve, Créé: 2020-02-14 21:56:58, Mis à jour: 2023-10-10 21:13:38

img

Utilisez Python pour réaliser des robots de transactions quantitatives.

En tant que plateforme de trading quantitative puissante, flexible et facile à utiliser sur l'ensemble du Web, la plate-forme de trading quantitative de l'inventeur est très faible en termes de seuil d'utilisation et de ressources pour les programmes robotiques. Par exemple, dans le cadre de la programmation des contrats à terme sur les produits de base, le temps de non-commercialisation représente la majeure partie de la journée. Ainsi, nous souhaitons que le robot fonctionne uniquement à l'heure de marché et que chaque jour, il fonctionne uniquement à l'heure de marché. L'inventeur de l'API étendue de la plate-forme de négociation quantitative, qui contrôle le démarrage et l'arrêt du robot en temps réel.

Si vous avez besoin, faites-le!

En fait, l'ensemble du code est très simple, l'exemple de l'interface API d'extension de plate-forme de trading quantitative peut être utilisé directement.

L'adresse:https://www.fmz.com/api#简单的例子

Utilisez directement l'exemple de la fonction:def api(method, *args)L'interface que nous avons besoin d'appeler est également simple, avec les deux interfaces suivantes (qui peuvent être consultées dans la documentation FMZ)

  • Résumé: Le robot peut être détecté par le système d'exploitation et les paramètres peuvent être transmis à l'ID du robot. Utilisation spécifiqueidIl y a aussi une autre vidéo qui montre des gens en train d'écrire:api('RestartRobot', id)

  • Arrêtez le robot Arrêtez l'interface robot, les paramètres sont aussi des robotsID

    Les robotsIDVoir, obtenir, capture d'écran:img

Appeler les inventeurs pour une plateforme de trading quantitative étendue de l'API qui nécessite l'utilisation de la plateforme de trading quantitative des inventeursAPI KEYJe ne sais pas. Vous pouvez créer votre propre compte dans la gestion de compte.API KEYJe ne sais pas. Nous avons prisAPI KEYLes paramètres de la stratégie sont passés. Acquérir le compte de la plateforme d'échange quantitative des inventeursAPI KEYUne capture d'écran:img

Il ne reste plus qu'à écrire une logique de synchronisation, qui est très simple, et à définir des paramètres de synchronisation:

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

Les représentants des omissions peuvent configurer plus de choses similaires."175708,14:55:33-15:10:33"Je ne sais pas comment faire. Le paramètre de synchronisation est une chaîne JSON que le code de stratégie analyse en une liste. Chaque élément de la liste est un ensemble de paramètres de démarrage/arrêt du robot. Il s'agit:

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

Il y a une partie avant la virgule.175708Pour l'ID du robot, la partie après le comma est l'heure de démarrage/arrêt. Dans l'exemple ci-dessus, le robot dont l'ID est: 175708 est lancé à 14:55:33 et arrêté à 15:10:33.

La stratégie est ensuite tournée en rond, chaque fois qu'une recherche est effectuée, l'heure actuelle est obtenue, puis, en fonction de la comparaison entre l'heure actuelle et l'heure de chronométrage, il est décidé de déclencher ou d'arrêter le robot. Si cela est déclenché, appelez api (ou id) ou api (ou id) pour démarrer ou arrêter le robot.

Le code complet de la stratégie:

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

Les paramètres du robot:

img

La stratégie fonctionne:

Capture de vueimg

Les robots qui ont été manipulés par cette stratégie:img

L'adresse de la stratégie:https://www.fmz.com/strategy/184600

La fin

En tant que pivot, l'API d'extension de la plate-forme de trading quantitative de l'inventeur est également très puissante, et il n'y a aucun problème à utiliser ces API d'extension pour créer sa propre plate-forme de trading quantitatif basée sur la plate-forme FMZ. La conception de ce robot de chronométrage est relativement simple, il n'a pas de cerveau pour se mettre en marche et s'arrêter à temps, et n'inclut pas de mécanismes de démarrage, de vérification, de réessayage anormal, etc., intéressants pour ajouter des fonctionnalités et des extensions. Les stratégies sont à titre d'information.


Relationnée

Plus de