当前位置:网站首页>Multi robot market share solution
Multi robot market share solution
2020-11-06 20:21:00 【Inventor quantification】
Multi robot market sharing solution
When trading digital money, use robots , When you have to run multiple robots on a server , If you visit different exchanges , It's not a big problem at this time , There will be no API The frequency of requests . If you need to have multiple robots running at the same time , And they all do the same exchange , The quantitative trading strategy of the same trading pair . At this time there is API The request frequency limit problem . How to use the least number of server interfaces to solve the problem ?
We can implement a market forwarding robot , Access to the exchange interface to obtain market data and other data, only this robot to complete . Other trading strategy robots forward robot request data to this market .
Quote forwarding robot example
Only responsible for accessing the exchange market interface to obtain data , And offer other robots a market . Use Python To write , In the example, we only get K Line data , And provide sharing , Can be expanded to increase depth data , Aggregate market data, 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(" The service received the request ,self.path:", self.path, "query Parameters :", dictParam)
lock.acquire()
# Record
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), )) # Native test
_thread.start_new_thread(createServer, (("0.0.0.0", 9090), )) # VPS Test on server
Log(" Start the 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 acquisition failed ", "#FF0000")
continue
else :
Records = r
# Counter
tbl = {
"type" : "table",
"title" : " Statistics ",
"cols" : [" Robots that request data id", " 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)
Request data robot policy code
The robot that requests data is the trading strategy robot , It's just that we use , Write only the request data (K Line data ) And draw the data , It can be used JavaScript To write , For drawing , You need to check 「 Draw line class library 」 You can search and copy this library in strategy square , After copying, you can check the column of template reference in the policy editing page .
var FuncGetRecords = exchange.GetRecords
exchange.GetRecords = function() {
// Can be filled in 「 Market forwarding robot 」 Of the device IP Address 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)
}
}
Actual operation
-
Start the market forwarding robot

-
Start the test robot ,ID:206353

-
Start the test robot ,ID:206359

-
Start the test robot ,ID:206360

In this way, three or even N A robot for a deal for K Sharing of line data .
throw away a brick in order to get a gem , Welcome to leave a message .
版权声明
本文为[Inventor quantification]所创,转载请带上原文链接,感谢
边栏推荐
- Solve the problem of database insert data garbled in PL / SQL developer
- Music generation through deep neural network
- What are manufacturing and new automation technologies?
- Even liver three all night, jvm77 high frequency interview questions detailed analysis, this?
- Discussion on the technical scheme of text de duplication (1)
- C + + and C + + programmers are about to be eliminated from the market
- Individual annual work summary and 2019 work plan (Internet)
- 代码生成器插件与Creator预制体文件解析
- What if the front end doesn't use spa? - Hacker News
- 前端未來趨勢之原生API:Web Components
猜你喜欢

Elasticsearch数据库 | Elasticsearch-7.5.0应用搭建实战

大道至简 html + js 实现最朴实的小游戏俄罗斯方块

Pattern matching: The gestalt approach一种序列的文本相似度方法

一路踩坑,被迫聊聊 C# 代码调试技巧和远程调试

2020年数据库技术大会助力技术提升

如何在终端启动Coda 2中隐藏的首选项?

StickEngine-架构12-通信协议

常用SQL语句总结

Music generation through deep neural network

Shh! Is this really good for asynchronous events?
随机推荐
Behind the record breaking Q2 revenue of Alibaba cloud, the cloud opening mode is reshaping
每个大火的“线上狼人杀”平台,都离不开这个新功能
Interpretation of Cocos creator source code: engine start and main loop
Even liver three all night, jvm77 high frequency interview questions detailed analysis, this?
[Xinge education] poor learning host computer series -- building step 7 Simulation Environment
常用SQL语句总结
The dynamic thread pool in Kitty supports Nacos and Apollo multi configuration centers
Discussion on the technical scheme of text de duplication (1)
How to use Python 2.7 after installing anaconda3?
[C] (original) step by step teach you to customize the control element - 04, ProgressBar (progress bar)
华为Mate 40 系列搭载HMS有什么亮点?
事务的隔离级别与所带来的问题
Introduction to quantitative investment and Trading (Python introduction to financial analysis)
零基础打造一款属于自己的网页搜索引擎
For a while, a dynamic thread pool was created, and the source code was put into GitHub
Network security engineer Demo: the original * * is to get your computer administrator rights! [maintain]
In depth to uncover the bottom layer of garbage collection, this time let you understand her thoroughly
(1) ASP.NET Introduction to core3.1 Ocelot
Jetcache buried some of the operation, you can't accept it
Uncle Bob: the software architecture is similar to a house. Object oriented is the structure of the house, and the water pipe is functional programming