对量化交易感兴趣的同学,对于回测系统肯定不陌生。以quantopian为蓝本的回测平台,国内已经一抓一把,那为什么还需要从头实现一个系统?而且,什么是“搭积木式实现策略”呢?
对比现存的量化平台,实现如下价值:
1,市面上量化系统引擎是黑盒(当然大部分是zipline——代码是开源的,但可读性一般),从头实现可以做到知其然更知其所以然。
2,拥有自己的,代码易读性的系统,不用担心策略泄漏。
3,提供一个构架清晰且易扩展的系统。
4,”积木式“写策略,避免市面上那些冗长的模板代码——这个是本系统的亮点之一。
5,下一步会扩展到深度强化学习、机器学习自动调参等。
系统运行示例
”积木式“策略示例,如下实现“买入并持有”和“均线交叉”策略:
buy_and_hold = Strategy([
RunOnce(),
PrintBar(),
SelectAll(),
WeighEqually(),
],name='买入并持有-基准策略')
long_expr ='cross_up(ma(close,5),ma(close,10))'
flat_expr ='cross_down(ma(close,5),ma(close,10))'
ma_cross = Strategy([
SelectByExpr(long_expr=long_expr,flat_expr=flat_expr),
WeighEqually(),
],name='均线交叉策略')
几乎没有模板代码,没用调用api对不对?是的,就是这样,我们把大量常用的算法都以模块的形式,变成一个小小算法模块,我们按照自己的策略想法,按需把积木搭起来就好了,简单而且不容易出错,基本是不需要调试的!
背景说明
随着机器学习,人工智能的火热,AI+金融受到了很多关注。alpha go大败李世石之后,master再次完胜柯洁,人们自然而然会想,如果把前沿AI技术应用到“离钱最近”的金融证券投资会取得什么样的效果呢?
Quant涉及很多的基础知识,包括金融学,投资学,经济学,数学,统计学,甚至物理学,心理学等等,Quant系统也很复杂,由从多子系统构成。而量化回测系统(Backtesting)几乎是Quant系统里,最为基础且最为重要的一环。
什么是回测系统?
量化交易,就是计算机按指定的策略,产生特定的交易信号。因为二级市场所有历史数据、财务数据都是可获得的,既然是计算机进行操作,就很容易对整个交易进行复盘。好比我们玩扑克牌或者“狼人杀游戏”,在一局结束,总有自认逻辑严密的人喜欢对游戏过程进行复盘,刚哪里可以做得更好,分析出了什么问题,确保后续如何优先,调整和提高。这就是“回测”系统的价值。
回测系统至少有如下优点:
一、回测系统几乎是无代价的,我们可以调整参数,或者各种创造性的想法,这个系统会告诉你,在过往一段时间(比如一年),假如你真的这么交易了,收益率,风险,最大回撤是多少。这就避免我们花大量真金白银去市场上买教训。
二、更重要的事,节省时间,你可以在几分钟内模拟几个股市周期,穿越牛熊。你如果要想经历几个股市周期,那估计是以10年甚至更长的时间维度来计算,但对于量化回测引擎,几秒钟就可以告诉你结果,且没有产生实质的损失。
量化回测系统对于初学者是神秘的,但其原理并不复杂。此系列文章的目的,就是带着大家,用python从零实现一个量化回测系统。
量化回测系统总体架构一览:
SymbolBroker —— 记录单支证券交易详情,包括持仓情况(position),交易佣金(Commission),证券的收盘价(Close)。投资组合(Portfolio)会根据外部给出的交易指令,调用SymbolBroker的接口,去更改该证券的持仓情况,并计算交易所产生的佣金。
Portfolio —— 记录整个投资组合交易详情,包含组合的总市值(total),现金余额(cash),交易佣金,同时维护一个SymbolBroker的dict,包含所有的证券的SymbolBroker。每一期,会根据传入的FLAT(平仓)列表,把相应的证券平仓,同时根据需要持仓的证券的比例,将现金余额按指定的比例分配到对应的证券上。
TradingEnv —— 交易环境,根据策略(Strategy)产生的指令,调用Portfolio更新持仓组合情况。
DataFeed —— 数据获取,目前支持quandl平台的美股数据。
Strategy —— 策略,执行相应的“积木”模块化的算法集合。
Algo —— 算法基类,用户可以自行定义所需的算法模式。系统已经内置了许多常用的模块,包括执行频率,比如执行一次,按周执行,按月执行;资金分配模块,按信号产生交易指令模块等。
这就是系统的核心组件了,其中TradingEnv是系统的最外层。
项目在github上开源,欢迎star。github项目-量化回测系统
微信公众号:ailabx