← 返回《初阶量化交易:策略编写及系统搭建》
📑 查看全课大纲(第 26 / 38 节)

风险控制中的止盈止损

约 12 分钟

📺 正在播放小象官方高清录播(支持倍速与清晰度调节)

风险控制中的止盈止损:目标止盈、硬性止损与跟踪止盈

小象实战讲义 · 初阶量化交易:策略编写及系统搭建 本讲义仅用于编程与量化方法教学,不构成任何投资建议。

在量化策略的具体实现中,风控逻辑必须被翻译为严格的数学判定条件与可执行的代码函数。许多交易者常陷入两难困境:设定固定目标止盈(如 +10%+10%)往往会在大牛市中过早卖飞大幅上涨的主升浪牛股;而不设止盈任由价格波动,又常遭遇坐”过山车”导致巨额浮盈化为乌有。如何设计既能保护既得利润、又能让超级主升浪充分奔跑的止盈止损机制,是量化工程师的必修课。

本讲系统推导目标盈利法(Fixed Take-Profit)、最大亏损法(Fixed Stop-Loss)与技术指标信号止损的数学模型;重点详解实盘中最具威力、将止盈与止损合二为一的高级机制——浮动/跟踪止盈(Trailing Stop) 的算法架构与代码实现。


💡 核心导读

  • 目标盈利法与最大亏损法的数学模型
    • 目标盈利止盈线Ptp=Pentry×(1+Rtp)P_{tp} = P_{entry} \times (1 + R_{tp})(如 Rtp=15%R_{tp} = 15%);
    • 硬性底线止损线Psl=Pentry×(1Rsl)P_{sl} = P_{entry} \times (1 - R_{sl})(如 Rsl=5%R_{sl} = 5%);
    • 优点与局限:逻辑简单,严格界定单笔盈亏比;但缺乏对后续单边行情发展幅度的动态自适应能力。
  • 浮动/跟踪止盈(Trailing Stop)的数学架构(强力推荐)
    • 动态最高点追踪:在持仓生命周期内,实时记录历史最高价 Highpeak=max(Highpeak,Closet)High_{peak} = \max(High_{peak}, Close_t)
    • 激活门槛(Activation Threshold):当持仓收益率首次突破激活门槛(如上涨达到 +8%+8% 时启动跟踪防护);
    • 回撤止盈触发条件Drawdownpeak=HighpeakClosetHighpeakRtrail(如 Rtrail=3% 或 5%)\text{Drawdown}{peak} = \frac{High{peak} - Close_t}{High_{peak}} \ge R_{trail} \quad (\text{如 } R_{trail} = 3% \text{ 或 } 5%)
    • 核心优势:在单边主升浪中,HighpeakHigh_{peak} 随股价向上无限抬升,止盈线同步上移;一旦见顶回落达到阈值,立即平仓锁定绝大部分巅峰利润,完美实现”让利润奔跑与保住收益”的辩证统一。
  • 技术指标信号止损(Signal-based Stop)
    • 当持仓期间发生均线死叉(如 Close<MA10Close < MA10)或 MACD 顶背离时,不论当前盈亏直接触发离场,顺应市场宏观结构变化。
┌─────────────────────────────────────────────────────────────┐
│                    浮动跟踪止盈 (Trailing Stop) 运行轨迹       │
└──────────────────────────────┬──────────────────────────────┘

 价格 (Price)                   ▲ [最高点 Peak: 12.0 元]
                              ▲ │ ▼
                            ▲   │   ▼ ─── 回撤 4.17% (≥ 3%): 触发跟踪止盈离场 (11.5 元)
                          ▲     │
  [突破 +8% 激活门槛: 10.8 元]───┘


  [买入成本 Entry: 10.0 元] ─────────────────────────────────── (基准线)

一、目标止盈 vs 跟踪止盈的实盘对比

