
Inventor Quantitative Trading Platform은 네트워크 전체에서 강력하고 유연하며 사용하기 쉬운 양적 거래 플랫폼으로, 사용에 대한 임계값이 매우 낮고 로봇 프로그램이 차지하는 리소스가 매우 적습니다. 하지만 우리는 로봇이 작동해야 할 때는 작동을 시작하고, 작동할 필요가 없을 때는 멈출 수 있기를 여전히 바랍니다. 예를 들어, 상품선물에 대한 프로그램 거래와 양적 거래를 할 때 비시장 개장 시간이 하루 중 대부분을 차지합니다. 이런 식으로, 우리는 로봇이 시장 개장 시간에만 작동하도록 하기를 매우 바랍니다. 매일 시장 개장 시간에만 작동시키면 얼마나 많은 비용을 절약할 수 있을지 생각하는 것은 신나는 일입니다. 이 요구 사항을 충족하기 위해 Python을 사용하여 FMZ 양적 거래 플랫폼에서 실행되는 전략 로봇을 작성할 수 있습니다. 발명가의 양적 거래 플랫폼의 확장된 API 인터페이스는 고정된 시간에 로봇의 시작과 중지를 제어합니다.
사실, 전체 코드는 매우 간단합니다. 발명가의 양적 거래 플랫폼 확장 API 인터페이스를 호출하는 예는 직접 사용할 수 있습니다.
주소: https://www.fmz.com/api#%E7%AE%80%E5%8D%95%E7%9A%84%E4%BE%8B%E5%AD%90
예시의 함수를 직접 사용해보세요:def api(method, *args)
우리가 호출해야 할 인터페이스도 매우 간단하며 다음 두 인터페이스를 사용합니다(FMZ 문서에서 찾을 수 있음)
RestartRobot
로봇 인터페이스를 다시 시작하고 로봇 ID를 매개변수로 전달합니다.
특정을 사용하세요id, 이렇게 호출할 수 있습니다:api('RestartRobot', id)
StopRobot
로봇 인터페이스를 중지하고 매개변수도 로봇입니다.ID。
기계 인간ID보기, 얻기, 스크린샷:

Inventor Quantitative Trading Platform 확장 API를 호출하려면 Inventor Quantitative Trading Platform을 사용해야 합니다.API KEY。
계정 관리에서 직접 생성할 수 있습니다.API KEY。
우리는 넣어API KEY전략에 매개변수로 전달됨.
Inventor Quantitative Trading Platform 계정 받기API KEY스크린샷:

남은 것은 타이밍 로직을 작성하는 것뿐이며, 이 역시 매우 간단합니다. 타이밍 매개변수를 설정합니다.
["175708,14:55:33-15:10:33", ...]
줄임표는 더 유사한 것을 나타냅니다."175708,14:55:33-15:10:33"설정.
타이밍 매개변수는 JSON 문자열이며, 정책 코드에서 목록으로 구문 분석됩니다. 목록의 각 요소는 로봇 시작/중지 설정의 집합입니다.
지금 바로:
"175708,14:55:33-15:10:33"
쉼표는 구분하는 데 사용됩니다. 쉼표 앞 부분175708는 로봇 ID이고, 쉼표 뒤에 있는 부분은 시작 시간/종료 시간입니다.
위의 예에서 ID가 175708인 로봇은 14:55:33에 시작해서 15:10:33에 멈췄습니다.
그런 다음 전략은 검색을 계속하며, 매번 먼저 현재 시간을 구한 다음 현재 시간을 예약된 시간과 비교하여 로봇의 시작이나 중지를 트리거해야 하는지 여부를 판별합니다. 트리거되면 api(‘RestartRobot’, id) 또는 api(‘StopRobot’, id)를 호출하여 로봇을 시작하거나 중지합니다.
완전한 전략 코드:
# -*- 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)

스크린샷

이 전략에 의해 운영되는 로봇:

전략 주소: https://www.fmz.com/strategy/184600
시작점으로, Inventor 양적 거래 플랫폼의 확장 API는 매우 강력합니다. 이러한 확장 API를 사용하여 FMZ 플랫폼을 기반으로 하는 자체 양적 거래 플랫폼을 구축하는 것은 완전히 가능합니다. 이 타이밍 로봇의 디자인은 비교적 간단합니다. 시간이 되면 시작하고 멈출 뿐입니다. 시작이 성공했는지, 검증, 비정상 재시도 등과 같은 메커니즘은 포함되지 않습니다. 관심이 있는 사람은 기능을 추가하고 확장할 수 있습니다. 그것. 전략은 학습 참고용일 뿐입니다.