全球指数等权与动量策略回测,年化14.8%【数据与代码下载】

继续基于指数的大类资产配置。

大类资产配置的比较基准通常是等权配置。

昨天我们把所有的指数数据都同步到本地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
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 29 日
下一篇 2024 年 7 月 29 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注