Các công cụ khởi động hoặc dừng thời gian cho robot giao dịch định lượng sử dụng Python

Tác giả:Giấc mơ nhỏ, Tạo: 2020-02-14 21:56:58, Cập nhật: 2023-10-10 21:13:38

img

Các công cụ khởi động hoặc dừng thời gian cho robot giao dịch định lượng sử dụng Python

Là một nền tảng giao dịch định lượng đầy đủ chức năng, linh hoạt và dễ sử dụng trên toàn mạng, nền tảng giao dịch định lượng của nhà phát minh mặc dù sử dụng ngưỡng rất thấp và các chương trình robot chiếm ít tài nguyên. Ví dụ, trong việc lập trình giao dịch tương lai hàng hóa, giao dịch định lượng, thời gian không mở thị trường chiếm phần lớn cả ngày. Vì vậy, chúng tôi rất mong muốn để robot chỉ hoạt động vào thời gian mở thị trường, chỉ hoạt động vào thời gian mở thị trường mỗi ngày. Người phát minh mở rộng API giao dịch định lượng, kiểm soát thời gian khởi động và ngừng robot.

Nếu có nhu cầu, hãy làm!

Trên thực tế, toàn bộ mã rất đơn giản, bạn có thể trực tiếp sử dụng ví dụ về các giao diện API mở rộng của nền tảng giao dịch định lượng của nhà phát minh.

Địa chỉ:https://www.fmz.com/api#简单的例子

Sử dụng trực tiếp các hàm trong ví dụ:def api(method, *args)Chúng ta cần một giao diện gọi rất đơn giản, sử dụng hai giao diện sau (có thể truy vấn trên tài liệu FMZ)

  • RestartRobot Khởi động lại giao diện robot, các tham số được truyền vào ID robot. Sử dụng cụ thểidMột người đàn ông ở Việt Nam đã bị bắt giữ và bị bắt giữ.api('RestartRobot', id)

  • StopRobot Dừng giao diện robot, các tham số cũng là robotID

    RobotIDXem, lấy, chụp ảnh:img

Gọi các nhà phát minh Quantified Trading Platform mở rộng API cần sử dụng các nhà phát minh Quantified Trading PlatformAPI KEY❖ Bạn có thể tạo tài khoản của riêng bạn trong quản lý tài khoản.API KEY❖ Chúng ta sẽ lấyAPI KEYCác thông tin này sẽ được sử dụng như một phần của một chiến lược. Nhận tài khoản sàn giao dịch định lượng của nhà phát minhAPI KEYHình ảnh:img

Điều còn lại là viết logic thời gian, rất đơn giản, đặt các tham số thời gian:

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

Các đại diện bỏ qua có thể thiết lập nhiều thứ tương tự"175708,14:55:33-15:10:33"Các thiết lập của Ứng dụng. Các tham số thời gian là một chuỗi JSON mà các mã chính sách phân tích thành một danh sách. Mỗi phần tử trong danh sách là một tập hợp các thiết lập bắt đầu / dừng robot. Đó là:

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

Trong đó, các phần trước dấu chấm được đánh dấu bằng dấu chấm chấm.175708Đối với ID robot, phần sau dấu chấm là thời gian khởi động / dừng. Ví dụ trên, ID của robot là: 175708, khởi động lúc 14:55:33 và dừng lúc 15:10:33.

Sau đó, trong chiến lược, liên tục tìm kiếm, lấy thời gian hiện tại trước mỗi lần tìm kiếm, và sau đó quyết định liệu cần kích hoạt bắt đầu hoặc dừng robot dựa trên thời gian hiện tại và thời gian hẹn giờ. Nếu được kích hoạt, hãy gọi API (RestartRobot button, id) hoặc API (StopRobot button, id) để khởi động hoặc dừng robot.

Có thể bạn có thể sử dụng các mã chiến lược này:

# -*- 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)

Chế độ cài đặt của robot:

img

Chiến lược hoạt động:

Hình ảnhimg

Một robot được điều khiển bởi chiến lược này:img

Địa chỉ chiến lược:https://www.fmz.com/strategy/184600

Kết thúc

Các API mở rộng của các nền tảng giao dịch định lượng của nhà phát minh cũng rất mạnh mẽ, và không có vấn đề gì khi sử dụng các API mở rộng dựa trên nền tảng FMZ làm nền tảng giao dịch định lượng của riêng mình. Thiết kế robot hẹn giờ này tương đối đơn giản, chỉ không có bộ não để khởi động thời gian, để dừng thời gian, và không bao gồm các cơ chế khởi động có thành công hay không, kiểm tra, thử lại bất thường, v.v. Chiến lược chỉ để tham khảo học tập


Có liên quan

Thêm nữa