
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.
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:

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:

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)

captura de pantalla

Robots operados por esta estrategia:

Dirección de estrategia: https://www.fmz.com/strategy/184600
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.