avatar of 发明者量化-小小梦 发明者量化-小小梦
Seguir Mensajes Privados
4
Seguir
1271
Seguidores

Utilice Python para implementar un robot comercial cuantitativo para iniciar o detener un dispositivo

Creado el: 2020-02-14 21:56:58, Actualizado el: 2023-10-10 21:13:38
comments   4
hits   3047

Utilice Python para implementar un robot comercial cuantitativo para iniciar o detener un dispositivo

Utilice Python para implementar un robot comercial cuantitativo para iniciar o detener un dispositivo

Como plataforma de comercio cuantitativo potente, flexible y fácil de usar en toda la red, la plataforma de comercio cuantitativo Inventor tiene un umbral de uso muy bajo y el programa de robot ocupa muy pocos recursos. Pero todavía esperamos que el robot pueda iniciarse cuando sea necesario y detenerse cuando no sea necesario. Por ejemplo, cuando se realizan transacciones programadas y cuantitativas de futuros de materias primas, el tiempo fuera del mercado representa la gran mayoría del día. De esta manera, tenemos muchas esperanzas de que el robot funcione solo durante el horario de apertura del mercado. Es emocionante pensar en cuánto dinero se puede ahorrar si lo hace funcionar solo durante el horario de apertura del mercado todos los días. Para cumplir con este requisito, podemos usar Python para escribir un robot de estrategia que se ejecute en la plataforma de comercio cuantitativo FMZ. La interfaz API extendida de la plataforma de comercio cuantitativo del inventor controla el inicio y la detención del robot en un momento fijo.

Cuando haya demanda, ¡hazlo!

De hecho, todo el código es muy simple. El ejemplo de llamada a la interfaz API extendida de la plataforma de comercio cuantitativo del inventor se puede utilizar directamente

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

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

  • RestartRobot Reinicie la interfaz del robot y pase el ID del robot como parámetro. Utilice específicoid, puedes llamarlo así:api('RestartRobot', id)

  • StopRobot Detener la interfaz del robot, los parámetros también son del robot.ID

robotIDVer, obtener, captura de pantalla: Utilice Python para implementar un robot comercial cuantitativo para iniciar o detener un dispositivo

Para llamar a la API de extensión de la Plataforma de comercio cuantitativo de Inventor, debe utilizar la Plataforma de comercio cuantitativo de InventorAPI KEY。 Puedes generar el tuyo propio en Gestión de cuentasAPI KEY。 Nosotros ponemosAPI KEYPasado como parámetro a la estrategia. Obtenga una cuenta en la plataforma de comercio cuantitativo InventorAPI KEYcaptura de pantalla: Utilice Python para implementar un robot comercial cuantitativo para iniciar o detener un dispositivo

Solo queda escribir la lógica de sincronización, que también es muy sencilla. Establezca los parámetros de sincronización:

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

Los puntos suspensivos indican que hay más similitudes"175708,14:55:33-15:10:33"ajustes. El parámetro de tiempo es una cadena JSON, que se analiza en una lista en el código de política. Cada elemento de la lista es un conjunto de configuraciones de inicio/parada del robot. Ahora mismo:

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

Las comas se utilizan para separarlos. La parte antes de la coma175708es el ID del robot y la parte después de la coma es la hora de inicio/hora de finalización. En el ejemplo anterior, el robot con ID 175708 se inició a las 14:55:33 y se detuvo a las 15:10:33.

Luego, la estrategia continúa buscando, cada vez obtiene primero la hora actual y luego compara la hora actual con la hora programada para determinar si es necesario activar el inicio o la detención del robot. Si se activa, llame a api(‘RestartRobot’, id) o api(‘StopRobot’, id) para iniciar o detener el robot.

El código de estrategia completo:

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

Configuración de parámetros del robot:

Utilice Python para implementar un robot comercial cuantitativo para iniciar o detener un dispositivo

Operación de estrategia:

captura de pantalla Utilice Python para implementar un robot comercial cuantitativo para iniciar o detener un dispositivo

Robots operados por esta estrategia: Utilice Python para implementar un robot comercial cuantitativo para iniciar o detener un dispositivo

Dirección de estrategia: https://www.fmz.com/strategy/184600

Conclusión

Como punto de partida, la API extendida de la plataforma de comercio cuantitativo Inventor es muy potente. Es totalmente posible utilizar estas API extendidas para crear su propia plataforma de comercio cuantitativo basada en la plataforma FMZ. El diseño de este robot cronometrador es relativamente simple. Simplemente arranca y se detiene cuando llega el momento. No incluye ningún mecanismo como si el arranque es exitoso, verificación, reintento anormal, etc. Aquellos que estén interesados ​​pueden agregar funciones y expandir él. La estrategia es sólo para referencia de aprendizaje.