리소스 로딩... 로딩...

다중 로봇 시장 코팅 공유 솔루션

저자:선함, 2020-07-25 09:24:50, 업데이트: 2024-12-10 10:14:09

img

디지털 화폐 양적 거래 로봇을 사용할 때, 서버에서 실행되는 여러 로봇이있을 때, 다른 거래소를 방문하면 문제가 심각하지 않으며 API 요청 주파수 문제가 없을 것입니다. 여러 로봇이 동시에 실행되고 모두 동일한 거래 쌍 양적 거래 전략을 사용하여 동일한 거래소를 방문해야하는 경우. 이 시점에서 API 요청 주파수 제한에 대한 문제가 발생할 것입니다. 그렇다면 최소 수의 서버로 멀티 로봇 액세스 인터페이스 문제를 해결하는 방법은 무엇입니까?

우리는 시장 코팅 전송 로봇을 구현하고 시장 코팅 및 다른 데이터를 얻기 위해 교환 인터페이스에 액세스 할 수 있습니다. 다른 거래 전략 로봇이 이 시장 전송 로봇에서 데이터를 요청할 수 있습니다.

인용 전송 로봇 예제

그것은 단지 데이터를 얻고 다른 로봇에게 시장 코팅을 제공하기 위해 거래소 시장 코팅 인터페이스에 액세스 할 책임이 있습니다. 파이썬으로 작성 된 예제에서는 K-라인 데이터를 얻을 수 있으며 공유를 제공하며 깊이 데이터, 집계 시장 데이터 등을 증가시키기 위해 확장 할 수 있습니다.

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("The service receives the request, self.path:", self.path, "query parameter:", dictParam)
            lock.acquire()
            # Recording
            if dictParam["robotId"] not in Counter:
                Counter[dictParam["robotId"]] = {"NumberOfRequests" : 0}
            Counter[dictParam["robotId"]]["NumberOfRequests"] += 1
            lock.release()
            
            # Write data response
            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), ))         # local computer test
        _thread.start_new_thread(createServer, (("0.0.0.0", 9090), ))             # Test on VPS server
        Log("Start service", "#FF0000")
    except BaseException as e:
        Log("Failed to start service!")
        Log("Error message:", e)
        raise Exception("stop")
    while True:
        r = exchange.GetRecords()
        if not r :
            Log("K-line market quotation failed", "#FF0000")
            continue
        else :
            Records = r
        # Counter
        tbl = {
            "type" : "table", 
            "title" : "Statistics", 
            "cols" : ["ID of the robot requesting data", "Number of requests"], 
            "rows" : [], 
        }
        for k in Counter:
            tbl["rows"].append([k, Counter[k]["NumberOfRequests"]])
        LogStatus(_D(), "Data collection!", "\n", "`" + json.dumps(tbl) + "`")
        Sleep(500)

요청 데이터 로봇 전략 코드

데이터를 요청하는 로봇은 트레이딩 전략 로봇이지만, 우리는 테스트를 위해 사용합니다. 우리는 요청된 데이터 (K-라인 데이터) 를 작성하고 데이터를 그리는 것입니다. 자바스크립트로 작성할 수 있습니다. 그림을 그리기 위해서는 라인 드로잉 라이브러리을 확인해야합니다. 이 클래스 라이브러리를 전략 광장에서 검색하고 복사하십시오. 복사 한 후 전략 편집 페이지의 템플릿 참조 열에서 선택할 수 있습니다.

var FuncGetRecords = exchange.GetRecords
exchange.GetRecords = function() {
    // You can fill in the IP address of the device where the "quote forwarding robot" is located 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(), "Robot ID:", _G())
        if (!records) {
            Log("Failed to get data!", "#FF0000")
            Sleep(1000)
            continue
        }
        Log(records)
        $.PlotRecords(records, "K")
        Sleep(1000)
    }
}

실제 운영

시장에 전달 로봇을 시작

img

테스트 로봇 시작, ID: 206353

img

테스트 로봇 시작, ID: 206359

img

이렇게 하면 3개 또는 N개의 로봇이 특정 거래 쌍의 K-라인 데이터를 공유할 수 있습니다.


관련

더 많은