大类资产智能投顾模型:从风险平价开始,夏普比1.9

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

此前,我们确定了专注未来专注于两个方向:

一是智能投顾方向,用于资产管理,基础是现代投资组合理论,配置战术资产优化,再平衡等。可以使用部分技术分析,参数优化,甚至AI调参等技术做战术优化,部分择时。

另一个方向是AI投机,偏短线甚至高频交易,配合止盈止损。

回应之前有一个朋友问我的一个问题,若有AI量化有最优解,比如上帝视角,那就一个ai模型就够了。结果会导致就是大家都这样交易,然后市场就有效了,大家都有alpha,那证明没有有效的模型。

其实一定程度上,美股就是这样的,都是专业基金管理团队,估值模型都差不多,美股想获得超额收益很难,所以才有买指数基金是最优方案,赚的是市场BETA,或者说smart beta。

进一步说,即便有上帝视角,投资方案排列组合出来的方案也是无穷多。投资周期有长有短,风险收益偏好的不一样,大家的预期就不一样,需要也不一样。所以,不用担心只有一个模型的问题。

两周优先智能投顾,投顾是更确定的问题,相对更加容易可以做出可用的模型。

01 中国版全天候:固定权重的大类资产配置

codes = ['159928.SZ', '510050.SH', '512010.SH', '513100.SH', '518880.SH', '511220.SH', '511010.SH',
         '161716.SZ']
weights = [0.03, 0.06, 0.08, 0.05, 0.1, 0.32, 0.26, 0.09]

配置的是固定的权重,三个月再平衡一次。

年化是7.69%,最大回撤4.49%,非常好,夏普达到1.84。

这个权重是参考了桥水全天候的简化版。

为了更具参考性,我们再做一个等权重的模型,作为比较基准。

02 等权模型

买入即持有,等权配置:

algos = [
    RunOnce(),
    #RunQuarterly(),
    SelectAll(),
    #WeightFix(weights)
    WeightEqually()
]

不得不说,我们的“积木式”框架非常优雅,基本不用写代码。

年化14.8%,回撤11.75%,夏普1.43。

换成三个月再平衡:

年化13.68%,最大回撤9.49%,夏普1.58

三个月的等权再平衡作为我们风险平价的一个参考基准。

03 风险平价

风险平价,需要额外的参数,就是所有交易标的的收益率。

新增一个标准风险平价的算子:

class WeightRP:
    def __init__(self, returns_df):
        self.returns_df = returns_df

    def __call__(self, context):
        N = 240

        def get_train_set(change_time, df):
            """返回训练样本数据"""
            # change_time: 调仓时间
            change_time = pd.to_datetime(change_time)
            df = df.loc[df.index < change_time]
            df = df.iloc[-N:]  # 每个调仓前240个交易日
            return df

        selected = context["selected"]  # select算子返回的需要分配仓位的 data集合
        stra = context['strategy']

        dt = stra.get_current_dt()
        print(dt)
        sub_df = get_train_set(dt, self.returns_df)
        one_cov_matrix = np.matrix(sub_df.cov() * N)

        # 1.计算协方差:取调仓日 前N=240个交易日数据, one_cov_matrix = returns_df.cov()*240,return np.matrix(one_cov_matrix)

        # 2.计算RP权重
        weights = calculate_portfolio_weight(one_cov_matrix, risk_budget_objective=naive_risk_parity)
        print(weights)
        for data, w in zip(selected, weights):
            stra.order_target_percent(data, w*0.95)

调用也特别简单:

algos = [
    #RunOnce(),
    RunQuarterly(),
    SelectAll(),
    #WeightFix(weights)
    WeightRP(returns_df=returns_df)
]

把夏普比做到了1.9。

风险平价还不是不错的,明天在这个基础上,对模型进行PCA升级。

小结:我们专注于智能投顾(基于风险平价等现代投资组合管理),和AI量化投资(机)做短线。

猜你喜欢

转载自blog.csdn.net/weixin_38175458/article/details/127553365
今日推荐