第20节 A股全市场回测
作者: 阿布
阿布量化版权所有 未经允许 禁止转载
在第19节‘数据源’中分别获取了各个市场的6年交易数据,本节将做A股市场全市场回测。
买入因子,卖出因子等依然使用相同的设置,如下所示:# 初始化资金500万
read_cash = 5000000
# 买入因子依然延用向上突破因子
buy_factors = [{‘xd’: 60, ‘class’: AbuFactorBuyBreak},
{‘xd’: 42, ‘class’: AbuFactorBuyBreak}]
# 卖出因子继续使用上一节使用的因子
sell_factors = [
{‘stop_loss_n’: 1.0, ‘stop_win_n’: 3.0,
‘class’: AbuFactorAtrNStop},
{‘class’: AbuFactorPreAtrNStop, ‘pre_atr_n’: 1.5},
{‘class’: AbuFactorCloseAtrNStop, ‘close_atr_n’: 1.5}
]
abupy.env.g_market_target = EMarketTargetType.E_MARKET_TARGET_CN
abupy.env.g_data_fetch_mode = EMarketDataFetchMode.E_DATA_FETCH_FORCE_LOCAL
1. A股交易训练集回测
下面将回测市场设置为A股市场:abupy.env.g_market_target = EMarketTargetType.E_MARKET_TARGET_CN
将数据读取模式设置为本地数据模式,即进行全市场回测时最合适的模式,运行效率高,且分类数据更新和交易回测。abupy.env.g_data_fetch_mode = EMarketDataFetchMode.E_DATA_FETCH_FORCE_LOCAL
下面通过env中的设置将回测中的symbols切分为回测训练集与回测测试集,且打开回测生成买入时刻特征开关:
详情请查询ABuMarket模块# 回测生成买入时刻特征
abupy.env.g_enable_ml_feature = True
# 回测开始时将symbols切割分为训练集数据和测试集两份,使用训练集进行回测
abupy.env.g_enable_train_test_split = True
上面切割训练集,测试集使用的切割比例参数默认为10,即切割为10份,9份做为训练,1份做为测试,也可自定义切割比例,在之后的章节示例
下面添加‘第18节 自定义裁判决策交易‘中示例编写的10,30,50,90,120日走势拟合角度特征AbuFeatureDegExtend,做为回测时的新的视角来录制比赛(记录回测特征)feature.clear_user_feature()
feature.append_user_feature(AbuFeatureDegExtend)
在上面run_kl_update中更新了从2011-08-08至2017-08-08,由于在买入时刻生成特征,所以要保留一年的数据做为特征数据回测时段,所以下面的回测start使用2012-08-08至2017-08-08,即向后推了一年做回测:
下面开始回测,第一次运行select:run loop back,然后点击run select,如果已经回测过可select:load train data直接从缓存数据读取:abu_result_tuple = None
def run_loop_back():
global abu_result_tuple
abu_result_tuple, _ = abu.run_loop_back(read_cash,
buy_factors,
sell_factors,
choice_symbols=None,
start=’2012-08-08′, end=’2017-08-08′)
# 把运行的结果保存在本地,以便之后分析回测使用,保存回测结果数据代码如下所示
abu.store_abu_result_tuple(abu_result_tuple, n_folds=5, store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
custom_name=’train_cn’)
ABuProgress.clear_output()
def run_load_train():
global abu_result_tuple
abu_result_tuple = abu.load_abu_result_tuple(n_folds=5, store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
custom_name=’train_cn’)
def select(select):
if select == ‘run loop back’:
run_loop_back()
else:
run_load_train()
_ = ipywidgets.interact_manual(select, select=[‘run loop back’, ‘load train data’])
AbuMetricsBase.show_general(*abu_result_tuple, only_show_returns=True)买入后卖出的交易数量:55224
买入后尚未卖出的交易数量:951
胜率:47.1353%
平均获利期望:16.5030%
平均亏损期望:-7.7784%
盈亏比:1.9844
策略收益: 111.4373%
基准收益: 52.5454%
策略年化收益: 23.1320%
基准年化收益: 10.9073%
策略买入成交比例:31.0939%
策略资金利用率比例:75.5849%
策略共执行1214个交易日
2. A股交易测试集回测
下面通过env中设置使用刚才切分的测试集美股symbol,它使用pickle读取之前已经切割好的本地化测试集股票代码序列:# 测试集回测时依然生成买入时刻特征
abupy.env.g_enable_ml_feature = True
# 回测时不重新切割训练集数据和测试集
abupy.env.g_enable_train_test_split = False
# 回测时使用切割好的测试数据
abupy.env.g_enable_last_split_test = True
# 测试集依然使用10,30,50,90,120日走势拟合角度特征AbuFeatureDegExtend,做为回测时的新的视角来录制比赛(记录回测特征)
feature.clear_user_feature()
feature.append_user_feature(AbuFeatureDegExtend)
下面开始测试集回测,同训练集第一次运行select:run loop back,然后点击run select,如果已经回测过可select:load train data直接从缓存数据读取:abu_result_tuple_test = None
def run_loop_back_test():
global abu_result_tuple_test
abu_result_tuple_test, _ = abu.run_loop_back(read_cash,
buy_factors,
sell_factors,
choice_symbols=None,
start=’2012-08-08′, end=’2017-08-08′)
# 把运行的结果保存在本地,以便之后分析回测使用,保存回测结果数据代码如下所示
abu.store_abu_result_tuple(abu_result_tuple_test, n_folds=5, store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
custom_name=’test_cn’)
ABuProgress.clear_output()
def run_load_test():
global abu_result_tuple_test
abu_result_tuple_test = abu.load_abu_result_tuple(n_folds=5, store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
custom_name=’test_cn’)
def select_test(select):
if select == ‘run loop back’:
run_loop_back_test()
else:
run_load_test()
_ = ipywidgets.interact_manual(select_test, select=[‘run loop back’, ‘load test data’])
AbuMetricsBase.show_general(*abu_result_tuple_test, only_show_returns=True)买入后卖出的交易数量:6321
买入后尚未卖出的交易数量:124
胜率:47.6507%
平均获利期望:15.7211%
平均亏损期望:-7.6456%
盈亏比:2.0477
策略收益: 102.4382%
基准收益: 52.5454%
策略年化收益: 21.2639%
基准年化收益: 10.9073%
策略买入成交比例:26.2064%
策略资金利用率比例:73.9138%
策略共执行1214个交易日
小结:本节所有操作都非常耗时,特别是在cpu不够快的电脑上,建议睡觉的时候运行哈,下一节将使用本节回测好的数据进行ump训练优化示例。
abu量化文档目录章节
abu量化系统文档教程持续更新中,请关注公众号中的更新提醒。
更多关于量化交易相关请阅读《量化交易之路》
更多关于量化交易与机器学习相关请阅读《机器学习之路》
更多关于abu量化系统请关注微信公众号: abu_quant