
Saat menggunakan robot perdagangan kuantitatif mata uang digital, ketika beberapa robot berjalan di server dan mengakses bursa yang berbeda, tidak ada masalah besar dan tidak akan ada masalah frekuensi permintaan API. Jika Anda perlu menjalankan beberapa robot pada saat yang sama, dan semuanya melakukan strategi perdagangan kuantitatif untuk bursa yang sama dan pasangan perdagangan yang sama. Saat ini, terdapat masalah pada batas frekuensi permintaan API. Jadi bagaimana kita memecahkan masalah banyaknya robot yang mengakses antarmuka sambil menggunakan jumlah server yang paling sedikit?
Kita dapat mengimplementasikan robot penerusan pasar, yang dapat mengakses antarmuka bursa untuk memperoleh informasi pasar dan data lainnya hanya dengan menggunakan satu robot ini. Robot strategi perdagangan lainnya dapat dengan mudah meminta data dari robot penerusan pasar ini.
Ia hanya bertanggung jawab untuk mengakses antarmuka kutipan pertukaran untuk memperoleh data dan memberikan informasi kutipan kepada robot lain. menggunakanPythonDalam contoh ini, kami hanya memperoleh data K-line dan menyediakan pembagian. Kami dapat memperluasnya untuk menambahkan data kedalaman, data pasar agregat, dll.
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)
Robot yang meminta data adalah robot strategi perdagangan. Namun, untuk tujuan pengujian, kami hanya menulis data yang diminta (data K-line) dan menggambar data.JavaScriptUntuk menggambar, Anda perlu memeriksa “Perpustakaan Gambar Garis”. Anda dapat mencari dan menyalin pustaka ini di Strategy Square. Setelah menyalin, Anda dapat memeriksa kolom referensi templat di halaman penyuntingan strategi.
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)
}
}
Mulai robot penerusan pasar

Mulai robot uji, ID: 206353

Mulai robot uji, ID: 206359

Mulai robot uji, ID: 206360

Dengan cara ini, tiga atau bahkan N robot dapat berbagi data K-line dari pasangan perdagangan tertentu. Ini hanya titik awal, silakan meninggalkan pesan.