Cuando se utiliza un robot de transacción cuantitativa de moneda digital, cuando hay que ejecutar varios robots en un servidor, si se accede a diferentes intercambios, este momento no es un gran problema, no se presentan problemas de frecuencia de solicitud de API. Si se necesita que varios robots se ejecuten al mismo tiempo y se realizan las mismas transacciones en el mismo intercambio, la misma estrategia de transacción cuantitativa. En este momento hay un problema de restricción de frecuencia de solicitud de API.
Podemos implementar un bot de transferencia de mercado, acceder a la interfaz de intercambio para obtener datos de mercado, etc. con solo este robot.
Solo se encarga de acceder a la interfaz de mercado de la bolsa para obtener datos y proporcionar el mercado a otros robots.Python
En el ejemplo anterior, solo obtenemos datos de la línea K, y ofrecemos el intercambio, que se puede ampliar para agregar datos de profundidad, agrupar datos de mercado, etc.
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)
El robot que solicita datos es un robot de estrategia de transacción, sólo que lo probamos, solo escribimos datos de la solicitud (datos de la línea K) y dibujamos los datos, que se pueden usar.JavaScript
Para escribir, para dibujar, se requiere seleccionar "Drawline Class Library". Se puede copiar esta biblioteca en la búsqueda de la plaza de la política, y luego se puede seleccionar una referencia a la plantilla en la página de edición de la política.
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)
}
}
Inicio del mercado de robots de envío
Inicio del robot de prueba, ID:206353
Inicio del robot de prueba, ID:206359
Inicio del robot de prueba, ID:206360
Esto permite que tres o incluso N robots compartan los datos de K-line de una transacción. Los bloggers de la red social se han mostrado muy interesados en este tema.
Las estrategias de venta a alto precio de las líneas cortasQué bien.
¿Qué es esto? 666