En tant que plateforme de trading quantitative puissante, flexible et facile à utiliser sur l'ensemble du Web, la plate-forme de trading quantitative de l'inventeur est très faible en termes de seuil d'utilisation et de ressources pour les programmes robotiques. Par exemple, dans le cadre de la programmation des contrats à terme sur les produits de base, le temps de non-commercialisation représente la majeure partie de la journée. Ainsi, nous souhaitons que le robot fonctionne uniquement à l'heure de marché et que chaque jour, il fonctionne uniquement à l'heure de marché. L'inventeur de l'API étendue de la plate-forme de négociation quantitative, qui contrôle le démarrage et l'arrêt du robot en temps réel.
En fait, l'ensemble du code est très simple, l'exemple de l'interface API d'extension de plate-forme de trading quantitative peut être utilisé directement.
L'adresse:https://www.fmz.com/api#简单的例子
Utilisez directement l'exemple de la fonction:def api(method, *args)
L'interface que nous avons besoin d'appeler est également simple, avec les deux interfaces suivantes (qui peuvent être consultées dans la documentation FMZ)
Résumé:
Le robot peut être détecté par le système d'exploitation et les paramètres peuvent être transmis à l'ID du robot.
Utilisation spécifiqueid
Il y a aussi une autre vidéo qui montre des gens en train d'écrire:api('RestartRobot', id)
Arrêtez le robot
Arrêtez l'interface robot, les paramètres sont aussi des robotsID
。
Les robotsID
Voir, obtenir, capture d'écran:
Appeler les inventeurs pour une plateforme de trading quantitative étendue de l'API qui nécessite l'utilisation de la plateforme de trading quantitative des inventeursAPI KEY
Je ne sais pas.
Vous pouvez créer votre propre compte dans la gestion de compte.API KEY
Je ne sais pas.
Nous avons prisAPI KEY
Les paramètres de la stratégie sont passés.
Acquérir le compte de la plateforme d'échange quantitative des inventeursAPI KEY
Une capture d'écran:
Il ne reste plus qu'à écrire une logique de synchronisation, qui est très simple, et à définir des paramètres de synchronisation:
["175708,14:55:33-15:10:33", ...]
Les représentants des omissions peuvent configurer plus de choses similaires."175708,14:55:33-15:10:33"
Je ne sais pas comment faire.
Le paramètre de synchronisation est une chaîne JSON que le code de stratégie analyse en une liste. Chaque élément de la liste est un ensemble de paramètres de démarrage/arrêt du robot.
Il s'agit:
"175708,14:55:33-15:10:33"
Il y a une partie avant la virgule.175708
Pour l'ID du robot, la partie après le comma est l'heure de démarrage/arrêt.
Dans l'exemple ci-dessus, le robot dont l'ID est: 175708 est lancé à 14:55:33 et arrêté à 15:10:33.
La stratégie est ensuite tournée en rond, chaque fois qu'une recherche est effectuée, l'heure actuelle est obtenue, puis, en fonction de la comparaison entre l'heure actuelle et l'heure de chronométrage, il est décidé de déclencher ou d'arrêter le robot. Si cela est déclenché, appelez api (ou id) ou api (ou id) pour démarrer ou arrêter le robot.
Le code complet de la stratégie:
# -*- 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)
Capture de vue
Les robots qui ont été manipulés par cette stratégie:
L'adresse de la stratégie:https://www.fmz.com/strategy/184600
En tant que pivot, l'API d'extension de la plate-forme de trading quantitative de l'inventeur est également très puissante, et il n'y a aucun problème à utiliser ces API d'extension pour créer sa propre plate-forme de trading quantitatif basée sur la plate-forme FMZ. La conception de ce robot de chronométrage est relativement simple, il n'a pas de cerveau pour se mettre en marche et s'arrêter à temps, et n'inclut pas de mécanismes de démarrage, de vérification, de réessayage anormal, etc., intéressants pour ajouter des fonctionnalités et des extensions. Les stratégies sont à titre d'information.