Skip to content

对GitHub上最靓的回测和实盘交易系统一个稍微详细的描述和分析. 持续更新中... more detailed description of the popular and awesome backtesting and livetrading system in github.

Notifications You must be signed in to change notification settings

sric0880/awesome-livetrading-backtest-libraries

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 

Repository files navigation

开源交易系统说明

Backtesting & Live Trading

backtrader

https://github.com/backtrader/backtrader

【Star 13.9k】【完成度高】【架构完整】【复杂策略】【强烈推荐】【event-driven】

自己看代码去,值得学习。因为通用性强,支持特性多,速度就一般般,尤其是当数据特别大的时候。虽然支持非常复杂的策略,但还是需要修改底层源码。同样支持实盘,用实盘做期货和数字货币毫无压力。

aat

https://github.com/AsyncAlgoTrading/aat

【Star 652】【很多TODO】【架构基本完整】【可借鉴】【event-driven】

  • asyncio 框架
  • 将主要的结构体用C++实现,通过pybind11绑定,主要结构有order, trade, position, order book, instrument, account。逻辑实现还是在Python
  • 本地维护一个订单薄【应该是行情系统做的事】
  • Manager+事件分发架构。对于任何事件,依次执行PortfolioManager.onXXX(event), RiskManager.onXXX(event), OrderManager.onXXX(event)
  • PortfolioManager:和投资组合优化无关【应该叫PositionManager,头寸管理器】
  • RiskManager:TODO
  • Exchange:继承MarketData(市场行情数据)和OrderEntry(下单)两个模块。已经实现
    • 【实盘】coinbase接口
    • 【实盘】IB 接口
    • 【实盘,美股市场】IEX Cloud https://iexcloud.io/
    • 【回测】csv本地数据接口
    • 【模拟】synthetic 合成市场,模拟订单薄
  • 整个交易系统靠Exchange.MarketData.tick(trade)驱动,这里的trade表示市场的成交,用来更新本地的订单薄,根据订单薄来下单【高频】【不支持K线驱动】

QUANTAXIS

https://github.com/yutiansut/QUANTAXIS

【Star 8.2k】【完成度不高】【简单策略】【event-driven】

主要思想:将数据流拆分成微服务,用消息列队全部串起来,下单也做成服务。

Python版本代码质量不高,长期未更新。数据用MongoDB、clickhouse保存。订单、持仓、仓位管理都在文件QifiAccount.py 。账户运行时数据,需要跟数据库做同步【增加了不一致的可能性】。

只能用于国内A股和期货。

websocket用来远程控制、设置定时任务和查询收益统计。

策略逻辑都在QAStrategy中,实现各种回调函数on_xxx_bar。

消息队列用于实盘,订阅数据、下单。订单列队由第三方服务器天勤量化 open-trade-gateway来接受,数据列队由QUANTAXIS_RealtimeCollector来分发。【本人觉得完全没必要用消息列队,反而增加了延迟】,期货数据接口来自ctpbee,A股没有写。

还有一个大问题,他订单只要发送到消息列队,就默认一定全部成交,但实际可能会失败【导致数据不一致】。

VNPY

https://github.com/vnpy/vnpy

【Star 25.6k】【完成度高】【架构完整】【复杂策略】【强烈推荐】【event-driven】

