디지털 화폐 양적 거래 로봇을 사용할 때, 서버에서 실행되는 여러 로봇이있을 때, 다른 거래소를 방문하면 문제가 심각하지 않으며 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)
}
}
시장에 전달 로봇을 시작
테스트 로봇 시작, ID: 206353
테스트 로봇 시작, ID: 206359
이렇게 하면 3개 또는 N개의 로봇이 특정 거래 쌍의 K-라인 데이터를 공유할 수 있습니다.