一、关于RQAlpha
RQAlpha是一个由米筐科技Ricequant开源的Python算法交易和回测引擎,适合A股市场,是事件驱动的设计。RQAlpha 从数据获取、算法交易、回测引擎,实盘模拟,实盘交易到数据分析,为程序化交易者提供了全套解决方案。RQAlpha 具有灵活的配置方式,强大的扩展性,用户可以非常容易地定制专属于自己的程序化交易系统。
二、相关背景知识
股票回测:股票回测是指设定了某些股票指标组合后,基于历史已经发生过的真实行情数据,在历史上某一个时间点开始,严格按照设定的组合进行选股,并模拟真实金融市场交易的规则进行模型买入、模型卖出,得出一个时间段内的盈利率、最大回撤率等数据。
最大回撤(Max Drawdown):策略在整个时间段上亏损最严重的时候相比净值最高值下跌的百分比。描述策略可能出现的最糟糕的情况。例如一个账户的净值是100,200,50,300,150,100, 200,那最大的亏损就是从300那个点开始一直亏到100。MaxDrawDown=1-(100/300)=0.67
最大回撤是策略评估时非常关键的一个指标,通常与风险承受能力相关。
三、RQAlpha框架代码结构
四、RQAlpha事件机制
· 事件注册:
RQAlpha 大部分的组件是以 add_listener 的方式进行事件的注册。
以策略执行为例:
1. 当Bar数据生成时,触发 EVENT.BAR 事件,那么用户的 handle_bar 相关的代码注册了该事件则会立即执行。
2. 当订单下单时,触发 EVENT.ORDER_PENDING_NEW 事件,前端风控模块注册了该事件,则可以立即对该订单进行审核,如果不满足风控要求,则直接指定执行 order._cancel(reason) 来保证有问题的订单不会进入实际下单环节。
3. 当订单成交时,触发 EVENT.TRADE 事件,那么系统的账户模块因为注册了该事件,就可以立即计算成交以后的收益和资金变化。
程序化交易中很多操作,都是通过注册事件的方式插入到 RQAlpha 中进行扩展的。
· 事件源:
1. 获取回测时间段内的交易日;
2. 遍历交易日获取日线/分钟线/tick的行情数据,发布事件到事件总线。
EVENT.TICK tick数据更新事件
· PRE_TICK
· HANDLE_TICK
· POST_TICK
EVENT.BAR bar数据更新事件
· PRE_BAR
· HANDLE_BAR
· POST_BAR
EVENT.BEFORE_TRADING 交易发生前事件
· PRE_BEFORE_TRADING
· HANDLE_BEFORE_TRADING
· POST_BEFORE_TRADING
EVENT.AFTER_TRADING 交易成交后事件
· PRE_AFTER_TRADING
· HANDLE_AFTER_TRADING
· POST_AFTER_TRADING
EVENT.SETTLEMENT 结算事件
· PRE_SETTLEMENT
· HANDLE_SETTLEMENT
· POST_SETTLEMENT
· 事件分类:
五、日回测系统流程
六、RQAlpha策略
· 策略运行方式:
· RQAlpha的API:
RQAlpha 抽离了策略框架的所有技术细节,以API的方式提供给策略研发者用于编写策略,从而避免陷入过多的技术细节,而非金融程序建模本身。
· 策略编写流程:
· 范例策略的运行:
(1)buy_and_hold.py:
buy_and_hold策略:在回测开始的第一天买入资金量的100%的平安银行并且一直持有。
命令行运行:
回测的起始时间为 2016-06-01, 结束时间为 2016-12-01,我们给策略分配的起始资金为 100000, Benchmark 设置为 000300.XSHG。
运行结果:
(2)golden_cross.py:
golden_cross策略:使用talib计算长短两根均线,如果短均线从上往下跌破长均线,也就是在目前的bar短线平均值低于长线平均值,而上一个bar的短线平均值高于长线平均值,即进行清仓;如果短均线从下往上突破长均线,为入场信号。
命令行运行:
回测的起始时间为 2016-06-01, 结束时间为 2017-12-01,我们给策略分配的起始资金为 300000, Benchmark 设置为 000300.XSHG。
运行结果:
(3)macd.py:
单股票macd策略:用Talib计算MACD取值,macd 是长短均线的差值,signal是macd的均线。 如果macd从上往下跌破macd_signal,进行清仓。如果短均线从下往上突破长均线,为入场信号,满仓入股。
命令行运行:
回测的起始时间为 2016-06-01, 结束时间为 2017-12-01,我们给策略分配的起始资金为 300000, Benchmark 设置为 000300.XSHG。
运行结果:
回测衡量指标:
阿尔法(Alpha):表示策略所持有投资组合的收益中和市场整体收益无关的部分,是策略选股能力的度量。当策略所选股票的总体表现优于市场基准组合成分股时,阿尔法取正值;反之取负值,该值越大越好。
贝塔(Beta):表示投资的系统性风险,反映了策略对大盘变化的敏感性。例如,一个策略的Beta为1.3,则大盘涨1%的时候,策略可能涨1.3%,反之亦然;如果一个策略的Beta为-1.3,说明大盘涨1%的时候,策略可能跌1.3%,反之亦然。该值越小越好。
夏普比率(Sharpe Ratio):表示每承受一单位总风险,会产生多少的超额报酬,可以同时对策略的收益与风险进行综合考虑。sharp是衡量策略最重要的一个指标,该指标的计算不仅考虑收益率,还考虑了风险,因此比较具有参考价值,可以理解为经过风险调整后的收益率。
信息比率(Information Ratio):衡量单位超额风险带来的超额收益。信息比率越大,说明该策略单位跟踪误差所获得的超额收益越高,因此,信息比率较大的策略的表现要优于信息比率较低的。
索提诺比率(Sortino ratio):应该是每承担一单位的下行波动(相对于比较基准或无风险收益率)所能获得的单位收益,数值越大,说明承担同样下跌风险的情况下,可以获得更多的超额收益或者基准上的回报。
收益波动率(Volatility):金融资产价格的波动程度,是对资产收益率不确定性的衡量,用于反映金融资产的风险水平。波动率越高,金融资产价格的波动越剧烈,资产收益率的不确定性就越强;波动率越低,金融资产价格的波动越平缓,资产收益率的确定性就越强。