Warning: file_exists(): open_basedir restriction in effect. File(/www/wwwroot/com.xiximiao.oa/com.cmstop/public/www/wp-content/db.php) is not within the allowed path(s): (/www/wwwroot/com.xiximiao.oa/com.cmstop/public/www/:/tmp/:/proc/:/var/log/nginx/:/www/wwwroot/com.xiximiao.oa/com.cmstop/public/:/www/wwwroot/com.xiximiao.oa/com.cmstop/vendor/:/www/wwwroot/com.xiximiao.oa/com.cmstop/ppk/) in /www/wwwroot/com.xiximiao.oa/com.cmstop/public/www/wp-includes/load.php on line 707
2352.增强型投资组合优化(EPO)方法试用 43949 » 轻知量化 QMT、PTrade、聚宽策略分享交流平台

2352.增强型投资组合优化(EPO)方法试用 43949

EPO多资产动态配置策略


策略说明:

本策略基于**EPO(Enhanced Portfolio Optimization)**方法,通过动态优化多资产组合的权重,捕捉不同资产类别的风险收益特征。策略的核心思想是利用协方差矩阵的收缩估计和投资者信号(如预期收益率),构建风险调整后的最优组合。


策略核心逻辑

  1. 资产池选择

    • 黄金ETF(518880.XSHG):大宗商品,用于对冲通胀和市场波动。

    • 纳指100ETF(513100.XSHG):海外资产,代表科技成长股。

    • 创业板100ETF(159915.XSHE):国内成长股,聚焦科技和中小盘。

    • 红利ETF(510880.XSHG):国内价值股,防御性强,适合稳健配置。

  2. EPO优化模型

    • 协方差矩阵收缩:通过加权单位矩阵和历史协方差矩阵,降低估计误差。

    • 投资者信号:使用资产的历史收益率均值作为预期收益率信号。

    • 锚定基准:以风险平价权重(1/波动率)作为基准,避免过度偏离。

    • 风险厌恶系数:设定为10,反映中等风险偏好。

  3. 动态调仓

    • 每月第一个交易日10:00,根据最新数据重新计算资产权重。

    • 按优化结果调整持仓,确保组合始终处于最优状态。

  4. 风险控制

    • 权重归一化:确保组合权重总和为1,满足全投资约束。

    • 非负权重:剔除负权重,避免做空操作。


策略特点

  • 多资产配置:涵盖大宗商品、海外资产、国内成长股和价值股,分散风险。

  • 动态优化:每月调仓,及时捕捉市场变化。

  • 风险调整:通过协方差矩阵收缩和锚定基准,降低估计误差和组合波动。

  • 简单易用:仅需4只ETF,适合中小资金和普通投资者。


适用场景

  • 市场环境:适用于震荡市或结构性行情,分散配置可降低单一资产风险。

  • 资金规模:适合中小资金(1亿以内),ETF流动性充足。

  • 投资者类型:适合追求稳健收益、能承受中低波动的量化投资者。


风险提示

  1. 模型风险:EPO方法依赖历史数据,若市场结构突变可能导致模型失效。

  2. 流动性风险:ETF流动性虽高,但极端行情下仍可能出现滑点。

  3. 汇率风险:纳指100ETF受美元汇率影响,需关注汇率波动。

  4. 政策风险:国内政策变化可能影响创业板和红利ETF的表现。


代码结构

模块 函数 功能说明
初始化 initialize 设定基准、交易参数,定义资产池,绑定定时任务
优化模型 epo 实现EPO优化算法,计算最优权重
数据准备 run_optimization 获取历史收益率数据,调用EPO函数计算权重
交易执行 trade 根据优化结果调整持仓,确保组合权重匹配目标

优化建议

  1. 因子扩展

    • 引入宏观经济因子(如CPI、PMI)或市场情绪因子(如VIX),增强信号质量。

    • 测试动量、波动率等技术指标,优化预期收益率估计。

  2. 模型改进

    • 尝试其他协方差估计方法(如Ledoit-Wolf收缩)。

    • 引入Black-Litterman模型,结合主观观点调整预期收益率。

  3. 风险控制

    • 设置最大回撤阈值,触发后自动降仓。

    • 加入止损机制,防止单一资产大幅下跌拖累组合。

  4. 交易优化

    • 使用VWAP/TWAP算法拆单,降低冲击成本。

    • 结合Level2盘口数据,优化ETF买卖时机。


总结

本策略通过EPO方法动态优化多资产组合,兼顾风险与收益,适合追求稳健收益的投资者。策略逻辑清晰,模块化设计便于迭代,实盘前需重点测试模型稳定性和风险控制机制。

策略代码

import numpy as np
import pandas as pd
from scipy.linalg import solve
#初始化函数 
def initialize(context):
    set_benchmark('000300.XSHG')
    set_option('use_real_price', True)
    set_option("avoid_future_data", True)
    set_slippage(FixedSlippage(0.002))
    set_order_cost(OrderCost(open_tax=0, close_tax=0, open_commission=0.0002, close_commission=0.0002, close_today_commission=0, min_commission=5), type='fund')
    log.set_level('system', 'error')
    # 参数
    g.etf_pool = [
        '518880.XSHG', #黄金ETF(大宗商品)
        '513100.XSHG', #纳指100(海外资产)
        '159915.XSHE', #创业板100(成长股,科技股,题材性,中小盘)
        '510880.XSHG', #红利ETF(价值股,蓝筹股,防御性,中大盘)
    ]
    run_monthly(trade, 1, '10:00') #每天运行确保即时捕捉动量变化

关键函数解锁后查看:


# 定义获取数据并调用优化函数的函数
def run_optimization(stocks, end_date):
    prices = get_price(stocks, count=1200, end_date=end_date, frequency='daily', fields=['close'])['close']
    returns = prices.pct_change().dropna() # 计算收益率
    d = np.diag(returns.cov())
    a = (1/d) / (1/d).sum()
    # a= np.array([0.25,0.25,0.25,0.25])
    weights = epo(x = returns, signal = returns.mean(), lambda_ = 10, method = "anchored", w = 1, anchor=a)
    return weights
    
# 交易
def trade(context):
    end_date = context.previous_date            
    weights = run_optimization(g.etf_pool, end_date)
    print("weights",weights)
    if weights is None:
        return
    total_value = context.portfolio.total_value # 获取总资产
    index = 0
    for w in weights:
        value = total_value * w # 确定每个标的的权重
        order_target_value(g.etf_pool[index], value) # 调整标的至目标权重
        index+=1

2025-02-23
⚠️
本站资源大多来自网络,仅供网友学习交流,未经作者或上传书面授权,请勿作他用。
站长 vx: xiangyin615 或者 留言反馈 ,我们将尽快处理。
Notice: When you of the legal rights be violate, please stir to vx: xiangyin615
个人中心
购物车
优惠劵
搜索