Utiliza Python para implementar botes de transacción cuantitativa para iniciar o detener el utilitario de tiempo

El autor:Un sueño pequeño., Creado: 2020-02-14 21:56:58, Actualizado: 2023-10-10 21:13:38

img

Utiliza Python para implementar botes de transacción cuantitativa para iniciar o detener el utilitario de tiempo

Como una plataforma de comercio cuantitativo de uso fácil y flexible, la plataforma de comercio cuantitativo de los inventores es muy baja en términos de uso y de recursos, pero todavía queremos que los robots se inicien cuando se necesiten y no se detengan cuando se necesiten. Por ejemplo, en la programación de futuros de productos, la negociación cuantitativa, el tiempo de apertura no ocupa la mayor parte del día. Así que es muy esperanzador tener un robot que funcione solo a la hora de apertura, solo a la hora de apertura todos los días. Para esta necesidad, podemos usar Python para escribir un robot de estrategia que se ejecute en la plataforma de negociación cuantitativa FMZ, y que el robot pase por la plataforma. Los inventores cuantifican las interfaces API ampliadas de las plataformas de negociación para controlar el inicio y el final del robot en tiempo real.

¡Si hay una demanda, hazlo!

De hecho, todo el código es muy sencillo, y se puede usar directamente el ejemplo de la interfaz de API de extensión de plataforma de intercambio cuantificada de los inventores.

La dirección es:https://www.fmz.com/api#简单的例子

Utilice directamente la función en el ejemplo:def api(method, *args)La interfaz que necesitamos para llamar también es muy simple, con las siguientes dos interfaces (se puede consultar en la documentación de FMZ)

  • ¿Qué está pasando? Si se reinicia la interfaz del robot, los parámetros se transmiten al ID del robot. Uso específicoidEn la página web de Facebook, el usuario puede llamar:api('RestartRobot', id)

  • StopRobot es un robot. Para detener la interfaz del robot, los parámetros también son robotsID

    El robotIDEn la página de Facebook de la organización, se puede leer:img

Llama a los inventores para que extiendan su plataforma de intercambio cuantitativoAPI KEY¿Qué es esto? Puede generar su propia cuenta en la administraciónAPI KEY¿Qué es esto? Así que lo hacemos.API KEYEn la actualidad, la mayoría de las aplicaciones de Google incluyen una aplicación de seguridad para dispositivos móviles. Acceso a las cuentas de las plataformas de intercambio cuantitativas de inventoresAPI KEYEn la imagen:img

Lo que queda es escribir la lógica de tiempo, que es muy simple, y establecer los parámetros de tiempo:

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

Los representantes de omitir pueden establecer más similares"175708,14:55:33-15:10:33"En la página de Facebook de la organización, se puede leer: Los parámetros de cronometraje son una cadena de JSON que se analiza en el código de la política y se analiza como una lista. Cada elemento de la lista es un conjunto de configuraciones de inicio/detención del robot. Es decir:

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

La parte anterior a la coma está separada por un comma.175708Para el ID del robot, la parte después del coma es el tiempo de inicio/detención. En el ejemplo anterior, el robot ID es: 175708, se inicia a las 14:55:33 y se detiene a las 15:10:33.

La estrategia continúa buscando, obteniendo el tiempo actual en cada búsqueda, y luego decide si se necesita activar o detener el robot según la comparación entre el tiempo actual y el tiempo programado. Si se activa, se puede llamar api (RestartRobot button, id) o api (StopRobot button, id) para iniciar o detener el robot.

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

Los parámetros del robot:

img

La estrategia está en marcha:

Las imágenesimg

Los robots que han sido manipulados por esta estrategia:img

La dirección de la estrategia:https://www.fmz.com/strategy/184600

El final

Las API de extensión de la plataforma de comercio cuantitativo de los inventores también son muy potentes, y no hay ningún problema con estas API de extensión basadas en la plataforma FMZ como su propia plataforma de comercio cuantitativo. El diseño de este robot de tiempo es relativamente simple, sólo no tiene cerebro hasta el momento en que se inicia, hasta el momento en que se detiene, y no se incluye un mecanismo de inicio o éxito, inspección, repetición de intentos anormales, etc. Las estrategias son para uso educativo solamente.


Relacionados

Más.