FMZ量化交易多机器人行情共享解决方案
admin
2023-07-31 14:29:47
0

目前不清退的交易所推荐:

1、全球第二大交易所OKX欧意

国区邀请链接: https://www.myts3cards.com/cn/join/1837888   币种多,交易量大!

国际邀请链接:https://www.okx.com/join/1837888 注册简单,交易不需要实名,新用户能开合约,币种多,交易量大!

2、老牌交易所比特儿现改名叫芝麻开门 :https://www.gate.win/signup/649183

全球最大交易所币安,国区邀请链接:https://accounts.binance.com/zh-CN/register?ref=16003031  币安注册不了IP地址用香港,居住地选香港,认证照旧,邮箱推荐如gmail、outlook。支持币种多,交易安全!

买好币上KuCoin:https://www.kucoin.com/r/af/1f7w3  CoinMarketCap前五的交易所,注册友好操简单快捷!

FMZ量化交易平台邀请链接:https://www.fmz.com/

多机器人行情共享解决方案

在使用数字货币量化交易机器人时,当一个服务器上要跑多个机器人,如果访问不同的交易所,此时问题不大,不会出现API请求频率问题。如果需要有多个机器人同时运行,并且都是做同一个交易所,同一个交易对的量化交易策略。这个时候就有API请求频率限制的问题了。那么如何在用最少的服务器的情况下解决多机器人访问接口的问题呢?

我们可以实现一个行情转发机器人,访问交易所接口获取行情等数据只用这一个机器人去完成。其它交易策略机器人向这个行情转发机器人请求数据即可。

行情转发机器人例子

只负责访问交易所行情接口获取数据,并且给其它机器人提供行情。使用Python编写,例子中我们只获取K线数据,并且提供共享,可以扩展增加深度数据,聚合行情数据等。

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)
        

请求数据机器人策略代码

请求数据的机器人即为交易策略机器人,只不过我们测试用,只写请求数据(K线数据)并且把数据画出来,可以用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)
    }
}

实际运行

  • 启动行情转发机器人
    16864e60ff8aaadbd77c16864e60ff8aaadbd77c
  • 启动测试机器人,ID:206353
    15e914a273bedc5ff61915e914a273bedc5ff619
  • 启动测试机器人,ID:206359
    169793e7b00791ae2e4815e914a273bedc5ff619
  • 启动测试机器人,ID:206360
    16c93204f2ac0f35bbdb15e914a273bedc5ff619

这样便实现了三个甚至N个机器人对某个交易对K线数据的共享。
抛砖引玉,欢迎留言。

FMZ量化交易平台邀请链接:https://www.fmz.com/

全球最大交易所币安,国区邀请链接:https://accounts.binance.com/zh-CN/register?ref=16003031  币安注册不了IP地址用香港,居住地选香港,认证照旧,邮箱推荐如gmail、outlook。支持币种多,交易安全!

买好币上KuCoin:https://www.kucoin.com/r/af/1f7w3  CoinMarketCap前五的交易所,注册友好操简单快捷!

目前不清退的交易所推荐:

1、全球第二大交易所OKX欧意,邀请链接:https://www.myts3cards.com/cn/join/1837888 注册简单,交易不需要实名,新用户能开合约,币种多,交易量大!。

2、老牌交易所比特儿现改名叫芝麻开门 :https://www.gate.win/signup/649183

买好币上币库:https://www.kucoin.com/r/1f7w3

火必所有用户现在可用了,但是要重新注册账号火币:https://www.huobi.com

全球最大交易所币安,

国区邀请链接:https://accounts.suitechsui.mobi/zh-CN/register?ref=16003031 支持86手机号码,网页直接注册。

相关内容

热门资讯

Windows 11 和 10... Windows 11/10 文件夹属性中缺少共享选项卡 – 已修复 1.检查共享选项卡是否可用 右键...
事件 ID 7034:如何通过... 点击进入:ChatGPT工具插件导航大全 服务控制管理器 (SCM) 负责管理系统上运行的服务的活动...
Hive OS LOLMine... 目前不清退的交易所推荐: 1、全球第二大交易所OKX欧意 国区邀请链接: https://www.m...
Radmin VPN Wind... Radmin VPN 是一款免费且用户友好的软件,旨在牢固地连接计算机以创建一个有凝聚力的虚拟专用网...
如何修复 Steam 内容文件... Steam 内容文件锁定是当您的 Steam 文件无法自行更新时出现的错误。解决此问题的最有效方法之...
Hive OS 部署 PXE ... 目前不清退的交易所推荐: 1、全球第二大交易所OKX欧意 国区邀请链接: https://www.m...
如何在Instagram上扫描... 如何在Instagram上扫描名称标签/ QR? 总而言之,您可以通过大约四种不同的方法来扫描这些I...
在 Windows 11 中打... 什么是链路状态电源管理? 您可以在系统控制面板的电源选项中看到链接状态电源管理。它是 PCI Exp...
farols1.1.501.0... faro ls 1.1.501.0(64bit)可以卸载,是一款无需连接外部PC机或笔记本计算机即可...
Hive OS 新建飞行表的方... 目前不清退的交易所推荐: 1、全球第二大交易所OKX欧意 国区邀请链接: https://www.m...