技术 / 系统化
难度:新手
#趋势#技术#系统化#均线
趋势跟踪(双均线 / 海龟)
通俗理解
不预测顶底,只跟随已经形成的趋势:价格上穿长期均线视为转强买入,下穿则转弱卖出。就像顺着水流走,不逆水行舟。
✅ 优点
- 能捕捉大级别趋势行情
- 规则明确、纪律性强
- 与主观情绪隔离
- 可程序化、易回测
⚠️ 缺点 / 风险
- 震荡市频繁假突破
- 信号滞后、回撤较大
- 必须配合严格止损
- 参数(周期)敏感
📐 标的选取方法
如何从全部可交易品种中筛出适合本策略的标的:资产范围、流动性门槛、过滤规则与容量约束。
- 可选范围:流动性最好的期货主力合约(螺纹、豆粕、原油、沪金、IF/IC 股指等)与宽基/商品 ETF(沪深300、中证500、纳指、黄金、原油),跨度 3–5 个板块、合计 20–60 个标的,避免单一板块过度集中。
- 流动性门槛:20 日平均成交额 ≥ 1 亿元(股票/ETF);期货要求日均成交额居全市场前 80% 且持仓量 ≥ 5 万手。
- 价差要求:买卖价差 ≤ 2 个最小变动价位(tick),否则趋势利润会被滑点吃掉。
- 连续性要求:剔除上市不足 250 个交易日的新品种;期货使用后复权连续合约并规范换月规则,股票使用后复权价格。
- 波动过滤:ATR/价格 ≥ 0.5% 才具备交易价值,波动过低无法覆盖手续费与滑点。
- 剔除规则:剔除长期停牌、ST/*ST、临近退市整理、以及长期横盘(ADX < 20)的标的。
- 容量约束:单一品种持仓不超过其日均成交额的 1%;换手频繁的品种需按滑点模型下调仓位。
- 常见坑:只用「当前仍存续」的品种回测会产生幸存者偏差,必须把已退市、已摘牌、已停止交易的标的纳入历史股票池。
参考代码 python
import pandas as pd def dual_ma_signal(close: pd.Series, fast=5, slow=20): ma_f = close.rolling(fast).mean() ma_s = close.rolling(slow).mean() # 金叉=1 死叉=-1 否则 0 signal = (ma_f > ma_s).astype(int) - (ma_f < ma_s).astype(int) signal = signal.diff().clip(-1, 1).fillna(0) return signal # 使用示例 # sig = dual_ma_signal(df['close']) # position = sig.cumsum().clip(-1, 1) # 多空仓位
示例为最小可运行片段,用于理解思路;实盘需补充数据、手续费、风控与回测框架。
参考文献 / 延伸
- Wilder, J. (1978). New Concepts in Technical Trading Systems.
- Turtle Trading Rules, Richard Dennis & William Eckhardt.
🌦️ 适用市场环境
单边趋势明确、波动率持续放大、鲜有频繁反转的市场(强牛/强熊、商品周期、宏观驱动行情)。
⚔️ 策略博弈关系
克制的策略
被克制的可能性
在横盘震荡、假突破频繁的市场中被均值回归与做市策略克制;参数或止损不当易被来回洗损。
🌍 全球宏观与政治扰动影响分析
趋势跟踪是典型的右侧跟随者:宏观越是形成持续、单向的定价力量,它越舒服;而政策急转与事件跳空会制造大量假突破,是其最大的成本来源。
📈 全球宏观因子扰动
-
受益
全球加息 / 利差扩大
利差驱动汇率与商品形成长周期单边行情,趋势信号清晰、持仓周期长。
-
受益
通胀上行 / 商品超级周期
能源、金属、农产品走出持续单边趋势,是 CTA 最经典的盈利窗口。
-
受益
全球衰退 / 需求塌陷
衰退期风险资产单边下跌,做空腿可提供显著收益(股债商品同步下行)。
-
受损
央行干预 / 政策急转(QE、YCC、口头干预)
趋势被人为打断,反复假突破造成连续洗损(whipsaw),是趋势系统最大回撤来源。
-
双向
波动率骤升 / 流动性收缩
波动放大既放大利润也放大回撤,取决于止损纪律与仓位管理是否稳健。
🏛️ 政治与地缘事件扰动
-
受益
地缘冲突 / 战争
能源、粮食、黄金、美元等形成强单边趋势,趋势系统顺势获利。
-
受益
贸易战 / 关税升级
汇率与商品价格趋势化,关税链重塑带来方向性行情。
-
双向
大选 / 政党轮替
政策预期切换带来短期跳空与反转,方向不明、假突破增多。
-
受损
市场干预(熔断、涨跌停、禁止卖空)
趋势中断且无法执行,持仓被动暴露于隔夜跳空风险。
-
受损
多国央行联合干预汇率
人为逆转趋势方向,趋势系统连续止损出局。
适应 / 崩坏边界:适应:宏观驱动、方向明确且持续时间长的行情(商品超级周期、加息周期、衰退单边下跌)。崩坏:央行频繁干预、政策急转、横盘震荡导致的反复假突破。
💡 讨论引导(点击可一键提问)
不知从何说起?挑一个问题直接发问,帮助社区冷启动。
🧩 策略实现代码区 1 个实现
同一策略派系下,社区成员各自分享自己的代码实现;社区投票 + 官方评选,最优秀的实现会被选为「代表实现」置顶展示。
登录后提交实现【这是什么】
双均线趋势跟踪的**生产级参考实现**(完整项目含数据层、回测引擎、绩效指标、报告、CLI 与 24 个单元测试)。
本页展示核心可读节选:配置校验 → 指标 → 无前视信号 → 事件驱动引擎(含成本/风控)。
【工程上做对的关键点】
1. 严格无前视:t 日收盘产生信号,t+1 日**开盘**成交;并有专门的回归测试守住这条契约。
2. 真实成本:佣金(含最低 5 元)+ 卖出印花税 + 滑点,逐笔计提。
3. 真实成交假设:整手 100 股、现金约束(永不透支)、跳空低开按开盘价止损。
4. 风控:ATR 移动止损 + 止损后等信号归零再入场 + 波动率目标仓位。
5. 换手控制:再平衡阈值(rebalance band)——加入后交易从 133 笔降到 31 笔,手续费降 17%,收益不变。
【真实数据实测(沪深300ETF sh510300,2016-06-29 ~ 2026-10-16,2500 根)】
累计 +8.18% | 年化 +0.80% | 年化波动 6.48% | 最大回撤 -20.65%
夏普 0.15 | 卡玛 0.04 | 31 笔交易 | 胜率 48.4% | 盈亏比 1.21 | 平均仓位 17.7%
诚实结论:**扣费后基本不赚钱**。但用仅 17.7% 的平均仓位换来正收益,风险调整后并不差。
参数扫描显示夏普在 -0.33 ~ 0.50 之间跳——提醒:能挑出好参数不等于策略有效。
【参考项目与出处(仅借鉴设计思路,本实现为独立编写,未复制任何源码)】
- backtrader https://github.com/mementum/backtrader (事件驱动分层/撮合与成本建模)
- zipline-reloaded https://github.com/stefan-jansen/zipline-reloaded (next-bar 执行、禁用未来函数)
- vectorbt https://github.com/polakowo/vectorbt (向量化信号 + 事件撮合的取舍)
- bt https://github.com/pmorissette/bt (回测编排抽象)
- pyalgotrade https://github.com/gbeced/pyalgotrade (海龟/ATR 头寸与止损)
- ta-lib-python https://github.com/TA-Lib/ta-lib-python (ATR / Wilder 平滑口径)
- empyrical https://github.com/quantopian/empyrical (夏普/索提诺/回撤口径)
- ffn https://github.com/pmorissette/ffn (绩效汇总口径)
- pyfolio https://github.com/quantopian/pyfolio (报告产物组织)
- vn.py https://github.com/vnpy/vnpy (国内实盘框架的工程组织)
- qlib https://github.com/microsoft/qlib (研究工作流化)
理论:海龟交易法则(ATR/Unit 头寸法);Moreira & Muir (2017) "Volatility-Managed Portfolios"。
注:以上项目各有不同开源许可,若需复制其源码请先核对许可条款。
【免责声明】教学与工程示范用途,不构成投资建议;历史回测不代表未来收益。
💬 讨论区
- 还没有评论,来做第一个吧。