
Sebagai platform perdagangan kuantitatif yang kuat, fleksibel, dan mudah digunakan di seluruh jaringan, Platform Perdagangan Kuantitatif Inventor memiliki ambang batas penggunaan yang sangat rendah dan program robot hanya membutuhkan sedikit sumber daya. Tetapi kami tetap berharap robot itu dapat dinyalakan ketika perlu dijalankan, dan dihentikan ketika tidak perlu dijalankan. Misalnya, saat melakukan perdagangan berjangka komoditi terprogram dan kuantitatif, waktu non-pembukaan pasar mencakup sebagian besar hari. Dengan cara ini, kami sangat berharap agar robot tersebut dapat beroperasi hanya selama jam buka pasar. Sungguh menarik untuk membayangkan berapa banyak biaya yang dapat dihemat dengan mengoperasikannya hanya selama jam buka pasar setiap hari. Untuk memenuhi persyaratan ini, kita dapat menggunakan Python untuk menulis robot strategi yang berjalan pada platform perdagangan kuantitatif FMZ. Antarmuka API yang diperluas dari platform perdagangan kuantitatif penemu mengendalikan awal dan akhir robot pada waktu yang ditentukan.
Sebenarnya, keseluruhan kodenya sangat sederhana. Contoh pemanggilan antarmuka API yang diperluas dari platform perdagangan kuantitatif milik penemu dapat 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)
Antarmuka yang perlu kita panggil juga sangat sederhana, menggunakan dua antarmuka berikut (dapat ditemukan dalam dokumen FMZ)
RestartRobot
Mulai ulang antarmuka robot dan masukkan ID robot sebagai parameter.
Gunakan spesifikid, Anda dapat menyebutnya seperti ini:api('RestartRobot', id)
StopRobot
Hentikan antarmuka robot, parameternya juga robotID。
robotIDLihat, dapatkan, tangkapan layar:

Untuk memanggil API ekstensi Inventor Quantitative Trading Platform, Anda perlu menggunakan Inventor Quantitative Trading PlatformAPI KEY。
Anda dapat membuatnya sendiri di Manajemen AkunAPI KEY。
Kami menempatkanAPI KEYDiterapkan sebagai parameter ke strategi.
Dapatkan Akun Platform Perdagangan Kuantitatif InventorAPI KEYtangkapan layar:

Yang tersisa hanyalah menulis logika pengaturan waktu, yang juga sangat sederhana. Tetapkan parameter pengaturan waktu:
["175708,14:55:33-15:10:33", ...]
Tanda elipsis menunjukkan bahwa lebih banyak yang mirip"175708,14:55:33-15:10:33"pengaturan.
Parameter waktu adalah string JSON, yang diurai menjadi daftar dalam kode kebijakan. Setiap elemen dalam daftar adalah serangkaian pengaturan mulai/berhenti robot.
Sekarang:
"175708,14:55:33-15:10:33"
Tanda koma digunakan untuk memisahkannya. Bagian sebelum koma175708adalah ID robot, dan bagian setelah koma adalah waktu mulai/waktu berhenti.
Dalam contoh di atas, robot dengan ID 175708 dimulai pada pukul 14:55:33 dan berhenti pada pukul 15:10:33.
Kemudian strategi tersebut terus mencari, setiap kali memperoleh waktu saat ini terlebih dahulu, lalu membandingkan waktu saat ini dengan waktu yang dijadwalkan guna menentukan apakah perlu memicu permulaan atau penghentian robot. Jika dipicu, panggil api(‘RestartRobot’, id) atau api(‘StopRobot’, id) untuk memulai atau menghentikan robot.
Kode 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 layar

Robot yang dioperasikan dengan strategi ini:

Alamat strategi: https://www.fmz.com/strategy/184600
Sebagai titik awal, API yang diperluas dari platform perdagangan kuantitatif Inventor sangatlah canggih. API yang diperluas ini sepenuhnya memungkinkan untuk digunakan guna membangun platform perdagangan kuantitatif Anda sendiri berdasarkan platform FMZ. Desain robot pengatur waktu ini relatif sederhana. Ia hanya memulai dan berhenti ketika waktunya tiba. Ia tidak menyertakan mekanisme apa pun seperti apakah startup berhasil, verifikasi, pengulangan abnormal, dan sebagainya. Mereka yang tertarik dapat menambahkan fungsi dan memperluasnya. dia. Strategi ini hanya untuk referensi pembelajaran