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.
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íficoid
para 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
:
Para llamar a la extensión de la plataforma de comercio de FMZ Quant API, usted necesita utilizar elAPI KEY
de la plataforma de negociación cuántica FMZ.
Puedes generar tu propia API KEY en la administración de cuentas.
Pasamos por elAPI KEY
como un parámetro de estrategia.
La captura de pantalla de obtener la cuenta de la Plataforma de Comercio Cuántico FMZAPI KEY
:
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.175708
es 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 (
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)
Capturas de pantalla:
Dirección estratégica:https://www.fmz.com/strategy/184600
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.