Als eine leistungsstarke, flexible und einfach zu nutzende quantitative Handelsplattform für das gesamte Internet, haben die Erfinder die Quantitative Handelsplattform entwickelt, die zwar sehr niedrige Einsatzschwellen und wenig Ressourcen für Roboterprogramme hat. Wir hoffen jedoch, dass die Roboter gestartet werden, wenn sie laufen müssen, und nicht gestoppt werden, wenn sie laufen müssen. Wenn wir beispielsweise Commodity Futures Programmieren oder Quantitative Trades machen, nehmen wir den größten Teil des Tages nicht an Marktzeiten teil. Wir hoffen sehr, dass der Roboter nur an Marktzeiten arbeitet und jeden Tag nur an Marktzeiten arbeitet. Die Erfinder quantifizieren die erweiterte API-Schnittstelle der Handelsplattform, die das Starten und Stoppen des Roboters zeitlich steuert.
Der gesamte Code ist sehr einfach und kann direkt mit dem Beispiel der API-Erweiterung verwendet werden, die von den Erfindern aufgerufen wurde.
Die Adresse:https://www.fmz.com/api#简单的例子
Die Funktion, die in diesem Beispiel direkt verwendet wird:def api(method, *args)
Die Benutzeroberfläche, die wir anrufen müssen, ist auch sehr einfach, indem wir die folgenden zwei Schnittstellen verwenden (siehe FMZ-Dokumentation).
WiederherstellenRobot
Der Roboter-Interface wird neu gestartet, und die Parameter werden in die Roboter-ID übertragen.
Spezifische Verwendungid
Das ist ein einfacher Anruf:api('RestartRobot', id)
StopRobot
Stoppen Sie die Roboter-Schnittstelle, die Parameter sind auch RoboterID
。
Die RoboterID
Siehe, erhalte, Screenshot:
Die Erfinder-Quantitative-Trading-Plattform-Erweiterung API erfordert die Verwendung von Erfinder-Quantitative-Trading-PlattformAPI KEY
Das ist nicht wahr.
Sie können Ihre eigenen Konten in der Verwaltung erstellen.API KEY
Das ist nicht wahr.
Wir habenAPI KEY
Das ist ein sehr schwieriger Fall.
Erhalten Sie die Quantifizierung der Inventoren-Account-PlattformAPI KEY
Bildschirm:
Die Schreibweise ist einfach, die Zeitlogik zu schreiben und die Zeitparameter festzulegen:
["175708,14:55:33-15:10:33", ...]
Sie können mehr ähnliches setzen."175708,14:55:33-15:10:33"
Ich bin ein großer Freund von Ihnen.
Ein Timing-Parameter ist eine JSON-String, die in der Strategiecode als Liste analysiert wird. Jedes Element in der Liste ist eine Gruppe von botischen Start-/Stopp-Einstellungen.
Das heißt:
"175708,14:55:33-15:10:33"
Die Komma-Abstände sind die Teile vor dem Komma.175708
Für die Roboter-ID wird der Teil hinter dem Komma als Start-/Stoppzeit bezeichnet.
In diesem Beispiel ist die ID: 175708 für den Roboter, 14:55:33 gestartet, 15:10:33 gestoppt.
Die Strategie wird dann ständig durchsucht, um die aktuelle Zeit zu erhalten, und dann zu entscheiden, ob der Roboter gestartet oder gestoppt werden muss, basierend auf dem Vergleich zwischen der aktuellen Zeit und der Timing-Zeit. Wenn dies der Fall ist, rufen Sie API (RestartRobot button, id) oder API (StopRobot button, id) an, um den Roboter zu starten oder zu stoppen.
Der vollständige Strategie-Code:
# -*- 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)
Bildschirm
Der Roboter, der von dieser Strategie betrieben wird:
Die Strategie ist unter:https://www.fmz.com/strategy/184600
Die Erfinder haben eine sehr starke API für die Quantitative Trading Plattform, die sie für ihre eigene Quantitative Trading Plattform auf der Basis der FMZ-Plattform verwenden können. Die Zeitplaner-Roboter sind relativ einfach konzipiert, sie sind nur unintelligent, sie starten und stoppen, sie haben keine erfolgreichen Start-, Prüf-, Ausnahmerückversuch- usw. Mechanismen, die von Interesse sind, um Funktionen zu erweitern. Die Strategien sind nur für Lernzwecke.