ARTICLE DETAIL

资讯详情

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

【ptrade】行业轮动 · 回测实录

【ptrade】行业轮动 · 回测实录 12_行业轮动 · 回测实录10只行业ETF按5日涨幅排序取最强2只每周第一个交易日调仓。策略类型ETF轮动 / 周频回测批次2026-10-04本地 QuantStudio 回测引擎数据来源QuantStudio 本地行情库etf_daily/stock_daily一、策略思路相比01号策略这版做了两处调整一是把回看窗口从20日缩短到5日反应更快更贴近行业风口的短周期特征二是调仓频率从每5个交易日改成每周一次用固定的日历节奏换手而不是机械地数交易日。行业ETF之间相关性低、轮动特征明显是动量策略最经典的试验场。关键参数参数取值LOOKBACK5TOP_N2EXPOSURE0.98二、回测设置项目设置策略文件12_行业轮动.py回测区间2024-01-01 ~ 2026-09-02初始资金100000 元佣金费率0.00035最低 5.0 元印花税率0.001过户费率1e-05滑点0.0撮合价格close基准000300交易日数647三、回测结果本图有两条策略线灰色虚线是回测引擎的原始记录红色实线是剔除数据污染后的校正净值。请只看红线——灰线里那条垂直往上跳的台阶不是策略赚的是数据库里一只房地产ETF的价格断层凭空送的。⚠️重要本策略的原始回测净值受数据断层污染不可直接引用。数据库中 512200房地产ETF在2024-08-12存在唯一一处价格断层当日preClose与前一日收盘的比值约为2.79即该标的的价格在这一天整体跳到了约 2.79 倍。策略恰好在这一天卖出该标的成交价被相应抬高等于向账户凭空注入了一大笔现金。其结果是此后账户净值被整体放大约 1.86 倍。由于这笔注入是一次性的策略的日收益率序列不变因此正确的还原方式是把断层日之后的净值整体除以 1.86。下表中「记录值」为引擎原始输出「校正值」为剔除该污染后的结果。请以校正值为准。绩效指标指标记录值校正值累计收益113.44%14.95%年化收益34.04%5.53%最大回撤35.03%35.03%年化波动率62.17%31.98%夏普比率0.5190.328索提诺比率1.4380.493卡玛比率0.9720.158回合胜率49.30%—日胜率48.22%—盈亏比137.7%—盈利回合数106—亏损回合数109—平均持仓天数230.2—成交笔数704—「盈亏比」 平均盈利 ÷ 平均亏损 100%表示平均每笔赚的比亏的多。「回合」指一次完整的买入→卖出round_trips「成交笔数」是买卖双方分开计数的原始成交记录条数。⚠️本窗口基准数据不完整引擎的基准序列尾部为占位填充值据此算出的沪深300收益为 0.00%该数字不可信净值图中的基准曲线已截断至有效区间至 2026-07-31。因此本策略的α、β、超额收益、信息比率等相对指标一律不可引用只能用绝对收益与回撤来判断。分年度收益校正后年份区间收益交易日20242.70%24220255.60%24320266.63%162四、交易明细⚠️ 本节所有金额为引擎记录口径已被上述数据断层整体放大约 1.86 倍绝对金额不可直接引用尤其盈利榜首那几笔。盈亏的方向与回合之间的相对排序仍然有效。完整交易回合数215个盈利 106 / 亏损 109单笔平均盈亏544.84 元最大单笔盈利57605.44 元最大单笔亏损-23721.49 元持仓天数平均230.2 天最长657 天最短6 天盈利最多的 5 个回合买入日卖出日标的盈亏(元)持仓天数2024-05-062024-08-19512200.SH57605.441052024-05-062024-08-12512200.SH28684.89982025-02-242026-04-27515880.SH28161.044272024-07-082024-10-14512200.SH22913.07982025-02-102026-06-01512480.SH20449.75476亏损最多的 5 个回合买入日卖出日标的盈亏(元)持仓天数2025-02-242026-07-20512480.SH-23721.495112025-02-242026-08-03512480.SH-19930.865252024-06-032024-11-18512660.SH-13533.281682024-04-292024-10-14512690.SH-13109.931682025-07-282026-06-15515220.SH-10513.28322五、完整回测代码文件名12_行业轮动.py共 111 行引擎QuantStudio 本地回测全部为公开 API无平台专有调用。# -*- coding: utf-8 -*- 12_行业轮动策略 (QuantStudio 本地回测版) 核心逻辑10只行业ETF按5日涨幅排序取最强2只每周第一个交易日调仓。 周频行业轮动降低换手率捕捉行业中期趋势。 importnumpyasnp# 10只行业ETFSECTOR_ETF_POOL[512880.SS,# 证券512800.SS,# 银行512690.SS,# 酒消费512170.SS,# 医疗512480.SS,# 半导体515880.SS,# 通信512660.SS,# 军工516160.SS,# 新能源512200.SS,# 房地产515220.SS,# 煤炭]LOOKBACK5# 动量回看天数TOP_N2# 持仓数量EXPOSURE0.98definitialize(context):set_benchmark(000300.SS)g.last_rebalance_weekNonerun_daily(context,trade,time09:30)log.info(12_行业轮动初始化: 行业ETF%d只, 回看%d日, Top%d, 周频调仓,len(SECTOR_ETF_POOL),LOOKBACK,TOP_N)def_get_momentum(code):try:hget_history(LOOKBACK1,1d,field[close],security_listcode,fqpre,includeFalse,is_dictTrue)ifhisNoneorcodenotinh:returnNoneclosesnp.asarray(h[code][close],dtypefloat)closescloses[np.isfinite(closes)]iflen(closes)LOOKBACK1orcloses[0]0:returnNonereturnfloat(closes[-1]/closes[0]-1.0)exceptException:returnNonedef_is_first_trading_day_of_week(context):判断是否为本周第一个交易日用ISO周编号去重try:dtcontext.current_dt iso_caldt.isocalendar()current_week(iso_cal[0],iso_cal[1])ifg.last_rebalance_weekisNoneorcurrent_week!g.last_rebalance_week:g.last_rebalance_weekcurrent_weekreturnTruereturnFalseexceptException:# 兜底每5个交易日调仓ifnothasattr(g,day_counter):g.day_counter0g.day_counter1returng.day_counter%50deftrade(context):# 只在每周第一个交易日调仓ifnot_is_first_trading_day_of_week(context):return# 计算所有行业ETF的动量scores{}forcodeinSECTOR_ETF_POOL:mom_get_momentum(code)ifmomisnotNone:scores[code]momifnotscores:log.info(无有效动量数据跳过)return# 取TopNrankedsorted(scores.keys(),keylambdac:scores[c],reverseTrue)targetranked[:TOP_N]# 卖出不在目标中的heldlist(context.portfolio.positions.keys())forcodeinheld:ifcodenotintarget:order_target_value(code,0)log.info(行业轮动卖出 %s (动量%.2f%%),code,scores.get(code,0)*100)# 等权买入ifnottarget:returntotal_valuecontext.portfolio.total_value per_valuetotal_value*EXPOSURE/len(target)forcodeintarget:order_target_value(code,per_value)log.info(行业轮动买入 %s (动量%.2f%%, 目标市值%.0f),code,scores[code]*100,per_value)defhandle_data(context,data):pass六、风险提示5日动量非常短容易把一两天的消息面波动误判成趋势在行业快速切换的市场里会来回打脸。周频调仓意味着信号有一周的执行延迟。另外本策略标的池中的房地产ETF存在数据质量问题阅读收益数字时须以校正值为准。免责声明本文所有数字来自本地历史回测回测收益不代表未来表现也不构成任何投资建议或个股/基金推荐。策略代码仅供研究学习实盘执行还需额外考虑滑点、冲击成本、流动性、涨跌停与平台差异等因素。投资有风险决策需谨慎。
返回列表