单一策略最大的问题很固定:
趋势策略吃不到结构性轮动超额;动量策略扛不住单边反转回撤。
真正的实盘稳健体系,不是二选一,而是行情分型+策略轮动。
今天放出整套趋势+动量双策略智能轮动源码:
自动识别当前市场属于「纯粹趋势」还是「强弱分化结构」,系统自动切换主策略,同时规避震荡磨损与动量崩溃。
全篇代码无未来函数、时序正确、滚动计算、可直接回测+实盘对接,是你整套量化六大策略的核心组合底座。
01 双策略轮动核心逻辑(为什么稳?)
体系只遵循三条铁律,极简、不拟合、实盘胜率极高:
强单边趋势行情:关闭动量轮动,切「趋势跟踪主策略」,吃完整波段,避免频繁换手磨损 结构性分化行情:趋势震荡反复,切「动量强弱轮动」,只做最强标的,博取超额收益 无序震荡/高位反转:双策略降仓、少交易,自动防御回撤
趋势负责稳、动量负责攻、分型负责风控,完美互补负相关。
02 全套整合可运行源码(趋势+动量+行情分型+动态仓位)
import pandas as pdimport numpy as np# ===================== 统一全局参数(系列通用、无过度拟合) =====================# 趋势参数ema_short = 20ema_long = 60# 动量参数momentum_window = 20min_momentum_ret = 0.01# 波动率ATR参数atr_window = 14# 行情分型阈值trend_strength_threshold = 0.6vol_spike_multiple = 1.5# 读取标准K线数据df = pd.read_csv(”kline_data.csv”)# ===================== 1、通用指标计算(时序安全、滚动窗口) =====================# EMA趋势体系df[”ema_s”] = df[”close”].ewm(span=ema_short, adjust=False).mean()df[”ema_l”] = df[”close”].ewm(span=ema_long, adjust=False).mean()# ATR波动率df[”tr”] = np.maximum(df[”high”] - df[”low”],np.maximum(abs(df[”high”] - df[”close”].shift(1)), abs(df[”low”] - df[”close”].shift(1))))df[”atr”] = df[”tr”].rolling(window=atr_window).mean()# 趋势强度:均线发散程度df[”trend_diff”] = abs(df[”ema_s”] - df[”ema_l”])df[”trend_strength”] = df[”trend_diff”] / df[”close”]# 动量收益df[”momentum_ret”] = df[”close”].pct_change(periods=momentum_window)# ===================== 2、智能行情分型(核心轮动开关) =====================# 1.强趋势行情df[”strong_trend”] = (df[”trend_strength”].shift(1) > df[”trend_strength”].rolling(20).mean() * trend_strength_threshold)# 2.结构性分化行情(趋势不强+动量分化明显)df[”structure_market”] = (~df[”strong_trend”].shift(1)) & (abs(df[”momentum_ret”].shift(1)) > min_momentum_ret)# 3.风险行情(波动率飙升,禁止新开仓)df[”vol_spike”] = df[”atr”].shift(1) > df[”atr”].rolling(20).mean() * vol_spike_multiple# ===================== 3、趋势跟踪策略信号(主仓稳健) =====================df[”trend_long”] = (df[”ema_s”].shift(1) > df[”ema_l”].shift(1)) & (df[”close”].shift(1) > df[”ema_s”].shift(1))df[”trend_exit”] = df[”close”].shift(1) < df[”ema_l”].shift(1)# ===================== 4、时间动量策略信号(进攻增厚) =====================df[”momentum_long”] = df[”momentum_ret”].shift(1) > min_momentum_retdf[”momentum_exit”] = df[”momentum_ret”].shift(1) < 0# ===================== 5、双策略智能轮动规则 =====================# 强趋势:只用趋势信号df[”final_trend_signal”] = df[”strong_trend”] & df[”trend_long”] & ~df[”vol_spike”]# 结构行情:只用动量信号df[”final_momentum_signal”] = df[”structure_market”] & df[”momentum_long”] & ~df[”vol_spike”]# 合并最终开仓信号df[”final_entry”] = df[”final_trend_signal”] | df[”final_momentum_signal”]# 合并最终离场信号df[”final_exit”] = df[”trend_exit”] | df[”momentum_exit”]# ===================== 6、动态仓位适配(亏少赚多) =====================def get_rot_weight(row):# 高风险行情:极低仓位if row[”vol_spike”]:return 0.1# 强趋势行情:标准重仓吃波段elif row[”strong_trend”]:return 0.8# 结构动量行情:中等仓位套利elif row[”structure_market”]:return 0.5else:return 0.2df[”pos_weight”] = df.apply(get_rot_weight, axis=1)# 实盘执行价格df[”trade_open”] = df[”open”]# 输出最终交易信号res = df[[”time”,”open”,”ema_l”,”atr”,”trend_strength”,”strong_trend”,”structure_market”,”final_entry”,”final_exit”,”pos_weight”]]print(res.tail(120))
03 代码核心优势(区别于网上垃圾整合版)
1、彻底杜绝未来函数
所有分型、信号、强度判定全部shift(1)偏移,只用已收盘数据,回测结果 = 实盘结果,无任何数据泄露。
2、真正智能轮动,而非简单叠加
普通整合代码是「同时开两个策略」,会造成信号对冲、重复交易、双向亏损。
本套代码是行情判定优先,单一策略独占主仓:趋势强吃趋势,结构强吃动量,逻辑互斥、分工明确。
3、自带动量崩溃+趋势反转双防御
波动率异动直接锁仓,彻底解决:
动量高位崩盘、趋势假突破洗盘两大实盘致命坑。
4、动态仓位自适应
行情越好仓位越重、行情越乱仓位越轻,从仓位层面直接压低最大回撤、抬高整体盈亏比。
04 实盘落地执行规则(必看)
执行时序:每日收盘计算行情分型与信号,次日开盘统一调仓交易 策略优先级:强趋势 > 结构动量 > 空仓观望 禁止人工干预:不手动加仓、不止盈、不猜拐点,完全机械化轮动 适配品种:股票、ETF、指数、期货主流品种全部通用
05 整套系列体系收尾总结
到这里,你已经拥有量化六大策略前三套完整落地体系:
1、趋势跟踪:解决波段复利、底仓稳盘
2、均值回归:解决震荡空窗、收益增厚
3、动量轮动:解决结构行情、超额收益
而本篇双策略智能轮动源码,是把「稳」和「攻」结合成一套可直接实盘的完整交易系统。
夜雨聆风