分享

着手ETF的资产配置模型构建

 AI量化实验室 2023-10-12 发布于北京

原创文章第123篇,专注“个人成长与财富自由、世界运作的逻辑,AI量化投资”。

这一周以来的疫情政策着实“日新月异”,前面一篇文章还想着,怎么着等着我更新到1000篇时,总该回归正常生活了吧。所以,有些时候,不必着急。

但仍然做好我们自己的事情。

专注于ETF的AI量化投资/投资系统。确定下方向,一是基础数据,二是衍生指标。然后需要的回测平台我们基本搭建好了,我需要把它变成可以配置的方式。就是使用配置文件,这样传递策略就不必用notebook或者代码了。当然可以加密的方式。

从大类资产配置开始,战略资产配置到战术资产配置,然后加行业轮动,这样一个框架。

大类资产配置从宽基开始。

国债ETF(511010.SH),上证50ETF(510050.SH),纳指ETF(513100.SH),标普500(513500.SH),黄金ETF(518880.SH);沪深300ETF(510300.SH),中证500ETF(510500.SH),创业板50ETF(159949.SZ),创业板ETF(159915),中证1000(512100),科创50ETF(588000),恒生指数(159920),德国ETF(513030),日经ETF(513520),法国CAC40(513080)。

其实足够了。

对于这些宽基,我们要做相关性分析。相关性高的,取有代表性的即可。

选择期中几支,做等权组合,风险平价组合,作为benchmark。

而后引入动量,基本面,北上等等多因子模型进行加减权重的依据。

再次对A股权益类,引入行业轮动来增厚收益。

大类资产配置,每季度调仓,全选标的池里的标的,等权分配。

symbols = [
'510300.SH',# 沪深300ETF
'511260.SH', # 十年国债ETf
'518880.SH', # 黄金ETF
'511880.SH', #银华日利货币ETF
#'510500.SH', # 中证500
#'513520.SH', # 日经ETF
#'513030.SH', # 德国
#'513080.SH', # 法国CAC
]
names = [
'close']
fields = [
'$close']

from engine.bt_engine import BacktraderEngine
from datetime import datetime

e = BacktraderEngine(
init_cash=100000, start=datetime(2010, 1, 1))
e.add_features(symbols
, names, fields)

from engine.strategy.algos import RunQuarterly, SelectAll, WeightEqually

e.run_algo_strategy([RunQuarterly()
, SelectAll(), WeightEqually()])
e.analysis(
pyfolio=False)

风险平价策略:

symbols = [
'511260.SH', # 国债
'518880.SH', # 黄金
'510300.SH', # 沪深300
'511880.SH', # 货币
# '510500.SH', # 中证500
# '513520.SH', # 日经ETF
# '513030.SH', # 德国
# '513080.SH', # 法国CAC
]
names = ['close']
fields = ['$close']

from engine.bt_engine import BacktraderEngine
from datetime import datetime
from engine.datafeed.dataloader import Dataloader

loader = Dataloader(symbols,names=['return'], fields=['$close/Ref($close,1)-1'])
df = loader.load_one_df()
print(df)
df_returns = df.pivot_table(index='date', columns=['code'], values=['return'])
df_returns.dropna(inplace=True)
print(df_returns)

e = BacktraderEngine(init_cash=100000, start=datetime(2018, 1, 1))
e.add_features(symbols, names, fields)

from engine.strategy.algos import RunQuarterly, SelectAll, WeightRP


e.run_algo_strategy([RunQuarterly(), SelectAll(), WeightRP(returns_df=df_returns)])
e.analysis(pyfolio=False)

由于ETF成立的时间有长有短,指数的数据比较全,计算起来也比较简单。明天基于全球指数进行计算,包括动量之类的也没有问题。然后在A股的权益市场部分,可以考虑动量轮动来增厚收益。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章