优点:接口非常丰富。官方文档非常详细,一直在维护中。虽然官方分了很多的模块,但是大致可以分为几类:

  • 交易接口类(gateway/api):丰富
  • 数据接口类(database/datafeed):丰富
  • RPC:交易接口、数据接口都可以包装成服务,远程调用(或者再封装成HTTP接口,使用FastAPI Restful,或者封装成websocket),RPC使用的是zmq(ZeroMQ)。
  • UI界面(chart/studio)
  • 策略类(app):很多示例【包括实盘和回测】
  • 管理类(engine):
    • OmsEngine【核心】:虽然它叫订单管理系统,但是集所有功能于一身,它管理着所有的订单、成交、持仓、账户信息、当前价格、合约、盘口。不管跑多少个策略,策略下的单,都在这个系统里面。
    • PortfolioEngine 计算持仓盈亏的
    • RiskEngine:风控。只提供最基本的一些风控。在下单之前,做一系列检查:
      • 单笔委托数量超过最大设定值
      • 今日成交量超过最大设定值
      • 今日撤单量超过最大设定值
      • 每n秒最大下单量
      • 每n秒最大撤单量
      • 在途订单量超过最大设定值
  • 回测类(BacktesterEngine):包括参数优化optimization。重新写了一套管理订单、成交、持仓、盈亏的逻辑,和实盘代码是完全分开的。

缺点:一个模块就是一个project,导致模块之间的有很多重复代码,维护起来就是灾难性的,尤其是策略类的模块,看似拆分很细扩展性强,实则效率低下。比如他每种类型的策略的回测,都要重写BacktestingEngine.py,然而其中大部分代码都是一样的。这种不同策略分不同模块的做法,实际上是一种偷懒行为,新建新类型的策略,只要复制粘贴就行。

应该一个模块一个Python文件,然后全部放在一个project里面,再把重复代码提炼出来。策略和回测逻辑,是可以抽象出来很多公共的底层逻辑的。其实回测和实盘之间都有很多共同的逻辑可以通用,这一点上backtrader 做的可以。

Live Trading Only

stock

https://github.com/myhhub/stock

【A股】【schedule-driven】

  • cron定时任务拉取东财、同花顺网站数据,做了一套数据展示的网站。
  • 交易引擎(改的 easyquant )就是简单的定时任务(开盘、收盘、间隔半分钟/1分钟/5分钟…触发一次),交易接口使用 easytrader

easytrader

https://github.com/shidenggui/easytrader

【A股】

  • 使用 pywinauto 对下单软件GUI进行识别和控制,实现无人监控自动下单。
  • 能复制joinquant, ricequant, 雪球 的模拟盘操作到实盘。

easyquant

https://github.com/shidenggui/easyquant

【A股】【event-driven】【schedule-driven】

  • 交易引擎简单的定时任务+实时行情回调,交易接口使用 easytrader,行情数接口使用easyquotation

Backtesting Only

Backtesting.py

【Star 5.3k】【值得借鉴】【轻量级】【复杂策略】【schedule-driven】

https://kernc.github.io/backtesting.py/

  • 使用bokeh 绘图
  • 主要类:_Data_IndicatorStrategyOrderPositionTrade_BrokerBacktest。只支持单一的Data。
  • 指标在Init的时候,提前算好了
  • 支持止盈止损,支持追踪止损
  • 架构类似backtrader
  • 指标优化,使用scikit-optimize

bt

https://github.com/pmorissette/bt

【Star 2.1k】【值得借鉴】【复杂策略】【轻量级】【schedule-driven】

  • 特色:algos中所有交易都模块化【算法交易】。策略和证券分别用节点Node表示,组成树状图,每个策略维持一个algos列表,运行策略即运行该策略上的algos列表,以及递归运行其子节点上的algos列表。algos 模块有:
    • 时间间隔任务、定时任务
    • 选股和权重
    • 仓位再平衡
    • 计算风险,用于展示
  • 只支持一个价格close
  • 可实现:买入持有每月调仓、风险平价、固定收入、统计套利、Predicted Tracking Error Rebalance、父子策略、目标波动率、技术指标等
  • 非常丰富的测试用例,单元测试和基准测试bench

vectorbt

https://github.com/polakowo/vectorbt

【Star 4.1k】【轻量级】【简单策略】【vectorized】

  • 数据提前加载,开平仓信号提前计算好,支持多参数(参数优化 ),然后批量回测。
  • 各种数据、数组的处理函数,指标的计算,全部使用numba加速。
  • generic.splitters模块机器学习数据集划分算法:RangeSplitter, RollingSplitter, ExpandingSplitter
  • labels模块:可以给训练集打标签。
  • portfolio模块:提前计算好仓位,订单、信号都会影响到仓位,都要提前算好
  • records模块:稀疏数组
  • signals模块:生成开仓和平仓信号

