作者: 阿布 阿布量化版權所有 未經允許 禁止轉載 "abu量化系統github地址" (您的star是我的動力!) "本節ipython notebook" "本節界面操作教程視頻播放地址" 量化系統一般分為回測模塊、實盤模塊。 回測模塊:首先交易者編寫實現一個交易策略,它基於一段歷史的交易數據, ...
作者: 阿布
阿布量化版權所有 未經允許 禁止轉載
abu量化系統github地址 (您的star是我的動力!)
量化系統一般分為回測模塊、實盤模塊。
- 回測模塊:首先交易者編寫實現一個交易策略,它基於一段歷史的交易數據,根據交易策略進行模擬買入賣出,策略中可以涉及買入規則、賣出規則、選股規則、倉位控制及滑點策略等等,回測的目的是驗證交易策略是否可行。
- 實盤模塊:將回測通過的策略應用於每天的實時交易數據,根據策略發出買入信號、賣出信號,進行實際的買入、賣出操作。
回測模塊最重要的組成部份是擇時、選股:
- 擇時(什麼時候投資)
- 選股(投資什麼股票)
只有在對的時間買入對的股票才能獲利,就像下麵張小嫻的名言一樣,可以把‘股票’ 代替 ‘人’完全合乎邏輯。
在對的時間,遇見對的人(股票),是一種幸福
在對的時間,遇見錯的人(股票),是一種悲傷
在錯的時間,遇見對的人(股票),是一聲嘆息
在錯的時間,遇見錯的人(股票),是一種無奈
本節首先講解擇時(什麼時候投資), 後面的小節將講解選股
1. 買入擇時因數的編寫
海龜交易法則是量化經典書籍中的經典作品,它裡面介紹過一種趨勢跟蹤策略:N日趨勢突破策略
趨勢突破定義為當天收盤價格超過N天內的最高價或最低價,超過最高價格作為買入信號買入股票持有,超過最低價格作為賣出信號。
下麵將用abupy來實現海龜交易法則作為一個買入因數的實現代碼,向經典致敬:
class AbuFactorBuyBreak(AbuFactorBuyXD, BuyCallMixin):
"""示例繼承AbuFactorBuyXD完成正向突破買入擇時類, 混入BuyCallMixin,即向上突破觸發買入event"""
def fit_day(self, today):
"""
針對每一個交易日擬合買入交易策略,尋找向上突破買入機會
:param today: 當前驅動的交易日金融時間序列數據
:return:
"""
# 今天的收盤價格達到xd天內最高價格則符合買入條件
if today.close == self.xd_kl.close.max():
# 生成買入訂單, 由於使用了今天的收盤價格做為策略信號判斷,所以信號發出後,只能明天買
return self.buy_tomorrow()
return None
上AbuFactorBuyBreak即是完成了海龜突破策略的代碼實現:
- 買入因數需要繼承AbuFactorBuyXD或者更複雜的策略繼承AbuFactorBuyBase
- 買入因數混入BuyCallMixin,即做為正向策略,股票相關的策略全部是正向策略,即買漲,後續章節示例期貨,期權會使用BuyPutMixin
- 買入因數需要實現fit_day,即每一個交易日如何執行交易策略,當符合買入條件後,使用buy_tomorrow或者buy_today生成訂單
更多買入因數實現代碼請閱讀AbuFactorBuyBase
2. 分解模式一步一步對策略進行回測
本節首先通過分解流程方式一步一步實現使用AbuFactorBuyBreak進行回測,目的是為了更清晰的說明內部操作流程,
編碼過程會顯的有些複雜臃腫,但實際上在編寫完成一個策略後只需要使用一行代碼即可以完成回測,在後面的小節中會進行講解。
通過字典形式初始化買入buy_factors,首先實現針對一支股票的擇時操作:
- benchmark的意義為基準參考,基準預設使用回測股票對應市場的大盤指數
- 預設參數下回測過去兩年的交易數據,傳遞AbuBenchmark(n_folds=2)參數修改回測周期
- AbuCapital為資金主類,參數需要初始資金設定,這裡初始設定1000000(100萬),另一個參數為剛剛介紹過的benchmark(基準參考)對象
- buy_factors由兩個買入因數組成,進行擇時的時候兩個因數同時並行生效
# buy_factors 60日向上突破,42日向上突破兩個因數
buy_factors = [{'xd': 60, 'class': AbuFactorBuyBreak},
{'xd': 42, 'class': AbuFactorBuyBreak}]
benchmark = AbuBenchmark()
capital = AbuCapital(1000000, benchmark)
擇時ABuPickTimeExecute主要驅動方式為時間驅動,即通過時間序列一天一天遞進,通過買入因數賣出因數的fit來查詢是否有事件生成(買入賣出行為),另外也有框架使用事件驅動,它們分別有各自的優點,原始的abu框架就是時間驅動+事件驅動的,它最大的優點是執行效率比時間驅動高,但是靈活性及擴展性要比時間驅動差。
下麵使用ABuPickTimeExecute開始進行擇時交易回測,ABuPickTimeExecute實際上不是最簡潔的回測介面,更簡單的介面可以使用abu.run_loop_back()函數,在後面的章節將會示例使用,本節目的是為了更清晰的說明內部操作流程。
由回測結果圖可看出由於AbuPickTimeWorker沒有設置sell_factors,所以所有的交易單子都一直保留沒有賣出:
- orders_pd:所有交易的相關數據(之後會有內容展示)
- action_pd:所有交易的行為數據(之後會有內容展示)
orders_pd, action_pd, _ = ABuPickTimeExecute.do_symbols_with_same_factors(['usTSLA'],
benchmark,
buy_factors,
None,
capital, show=True)
3. 賣出擇時因數的實現
上面所有單子都沒有成交的原因是沒有賣出因數,下麵首先實現類似買入策略的N日趨勢突破策略AbuFactorSellBreak,當股價向下突破N日最低價格時賣出股票,即當天收盤價格低於N天內最低價格作為賣出信號,認為下跌趨勢成立賣出股票:
class AbuFactorSellBreak(AbuFactorSellXD):
"""示例繼承AbuFactorBuyXD, 向下突破賣出擇時因數"""
def support_direction(self):
"""支持的方向,只支持正向"""
return [ESupportDirection.DIRECTION_CAll.value]
def fit_day(self, today, orders):
"""
尋找向下突破作為策略賣出驅動event
:param today: 當前驅動的交易日金融時間序列數據
:param orders: 買入擇時策略中生成的訂單序列
"""
# 今天的收盤價格達到xd天內最低價格則符合條件
if today.close == self.xd_kl.close.min():
for order in orders:
self.sell_tomorrow(order)
上AbuFactorSellBreak即是完成了賣出突破策略的代碼實現:
- 賣出因數需要繼承AbuFactorSellXD或者更複雜的策略繼承AbuFactorSellBase
- 賣出因數需要實現support_direction方法,確定策略支持的買入策略方向,本例中[ESupportDirection.DIRECTION_CAll.value]即只支持正向買入策略,即買漲
- 賣出因數需要實現fit_day,看有沒有符合賣出條件的交易單子
更多具體賣出因數實現代碼請閱讀AbuFactorSellBase
備註:之後章節的期貨示例講講解如何使用ESupportDirection做反向交易,buy put
3.2 買入因數和賣出因數在回測中同時生效
同理使用字典組裝賣出因數:
# 使用120天向下突破為賣出信號
sell_factor1 = {'xd': 120, 'class': AbuFactorSellBreak}
# buy_factors 60日向上突破,42日向上突破兩個因數
buy_factors = [{'xd': 60, 'class': AbuFactorBuyBreak},
{'xd': 42, 'class': AbuFactorBuyBreak}]
# 只使用120天向下突破為賣出因數
sell_factors = [sell_factor1]
capital = AbuCapital(1000000, benchmark)
orders_pd, action_pd, _ = ABuPickTimeExecute.do_symbols_with_same_factors(['usTSLA'],
benchmark,
buy_factors,
sell_factors,
capital, show=True)
從上圖可以看到,大多數的交易賣出因數都生效了,但效果很不好, 下一節將繼續通過增加多個賣出因數同時作用於策略上來提高策略的效果。
abu量化文檔目錄章節
- 擇時策略的開發
- 擇時策略的優化
- 滑點策略與交易手續費
- 多支股票擇時回測與倉位管理
- 選股策略的開發
- 回測結果的度量
- 尋找策略最優參數和評分
- A股市場的回測
- 港股市場的回測
- 比特幣,萊特幣的回測
- 期貨市場的回測
- 機器學習與比特幣示例
- 量化技術分析應用
- 量化相關性分析應用
- 量化交易和搜索引擎
- UMP主裁交易決策
- UMP邊裁交易決策
- 自定義裁判決策交易
- 數據源
- A股全市場回測
- A股UMP決策
- 美股全市場回測
- 美股UMP決策
abu量化系統文檔教程持續更新中,請關註公眾號中的更新提醒。
更多關於量化交易相關請閱讀《量化交易之路》
更多關於abu量化系統請關註微信公眾號: abu_quant