avatar of 发明者量化-小小梦 发明者量化-小小梦
집중하다 사신
4
집중하다
1271
수행원

Python을 사용하여 가젯을 시작하거나 중지하는 양적 거래 로봇을 구현합니다.

만든 날짜: 2020-02-14 21:56:58, 업데이트 날짜: 2023-10-10 21:13:38
comments   4
hits   3047

Python을 사용하여 가젯을 시작하거나 중지하는 양적 거래 로봇을 구현합니다.

Python을 사용하여 가젯을 시작하거나 중지하는 양적 거래 로봇을 구현합니다.

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보기, 얻기, 스크린샷: Python을 사용하여 가젯을 시작하거나 중지하는 양적 거래 로봇을 구현합니다.

Inventor Quantitative Trading Platform 확장 API를 호출하려면 Inventor Quantitative Trading Platform을 사용해야 합니다.API KEY。 계정 관리에서 직접 생성할 수 있습니다.API KEY。 우리는 넣어API KEY전략에 매개변수로 전달됨. Inventor Quantitative Trading Platform 계정 받기API 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는 로봇 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)

로봇 매개변수 설정:

Python을 사용하여 가젯을 시작하거나 중지하는 양적 거래 로봇을 구현합니다.

전략 운영:

스크린샷 Python을 사용하여 가젯을 시작하거나 중지하는 양적 거래 로봇을 구현합니다.

이 전략에 의해 운영되는 로봇: Python을 사용하여 가젯을 시작하거나 중지하는 양적 거래 로봇을 구현합니다.

전략 주소: https://www.fmz.com/strategy/184600

결론

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