En tant que plateforme de trading quantitative puissante, flexible et facile à utiliser pour l'ensemble du réseau, la plateforme de trading quantitatif FMZ présente de très faibles obstacles à l'utilisation et le programme de robot ne prend que peu de ressources. Par exemple, l'heure de non-ouverture représente la grande majorité de la journée entière lors de la conduite du programme et du trading quantitatif des contrats à terme sur matières premières. De cette façon, nous espérons que le robot ne fonctionnera qu'à l'heure d'ouverture, et qu'il ne fonctionnera qu'à l'heure d'ouverture chaque jour pour économiser de l'argent. N'est-ce pas excitant? Pour répondre à cette exigence, nous pouvons utiliser le langage Python pour écrire un robot de stratégie fonctionnant sur la plateforme de trading FMZ Quant, et laisser le robot contrôler le démarrage et l'arrêt du robot à intervalles réguliers via l'interface API étendue de la plateforme de trading FMZ Quant.
En fait, l'ensemble du code est très simple. L'exemple d'appel de l'interface API d'extension de la plateforme de trading quantique FMZ peut être utilisé directement.
Adresse:https://www.fmz.com/api#simpleexemple
Utilisez la fonction dans l'exemple directement:def api (method, *args)
L'interface que nous devons appeler est également très simple. Les deux interfaces suivantes sont utilisées (peut être trouvé dans le document FMZ)
Redémarrer le robot
Redémarrez l'interface du robot et passez les paramètres à l'ID du robot.
Utilisation spécifiqueid
Pour appeler:api ('RestartRobot', id)
ArrêtezRobot
Pour arrêter l'interface robot, les paramètres sont également le robotID
Je suis désolée.
Le robotID
:
Pour appeler l'API d'extension FMZ Quant Trading Platform, vous devez utiliser leAPI KEY
de la plateforme de négociation quantitative FMZ.
Vous pouvez générer votre propre API KEY dans la gestion de compte.
Nous passons dans leAPI KEY
comme paramètre stratégique.
La capture d'écran de l'obtention du compte de la plateforme de trading FMZ QuantAPI KEY
:
Le reste est d'écrire une logique de synchronisation, qui est aussi très simple.
["175708,14:55:33-15:10:33", ...]
L'ellipse indique que plus de paramètres comme"175708,14:55:33-15:10:33"
peut être réglée.
Le paramètre de synchronisation est une chaîne JSON, qui sera analysée dans une liste dans le code de stratégie.
À savoir:
"175708,14:55:33-15:10:33"
Ils sont séparés par des virgules.175708
est l'ID du robot, et la partie après la virgule est l'heure de démarrage/arrêt.
Dans l'exemple ci-dessus, le robot avec ID 175708 démarre à 14:55:33 et s'arrête à 15:10:33.
Ensuite, dans la stratégie, le robot continuera à tourner. Chaque rotation ronde obtiendra d'abord l'heure actuelle, puis jugera s'il faut déclencher le démarrage ou l'arrêt du robot en fonction de la comparaison entre l'heure actuelle et l'heure de chronométrage.
Si cela est déclenché, appelez l'API ('RestartRobot', id) ou l'API (
Code de stratégie complet:
# -*- 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)
Captures d'écran:
Adresse stratégique:https://www.fmz.com/strategy/184600
À titre d'exemple, l'API étendue de la plateforme de trading quantitative FMZ est toujours très puissante. Le robot de chronométrage est simple dans sa conception, il doit démarrer à l'heure et s'arrêter à l'heure. Il n'inclut pas de mécanismes tels que le démarrage est-il réussi, l'inspection, la réessai d'exception, etc. Si vous êtes intéressé, vous pouvez ajouter des fonctions et les étendre. La stratégie est à titre de référence.