デジタル通貨の定量取引ロボットを使用する際,サーバー上で複数のロボットが実行されている場合,異なる取引所を訪問した場合,この時点で問題は深刻ではなく,APIリクエスト頻度の問題はありません.複数のロボットを同時に実行する必要があり,すべて同じ取引ペア定量取引戦略で同じ取引所を訪問する場合.この時点で,APIリクエスト頻度制限のいくつかの問題が発生します.したがって,最小数のサーバーでマルチロボットアクセスインターフェースの問題を解決するには?
このロボットによってのみ完了することができます. 他の取引戦略ロボットはこの市場転送ロボットからデータを要求することができます.
Python で記述されているこの例では,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線データ) を書き,データを描きます.JavaScriptで書くことができます.絵を描くには,
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線データを共有できます