zipline-reloaded

https://github.com/stefan-jansen/zipline-reloaded

【Star 1.2k】【完成度高】【架构完整】【强烈推荐】【schedule-driven】

代码质量很高,文档和注释非常完整。只支持Daily和Minute。文档说也支持实盘,但是并没有实盘的接口和案例。

核心模块三大类:

  • 数据类,底层是用数据库和bcolz,数据格式:按fields分开,比如一个close数据是二维的ndarray,行是时间,列是assets
  • Pipeline数据处理流程类,将数据计算分为多个节点(Term)组成单向无环图,支持各种因子、指标、算法等计算
  • 交易引擎类,使用bar来驱动运行

qlib

https://github.com/microsoft/qlib

【Star 15.1k】【Microsoft出品】【AI】【重量级】【强烈推荐】【schedule-driven】

AI助力的投研平台,从最底层到上层依次讲解:

  • Infrastructure layer 基础设施层,包含:数据服务器,模型训练器,模型存储和管理器。
    • 数据服务器
      • 整个流程支持配置化
      • 原始数据来源各种网站,提供数据HTTP下载的各种网站,数据以二进制文件形式存储在本地,供上层数据分析。qlib对每一列单独存储,本质是调用numpy.array.tofile() 接口保存为文件。可以参考scripts/dump_bin.py
      • 额外还有一个项目qlib-server,远程提供数据和缓存。使用 Flask-SocketIO 框架。
      • XXXProvider:实现获取数据的接口。主要有两大类,Client和Local,Client是连接远程qlib-server的接口,Local是从本地文件加载的接口
      • DataLoader:从provider中 或者 文件中 获取数据。数据主要有 日历instruments(证券信息)features(特征,多列字段组合为一个特征)丰富的查询接口,支持条件过滤,支持formulaic表达式(rule_expression
      • DataHandler:数据预处理,由处理器processors组成
      • Dataset:是已经处理好,可供机器学习或者推理的数据
      • 有缓存机制,将中间结果缓存在本地文件,或者 内存。Redis用来提供分布式锁。
    • 模型训练器
      • 训练任务管理器,支持多进程,任务池
      • 每次训练的结果保存为record,所有record会记录下来,用来分析模型的性能,进行调参。所有record通过ExperimentManager进行管理
    • 预置了非常多机器学习模型
  • Learning Framework layer 机器学习框架 PyTorch
    • 有监督学习和强化学习
  • Workflow layer 从市场数据→推理(预测)→构建投资组合(投资决策)→订单执行(回测)
    • 回测**【复杂策略】【schedule-driven】**
      • trade_strategy,做出投资决策BaseTradeDecision,买或卖。策略可以包含一个投资组合优化器【仓位管理】,比如说指数增强策略。
      • trade_executor,执行决策。支持嵌套执行器和嵌套策略。比如说日内策略,外层是日策略,决定是否开仓,开仓哪些品种,内层是1分钟策略,决定每分钟买入或卖出量(TWAP)。基于预测模型的策略也叫SignalStrategy。内嵌策略可以理解为【算法交易】
  • Interface layer 分析报告
    • 回测结果
      • PortfolioMetrics 总资产、现金、收益率、持仓市值、换手率等。可以绘制出report_graphrisk_analysis_graph等图表
      • Indicator 算法交易过程中记录的一些指标,比如完成率ffr,基准价格base_price,超出基准价百分比price advantage
    • 风险模型:RiskModelPOETCovEstimatorShrinkCovEstimatorStructuredCovEstimator
    • 预测模型分析报告

About

对GitHub上最靓的回测和实盘交易系统一个稍微详细的描述和分析. 持续更新中... more detailed description of the popular and awesome backtesting and livetrading system in github.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published