Ketika menggunakan robot perdagangan kuantitatif mata uang digital, ketika beberapa robot harus berjalan di satu server, jika mengakses bursa yang berbeda, saat ini tidak ada masalah besar, tidak ada masalah frekuensi permintaan API. Jika diperlukan beberapa robot untuk berjalan secara bersamaan, dan semua melakukan bursa yang sama, pasangan transaksi yang sama.
Kita dapat mengimplementasikan robot pemrosesan pasar, mengakses antarmuka bursa, mendapatkan data pasar, dan sebagainya hanya dengan robot ini. Strategi perdagangan lainnya adalah robot yang mengirim permintaan data ke pasar ini.
Robot ini hanya bertanggung jawab untuk mengakses antarmuka pasar untuk mendapatkan data dan menyediakan pasar kepada robot lain.Python
Dalam contoh ini, kita hanya mendapatkan data K-line dan menyediakan sharing, yang dapat diperluas dengan menambahkan data kedalaman, pengelompokan data pasar, 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 transaksi, hanya saja kami menguji, hanya menulis data permintaan (data K-line) dan menggambar data, yang dapat digunakan untukJavaScript
Untuk menulis, untuk menggambar, Anda perlu mengklik "Drawline Class Library" untuk menyalin direktori ini di pencarian policy square, dan setelah menyalin, Anda dapat mengklik referensi template di halaman edit policy.
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)
}
}
Robot Pengiriman Pasar
Mengaktifkan robot pengujian, ID:206353
Mengaktifkan robot pengujian, ID:206359
Memulai robot pengujian, ID:206360
Ini memungkinkan tiga atau bahkan N robot untuk berbagi data K-line pada transaksi tertentu. "Saya tidak akan membiarkan orang-orang yang tidak bertanggung jawab melakukan hal-hal yang tidak diinginkan.
"Kalau tidak, saya tidak akan melakukannya", katanya.Baiklah timur timur.
xunfeng91 666