4
Подписаться
1271
Подписчики

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

Создано: 2020-02-14 21:56:58, Обновлено: 2023-10-10 21:13:38
comments   4
hits   3047

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

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

Будучи мощной, гибкой и простой в использовании количественной торговой платформой во всей сети, количественная торговая платформа Inventor имеет очень низкий порог использования, а программа-робот потребляет очень мало ресурсов. Но мы все еще надеемся, что робота можно будет запускать, когда ему нужно работать, и останавливать, когда в работе нет необходимости. Например, при программной и количественной торговле товарными фьючерсами время, не связанное с открытием рынка, составляет большую часть дня. Таким образом, мы очень надеемся, что робот будет работать только в часы работы рынка. Интересно подумать о том, сколько можно сэкономить, если запускать его только в часы работы рынка каждый день. Чтобы выполнить это требование, мы можем использовать 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, вы можете назвать это так:api('RestartRobot', id)

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

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

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

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

["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)

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

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

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

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

Роботы, работающие по этой стратегии: Используйте Python для реализации количественного торгового робота для запуска или остановки гаджета

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

Заключение

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