avatar of 发明者量化-小小梦 发明者量化-小小梦
tập trung vào tin nhắn riêng tư
4
tập trung vào
1271
Người theo dõi

Sử dụng Python để triển khai một robot giao dịch định lượng để khởi động hoặc dừng một tiện ích

Được tạo ra trong: 2020-02-14 21:56:58, cập nhật trên: 2023-10-10 21:13:38
comments   4
hits   3047

Sử dụng Python để triển khai một robot giao dịch định lượng để khởi động hoặc dừng một tiện ích

Sử dụng Python để triển khai một robot giao dịch định lượng để khởi động hoặc dừng một tiện ích

Là một nền tảng giao dịch định lượng mạnh mẽ, linh hoạt và dễ sử dụng trên toàn bộ mạng lưới, Nền tảng giao dịch định lượng Inventor có ngưỡng sử dụng rất thấp và chương trình robot chiếm rất ít tài nguyên. Nhưng chúng tôi vẫn hy vọng rằng robot có thể khởi động khi cần chạy và dừng lại khi không cần chạy. Ví dụ, khi thực hiện giao dịch định lượng và theo chương trình đối với hàng hóa tương lai, thời gian mở cửa ngoài thị trường chiếm phần lớn thời gian trong ngày. Theo cách này, chúng tôi rất hy vọng có thể để robot chỉ chạy trong giờ mở cửa chợ. Thật thú vị khi nghĩ đến việc có thể tiết kiệm được bao nhiêu chi phí khi chỉ chạy robot trong giờ mở cửa chợ mỗi ngày. Để đáp ứng yêu cầu này, chúng ta có thể sử dụng Python để viết một robot chiến lược chạy trên nền tảng giao dịch định lượng FMZ. 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 sẽ điều khiển việc bắt đầu và dừng của robot tại một thời điểm cố định.

Khi có nhu cầu thì cứ làm thôi!

Trên thực tế, toàn bộ mã rất đơn giản. Ví dụ về việc gọi 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 có thể được sử dụng trực tiếp

Địa chỉ: https://www.fmz.com/api#%E7%AE%80%E5%8D%95%E7%9A%84%E4%BE%8B%E5%AD%90

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

  • RestartRobot Khởi động lại giao diện robot và truyền ID robot làm tham số. Sử dụng cụ thểid, bạn có thể gọi nó như thế này:api('RestartRobot', id)

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

người máyIDXem, lấy, chụp ảnh màn hình: Sử dụng Python để triển khai một robot giao dịch định lượng để khởi động hoặc dừng một tiện ích

Để gọi API mở rộng của Nền tảng giao dịch định lượng Inventor, bạn cần sử dụng Nền tảng giao dịch định lượng InventorAPI KEY。 Bạn có thể tạo riêng của bạn trong Quản lý tài khoảnAPI KEY。 Chúng tôi đặtAPI KEYĐược truyền vào như một tham số cho chiến lược. Nhận Tài khoản Nền tảng giao dịch định lượng InventorAPI KEYảnh chụp màn hình: Sử dụng Python để triển khai một robot giao dịch định lượng để khởi động hoặc dừng một tiện ích

Tất cả những gì còn lại là viết logic thời gian, cũng rất đơn giản. Thiết lập các tham số thời gian:

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

Dấu ba chấm chỉ ra rằng tương tự hơn"175708,14:55:33-15:10:33"cài đặt. Tham số thời gian là chuỗi JSON, được phân tích thành danh sách trong mã chính sách. Mỗi phần tử trong danh sách là một tập hợp các thiết lập khởi động/dừng robot. Ngay lập tức:

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

Dấu phẩy được sử dụng để phân tách chúng. Phần trước dấu phẩy175708là ID của robot và phần sau dấu phẩy là thời gian bắt đầu/thời gian dừng. Trong ví dụ trên, robot có ID 175708 được khởi động lúc 14:55:33 và dừng lại lúc 15:10:33.

Sau đó, chiến lược này tiếp tục tìm kiếm, mỗi lần đầu tiên nó sẽ lấy thời gian hiện tại, sau đó so sánh thời gian hiện tại với thời gian đã lên lịch để xác định xem có cần kích hoạt lệnh bắt đầu hay dừng robot hay không. Nếu được kích hoạt, hãy gọi api(‘RestartRobot’, id) hoặc api(‘StopRobot’, id) để khởi động hoặc dừng robot.

Mã chiến lược đầ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)

Cài đặt thông số robot:

Sử dụng Python để triển khai một robot giao dịch định lượng để khởi động hoặc dừng một tiện ích

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

ảnh chụp màn hình Sử dụng Python để triển khai một robot giao dịch định lượng để khởi động hoặc dừng một tiện ích

Robot được vận hành theo chiến lược này: Sử dụng Python để triển khai một robot giao dịch định lượng để khởi động hoặc dừng một tiện ích

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

Phần kết luận

Là điểm khởi đầu, API mở rộng của nền tảng giao dịch định lượng Inventor rất mạnh mẽ. Hoàn toàn có thể sử dụng các API mở rộng này để xây dựng nền tảng giao dịch định lượng của riêng bạn dựa trên nền tảng FMZ. Thiết kế của robot tính giờ này tương đối đơn giản. Nó chỉ khởi động và dừng lại khi đến thời điểm. Nó không bao gồm bất kỳ cơ chế nào như khởi động có thành công không, xác minh, thử lại bất thường, v.v. Những người quan tâm có thể thêm chức năng và mở rộng Nó. Chiến lược này chỉ mang tính chất tham khảo để học tập