• 大类资产智能投顾模型:从风险平价开始,夏普比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量化投资(机)做短线。

  • 相关阅读:
    [足式机器人]Part3 变分法Ch01-2 数学预备知识——【读书笔记】
    [ue5]建模场景学习笔记(6)——必修内容可交互的地形,交互沙(4)
    java计算机毕业设计海东市乐都区沙果线上线下销售管理平台源码+mysql数据库+系统+lw文档+部署
    什么叫400电话号码-如何申请办理400电话-佳音通讯400电话
    v-model表单数据双向绑定-表单提交示例
    智能驾驶开启产业新赛道:资本扎堆布局车规级高精定位
    Linux进程间通讯技术
    CDH大数据平台 ModuleNotFoundError: No module named ‘_sqlite3‘
    【干货】微信私域运营打法和案例拆解(附78页pdf下载链接)
    LeetCode 206. 反转链表(迭代+递归)
  • 原文地址:https://blog.csdn.net/weixin_38175458/article/details/127553365