Als leistungsfähige, flexible und einfach zu bedienende quantitative Handelsplattform für das gesamte Netzwerk hat die FMZ Quant Trading Platform sehr geringe Einsatzbarrieren und das Roboterprogramm nimmt nur wenige Ressourcen in Anspruch. Zum Beispiel macht die Nichtöffnungszeit den überwiegenden Teil des ganzen Tages aus, wenn man Programm- und quantitativen Handel mit Rohstoff-Futures durchführt. Auf diese Weise hoffen wir, dass der Roboter nur zur Öffnungszeit läuft und dass er nur jeden Tag zur Öffnungszeit läuft, um Geld zu sparen. Ist es nicht aufregend? Um dieser Anforderung gerecht zu werden, können wir mit der Python-Sprache einen auf der FMZ Quant Trading Platform laufenden Strategie-Roboter schreiben und den Roboter den Start und den Stopp des Roboters in regelmäßigen Abständen über die erweiterte API-Schnittstelle der FMZ Quant Trading Platform steuern lassen.
In der Tat ist der gesamte Code sehr einfach. Das Beispiel der Anrufung der FMZ Quant Trading Platform Erweiterung API-Schnittstelle kann direkt verwendet werden.
Anschrift:https://www.fmz.com/api#simpleBeispiel
Verwenden Sie die Funktion im Beispiel direkt:def api (method, *args)
Die Schnittstelle, die wir anrufen müssen, ist auch sehr einfach. Die folgenden zwei Schnittstellen werden verwendet (kann im FMZ Dokument gefunden werden)
NeustartRobot
Starten Sie die Roboteroberfläche neu und geben Sie die Parameter in die Roboter-ID ein.
Spezifische Verwendungid
Anrufen:api ('RestartRobot', id)
StoppRobot
Um die Roboter-Schnittstelle zu stoppen, die Parameter sind auch der RoboterID
- Ich weiß.
RoboterID
:
Um die FMZ Quant Trading Platform Erweiterung API aufzurufen, müssen Sie dieAPI KEY
der FMZ Quant Trading Plattform.
Sie können Ihren eigenen API-Schlüssel im Account Management generieren.
Wir kommen durch dieAPI KEY
als Strategieparameter.
Der Screenshot des FMZ Quant Trading Platform KontosAPI KEY
:
Der Rest besteht darin, eine Zeitlogik zu schreiben, die ebenfalls sehr einfach ist.
["175708,14:55:33-15:10:33", ...]
Die Ellipsis zeigt, dass mehr Einstellungen wie"175708,14:55:33-15:10:33"
kann eingestellt werden.
Der Timing-Parameter ist eine JSON-String, die in einer Liste im Strategiecode analysiert wird. Jedes Element in der Liste ist eine Reihe von Roboterstart/Stop-Einstellungen.
Siehe:
"175708,14:55:33-15:10:33"
Sie sind durch Kommas getrennt.175708
ist die Roboter-ID, und der Teil nach dem Komma ist die Start-/Stoppzeit.
In dem obigen Beispiel startet der Roboter mit ID 175708 um 14:55:33 und hört um 15:10:33.
Bei jeder Runde wird zunächst die aktuelle Uhrzeit ermittelt und dann nach dem Vergleich zwischen der aktuellen Uhrzeit und der Timing-Zeit entschieden, ob der Roboter gestartet oder gestoppt werden soll.
Wenn ausgelöst, rufen Sie die API ('RestartRobot', id) oder API (
Vollständiger Strategiecode:
# -*- 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)
Bildschirmaufnahmen:
Strategieadresse:https://www.fmz.com/strategy/184600
Zum Beispiel ist die erweiterte API der FMZ Quant Trading Platform