从零搭建智能交易系统叁全市场数据接收器低成本搭建数据中心

vnpy中提供了DataRecorder模块,但需要手工添加,不能自动订阅全品种行情,所以需要改造一番。

从零搭建智能交易系统叁全市场数据接收器低成本搭建数据中心

DataRecorder 模块解析

DataRecorder是方便用户在UI界面中手动订阅合约信息设置的。

用户添加订阅后,调用 add_bar_recording 或者 add_tick_recording,然后保存订阅记录到本地文件,并且subscribe合约信息,通过ctp的行情信息订阅后,接受tick信息,并且保存数据。数据的保存是定时保存的,默认每10s保存一次。

在登录的时候

1. load_setting 加载配置,配置中包含了订阅的信息内容,

2. 然后把订阅的历史重新订阅。

DataRecorder 重构

从零搭建智能交易系统叁全市场数据接收器低成本搭建数据中心

每次在开盘前(上午8:50,晚上8:50)登录tdapi获取合约信息,然后全部订阅并且保存下来。

改造的方式很简单,不需要loading setting,只需要在查询所有合约信息后,调用下订阅就可以了。

while True:  
    sleep(10)  
    main_engine.write_log("等待合约加载完成")  
    # 等待合约全部加载完成  
    if ctp_gateway.td_api.contract_inited:  
        # 订阅所有合约  
        main_engine.write_log("合约加载完成")  
        for k, v in oms_engine.contracts.items():  
            data_record_engine.add_bar_recording(v.vt_symbol)  
            data_record_engine.add_tick_recording(v.vt_symbol)  
        main_engine.write_log("开始订阅合约")  
        break

多行情接收器

单个行情接收器有丢包的现象发生,所以需要采用多行情接收器,多个行情接收后通过对比覆盖可以保证行情接收的全面性。

而由于我们使用的tdengine,只要时间戳一致的行情,都会被自动覆盖住,这样的改动也最小。

从零搭建智能交易系统叁全市场数据接收器低成本搭建数据中心

环境搭建

在实际的生产环境中,就不能使用docker的服务器了,需要一台linux服务器来安装数据库,然后多个recorder连接这个数据库。

项目落地

一个生产级的项目,需要在预算,性能和质量作出权衡。而期货行情接收的项目需要考虑到这样的使用场景:

1. 主要是本地研发使用

2. 行情录制的实时性要求不高,不耽误研发就可以。

3. 实际策略运行过程中,历史数据从数据库中获取,交易数据从ctp中实时接收。

如果考虑到存储全部的行情数据(分钟和tick)大概至少需要500G容量,我们需要准备1T的容量。

方案1:云服务器

阿里云2核4G服务器*2 + 1T云盘 一年大约1w,如果一次性购买5年,加上折扣应该在3万以内

方案2:本地存储

1T硬盘 300元,低性能电脑2台(需要的资源不多,一个10年前的笔记本性能就完全够用)2000元,电费3年1000元够用。总共3300元。

方案3 :本地存储+ 云服务冗余

方案2虽然便宜,但是本地网络和电源不稳定性是一大问题,这种不稳定性是偶发的,所以我们需要在云服务器做一个备份,一个最便宜的服务器+40G硬盘就够了,这样每日收盘把数据拉到本地做个合并。这样的服务器每年500元就够了。

改进

vnpy的gateway默认的是把tdapi和mdapi绑定到一起,但是在行情接受过程中,tdapi仅仅是用来接受当日合约的详情的,所以每天仅需要调用一次就可以了。

并且mdapi实际上不需要鉴权,也就是说没有账号也可以接受行情,所以一个更好的架构是:

从零搭建智能交易系统叁全市场数据接收器低成本搭建数据中心

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/73759
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 10 日 下午4:02
下一篇 2024 年 7 月 10 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注