Реализовать количественный торговый робот с заданным временем старта или остановки гаджета с помощью Python

Автор:Лидия., Создано: 2022-12-20 14:35:09, Обновлено: 2023-09-20 10:21:21

img

Реализовать количественный торговый робот с заданным временем старта или остановки гаджета с помощью Python

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

Если есть необходимость, давайте сделаем это!

На самом деле, весь код очень прост. Пример вызова расширения API интерфейса FMZ Quant Trading Platform можно использовать непосредственно.

Адрес:https://www.fmz.com/api#simpleПример

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

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

  • СтопРобот Чтобы остановить интерфейс робота, параметры также роботID- Да, конечно. РоботID:

img

Чтобы вызвать расширение API FMZ Quant Trading Platform, вам нужно использоватьAPI KEYплатформы FMZ Quant Trading. Вы можете генерировать свой собственный API-ключ в управлении аккаунтами. Мы проезжаем черезAPI KEYкак параметр стратегии. Скриншот получения счета FMZ Quant Trading PlatformAPI 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это идентификатор робота, а часть после запятой - время начала/остановки. В приведенном выше примере робот с 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("String configuration error: delimiter,")
        param["id"] = arr[0]
        param["isProcessOpenThisDay"] = False
        param["isProcessCloseThisDay"] = False

        arr = arr[1].split("-")
        if len(arr) != 2:
            raise Exception("String configuration error: delimiter-")

        begin = arr[0]
        arrBegin = begin.split(":")
        if len(arrBegin) != 3:
            raise Exception("String configuration error: start time separator:")
        
        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("String configuration error: end time separator:")            
        
        param["end"] = {}
        param["end"]["hour"] = float(arrEnd[0])
        param["end"]["min"] = float(arrEnd[1])
        param["end"]["sec"] = float(arrEnd[2])
        arrParams.append(param)

    # Test
    Log("Output parameters", 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", "Did you perform a start today", "Did you perform a stop today"],
            "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("Robot ID:", arrParams[i]["id"], "Execution started, please log in to the platform to check if it started successfully", "Extended API return value:", 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("Robot ID:", arrParams[i]["id"], "Execution stopped, please log in to the platform to check if it stopped successfully", "Extended API return value:", 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 Quant Trading Platform FMZ по-прежнему очень мощный. Робот-тайминг имеет простую конструкцию, он должен начинаться в тот момент и останавливаться в тот момент. Он не включает в себя механизмы, такие как успешный запуск, проверка, повторная попытка исключения и т. Д. Если вы заинтересованы, вы можете добавить функции и расширить их. Стратегия предназначена только для справки.


Связанные

Больше