原创文章第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股的权益市场部分,可以考虑动量轮动来增厚收益。
|