Apabila menggunakan bot dagangan kuantitatif mata wang digital, apabila beberapa bot perlu dijalankan pada satu pelayan, jika mengakses pertukaran yang berlainan, masalah ini tidak besar dan tidak akan timbul masalah frekuensi permintaan API. Jika memerlukan beberapa bot untuk dijalankan pada masa yang sama, dan semua melakukan pertukaran yang sama, pasangan dagangan yang sama.
Kami boleh mewujudkan bot pemindahan pasaran, mengakses antara muka bursa, mendapatkan data pasaran dan lain-lain hanya dengan robot ini. Strategi perdagangan lain adalah robot yang memindahkan robot permintaan data ke pasaran ini.
Hanya bertanggungjawab untuk mengakses antara muka perdagangan bursa untuk mendapatkan data dan menyediakan perdagangan kepada bot lain.Python
Dalam contoh ini, kita hanya mendapatkan data K-line dan menyediakan perkongsian yang boleh diperluas dengan menambah data kedalaman, mengumpul data pasaran dan sebagainya.
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 dagangan, tetapi kami hanya menguji, hanya menulis data permintaan (data K-line) dan melukis data, yang boleh digunakan.JavaScript
Menulis, untuk melukis, anda perlu mengetuk "Layanan Kelas Lukisan" untuk menyalin buku kelas ini dalam carian policy square, dan selepas menyalin, anda boleh memilih rujukan 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)
}
}
Permulaan robot penghantaran pasaran
Memulakan robot ujian, ID:206353
Memulakan robot ujian, ID:206359
Memulakan robot ujian, ID:206360
Dengan cara ini, tiga atau N bot dapat berkongsi data K pada satu transaksi. Pergilah ke blog saya dan terima kasih kerana memberi komen.
Wang Won jual strategi harga tinggiKe arah timur.
xunfeng91 666