继续基于指数的大类资产配置。
大类资产配置的比较基准通常是等权配置。
昨天我们把所有的指数数据都同步到本地all.h5里,这就是一个全量基础数据库。all.h5包括价量数据,若是可转债,还会包含正股价量及其基本面数据。——就是基础因子相关。
衍伸因子计算,会在回测阶段计算一次,生成一个新的h5文件。然后生成features.h5的因子集用于回测。
先来一个benchmark,所有指数等权:
from engine.algo.algos import *
e = Engine()
print('初始总市值', e.acc.get_total_mv())
e.run(algo_list=[
RunMonthly(), #改这行代码即可
SelectAll(),
WeightEqually()
],name='等权-月度再平衡'
)
print('最终总市值', e.acc.get_total_mv())
e.show_results(benckmarks=['000300.SH'])
年化7.1%,回撤31%。
20日动量的回测结果:年化7.8%,最大回撤52%。
代码如下:
from quant_project.engine.algo.algos import * from quant_project.dataloader.dataloader import Dataloader names = [] fields = [] fields += ['$close/Ref($close,1) -1'] names += ['rate'] fields += ['$close/Ref($close,20) -1'] names += ['mom'] fields += ['$mom>0.08'] names += ['buy'] fields += ['$mom<0'] names += ['sell'] fields += ['$mom'] names += ['order_by'] symbols = ['000300.SH', '000905.SH', '399006.SZ', 'HSI', 'SPX', 'IXIC', 'GDAXI', 'N225'] df = Dataloader().load_datas(symbols, names, fields) print(df) e = Engine(df) print('初始总市值', e.acc.get_total_mv()) e.run(name='动量-roc(20)-信号-月频-top1', algo_list=[ RunMonthly(), # 改这行代码即可 SelectBySignal(), SelectTopK(K=1), WeightEqually() ]) print('最终总市值', e.acc.get_total_mv()) e.show_results(benckmarks=['000300.SH'])
若是周频度调参,收益率会明显改善:年化14.8%,回撤仍然比较大:54.3%。
20日动量这个因子是有alpha的,一定意义上“追涨杀跌”的趋势交易是有道理的。取动量最大的持有,可以获得超额收益,当然回撤比较大。
如果反过来,从大类资产配置的角度,把不合适的标的排除在外,然后使用风险平价来配置仓位,会是什么样的效果,可以试一试。
若只考虑roc(20)这样一个因子,且没有引入债券指数的话,效果估计与等权差不太多,而且效果并不好。
今天的代码是重构后的工程,主要是因子的数据准备部分有变化——主要是为了后续引入机器学习,深度学习,强化学习做准备,大家可前往星球下载。
最近读了化学元素相关的一系列书,感慨科学与文明的进步,人类一步步走到今天,正好当下《三体》正在热播,看下科学史很应景。科技史比王侯将相史好多得多,纯粹得多。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/104159
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!