Giải pháp chia sẻ thị trường đa robot

Tác giả:Giấc mơ nhỏ, Tạo: 2020-07-15 16:25:20, Cập nhật: 2023-09-27 19:36:39

img

Giải pháp chia sẻ thị trường đa robot

Khi sử dụng robot giao dịch định lượng tiền kỹ thuật số, khi nhiều robot phải chạy trên một máy chủ, nếu truy cập vào các sàn giao dịch khác nhau, thời điểm này không có vấn đề lớn, không có vấn đề về tần số yêu cầu API. Nếu cần nhiều robot chạy cùng một lúc và đều làm cùng một sàn giao dịch, cùng một cặp giao dịch, chiến lược giao dịch định lượng.

Chúng ta có thể thực hiện một robot chuyển tiếp thị trường, truy cập giao diện giao dịch, thu thập dữ liệu thị trường, v.v. chỉ bằng robot này.

Ví dụ về robot chuyển giao

Chỉ có trách nhiệm truy cập giao diện giao dịch của sàn giao dịch để thu thập dữ liệu và cung cấp giao dịch cho các robot khác.PythonTrong ví dụ này, chúng tôi chỉ lấy dữ liệu đường K và cung cấp chia sẻ, có thể mở rộng để tăng độ sâu dữ liệu, tổng hợp dữ liệu thị trường, v.v.

import _thread
import threading
import json
import math
from http.server import HTTPServer, BaseHTTPRequestHandler
from urllib.parse import parse_qs, urlparse

Records = None
lock = threading.RLock()
Counter = {}

def url2Dict(url):
    query = urlparse(url).query  
    params = parse_qs(query)  
    result = {key: params[key][0] for key in params}  
    return result

class Provider(BaseHTTPRequestHandler):
    def do_GET(self):
        global Records, lock, Counter
        try:
            self.send_response(200)
            self.send_header("Content-type", "application/json")
            self.end_headers()

            dictParam = url2Dict(self.path)
            # Log("服务接收到请求,self.path:", self.path, "query 参数:", dictParam)
            lock.acquire()
            # 记录
            if dictParam["robotId"] not in Counter:
                Counter[dictParam["robotId"]] = {"NumberOfRequests" : 0}
            Counter[dictParam["robotId"]]["NumberOfRequests"] += 1
            lock.release()
            
            # 写入数据应答
            self.wfile.write(json.dumps(Records).encode())
        except BaseException as e:
            Log("Provider do_GET error, e:", e)


def createServer(host):
    try:
        server = HTTPServer(host, Provider)
        Log("Starting server, listen at: %s:%s" % host)
        server.serve_forever()
    except BaseException as e:
        Log("createServer error, e:", e)
        raise Exception("stop")

def main():
    global Records, Counter
    LogReset(1)
    try:
        # _thread.start_new_thread(createServer, (("localhost", 9090), ))         # 本机测试
        _thread.start_new_thread(createServer, (("0.0.0.0", 9090), ))             # VPS服务器上测试
        Log("启动服务", "#FF0000")
    except BaseException as e:
        Log("启动服务失败!")
        Log("错误信息:", e)
        raise Exception("stop")
    while True:
        r = exchange.GetRecords()
        if not r :
            Log("K线行情获取失败", "#FF0000")
            continue
        else :
            Records = r
        # Counter
        tbl = {
            "type" : "table", 
            "title" : "统计信息", 
            "cols" : ["请求数据的机器人id", "请求次数"], 
            "rows" : [], 
        }
        for k in Counter:
            tbl["rows"].append([k, Counter[k]["NumberOfRequests"]])
        LogStatus(_D(), "数据收集中!", "\n", "`" + json.dumps(tbl) + "`")
        Sleep(500)
        

Yêu cầu mã chính sách cho robot dữ liệu

Một robot yêu cầu dữ liệu là một robot chiến lược giao dịch, nhưng chúng tôi chỉ thử nghiệm, chỉ viết dữ liệu yêu cầu (k-line data) và vẽ dữ liệu ra, bạn có thể sử dụngJavaScriptViết, để vẽ biểu đồ, bạn cần chọn "Drawline class library" có thể sao chép thư mục này trong tìm kiếm quảng trường chính sách, sau khi sao chép, bạn có thể chọn một danh mục tham chiếu mẫu trong trang chỉnh sửa chính sách.

var FuncGetRecords = exchange.GetRecords
exchange.GetRecords = function() {
    // 可以填写「行情转发机器人」所在设备的IP地址xxx.xxx.xxx.xxx
    var ret = HttpQuery("http://xxx.xxx.xxx.xxx:9090?robotId=" + _G())  
    var records = null
    try {
        records = JSON.parse(ret)
    } catch(e) {
        Log(e)
        records = null
    }
    return records 
}

function main(){
    LogReset(1)
    while(1) {
        var records = exchange.GetRecords()
        LogStatus(_D(), "机器人ID:", _G())
        if (!records) {
            Log("获取数据失败!", "#FF0000")
            Sleep(1000)
            continue
        }
        Log(records)
        $.PlotRecords(records, "K")
        Sleep(1000)
    }
}

Hoạt động thực tế

  • Khởi động robot chuyển tiềnimg

  • Khởi động robot thử nghiệm, ID:206353img

  • Khởi động robot thử nghiệm, ID:206359img

  • Khởi động robot thử nghiệm, ID:206360img

Điều này cho phép 3 hoặc thậm chí N robot chia sẻ dữ liệu về K-line cho một giao dịch. Các bạn có thể tham gia vào chương trình này.


Có liên quan

Thêm nữa

Trong khi đó, các nhà đầu tư khác cũng có thể tham gia vào các hoạt động này.Tốt lắm.

xunfeng91 666