假设以 10.0 元买入某标的,随后该股走出大波段行情冲至 15.0 元(+50%+50%)后回落至 13.0 元:

  • 固定目标止盈(+15%+15%:在 11.5 元处即被动平仓,错失后续 11.5 到 15.0 元的巨大涨幅;
  • 跟踪止盈(回撤 5%5%:最高价记录为 15.0 元,在回落至 15.0×(10.05)=14.2515.0 \times (1 - 0.05) = 14.25 元处自动平仓离场,成功锁定 +42.5%+42.5% 的超额利润

二、风控模块的代码架构设计

在回测或实盘引擎中,风控判定作为独立中间件注入订单路由:

  1. 持仓状态维护:维护包含 entry_pricepeak_priceis_trailing_active 的持仓字典;
  2. 日度扫描判定:每日开盘/收盘时逐笔计算当前价相对于成本与峰值的比例;
  3. 输出标准化指令:若触发硬性止损或跟踪止盈,将标的推入待卖列表并更新持仓状态。

📝 动手练一练

下面我们用 Python 编写一段 浮动跟踪止盈(Trailing Stop)与硬性止损复合风控引擎,模拟价格冲高至 12.0 元(+20%+20%)后见顶回落,演示跟踪止盈如何在回撤时精准截获 +15%+15% 的巅峰利润:

import pandas as pd
import numpy as np

def trailing_stop_and_fixed_sl(entry_price, price_series, activation_profit=0.08, trailing_drawdown=0.03, fixed_sl=0.05):
    """
    浮动/跟踪止盈 (Trailing Stop) 与 硬性止损 (Fixed Stop Loss) 复合风控引擎
    1. 若未盈利或盈利未达到 activation_profit (8%): 严格按 fixed_sl (5%) 执行硬性止损
    2. 若持仓盈利曾达到 activation_profit (8%): 激活跟踪止盈, 动态记录最高点 peak_price
    3. 若价格从 peak_price 回撤超过 trailing_drawdown (3%): 触发跟踪止盈离场
    """
    peak_price = entry_price
    is_trailing_active = False
    
    records = []
    
    for p in price_series:
        # 动态追踪持仓历史最高价
        if p > peak_price:
            peak_price = p
            
        current_ret = (p - entry_price) / entry_price * 100.0
        peak_ret = (peak_price - entry_price) / entry_price * 100.0
        drawdown_from_peak = (peak_price - p) / peak_price * 100.0
        
        # 盈利超过 8% 激活跟踪止盈保护
        if not is_trailing_active and peak_ret >= (activation_profit * 100.0):
            is_trailing_active = True
            
        action = "HOLD (持仓)"
        if p <= entry_price * (1.0 - fixed_sl):
            action = "FIXED_STOP_LOSS (硬性止损)"
        elif is_trailing_active and drawdown_from_peak >= (trailing_drawdown * 100.0):
            action = "TRAILING_TAKE_PROFIT (跟踪止盈)"
            
        records.append({
            'Price': p,
            'Peak_Price': peak_price,
            'Current_Ret%': current_ret,
            'Drawdown_From_Peak%': drawdown_from_peak,
            'Trailing_Active': is_trailing_active,
            'Action': action
        })
        
        # 触发离场则结束生命周期
        if "STOP" in action or "PROFIT" in action:
            break
            
    return pd.DataFrame(records)

def test_trailing_run():
    entry = 10.0
    # 模拟买入后价格持续冲高至 12.0 元 (+20%) 随后见顶回落至 11.5 元的时序
    prices = [10.2, 10.5, 10.9, 11.4, 12.0, 11.8, 11.5, 11.0]
    res = trailing_stop_and_fixed_sl(entry, prices, activation_profit=0.08, trailing_drawdown=0.03, fixed_sl=0.05)
    
    print("================ 浮动跟踪止盈 (Trailing Stop) 引擎 ================")
    print(res[['Price', 'Peak_Price', 'Current_Ret%', 'Drawdown_From_Peak%', 'Trailing_Active', 'Action']])
    print("------------------------------------------------------------------")
    print(f"触发离场动作: {res['Action'].iloc[-1]} 于价格 {res['Price'].iloc[-1]:.2f} 元 (最终锁定收益: {res['Current_Ret%'].iloc[-1]:.2f}%)")
    print("量化成果: 成功突破 8% 门槛并伴随股价冲至 12.0 元,在回撤达 4.17% 时精准离场锁定 +15% 利润!")
    print("==================================================================")

if __name__ == "__main__":
    test_trailing_run()

运行结果输出:

================ 浮动跟踪止盈 (Trailing Stop) 引擎 ================
   Price  Peak_Price  Current_Ret%  Drawdown_From_Peak%  Trailing_Active                  Action
0   10.2        10.2           2.0             0.000000            False               HOLD (持仓)
1   10.5        10.5           5.0             0.000000            False               HOLD (持仓)
2   10.9        10.9           9.0             0.000000             True               HOLD (持仓)
3   11.4        11.4          14.0             0.000000             True               HOLD (持仓)
4   12.0        12.0          20.0             0.000000             True               HOLD (持仓)
5   11.8        12.0          18.0             1.666667             True               HOLD (持仓)
6   11.5        12.0          15.0             4.166667             True  TRAILING_TAKE_PROFIT (跟踪止盈)
------------------------------------------------------------------
触发离场动作: TRAILING_TAKE_PROFIT (跟踪止盈) 于价格 11.50 元 (最终锁定收益: 15.00%)
量化成果: 成功突破 8% 门槛并伴随股价冲至 12.0 元,在回撤达 4.17% 时精准离场锁定 +15% 利润!
==================================================================

本章小结

  1. 掌握跟踪止盈机制:通过记录 HighpeakHigh_{peak} 并在回撤达到阈值时触发离场,兼具保护利润与捕捉大趋势的优势。
  2. 复合风控分层防护:在未盈利阶段依赖硬性止损防范暴跌,在大幅盈利后自动切换为跟踪止盈保住收益。
  3. 参数个性化配置:根据标的日内波动率(ATR)科学设定激活阈值与回撤比例,避免过窄回撤被正常杂波洗出。

📋 行动清单 (Action Checklist)

  • 运行本讲跟踪止盈代码,观察从第 2 天激活到第 6 天触发离场的全过程;
  • 尝试将回撤阈值调整为 5% 并修改输入价格,观察离场点位的自适应变化;
  • 预习下一讲,深入学习决定策略长期生死的核心支柱——仓位管理与头寸规模模型。

— 小象教研组

配套学习资源与课件
  • 第4章课件:仓位管理和风险控制功能实现(PDF · 1.3MB)
    下载
  • 开发环境准备:软件安装指导(PDF · 0.9MB · 建议第3章动手实践前先通读)
    下载
  • 量化入门推荐书单(PDF · 318KB)
    下载
🎁 免费学习资源

领取《小象 11GB VIP 课件资料包与大厂真题手册》

包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。

  • 完整 Python / 数据分析 Jupyter 实战源码
  • 大厂真实业务数据集与练习题
  • 微信扫码添加课程顾问,免费获取网盘下载链接
微信二维码:扫码添加课程顾问微信扫码添加顾问