파이썬을 이용한 양적 거래 로봇을 구현하는 타이밍 시작 또는 중지 툴

저자:작은 꿈, 2020-02-14 21:56:58, 업데이트: 2023-10-10 21:13:38

img

파이썬을 이용한 양적 거래 로봇을 구현하는 타이밍 시작 또는 중지 툴

전인터넷 기능이 강력하고 유연하고 쉽게 사용할 수 있는 양자 거래 플랫폼으로, 발명가들의 양자 거래 플랫폼은 사용 한계가 매우 낮고 로봇 프로그램이 자원을 거의 차지하지는 않지만, 우리는 여전히 로봇이 실행할 때 시작해야 할 필요가 없으며 실행할 때 중단해야 할 필요가 없습니다. 예를 들어, 상품 선물 프로그램화, 양화 거래에서, 시장 개시 시간이 하루의 대부분을 차지한다. 그래서 우리는 로봇이 시장 개시 시간에만 운영되도록 매우 희망하고, 매일 시장 개시 시간에만 운영하도록 생각하면 비용이 많이 절감됩니다. 이 필요를 위해 우리는 FMZ 양화 거래 플랫폼에서 실행되는 전략 로봇을 파이썬 언어로 작성할 수 있습니다. 발명자는 거래 플랫폼의 확장 API 인터페이스를 정량화하여 로봇의 시작과 종료를 시간적으로 제어합니다.

이 모든 것은 우리가 할 수 있는 일입니다.

실제로 전체 코드는 매우 간단합니다. 개발자 양적 거래 플랫폼 확장 API의 예를 직접 사용할 수 있습니다.

주소:https://www.fmz.com/api#简单的例子

예를 들어서 직접 사용하는 함수:def api(method, *args)우리가 호출해야 할 인터페이스는 다음과 같은 두 개의 인터페이스를 사용하여 매우 간단합니다. (FMZ 문서에서 검색 할 수 있습니다.)

  • 다시 시작Robot 로봇 인터페이스를 다시 시작하면 로봇 ID에 파라미터가 전달됩니다. 특정 사용id이 글은 이쪽에서 작성되었습니다.api('RestartRobot', id)

  • 스톱로봇 로봇 인터페이스를 중지, 파라미터도 로봇ID

    로봇ID이 글은 한글로 번역되어 있습니다.img

발명가 양자 거래 플랫폼을 호출 API 확장API KEYᅳ 계정 관리에서 직접 생성할 수 있습니다.API KEYᅳ 우리는API KEY정책의 매개 변수로 전달됩니다. 발명가 계정 수량화 거래소API 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의 경우, 코마 뒤에 있는 부분은 시작 시간/정지 시간이다. 예를 들어, 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)

로보트 설정:

img

전략 실행:

초상화img

이 전략에 의해 조작된 로봇은:img

그라운드:https://www.fmz.com/strategy/184600

또한, 개발자의 양적 거래 플랫폼의 확장 API는 매우 강력하며 FMZ 플랫폼을 기반으로 한 자체 양적 거래 플랫폼으로 확장 API를 사용하는 것은 전혀 문제가 없습니다. 이 타이밍 로봇의 설계는 비교적 간단하며, 단지 시간이 시작될 때까지 머리가 없고, 시간이 멈출 때까지, 시작 성공 여부를 포함하지 않고, 검사, 비정상 재시험, 등등의 메커니즘을 포함하지 않고, 기능이 추가될 수 있고 확장될 수 있는 흥미가 있다. 전략은 학습용입니다.


관련

더 많은