डिजिटल मुद्रा मात्रात्मक ट्रेडिंग रोबोट का उपयोग करते समय, जब एक सर्वर पर कई रोबोट चल रहे हैं, यदि आप विभिन्न एक्सचेंजों पर जाते हैं, तो इस समय समस्या गंभीर नहीं है, और कोई एपीआई अनुरोध आवृत्ति समस्या नहीं होगी। यदि आपको एक ही समय में कई रोबोट चलाने की आवश्यकता है, और वे सभी एक ही ट्रेडिंग जोड़ी मात्रात्मक ट्रेडिंग रणनीति के साथ एक ही एक्सचेंज पर जाते हैं। इस समय, एपीआई अनुरोध आवृत्ति सीमा के कुछ मुद्दे होंगे। तो कम से कम सर्वरों के साथ मल्टी-रोबोट एक्सेस इंटरफ़ेस की समस्या को कैसे हल किया जाए?
हम एक बाजार उद्धरण अग्रेषण रोबोट लागू कर सकते हैं, और बाजार उद्धरण प्राप्त करने के लिए विनिमय इंटरफ़ेस का उपयोग और अन्य डेटा केवल इस रोबोट द्वारा पूरा किया जा सकता है। अन्य व्यापार रणनीति रोबोट इस बाजार अग्रेषण रोबोट से डेटा का अनुरोध कर सकते हैं।
यह केवल डेटा प्राप्त करने और अन्य रोबोटों को बाजार उद्धरण प्रदान करने के लिए विनिमय बाजार उद्धरण इंटरफ़ेस तक पहुंचने के लिए जिम्मेदार है। पायथन में लिखा गया, उदाहरण में हम केवल के-लाइन डेटा प्राप्त करते हैं और साझाकरण प्रदान करते हैं, जिसे गहराई डेटा, समग्र बाजार डेटा, आदि को बढ़ाने के लिए विस्तारित किया जा सकता है।
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 receives the request, self.path:", self.path, "query parameter:", dictParam)
lock.acquire()
# Recording
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), )) # local computer test
_thread.start_new_thread(createServer, (("0.0.0.0", 9090), )) # Test on VPS server
Log("Start 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 quotation failed", "#FF0000")
continue
else :
Records = r
# Counter
tbl = {
"type" : "table",
"title" : "Statistics",
"cols" : ["ID of the robot requesting data", "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)
डेटा का अनुरोध करने वाला रोबोट एक ट्रेडिंग रणनीति रोबोट है, लेकिन हम इसका उपयोग परीक्षण के लिए करते हैं। हम केवल अनुरोधित डेटा (के-लाइन डेटा) लिखते हैं और डेटा खींचते हैं। आप इसे जावास्क्रिप्ट में लिख सकते हैं। एक तस्वीर खींचने के लिए, आपको
var FuncGetRecords = exchange.GetRecords
exchange.GetRecords = function() {
// You can fill in the IP address of the device where the "quote forwarding robot" is located 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)
}
}
बाजार स्पैडिंग रोबोट शुरू करें
परीक्षण रोबोट प्रारंभ करें, आईडीः 206353
परीक्षण रोबोट प्रारंभ करें, आईडीः 206359
इस प्रकार, तीन या यहां तक कि एन रोबोट एक निश्चित ट्रेडिंग जोड़ी के के-लाइन डेटा को साझा कर सकते हैं।