ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

用gs-quant算出因子IC半衰期,调仓频率不再拍脑袋

用gs-quant算出因子IC半衰期,调仓频率不再拍脑袋 用gs-quant算出因子IC半衰期调仓频率不再拍脑袋【免费下载链接】gs-quantPython toolkit for quantitative finance项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quant上个月我在调一个动量策略因子预测力突然掉了一半。该不该继续按月度调仓gs-quant 几行代码就能算出因子IC半衰期取因子数据用滚动相关拟合衰减。一句话看懂IC半衰期IC半衰期就像保温杯散热。 保温做得好温度就保持得久散热快就得频繁续水。 IC是因子的温度半衰期就是它凉到一半要几天。 半衰期长调仓可以慢半衰期短你就得勤换仓。先跑通再抠细节✅ 目标从风险模型里拿到一年的因子暴露数据。 人话按ID把模型调出来再按日期范围取因子数据。模型定义在gs_quant/models/risk_model.py。import datetime as dt from gs_quant.models.risk_model import FactorRiskModel # 按ID加载风险模型取一年因子数据 model FactorRiskModel.get(MODEL_ID) factor_data model.get_factor_data( start_datedt.date(2023, 1, 1), end_datedt.date(2023, 12, 31), )跑出来你会看到 factor_data 是个DataFrame每个日期一行。验证方法看index首尾日期是不是你要的起止日。⬜ 目标因子收益对下日收益算出滚动IC。 人话correlation的w参数就是窗口。函数默认吃价格序列你输入的是收益序列记得给type_指定RETURNS。from gs_quant.timeseries import correlation # 滚动相关因子收益对下日收益窗口60天 # 输入是收益序列指定 RETURNS ic_series correlation(factor_return, fwd_return, w60, type_SeriesType.RETURNS)跑出来你会看到 ic_series 前60天是NaN之后每天一个IC值。验证方法IC值应落在-1到1之间。目标拟合指数衰减曲线算出半衰期。 人话curve_fit做最小二乘拟合半衰期等于ln(2)除以衰减系数。import numpy as np from scipy.optimize import curve_fit # 指数衰减模型IC0乘e的负lambda t次方 def decay(t, ic0, lam): return ic0 * np.exp(-lam * t) clean ic_series.dropna() params, _ curve_fit(decay, np.arange(len(clean)), clean.values) half_life np.log(2) / params[1] print(f半衰期: {half_life:.1f} 天)跑出来你会看到一行半衰期: 23.4 天示例值。验证方法把拟合曲线和实际IC点画一起两条线明显劈叉说明拟合不成立。图表怎么读曲线平滑地指数下坠说明拟合出的半衰期可信。 看图顺序先看初始水平再看衰减速率最后看尾巴。 如果你看到前期快速下坠后走平说明因子信息已被市场消化。 如果曲线来回震荡、就是不衰减别信拟合出来的半衰期因子本身不稳定。参数怎么调才不翻车参数默认值调大后的后果调小后的后果w 滚动窗口全序列曲线更平滑对衰减反应变迟钝更敏感但噪音多、误判快r 爬坡同w见WindowIC逐段稳住再出值序列开头乱跳窗口下限20天看不出真实衰减噪音大半衰期失真窗口上限60天时效性差调仓信号滞后覆盖不了一个完整衰减周期说白了窗口就是看清衰减和跟上变化的跷跷板。20到60天之间挑一个拿历史数据回测半衰期最稳的那段再定。延伸下一步可以做什么把多个因子轮流做一遍按半衰期排序每个因子配一个调仓频率。 再把半衰期当约束塞进组合优化结合交易成本多久换一次仓就从拍脑袋变成算出来的数。【免费下载链接】gs-quantPython toolkit for quantitative finance项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quant创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表