2023年 3月 19日

python回测a股_第20节 A股全市场回测

第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’])

7aa0534f3c78715c68aa43344070a7c2.pngAbuMetricsBase.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个交易日

8fd4b3b7fd044100552e901e16293da2.png

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’])

7aa0534f3c78715c68aa43344070a7c2.pngAbuMetricsBase.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个交易日

f1015305d49926d8ec84f0111244e3a2.png

小结:本节所有操作都非常耗时,特别是在cpu不够快的电脑上,建议睡觉的时候运行哈,下一节将使用本节回测好的数据进行ump训练优化示例。

abu量化文档目录章节

abu量化系统文档教程持续更新中,请关注公众号中的更新提醒。

更多关于量化交易相关请阅读《量化交易之路》

更多关于量化交易与机器学习相关请阅读《机器学习之路》

更多关于abu量化系统请关注微信公众号: abu_quant

b8862a58da95590053f756f1c3476147.png