Como uma plataforma de negociação quantitativa poderosa, flexível e fácil de usar para toda a rede, a plataforma de negociação quantitativa FMZ tem barreiras muito baixas para uso e o programa de robô ocupa poucos recursos. Por exemplo, o tempo de não abertura representa a grande maioria do dia inteiro ao realizar a negociação quantitativa de futuros de commodities. Desta forma, esperamos que o robô só funcione na hora de abertura e que ele só funcione na hora de abertura todos os dias para economizar dinheiro. Não é emocionante? Para atender a essa exigência, podemos usar a linguagem Python para escrever um robô de estratégia rodando na plataforma de negociação FMZ Quant, e deixar o robô controlar o início e a parada do robô em intervalos regulares através da interface API estendida da plataforma de negociação FMZ Quant.
Na verdade, todo o código é muito simples. O exemplo de chamar a interface de extensão da API da plataforma de negociação FMZ Quant pode ser usado diretamente.
Endereço:https://www.fmz.com/api#simpleExemplo
Use a função no exemplo diretamente:def api (method, *args)
A interface que precisamos chamar também é muito simples. As duas seguintes interfaces são usadas (podem ser encontradas no documento FMZ)
ReiniciarRobot
Reinicie a interface do robô e passe os parâmetros para o robot ID.
Utilização específicaid
para ligar:api ('RestartRobot', id)
StopRobot
Para parar a interface do robô, os parâmetros são também o robôID
- Não.
RobôID
:
Para chamar o FMZ Quant Trading Platform extensão API, você precisa usar oAPI KEY
da plataforma de negociação quantitativa FMZ.
Você pode gerar sua própria API KEY no gerenciamento de contas.
Passamos noAPI KEY
como um parâmetro estratégico.
A captura de tela de obter a conta da plataforma de negociação FMZ QuantAPI KEY
:
O resto é escrever uma lógica de tempo, que também é muito simples.
["175708,14:55:33-15:10:33", ...]
A elipse indica que mais configurações como"175708,14:55:33-15:10:33"
pode ser definido.
O parâmetro de tempo é uma cadeia de caracteres JSON, que será analisada em uma lista no código de estratégia.
A saber:
"175708,14:55:33-15:10:33"
São separados por vírgulas.175708
é a identificação do robô, e a parte após a vírgula é a hora de início/parada.
No exemplo acima, o robô com ID 175708 começa às 14:55:33 e pára às 15:10:33.
Em seguida, na estratégia, o robô continuará girando. Cada rotação redonda primeiro obterá a hora atual e, em seguida, julgará se deve desencadear o início ou a parada do robô de acordo com a comparação entre a hora atual e a hora de cronometragem.
Se for acionado, ligue para a API ('RestartRobot', id) ou API (
Código completo da estratégia:
# -*- 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 tela:
Endereço estratégico:https://www.fmz.com/strategy/184600
Como exemplo, a API estendida da FMZ Quant Trading Platform