
Sebagai platform dagangan kuantitatif yang berkuasa, fleksibel dan mudah digunakan di seluruh rangkaian, Platform Dagangan Kuantitatif Inventor mempunyai ambang yang sangat rendah untuk digunakan dan program robot menggunakan sumber yang sangat sedikit. Tetapi kami masih berharap robot itu boleh dimulakan apabila ia perlu berjalan dan berhenti apabila ia tidak perlu berjalan. Contohnya, apabila melakukan dagangan niaga hadapan komoditi yang diprogramkan dan kuantitatif, masa pembukaan bukan pasaran menyumbang sebahagian besar hari itu. Dengan cara ini, kami sangat berharap untuk membiarkan robot berjalan hanya semasa waktu buka pasaran. Adalah menarik untuk memikirkan berapa banyak kos yang boleh dijimatkan dengan menjalankannya hanya semasa waktu buka pasaran setiap hari. Untuk memenuhi keperluan ini, kami boleh menggunakan Python untuk menulis robot strategi yang berjalan pada platform dagangan kuantitatif FMZ. Antara muka API lanjutan bagi platform dagangan kuantitatif pencipta mengawal permulaan dan penghentian robot pada masa yang ditetapkan.
Malah, keseluruhan kod adalah sangat mudah Contoh memanggil antara muka API lanjutan platform dagangan kuantitatif pencipta boleh digunakan secara langsung
Alamat: https://www.fmz.com/api#%E7%AE%80%E5%8D%95%E7%9A%84%E4%BE%8B%E5%AD%90
Gunakan fungsi dalam contoh secara langsung:def api(method, *args)
Antara muka yang perlu kita panggil juga sangat mudah, menggunakan dua antara muka berikut (boleh didapati dalam dokumen FMZ)
RestartRobot
Mulakan semula antara muka robot dan masukkan ID robot sebagai parameter.
Gunakan khususid, anda boleh memanggilnya seperti ini:api('RestartRobot', id)
StopRobot
Hentikan antara muka robot, parameter juga robotID。
robotIDLihat, dapatkan, tangkapan skrin:

Untuk memanggil API sambungan Platform Dagangan Kuantitatif Pencipta, anda perlu menggunakan Platform Dagangan Kuantitatif PenciptaAPI KEY。
Anda boleh menjana sendiri dalam Pengurusan AkaunAPI KEY。
Kami meletakkanAPI KEYDiluluskan sebagai parameter kepada strategi.
Dapatkan Akaun Platform Dagangan Kuantitatif PenciptaAPI KEYtangkapan skrin:

Yang tinggal hanyalah menulis logik pemasaan, yang juga sangat mudah.
["175708,14:55:33-15:10:33", ...]
Ellipsis menunjukkan bahawa lebih serupa"175708,14:55:33-15:10:33"tetapan.
Parameter pemasaan ialah rentetan JSON, yang dihuraikan ke dalam senarai dalam kod dasar. Setiap elemen dalam senarai ialah satu set tetapan mula/henti robot.
Sekarang:
"175708,14:55:33-15:10:33"
Tanda koma digunakan untuk memisahkannya. Bahagian sebelum koma175708ialah ID robot, dan bahagian selepas koma ialah masa mula/masa berhenti.
Dalam contoh di atas, robot dengan ID 175708 dimulakan pada 14:55:33 dan berhenti pada 15:10:33.
Kemudian strategi terus mencari, setiap kali ia mula-mula mendapat masa semasa, dan kemudian membandingkan masa semasa dengan masa yang dijadualkan untuk menentukan sama ada perlu untuk mencetuskan permulaan atau berhenti robot. Jika dicetuskan, panggil api(‘RestartRobot’, id) atau api(‘StopRobot’, id) untuk memulakan atau menghentikan robot.
Kod strategi lengkap:
# -*- 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)

tangkapan skrin

Robot yang dikendalikan oleh strategi ini:

Alamat strategi: https://www.fmz.com/strategy/184600
Sebagai titik permulaan, API lanjutan platform dagangan kuantitatif Inventor adalah sangat berkuasa untuk menggunakan API lanjutan ini untuk membina platform dagangan kuantitatif anda sendiri berdasarkan platform FMZ. Reka bentuk robot pemasaan ini agak mudah Ia hanya bermula dan berhenti apabila tiba masanya. Ia tidak termasuk sebarang mekanisme seperti sama ada permulaan itu berjaya, pengesahan, percubaan semula yang tidak normal, dan lain-lain. Mereka yang berminat boleh menambah fungsi dan mengembangkan. ia. Strategi tersebut adalah untuk rujukan pembelajaran sahaja