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.
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íficoid
En 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 robotID
En la página de Facebook de la organización, se puede leer:
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 KEY
En 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 KEY
En la imagen:
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.175708
Para 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)
Las imágenes
Los robots que han sido manipulados por esta estrategia:
La dirección de la estrategia:https://www.fmz.com/strategy/184600
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.