一秽誊、關(guān)于RQAlpha
RQAlpha是一個(gè)由米筐科技Ricequant開源的Python算法交易和回測引擎,適合A股市場,是事件驅(qū)動(dòng)的設(shè)計(jì)。RQAlpha 從數(shù)據(jù)獲取、算法交易愧口、回測引擎,實(shí)盤模擬轴脐,實(shí)盤交易到數(shù)據(jù)分析调卑,為程序化交易者提供了全套解決方案。RQAlpha 具有靈活的配置方式大咱,強(qiáng)大的擴(kuò)展性恬涧,用戶可以非常容易地定制專屬于自己的程序化交易系統(tǒng)。
二碴巾、相關(guān)背景知識
股票回測:股票回測是指設(shè)定了某些股票指標(biāo)組合后溯捆,基于歷史已經(jīng)發(fā)生過的真實(shí)行情數(shù)據(jù),在歷史上某一個(gè)時(shí)間點(diǎn)開始,嚴(yán)格按照設(shè)定的組合進(jìn)行選股提揍,并模擬真實(shí)金融市場交易的規(guī)則進(jìn)行模型買入啤月、模型賣出,得出一個(gè)時(shí)間段內(nèi)的盈利率劳跃、最大回撤率等數(shù)據(jù)谎仲。
最大回撤(Max Drawdown):策略在整個(gè)時(shí)間段上虧損最嚴(yán)重的時(shí)候相比凈值最高值下跌的百分比。描述策略可能出現(xiàn)的最糟糕的情況刨仑。例如一個(gè)賬戶的凈值是100,200,50,300,150,100, 200郑诺,那最大的虧損就是從300那個(gè)點(diǎn)開始一直虧到100。MaxDrawDown=1-(100/300)=0.67
最大回撤是策略評估時(shí)非常關(guān)鍵的一個(gè)指標(biāo)杉武,通常與風(fēng)險(xiǎn)承受能力相關(guān)辙诞。
三、RQAlpha框架代碼結(jié)構(gòu)
四轻抱、RQAlpha事件機(jī)制
· 事件注冊:
RQAlpha 大部分的組件是以 add_listener 的方式進(jìn)行事件的注冊飞涂。
以策略執(zhí)行為例:
1. 當(dāng)Bar數(shù)據(jù)生成時(shí),觸發(fā) EVENT.BAR 事件祈搜,那么用戶的 handle_bar 相關(guān)的代碼注冊了該事件則會立即執(zhí)行较店。
2. 當(dāng)訂單下單時(shí),觸發(fā) EVENT.ORDER_PENDING_NEW 事件夭问,前端風(fēng)控模塊注冊了該事件泽西,則可以立即對該訂單進(jìn)行審核,如果不滿足風(fēng)控要求缰趋,則直接指定執(zhí)行 order._cancel(reason) 來保證有問題的訂單不會進(jìn)入實(shí)際下單環(huán)節(jié)捧杉。
3. 當(dāng)訂單成交時(shí),觸發(fā) EVENT.TRADE 事件秘血,那么系統(tǒng)的賬戶模塊因?yàn)樽粤嗽撌录抖叮涂梢粤⒓从?jì)算成交以后的收益和資金變化。
程序化交易中很多操作灰粮,都是通過注冊事件的方式插入到 RQAlpha 中進(jìn)行擴(kuò)展的仔涩。
· 事件源:
1. 獲取回測時(shí)間段內(nèi)的交易日;
2. 遍歷交易日獲取日線/分鐘線/tick的行情數(shù)據(jù)粘舟,發(fā)布事件到事件總線熔脂。
EVENT.TICK tick數(shù)據(jù)更新事件
· PRE_TICK
· HANDLE_TICK
· POST_TICK
EVENT.BAR bar數(shù)據(jù)更新事件
· PRE_BAR
· HANDLE_BAR
· POST_BAR
EVENT.BEFORE_TRADING 交易發(fā)生前事件
· PRE_BEFORE_TRADING
· HANDLE_BEFORE_TRADING
· POST_BEFORE_TRADING
EVENT.AFTER_TRADING 交易成交后事件
· PRE_AFTER_TRADING
· HANDLE_AFTER_TRADING
· POST_AFTER_TRADING
EVENT.SETTLEMENT 結(jié)算事件
· PRE_SETTLEMENT
· HANDLE_SETTLEMENT
· POST_SETTLEMENT
· 事件分類:
五、日回測系統(tǒng)流程
六柑肴、RQAlpha策略
· 策略運(yùn)行方式:
· RQAlpha的API:
RQAlpha 抽離了策略框架的所有技術(shù)細(xì)節(jié)霞揉,以API的方式提供給策略研發(fā)者用于編寫策略,從而避免陷入過多的技術(shù)細(xì)節(jié)晰骑,而非金融程序建模本身适秩。
·?策略編寫流程:
·?范例策略的運(yùn)行:
(1)buy_and_hold.py:
buy_and_hold策略:在回測開始的第一天買入資金量的100%的平安銀行并且一直持有。
命令行運(yùn)行:
回測的起始時(shí)間為 2016-06-01, 結(jié)束時(shí)間為 2016-12-01,我們給策略分配的起始資金為 100000, Benchmark 設(shè)置為 000300.XSHG秽荞。
運(yùn)行結(jié)果:
(2)golden_cross.py:
golden_cross策略:使用talib計(jì)算長短兩根均線,如果短均線從上往下跌破長均線骤公,也就是在目前的bar短線平均值低于長線平均值,而上一個(gè)bar的短線平均值高于長線平均值,即進(jìn)行清倉扬跋;如果短均線從下往上突破長均線阶捆,為入場信號。
命令行運(yùn)行:
回測的起始時(shí)間為 2016-06-01, 結(jié)束時(shí)間為 2017-12-01钦听,我們給策略分配的起始資金為 300000, Benchmark 設(shè)置為 000300.XSHG趁猴。
運(yùn)行結(jié)果:
(3)macd.py:
單股票macd策略:用Talib計(jì)算MACD取值,macd 是長短均線的差值彪见,signal是macd的均線。 如果macd從上往下跌破macd_signal娱挨,進(jìn)行清倉余指。如果短均線從下往上突破長均線,為入場信號跷坝,滿倉入股酵镜。
命令行運(yùn)行:
回測的起始時(shí)間為 2016-06-01, 結(jié)束時(shí)間為 2017-12-01,我們給策略分配的起始資金為 300000, Benchmark 設(shè)置為 000300.XSHG柴钻。
運(yùn)行結(jié)果:
回測衡量指標(biāo):
阿爾法(Alpha):表示策略所持有投資組合的收益中和市場整體收益無關(guān)的部分淮韭,是策略選股能力的度量。當(dāng)策略所選股票的總體表現(xiàn)優(yōu)于市場基準(zhǔn)組合成分股時(shí)贴届,阿爾法取正值靠粪;反之取負(fù)值,該值越大越好毫蚓。
貝塔(Beta):表示投資的系統(tǒng)性風(fēng)險(xiǎn)占键,反映了策略對大盤變化的敏感性。例如元潘,一個(gè)策略的Beta為1.3畔乙,則大盤漲1%的時(shí)候,策略可能漲1.3%翩概,反之亦然牲距;如果一個(gè)策略的Beta為-1.3,說明大盤漲1%的時(shí)候钥庇,策略可能跌1.3%牍鞠,反之亦然。該值越小越好上沐。
夏普比率(Sharpe Ratio):表示每承受一單位總風(fēng)險(xiǎn)皮服,會產(chǎn)生多少的超額報(bào)酬,可以同時(shí)對策略的收益與風(fēng)險(xiǎn)進(jìn)行綜合考慮。sharp是衡量策略最重要的一個(gè)指標(biāo)龄广,該指標(biāo)的計(jì)算不僅考慮收益率硫眯,還考慮了風(fēng)險(xiǎn),因此比較具有參考價(jià)值择同,可以理解為經(jīng)過風(fēng)險(xiǎn)調(diào)整后的收益率两入。
信息比率(Information Ratio):衡量單位超額風(fēng)險(xiǎn)帶來的超額收益。信息比率越大敲才,說明該策略單位跟蹤誤差所獲得的超額收益越高裹纳,因此,信息比率較大的策略的表現(xiàn)要優(yōu)于信息比率較低的紧武。
索提諾比率(Sortino ratio):應(yīng)該是每承擔(dān)一單位的下行波動(dòng)(相對于比較基準(zhǔn)或無風(fēng)險(xiǎn)收益率)所能獲得的單位收益剃氧,數(shù)值越大,說明承擔(dān)同樣下跌風(fēng)險(xiǎn)的情況下阻星,可以獲得更多的超額收益或者基準(zhǔn)上的回報(bào)朋鞍。
收益波動(dòng)率(Volatility):金融資產(chǎn)價(jià)格的波動(dòng)程度,是對資產(chǎn)收益率不確定性的衡量妥箕,用于反映金融資產(chǎn)的風(fēng)險(xiǎn)水平滥酥。波動(dòng)率越高,金融資產(chǎn)價(jià)格的波動(dòng)越劇烈畦幢,資產(chǎn)收益率的不確定性就越強(qiáng)坎吻;波動(dòng)率越低,金融資產(chǎn)價(jià)格的波動(dòng)越平緩宇葱,資產(chǎn)收益率的確定性就越強(qiáng)瘦真。