之前有部分想当然的结论,重新做下验证
结论:
01,4个参数优选方法中,
猜测的是in_test_best_index_basic最优,
实际是in_test_best_index_nb_coord稍稍胜出
02,自适应周期计算中,
猜测的是自适应周期最优(此处是通过傅里叶变换计算的),
实际是fixed60最优,本质是自适应周期只要不是最优,就基本说明这个思路是无效的了。
01,基础数据格式
csv中的数据格式
1 | Start,End,Period,Start Value,End Value,Total Return [%],Benchmark Return [%],Max Gross Exposure [%],Total Fees Paid,Max Drawdown [%],Max Drawdown Duration,Total Trades,Total Closed Trades,Total Open Trades,Open Trade PnL,Win Rate [%],Best Trade [%],Worst Trade [%],Avg Winning Trade [%],Avg Losing Trade [%],Avg Winning Trade Duration,Avg Losing Trade Duration,Profit Factor,Expectancy,Sharpe Ratio,Calmar Ratio,Omega Ratio,Sortino Ratio,choose_method,file_name,symbol |
02,4种参数优选方法的比较
交叉表统计,各优选方法的rank计数
主要用来验证常见的4种参数优选方法的优劣。
1 | import pandas as pd |
choose_method in_test_best_index_basic in_test_best_index_nb_coord in_test_best_index_nb_mean in_test_best_index_nb_median
rank
1.0 19 26 20 21
2.0 21 12 30 22
3.0 20 21 18 22
4.0 20 21 12 15
数据含义:列名表示优选方法,
第一列第一行表示in_test_best_index_basic优选方法,在同一个标的的4中优选方法,是最优的情况出现19次。
第一列第二行表示in_test_best_index_basic优选方法,在同一个标的的4中优选方法,是次优的情况出现21次。
注意下:由于采用的rank(“dense”)方式,所以可能存在并列第一(并列第二,第三都有可能)的情况。 所有理论上的每一行的sum应该相等,且等于总标的*4并不成立,而且部分标的部分择优方法可能存在缺失值,都会导致rank1的总数量大于rank4(的总数)
从结果上看,in_test_best_index_nb_coord均值方法最佳,但也说不上显著。
03,自适应周期和固定周期的比较
在做滚动性的周期回测时,需要设定训练-预测周期,比例和基础周期,
比如 80天,2:1
就是训练集80*2=160天,
预测集80*1=80天.(可以认为多久重置一次参数的周期)。
太长了,可能学习到真实的参数,但是对市场反应过于迟钝了,学习到的正确参数可能已经不再适用当下,
太短了,可能并未学习到真实参数,只是过拟合出一个不错的结果,而且切分出的验证集次数过多,累乘时,容易偏向于过拟合。
认为自适应计算出的标的的 训练-预测 周期,优于固定的周期。所以,理想的自适应周期的回测结果应该优于任何一组固定周期。
1 | import pandas as pd |
source adaptive fixed_40 fixed_60 fixed_80
rank
1.0 21 23 28 21
2.0 25 23 22 21
3.0 21 28 22 17
4.0 13 6 9 20
本以为自适应周期的应该是最优的,实际好像也未必
上面看fixed_60的表现是最佳的,并不符合最初猜测。
当然此时,并不能说明猜测一定是错误的。
原因如下:
01,自己的最佳周期计算函数有问题(傅里叶变换),计算出的最佳周期未必真正的最佳周期。
02,最佳周期计算采用202001-202301数据得来的,实际测试周期2020-202408,所以并非完全卡着周期的,这也会引入偏差。只是这部分误差可能难以消除,毕竟,不可能提前预知未来一段时间的最佳周期参数。