Implementar un robot de negociación cuantitativa de tiempo de inicio o parada gadget mediante el uso de Python

El autor:- ¿ Por qué?, Creado: 2022-12-20 14:35:09, Actualizado: 2023-09-20 10:21:21

img

Implementar un robot de negociación cuantitativa de tiempo de inicio o parada gadget mediante el uso de Python

Como plataforma de negociación cuantitativa potente, flexible y fácil de usar para toda la red, la plataforma de negociación cuantitativa FMZ tiene muy bajas barreras de uso y el programa de robots ocupa pocos recursos. Por ejemplo, el tiempo de no apertura representa la gran mayoría del día entero al realizar el programa y el comercio cuantitativo de futuros de productos básicos. De esta manera, esperamos que el robot solo se ejecute en el tiempo de apertura, y que solo se ejecute en el tiempo de apertura todos los días para ahorrar dinero. ¿No es emocionante? Para cumplir con este requisito, podemos usar el lenguaje Python para escribir un robot de estrategia que se ejecuta en la plataforma de negociación FMZ Quant, y dejar que el robot controle el inicio y parada del robot a intervalos regulares a través de la interfaz API extendida de la plataforma de negociación FMZ Quant.

¡Si hay una necesidad, hagámosla!

De hecho, todo el código es muy simple. El ejemplo de llamar a la extensión de la plataforma de comercio de FMZ Quant API interfaz se puede utilizar directamente.

Dirección:https://www.fmz.com/api#simpleejemplo

Utilice la función en el ejemplo directamente:def api (method, *args)La interfaz que necesitamos llamar también es muy simple. Las siguientes dos interfaces se utilizan (se pueden encontrar en el documento FMZ)

  • Reinicie el robot Reinicia la interfaz del robot y pasa los parámetros al robot ID. Uso específicoidpara llamar a:api ('RestartRobot', id)

  • Detener el robot Para detener la interfaz del robot, los parámetros son también el robotID¿ Qué pasa? El robotID:

img

Para llamar a la extensión de la plataforma de comercio de FMZ Quant API, usted necesita utilizar elAPI KEYde la plataforma de negociación cuántica FMZ. Puedes generar tu propia API KEY en la administración de cuentas. Pasamos por elAPI KEYcomo un parámetro de estrategia. La captura de pantalla de obtener la cuenta de la Plataforma de Comercio Cuántico FMZAPI KEY:

img

El resto es escribir la lógica de tiempo, que también es muy simple.

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

La elipse indica que más configuraciones como"175708,14:55:33-15:10:33"puede ser configurado. El parámetro de tiempo es una cadena JSON, que se analizará en una lista en el código de estrategia. Es decir:

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

Están separados por comas.175708es el robot ID, y la parte después de la coma es la hora de inicio / hora de parada. En el ejemplo anterior, el robot con ID 175708 comienza a las 14:55:33 y se detiene a las 15:10:33.

Luego, en la estrategia, el robot seguirá girando. Cada rotación redonda obtendrá primero la hora actual, y luego juzgará si debe activarse o detenerse el robot de acuerdo con la comparación entre la hora actual y la hora de cronometraje. Si se activa, llame a la API ('RestartRobot', id) o API (StopRobot, id) para iniciar y detener el robot.

Código completo de la estrategia:

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

Configuración de los parámetros del robot:

img

Estrategia en ejecución:

Capturas de pantalla:

img img

Dirección estratégica:https://www.fmz.com/strategy/184600

El final

Como ejemplo, la API extendida de la Plataforma de Comercio Cuantitativo FMZ sigue siendo muy poderosa. El robot de cronometraje es de diseño simple, se inicia en el momento y se detiene en el momento. No incluye mecanismos tales como si el inicio es exitoso, inspección, repetición de excepciones, etc. Si está interesado, puede agregar funciones y expandirlas. La estrategia es sólo para referencia.


Relacionados

Más.