Type/to search
8
Follow
1369
Followers
Solusi berbagi pasar multi-robot
Original
Created 2020-07-15 16:25:20  Updated 2024-12-10 10:11:04
 4
 2634

img

Solusi berbagi pasar multi-robot

Saat menggunakan robot perdagangan kuantitatif mata uang digital, ketika beberapa robot berjalan di server dan mengakses bursa yang berbeda, tidak ada masalah besar dan tidak akan ada masalah frekuensi permintaan API. Jika Anda perlu menjalankan beberapa robot pada saat yang sama, dan semuanya melakukan strategi perdagangan kuantitatif untuk bursa yang sama dan pasangan perdagangan yang sama. Saat ini, terdapat masalah pada batas frekuensi permintaan API. Jadi bagaimana kita memecahkan masalah banyaknya robot yang mengakses antarmuka sambil menggunakan jumlah server yang paling sedikit?

Kita dapat mengimplementasikan robot penerusan pasar, yang dapat mengakses antarmuka bursa untuk memperoleh informasi pasar dan data lainnya hanya dengan menggunakan satu robot ini. Robot strategi perdagangan lainnya dapat dengan mudah meminta data dari robot penerusan pasar ini.

Contoh robot penerusan pasar

Ia hanya bertanggung jawab untuk mengakses antarmuka kutipan pertukaran untuk memperoleh data dan memberikan informasi kutipan kepada robot lain. menggunakanPythonDalam contoh ini, kami hanya memperoleh data K-line dan menyediakan pembagian. Kami dapat memperluasnya untuk menambahkan data kedalaman, data pasar agregat, dll.

python
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)

Minta kode strategi robot data

Robot yang meminta data adalah robot strategi perdagangan. Namun, untuk tujuan pengujian, kami hanya menulis data yang diminta (data K-line) dan menggambar data.JavaScriptUntuk menggambar, Anda perlu memeriksa "Perpustakaan Gambar Garis". Anda dapat mencari dan menyalin pustaka ini di Strategy Square. Setelah menyalin, Anda dapat memeriksa kolom referensi templat di halaman penyuntingan strategi.

javascript
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) } }

Operasi sebenarnya

  • Mulai robot penerusan pasar
    img

  • Mulai robot uji, ID: 206353
    img

  • Mulai robot uji, ID: 206359
    img

  • Mulai robot uji, ID: 206360
    img

Dengan cara ini, tiga atau bahkan N robot dapat berbagi data K-line dari pasangan perdagangan tertentu.
Ini hanya titik awal, silakan meninggalkan pesan.

Related Recommendations
Comment
All comments (2)

    好东东啊

    5 years ago

    666

    6 years ago
  • 1
Forums
PINE Language
Get the app
iPhone Download
© 2015 - ∞ INVENTOR PTE LTD (SG)