Thực hiện một robot giao dịch định lượng bắt đầu hoặc dừng thời gian thiết bị bằng cách sử dụng Python

Tác giả:Lydia., Tạo: 2022-12-20 14:35:09, Cập nhật: 2023-09-20 10:21:21

img

Thực hiện một robot giao dịch định lượng bắt đầu hoặc dừng thời gian thiết bị bằng cách sử dụng Python

Là một nền tảng giao dịch định lượng mạnh mẽ, linh hoạt và dễ sử dụng cho toàn bộ mạng, nền tảng giao dịch định lượng FMZ có rào cản sử dụng rất thấp và chương trình robot sử dụng ít tài nguyên. Ví dụ, thời gian không mở chiếm phần lớn toàn bộ ngày khi tiến hành chương trình và giao dịch định lượng tương lai hàng hóa. Bằng cách này, chúng tôi hy vọng rằng robot sẽ chỉ chạy vào thời gian mở, và rằng nó sẽ chỉ chạy vào thời gian mở mỗi ngày để tiết kiệm tiền. Không thú vị sao? Để đáp ứng yêu cầu này, chúng ta có thể sử dụng ngôn ngữ Python để viết một robot chiến lược chạy trên nền tảng giao dịch FMZ Quant, và để cho robot điều khiển khởi động và dừng robot ở các khoảng thời gian thường xuyên thông qua giao diện API mở rộng của nền tảng giao dịch FMZ Quant.

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

Trong thực tế, toàn bộ mã là rất đơn giản. ví dụ của gọi FMZ Quant Trading Platform mở rộng giao diện API có thể được sử dụng trực tiếp.

Địa chỉ:https://www.fmz.com/api#simpleví dụ

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

  • Khởi động lạiRobot Khởi động lại giao diện robot và truyền các thông số vào ID robot. Sử dụng cụ thểidđể gọi:api ('RestartRobot', id)

  • StopRobot Để dừng giao diện robot, các thông số cũng là robotID. RobotID:

img

Để gọi FMZ Quant Trading Platform extension API, bạn cần sử dụngAPI KEYcủa nền tảng giao dịch lượng tử FMZ. Bạn có thể tạo ra API KEY của riêng bạn trong quản lý tài khoản. Chúng ta đi quaAPI KEYnhư một thông số chiến lược. Ảnh chụp màn hình để có được tài khoản nền tảng giao dịch FMZ QuantAPI KEY:

img

Phần còn lại là viết logic thời gian, cũng rất đơn giản.

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

Các hình elip chỉ ra rằng nhiều thiết lập như"175708,14:55:33-15:10:33"có thể được thiết lập. Các thông số thời gian là một chuỗi JSON, sẽ được phân tích thành một danh sách trong mã chiến lược. Đó là:

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

Chúng được tách bởi dấu phẩy.175708là robot ID, và phần sau dấu phẩy là thời gian bắt đầu / dừng thời gian. Trong ví dụ trên, robot với ID 175708 bắt đầu lúc 14:55:33 và dừng lại lúc 15:10:33.

Sau đó, trong chiến lược, robot sẽ tiếp tục quay. Mỗi vòng quay đầu tiên sẽ lấy thời gian hiện tại, và sau đó đánh giá liệu có nên kích hoạt khởi động hoặc dừng robot theo so sánh giữa thời gian hiện tại và thời gian hẹn giờ. Nếu được kích hoạt, gọi API ('RestartRobot', id) hoặc API (StopRobot, id) để khởi động và 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("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)

Cài đặt tham số robot:

img

Chiến lược chạy:

Ảnh chụp màn hình:

img img

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

Kết thúc

Ví dụ, API mở rộng của FMZ Quant Trading Platform vẫn rất mạnh. Không có vấn đề gì khi 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 với các API mở rộng này. Robot thời gian có thiết kế đơn giản, nó bắt đầu vào thời điểm và dừng lại vào thời điểm. Nó không bao gồm các cơ chế như khởi động thành công, kiểm tra, thử lại ngoại lệ, v.v. Nếu bạn quan tâm, bạn có thể thêm các chức năng và mở rộng chúng. Chiến lược chỉ để tham khảo.


Có liên quan

Thêm nữa