Type/to search
8
Follow
1364
Followers
Используйте Python для реализации количественного торгового робота для запуска или остановки гаджета
Discussions
Created 2020-02-14 21:56:58  Updated 2023-10-10 21:13:38
 4
 3273

img

Используйте Python для реализации количественного торгового робота для запуска или остановки гаджета

Будучи мощной, гибкой и простой в использовании количественной торговой платформой во всей сети, количественная торговая платформа Inventor имеет очень низкий порог использования, а программа-робот потребляет очень мало ресурсов. Но мы все еще надеемся, что робота можно будет запускать, когда ему нужно работать, и останавливать, когда в работе нет необходимости.
Например, при программной и количественной торговле товарными фьючерсами время, не связанное с открытием рынка, составляет большую часть дня. Таким образом, мы очень надеемся, что робот будет работать только в часы работы рынка. Интересно подумать о том, сколько можно сэкономить, если запускать его только в часы работы рынка каждый день. Чтобы выполнить это требование, мы можем использовать Python для написания стратегического робота, работающего на количественной торговой платформе FMZ.
Расширенный API-интерфейс количественной торговой платформы изобретателя управляет запуском и остановкой робота в фиксированное время.

Когда есть спрос, просто сделайте это!

На самом деле, весь код очень прост. Пример вызова расширенного API-интерфейса количественной торговой платформы изобретателя можно использовать напрямую

Адрес: https://www.fmz.com/api#简单的例子

Используйте функцию в примере напрямую:def api(method, *args)
Интерфейс, который нам нужно вызвать, также очень прост и использует следующие два интерфейса (их можно найти в документе FMZ):

  • RestartRobot
    Перезапустите интерфейс робота и передайте идентификатор робота в качестве параметра.
    Используйте конкретныеid, вы можете назвать это так:api('RestartRobot', id)

  • StopRobot
    Остановите интерфейс робота, параметры также роботаID

    роботIDПросмотр, получение, снимок экрана:
    img

Чтобы вызвать API расширения Inventor Quantitative Trading Platform, вам необходимо использовать Inventor Quantitative Trading Platform.API KEY
Вы можете создать свой собственный аккаунт в разделе «Управление аккаунтом».API KEY
Мы ставимAPI KEYПередается как параметр стратегии.
Получите учетную запись на платформе количественной торговли InventorAPI KEYскриншот:
img

Осталось только написать логику тайминга, которая тоже очень проста. Задаем параметры тайминга:

["175708,14:55:33-15:10:33", ...]

Многоточие указывает на то, что более похожие"175708,14:55:33-15:10:33"настройки.
Параметр времени представляет собой строку JSON, которая преобразуется в список в коде политики. Каждый элемент в списке представляет собой набор настроек запуска/остановки робота.
Прямо сейчас:

"175708,14:55:33-15:10:33"

Для их разделения используются запятые. Часть перед запятой175708— это идентификатор робота, а часть после запятой — время начала/конца.
В приведенном выше примере робот с идентификатором 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)

Настройки параметров робота:

img

Стратегическая операция:

скриншот
img

Роботы, работающие по этой стратегии:
img

Адрес стратегии: https://www.fmz.com/strategy/184600

Заключение

В качестве отправной точки, расширенный API количественной торговой платформы Inventor очень мощный. Вполне возможно использовать эти расширенные API для создания собственной количественной торговой платформы на основе платформы FMZ.
Конструкция этого робота-хронометриста относительно проста. Он просто запускается и останавливается, когда приходит время. Он не включает в себя никаких механизмов, таких как успешный ли запуск, проверка, ненормальный повтор и т. д. Те, кому интересно, могут добавлять функции и расширять это.
Стратегия предназначена только для справочного обучения.

Related Recommendations
Comment
All comments (0)
No data
No data
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)