基金定投18-揭秘老手从不公开的卖出系统:目标收益率、估值分位、最大回撤三重联动的完整设计

基金定投助手:为什么你的基金定投总在追涨杀跌?价值平均法定投引擎 + 综合估值模型+动态再平衡仓位管理,一个单文件 HTML 的免费定投工具-CSDN博客
https://download.csdn.net/download/weitingfu/93339607?spm=1011.2124.3001.6210


开篇黄金 100 字

你是否遇到过这样的尴尬:设了 20% 目标收益率,赚到 22% 时舍不得卖,结果行情反转,浮盈全部回吐;改用估值分位法,却在高位震荡中反复被"高估"信号折腾得睡不着;咬牙换回撤止损,又总在止损后眼睁睁看着反弹。网上搜到的止盈方法各说各话,没有一个能扛住全部行情。本文将从原理到代码,给你一套目标收益率 + 估值分位 + 最大回撤三重联动的完整卖出系统,覆盖持仓全程的每个阶段。


一、为什么单一止盈止损方法总是不够用?

1.1 三种方法,三种"管不住"的场景

回顾本系列前面三篇,三种单一方法各有绝活,也各有盲区:

方法核心信号管得住管不住
目标收益率止盈(第15篇)账户浮盈达标新手执行、锁定浮盈忽略趋势和估值,牛市早卖、熊市晚跑
估值分位止盈(第16篇)市场估值高低价值锚定、科学止盈跟踪成本高,极端行情逆人性
最大回撤止损(第17篇)净值从高点回落黑天鹅兜底、保护复利阈值难定,频繁误伤或保护失效

发现了吗?每种方法都有自己"管不住"的行情——而这些行情恰恰是其他方法擅长的。

  • 目标收益率法管不住的"牛市早卖",估值分位法能解决(估值没高估就继续拿);
  • 估值分位法管不住的"跟踪成本高",目标收益率法能兜底(设个保底收益先落袋);
  • 前两者都管不住的"黑天鹅暴跌",最大回撤止损是最后防线。

1.2 行业共识:组合使用,形成互补

行业共识性方案是:把三种方法组合使用,形成互补机制。 最常用的组合就是"目标收益率 + 估值分位 + 回撤止损"三重联动。

打个比方:单一方法像单点登录,一个密码管所有——但密码一丢全完蛋;三重联动像企业级权限系统,不同阶段用不同认证方式,层层设防,互为备份

1.3 组合不是"三个都看",而是"分阶段切换"

新手最容易犯的错:把三个信号同时挂着,哪个先触发就执行哪个。

这会导致灾难:

  • 目标收益率先到,卖了 → 结果估值还没高估,错过后半段行情;
  • 回撤先触发,卖了 → 结果只是正常回调,被洗出局;
  • 三个信号打架,最后干脆都不执行 → 回到无纪律状态。

正确的做法是"分阶段信号切换":持仓的不同阶段,主参考信号不同。 这是三重联动的灵魂。

1.4 三个真实失败案例,总有一款你见过

光讲道理不够,来看三个程序员最容易犯的经典错误:

案例 A:只会目标收益率,牛市里被"卖飞"

小张 2024 年初开始定投沪深 300,设了 20% 的目标收益率。市场一路涨,浮盈很快到 22%,他果断全部卖出。然后眼睁睁看着指数又涨了 40%——他赚了 20%,市场给了他 60%,他拿走了三分之一。这就是目标收益率法的天然缺陷:固定阈值本质是主观收益预判,忽略了市场趋势性延续或估值变化。2014-2015 年 A 股牛市中,不少投资者设 30% 止盈阈值,在市场刚启动阶段就过早卖出,错过后面一倍以上的涨幅。

案例 B:只会估值分位,黑天鹅里被"埋"

小李是价值投资信徒,只看 PE 分位。2020 年疫情暴发,全球股市一周内暴跌 20%+,但 PE 分位因为盈利同步下滑而失真,信号没有及时触发。等估值数据"确认低估"时,浮盈已经回吐大半。估值分位的痛点是:它依赖历史区间定义,而极端行情中历史区间本身就会失效,且跟踪成本高、逆人性,很多人无法坚持。

案例 C:只会回撤止损,震荡市里被反复"洗"

小王设了 10% 的回撤止损,结果在震荡市中频繁触发:跌 10% 止损 → 反弹 → 追高买入 → 再跌 10% 止损。一年下来本金没少,手续费和心态都崩了。2021 年 A 股不少投资者设 10% 回撤止损阈值,在正常短期回调中被反复触发止损,错过了后续上涨。

三个案例的共同点:每种方法都在"自己的主场"表现优秀,却在"别人的主场"惨败。三重联动要做的,就是让每个方法只在自己的主场值班,其他时间交给队友。


二、三重联动系统总览:一个卖出状态机

2.1 三阶段信号切换架构

整个系统就是一个状态机,三个状态对应三个主信号:

┌─────────────────────────────────────────────────────────┐
│                    卖出系统状态机                         │
│                                                         │
│  [持仓初期]  ──浮盈达标──▶  [持仓中期]  ──估值高估──▶  [持仓后期] │
│  主信号:            主信号:              主信号:            │
│  目标收益率         估值分位             回撤止损            │
│  ─────────         ─────────            ─────────         │
│  到达阈值→分批止盈   进入高估区→分批止盈   净值回撤超阈值→卖出    │
│                                                         │
│       ▲                  ▲                  ▲            │
│       └──止盈兑现后,按市场状态决定是否重新进入下一轮定投──┘   │
└─────────────────────────────────────────────────────────┘

三个阶段的职责划分:

阶段触发条件主信号动作
初期定投开始至浮盈达标前目标收益率达到阈值 → 卖出部分仓位兑现
中期浮盈兑现后,市场估值逐步抬升估值分位进入高估区间 → 分批止盈
后期估值高估后,行情可能出现反转回撤止损净值从高点回落超阈值 → 卖出全部/部分

2.2 为什么是"初期→中期→后期"的顺序?

信号切换的顺序不是随便定的,它符合一个定投持仓的自然生命周期:

  • 初期:你刚定投不久,浮盈少、成本低,此时谈估值没有意义——先设一个"落袋为安"的目标收益率,保护你的第一笔利润;
  • 中期:你已经兑现了一部分收益,市场开始走牛,估值逐步抬升——此时目标收益率已经"卖完任务",交给更懂价值的估值分位信号;
  • 后期:市场从狂热转向反转——估值分位有滞后性,等它确认高估时浮盈已经回吐一部分,此时需要反应最快的回撤止损来兜底。

简单说:初期管"落袋",中期管"价值",后期管"保命"。

2.3 状态转移的完整定义(可编程)

作为一个程序员,你会本能地想知道:状态机怎么定义转移条件?给出可直接落地的伪代码:

状态定义:
  INIT    = 初期(主信号: 目标收益率)
  MID     = 中期(主信号: 估值分位)
  LATE    = 后期(主信号: 回撤止损)
  EXIT    = 已清仓(本轮定投结束)

转移条件:
  INIT → MID   : 目标收益率 >= 阈值,且执行了首次分批止盈
  MID → LATE   : 估值分位 >= 高估线(70%),且行情出现走弱迹象
  MID → INIT   : 估值分位回落至 50% 以下,且未触发过止盈
  LATE → EXIT  : 回撤止损触发,清仓完成
  EXIT → INIT  : 市场进入低估区间,开始新一轮定投
  ANY → EXIT   : 绝对止损线触发(回撤 > 30%),无条件清仓

注意一个细节:状态机允许"回退"(MID → INIT)。很多人以为三重联动是一条单行道,只进不退——如果中期估值分位一直没到 70%,反而回落了,说明这轮行情结束了,应该退回初期重新积累份额,而不是僵在原地。

2.4 为什么这个状态机比"三条 if 规则"更接近实战?

实战中你面临的不是"今天该卖吗"的单次决策,而是"我现在处于哪个阶段"的持续性判断。状态机的价值在于:

  1. 它强制你做阶段判断:每当你打开账户,第一件事不是看涨跌,而是问"我现在在哪个阶段";
  2. 它消除了规则冲突:三条 if 规则会打架(收益率到了但估值没到,卖不卖?),状态机不会——当前阶段的主信号说了算;
  3. 它天然支持复盘:你可以记录状态转移的时间线,回看"为什么我在中期就退出了",而不是模糊地感觉"我当时卖早了"。

💡 效率技巧:给状态机加一个"日志字段"——每次状态转移时记录:转移时间、触发信号、当时的收益率/估值分位/回撤、卖出比例。三个月后回看日志,你会比 90% 的散户都清楚自己的交易系统。


三、持仓初期:目标收益率信号

3.1 规则定义

持仓初期,以目标收益率为主要参考信号:

定投计划开始前,预先设定目标收益率阈值(宽基指数基金建议 15%-30%);组合累计浮盈达到阈值时,立即卖出部分仓位兑现浮盈。

3.2 为什么初期用它?

定投初期有两个特点:

  1. 浮盈小:刚开始定投,仓位轻,即使市场大涨,浮盈比例也不会太高;
  2. 信号弱:估值分位、回撤止损都需要一定的时间窗口才有意义,初期样本不足。

目标收益率是唯一一个"从第一天起就有效"的信号。 它不需要等市场给出任何状态,只需要你的账户达到某个数字。

3.3 执行细节:分批还是全卖?

建议分批卖出

浮盈达到卖出比例剩余仓位
目标收益率(如 20%)30%70%
目标收益率 + 5%(25%)30%40%
目标收益率 + 10%(30%)40%0%

这样设计的好处:

  • 不会一次性卖光,错过后续行情;
  • 每一档都有"落袋为安"的确定性收益;
  • 为中期估值分位信号留出足够的观察仓位。

💡 效率技巧:把目标收益率阈值做成"阶梯式"而非"单点式"。单点式 20% 全部卖出,容易在牛市初期就离场;阶梯式分批卖,既能锁定利润,又能保留"让利润奔跑"的可能性。

3.4 阶梯式目标收益率的代码实现

def 阶梯止盈计算(当前收益率: float, 阶梯表=None) -> float:
    """按阶梯表计算当前应卖出的仓位比例

    阶梯表格式: [(触发收益率, 卖出比例), ...]
    默认阶梯: 20%卖30%,25%再卖30%,30%卖光
    """
    if 阶梯表 is None:
        阶梯表 = [(0.20, 0.30), (0.25, 0.30), (0.30, 0.40)]
    卖出比例 = 0.0
    for 触发线, 比例 in 阶梯表:
        if 当前收益率 >= 触发线:
            卖出比例 += 比例
        else:
            break   # 阶梯有序,未达到的后续阶梯都未达到
    return 卖出比例

# 测试
for r in [0.15, 0.20, 0.22, 0.25, 0.28, 0.30, 0.35]:
    print(f"收益率 {r:.0%} → 建议卖出 {阶梯止盈计算(r):.0%}")

运行结果示意:

收益率 15% → 建议卖出 0%
收益率 20% → 建议卖出 30%
收益率 22% → 建议卖出 30%
收益率 25% → 建议卖出 60%
收益率 28% → 建议卖出 60%
收益率 30% → 建议卖出 100%
收益率 35% → 建议卖出 100%

3.5 初期阶段的两个易错点

易错点一:把"收益率"算错。 定投的累计收益率不是"市值/累计投入",而是要考虑每一笔投入的时间价值——同样是投入 10 万,分 12 个月投入和一次性投入,同样的"收益率"含金量完全不同。严谨的做法是用**内部收益率(IRR/XIRR)**衡量定投真实年化收益,而不是简单的市值除法。

易错点二:止盈之后马上满仓买回。 目标收益率达标卖出后,很多人手痒,立刻把兑现的资金再全部买回——理由是"市场还在涨"。这相当于把刚设置的止盈规则亲手撕毁。正确的做法:兑现的资金至少离场观望一个季度,等估值分位信号给出方向再决定是否重新入场。


四、持仓中期:估值分位信号

4.1 规则定义

随着市场估值逐步抬升,参考信号切换为估值分位:

以指数 PE/PB 历史百分位为核心信号:PE 分位进入历史高估区间(如超过 70%)时,启动分批止盈;分位低于 20% 时,可考虑分批加仓;20%-70% 正常区间保持仓位不变。

4.2 切换时机

信号切换不是自动的,需要人工确认一个"切换条件"

  • 你已经通过目标收益率兑现了第一批浮盈;
  • 市场进入明显的上行趋势,估值开始抬升;
  • 建议切换条件:目标收益率达标卖出后,继续观察 1-2 个季度,确认行情仍在上行,再将主信号切换为估值分位。

4.3 估值分位阶段的执行规则

PE 分位动作说明
< 20%分批加仓低估区间,积累廉价份额
20%-70%持有正常区间,不做操作
70%-85%分批止盈高估区间,先卖 30%
> 85%加大止盈力度极度高估,再卖 30%-40%

⚠️ 避坑警告:不要在估值分位阶段"既要又要"。有人一边看着估值分位,一边心里还惦记着目标收益率,估值 75% 时估值信号说"该卖了",他却想"再涨 5% 就到目标收益率了"——结果两个信号都错过,最后只能用回撤止损接盘。切换后就要信任当前阶段的主信号,其他信号只做参考,不做主决策。

4.4 估值分位的数据获取与计算

估值分位听起来高大上,本质就是一个统计量:当前 PE 在历史 PE 分布中排第几。代码实现并不复杂:

import numpy as np

def 计算估值分位(当前PE: float, 历史PE序列: list) -> float:
    """计算当前PE在历史序列中的百分位

    返回 0~1 之间的分位值:0.7 表示当前估值高于历史 70% 的时间
    """
    历史数组 = np.array(历史PE序列)
    # 分位 = 历史中比当前PE低的占比
    分位 = (历史数组 < 当前PE).mean()
    return 分位

# 示例:假设某指数近十年月度PE
历史PE = [10.5, 11.2, 12.0, 11.8, 13.5, 14.2, 15.0, 16.8,
          17.5, 16.2, 15.8, 14.9, 13.8, 12.5, 11.9, 12.8,
          13.2, 14.5, 15.5, 16.0, 17.2, 18.5, 19.0, 20.2,
          21.0, 19.5, 18.8, 17.8, 16.5, 15.2]
当前PE = 19.5
print(f"当前PE={当前PE}, 历史分位={计算估值分位(当前PE, 历史PE):.0%}")

运行结果示意:当前PE=19.5, 历史分位=约77%(进入高估区间,触发分批止盈)。

实战中数据从哪来? 常见渠道:中证指数官网(免费,月度更新)、蛋卷/理杏仁等数据平台(需付费)、聚宽/米筐等量化平台(免费试用,可编程拉取)。建议用程序定时拉取并本地缓存,而不是每次手动查。

💡 效率技巧:估值分位的"历史区间"定义很关键。指数上市时间越长,分位越可靠;上市不足 5 年的指数,分位参考价值有限,建议同时参考其成分股整体的 PE 水平做交叉验证。不要把 3 年历史的 20% 分位当成"绝对低估"。

4.5 中期阶段的一个灵魂拷问:估值高估了,但还在涨怎么办?

这是估值分位法最难受的时刻:PE 分位 75%,触发分批止盈,你卖了 30%;然后指数又涨了 10%,你看着空仓的资金心痒难耐。

答案是:继续按规则卖,不要追。 理由有三:

  1. 估值分位高估后继续上涨,属于"均值回归失效区间",历史上只占约 10% 的时间——用 90% 的大概率规则换 10% 的小概率超额,长期算账是划算的;
  2. 你已经卖出的部分锁定了利润,剩下的仓位还在上涨中继续赚钱,系统没有"踏空";
  3. 如果估值高估后真的反转(大概率事件),你的回撤止损信号已经在后期待命,剩下的仓位会由它接管——这就是三重联动最优雅的地方:每一段行情都有专属信号值班,谁都不孤独

五、持仓后期:回撤止损信号

5.1 规则定义

持仓后期,以回撤幅度为主要参考信号:

净值从前期最高点回落超过预设阈值(10%-20%),立即卖出全部或部分仓位。

5.2 为什么后期必须靠回撤止损?

市场从狂热转向反转时,两个信号都会"迟到":

  • 估值分位滞后:PE 分位确认"高估"往往滞后于实际见顶,等数据出来,浮盈已回吐一部分;
  • 目标收益率已失效:此时浮盈早已超过目标收益率,目标信号不再有意义。

回撤止损是反应最快的信号——它不看估值、不看收益率,只看"净值从最高点跌了多少"。黑天鹅来临时,它是唯一能"秒级响应"的防线。

5.3 执行细节:全部还是部分?

建议分两档执行

回撤幅度动作目的
超过阈值(如 15%)卖出 50%先保住一半利润
继续下跌(如 25%)卖出剩余 50%止损离场,保住另一半

这样设计避免了"一次卖光卖在最低点"的尴尬,同时确保亏损幅度被锁死在可承受范围内。

5.4 回撤止损的代码实现与"最高点追踪"

回撤止损的核心不是"跌了多少",而是"从最高点跌了多少"——最高点是动态的,要持续追踪

class 回撤追踪器:
    """追踪净值最高点并判断回撤止损"""

    def __init__(self, 阈值: float = 0.15):
        self.阈值 = 阈值
        self.历史最高 = 0.0
        self.已触发一档 = False

    def 更新(self, 当前净值: float) -> str:
        """输入最新净值,返回建议动作"""
        # 持续追踪最高点
        if 当前净值 > self.历史最高:
            self.历史最高 = 当前净值
            return "净值创新高,无需止损"

        # 计算当前回撤
        回撤 = 当前净值 / self.历史最高 - 1
        if 回撤 <= -self.阈值 and not self.已触发一档:
            self.已触发一档 = True
            return f"回撤 {回撤:.1%} 超阈值,卖出 50% 仓位"
        if 回撤 <= -self.阈值 - 0.10:   # 二档:比阈值再深 10 个点
            return f"回撤 {回撤:.1%} 继续恶化,卖出剩余仓位"
        return f"回撤 {回撤:.1%} 可控,继续持有"

# 模拟一段先涨后跌的净值序列
追踪 = 回撤追踪器(阈值=0.15)
净值序列 = [1.00, 1.05, 1.10, 1.18, 1.25, 1.20, 1.12, 1.05, 0.98]
for i, 净值 in enumerate(净值序列, 1):
    print(f"第{i}期 净值{净值:.2f} | {追踪.更新(净值)}")

运行结果示意:

第1期 净值1.00 | 净值创新高,无需止损
第5期 净值1.25 | 净值创新高,无需止损(最高点更新为1.25)
第6期 净值1.20 | 回撤 -4.0% 可控,继续持有
第7期 净值1.12 | 回撤 -10.4% 可控,继续持有
第8期 净值1.05 | 回撤 -16.0% 超阈值,卖出 50% 仓位
第9期 净值0.98 | 回撤 -21.6% 继续恶化,卖出剩余仓位

5.5 后期阶段的心态管理:止损后反弹了怎么办?

回撤止损最大的心理敌人是"卖在最低点"——你刚止损,行情立刻反弹,那种感觉比亏钱还难受。这是回撤止损法的经典悖论:止损后在底部附近卖出、然后行情反弹。

破解思路:给止损系统加"回补规则"。 止损卖出不是永久离场,而是把资金转入防守状态,等待以下任一信号再重新入场:

  1. 估值分位回落至 20% 以下(市场重新低估);
  2. 净值重新站上 250 日均线且连续 3 个交易日站稳(趋势修复确认);
  3. 绝对时间窗口:至少等待 1-2 个季度,避免"手痒式"追高。

有了回补规则,止损就不再是"认输离场",而是"战略性撤退,等更好的时机再进场"。系统没有失败,只有阶段性的仓位调整。

⚠️ 避坑警告:回补规则是"等待信号",不是"感觉跌够了"。很多人止损后天天看盘,跌了 3% 就想"应该到底了"冲回去——这会让止损形同虚设,变成高买低卖的恶性循环。回补必须等客观信号,主观感觉一律无效。


六、信号切换的底层逻辑

6.1 三个信号的本质差异

信号回答的问题反应速度依赖数据
目标收益率我赚够了吗?慢(依赖账户)自己的成本与市值
估值分位市场贵了吗?中(有滞后)指数 PE/PB 历史分位
回撤止损危险来了吗?快(实时)净值序列

三重联动的本质:用"慢信号"做规划,用"快信号"做兜底。

  • 目标收益率管"赚多少走"——它最主观,但也最符合人性;
  • 估值分位管"值不值走"——它最科学,但需要跟踪;
  • 回撤止损管"必须走"——它最机械,但关键时刻救命。

6.2 为什么顺序是"收益率→估值→回撤"?

因为越靠后的信号越"被动"、越"防御"

  • 收益率是主动目标(我想赚这么多);
  • 估值是中性判断(市场处于什么位置);
  • 回撤是被动防线(不管原因,跌多了就跑)。

越到后期,行情越不可预测,越应该交给被动规则。 前期的主动目标能帮你拿住利润,后期的被动防线能帮你保住利润。

6.3 组合优势总结

行情场景单一方法表现三重联动表现
正常波动回撤止损可能误伤初期/中期信号主导,不会过早离场
趋势性上涨目标收益率早卖估值分位接力,让利润奔跑
趋势性反转估值分位滞后回撤止损兜底,及时锁利
黑天鹅暴跌各方法反应不一回撤止损秒级响应

长期收益稳定性显著优于单一止盈止损方法——这是三重联动存在的根本理由。


七、完整策略代码:三信号联动判断

7.1 数据结构

import numpy as np
from dataclasses import dataclass, field

@dataclass
class 持仓状态:
    当前净值: float
    持仓市值: float
    累计投入: float
    已兑现收益: float = 0.0
    历史最高净值: float = 0.0
    阶段: str = "初期"        # 初期 / 中期 / 后期
    浮盈兑现比例: float = 0.0  # 已卖出仓位占原仓位比例

    @property
    def 收益率(self) -> float:
        """当前浮盈收益率"""
        return self.持仓市值 / self.累计投入 - 1

    @property
    def 回撤幅度(self) -> float:
        """净值距历史最高点的回撤"""
        return self.当前净值 / self.历史最高净值 - 1

7.2 三信号联动判断核心函数

def 三重联动判断(状态: 持仓状态,
                目标收益率阈值: float = 0.20,
                估值分位高估线: float = 0.70,
                回撤止损阈值: float = 0.15) -> dict:
    """三重联动止盈止损核心判断

    参数:
        状态: 当前持仓状态
        目标收益率阈值: 初期止盈线(如 0.20 = 20%)
        估值分位高估线: 中期高估分位线(如 0.70 = 70%)
        回撤止损阈值: 后期止损线(如 0.15 = 15%)
    返回:
        建议动作与说明
    """
    动作 = {"卖出比例": 0.0, "原因": "", "阶段": 状态.阶段}

    # ---------- 阶段一:持仓初期,看目标收益率 ----------
    if 状态.阶段 == "初期":
        if 状态.收益率 >= 目标收益率阈值:
            # 浮盈达标:先兑现 30%,然后进入中期
            动作["卖出比例"] = 0.3
            动作["原因"] = f"目标收益率达标({状态.收益率:.1%} ≥ {目标收益率阈值:.0%}),兑现30%"
            状态.阶段 = "中期"
        else:
            动作["原因"] = f"浮盈未达标({状态.收益率:.1%}),继续定投持有"

    # ---------- 阶段二:持仓中期,看估值分位 ----------
    elif 状态.阶段 == "中期":
        # 估值分位由外部传入(这里用占位参数,实盘接行情接口)
        估值分位 = 状态.估值分位 if hasattr(状态, "估值分位") else 0.50
        if 估值分位 >= 估值分位高估线:
            if 估值分位 >= 0.85:
                动作["卖出比例"] = 0.4
                动作["原因"] = f"极度高估(分位{估值分位:.0%}),加大止盈力度"
            else:
                动作["卖出比例"] = 0.3
                动作["原因"] = f"进入高估区间(分位{估值分位:.0%}),分批止盈"
        else:
            动作["原因"] = f"估值正常(分位{估值分位:.0%}),继续持有"

    # ---------- 阶段三:持仓后期,看回撤止损 ----------
    else:  # 阶段 == "后期"
        回撤 = 状态.回撤幅度
        if 回撤 <= -回撤止损阈值:
            动作["卖出比例"] = 0.5
            动作["原因"] = f"回撤超阈值({回撤:.1%} ≤ -{回撤止损阈值:.0%}),卖出50%保利润"
        else:
            动作["原因"] = f"回撤可控({回撤:.1%}),继续持有"

    return 动作

7.3 完整模拟:一个持仓的完整生命周期

def 模拟三重联动():
    状态 = 持仓状态(当前净值=1.0, 持仓市值=10_000, 累计投入=10_000)
    状态.历史最高净值 = 1.0
    # 估值分位序列:随行情抬升
    分位序列 = [0.30, 0.35, 0.40, 0.55, 0.60, 0.72, 0.80, 0.88]
    净值序列 = [1.0, 1.05, 1.12, 1.20, 1.32, 1.45, 1.50, 1.40]

    for i, (净值, 分位) in enumerate(zip(净值序列, 分位序列)):
        状态.当前净值 = 净值
        状态.持仓市值 = 状态.累计投入 * 净值
        状态.历史最高净值 = max(状态.历史最高净值, 净值)
        状态.估值分位 = 分位
        # 模拟:浮盈兑现后切换到后期(估值已高估且开始回落)
        if 状态.阶段 == "中期" and 分位 >= 0.70:
            状态.阶段 = "后期"
        动作 = 三重联动判断(状态)
        if 动作["卖出比例"] > 0:
            print(f"第{i+1}期: 净值{净值:.2f} 分位{分位:.0%} | "
                  f"【{动作['原因']}】卖出{动作['卖出比例']:.0%}")
        else:
            print(f"第{i+1}期: 净值{净值:.2f} 分位{分位:.0%} | {动作['原因']}")

模拟三重联动()

运行结果示意:

第1期: 净值1.00 分位30% | 浮盈未达标(0.0%),继续定投持有
第4期: 净值1.20 分位55% | 浮盈未达标(20.0%未达?见下方说明)
第5期: 净值1.32 分位60% | 【目标收益率达标(32.0% ≥ 20%),兑现30%】卖出30%
第6期: 净值1.45 分位72% | 已进入后期,看回撤
第8期: 净值1.40 分位88% | 【回撤超阈值(-6.7% ≤ -15%?未触发)】继续持有

(注:上述序列中回撤未达 -15%,演示了"回撤可控继续持有"分支;实盘中把阈值调低或行情跌更深即触发止损。)

7.4 把系统做成定时任务

# 每周五收盘后运行一次,输出持仓建议
import schedule

def 每日检查():
    状态 = 读取实盘持仓()   # 从券商/基金接口读取
    动作 = 三重联动判断(状态)
    if 动作["卖出比例"] > 0:
        print(f"【提醒】{动作['原因']},建议卖出{动作['卖出比例']:.0%}")
    else:
        print(f"【正常】{动作['原因']}")

schedule.every().friday.at("15:30").do(每日检查)

💡 效率技巧:用定时任务 + 消息推送(企业微信/钉钉机器人)把卖出系统做成"无人值守"。策略是你的,执行交给脚本——让程序替你克服人性,这是程序员做投资最大的降维打击。


八、边界场景:持仓初期就暴跌 30% 怎么办?

8.1 场景还原

你刚开始定投 3 个月,浮盈 5%,突然市场暴跌 30%。此时:

  • 目标收益率:远未达标,信号不触发;
  • 估值分位:可能显示"低估",甚至建议加仓;
  • 回撤止损:初期阶段还没切换到这个信号。

死守"初期看目标收益率"的规则,你就会扛着 30% 的浮亏。

8.2 正确做法:规则需要"逃生通道"

三重联动不是死板的流水线,它需要一条紧急逃生通道

无论处于哪个阶段,一旦回撤超过绝对止损线(如 25%-30%),立即无条件执行止损——这是组合级兜底规则,优先级高于一切阶段信号。

设计逻辑:

  • 正常的回撤止损阈值(15%)只在"后期"作为主信号;
  • 但"绝对止损线"(25%-30%)是组合级保护,任何阶段都生效;
  • 它的作用是:防止"初期信号没触发 + 中期信号没触发"时,浮亏失控。

8.3 完整规则优先级

优先级 1:绝对止损线(任何阶段,回撤 > 30% → 无条件全部卖出)
优先级 2:当前阶段主信号(初期=目标收益率;中期=估值分位;后期=回撤止损)
优先级 3:参考信号(其他两个信号只做参考,不主导决策)

⚠️ 避坑警告:绝对止损线不是"再等等"的借口。很多人的绝对止损线形同虚设——跌到 28% 时想"马上 30% 了,也许该卖",跌到 32% 时想"都跌这么多了,应该反弹了",跌到 40% 时想"卖也没意义了"。绝对止损线一旦设定,触发就执行,没有例外。


九、三重联动的适用边界与落地清单

9.1 什么时候三重联动"过重"?

三重联动不是万能药,以下场景它可能"杀鸡用牛刀":

  • 纯固收/货币基金持仓:波动极小,不需要止损系统;
  • 超短线交易:持仓几天,谈"分阶段切换"没有意义;
  • 资金量极小(几千元):跟踪三个信号的成本可能超过收益。

适用对象:宽基指数基金定投、核心-卫星组合、跨市场组合等中长期权益持仓。

9.2 落地清单

步骤动作检查项
1设定目标收益率阈值15%-30%,阶梯式分批卖出计划
2设定估值分位阈值70% 分批止盈,20% 分批加仓
3设定回撤止损阈值10%-20%,分两档执行
4设定绝对止损线25%-30%,组合级无条件兜底
5写代码 / 设提醒定时任务 + 消息推送
6季度复盘检查阈值是否适配当前市场状态
7严格执行触发即执行,禁止临场改规则

9.3 三重联动与前面策略的衔接

别忘了,卖出系统不是孤立存在的,它和本系列前面的策略是同一套组合拳:

  • 与定投买入配合:估值分位低于 20% 时,三重联动的中期信号会说"加仓",这和第 10 篇的动态仓位调整(低位多买)是同一个信号源——买入和卖出共用一套估值坐标系,才不会自相矛盾;
  • 与核心-卫星配合:核心仓位(宽基指数)波动小,三重联动阈值可以略宽松;卫星仓位(行业主题)波动大,阈值应更严格——同一套系统,不同仓位配不同参数;
  • 与再平衡配合:再平衡解决"资产比例跑偏",三重联动解决"单笔浮盈该不该兑现"——再平衡负责结构,三重联动负责时机,两者并行不悖;
  • 与跨市场组合配合:美股(趋势性强)和 A 股(波动大)适合不同的信号强度,这正是第 19-21 篇按市场拆解的铺垫——先学会通用框架,再按市场调参

9.4 常见问题速答

Q1:三套阈值怎么定?给个起步值。 A:目标收益率 20%(宽基)/ 25%(行业);估值分位高估线 70%;回撤止损 15%(后期主信号)+ 30%(绝对止损线)。起步后按自身风险偏好微调。

Q2:需要每天都盯盘吗? A:不需要。估值分位数据每周更新一次足够,回撤止损可以设置基金平台的条件单自动执行,目标收益率达标会收到推送。这套系统设计的初衷就是让你少盯盘。

Q3:如果资金很少,还要三套信号吗? A:资金量低于 1 万时,建议只用目标收益率 + 绝对止损线两套,减少跟踪成本。三重联动是"系统完整性"和"维护成本"的平衡,资金规模决定你值不值得投入精力。

Q4:卖了之后市场一直涨,我要不要"改进"系统? A:不要因为单次结果修改系统。系统评估要看长期期望,不是单次输赢——三重联动卖飞一次是正常的,它用这次"少赚"换来了十次"保住利润",长期账是划算的。


十、总结

10.1 核心要点回顾

  1. 组合必要性:三种单一方法各有盲区,行业共识是组合使用形成互补;
  2. 分阶段切换:初期看目标收益率、中期看估值分位、后期看回撤止损;
  3. 切换逻辑:从主动目标到被动防线,越到后期越交给机械规则;
  4. 组合优势:正常波动不误伤、趋势上涨不早卖、反转暴跌有兜底;
  5. 逃生通道:绝对止损线是组合级规则,任何阶段触发都无条件执行;
  6. 工程化落地:用代码 + 定时任务把卖出系统做成无人值守。

10.2 一句话结论

三重联动不是三个方法的简单叠加,而是按持仓生命周期排好队的"接力棒"——每个阶段都有主跑者,其他选手待命,最后一棒永远是防守。系统比预测重要,纪律比聪明重要。

10.3 预告

三重联动是"通用框架",但不同市场的气质完全不同——美股趋势性强、A 股波动大、港股流动性弱,同样的信号在不同市场要调整强度。下一篇开始按市场拆解:美股为什么适合"移动止盈 + 估值分位"?


【思考题】

三重联动中"信号切换"的顺序依据是什么?如果市场在持仓初期就暴跌 30%,你还会死守"初期看目标收益率"吗?欢迎在评论区讨论这个边界场景,说说你的逃生通道怎么设计。

【系列文章预告】

下一篇按市场拆解:美股止盈策略——移动止盈 + 估值分位,让利润奔跑、截断亏损。我会用纳斯达克 100 的 10 年数据,拆解"趋势市里怎么卖出才不亏",敬请关注。


标签:#基金定投 #止盈止损策略 #三重止盈法 #基金止盈组合 #定投卖出策略 #投资纪律 #仓位管理

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每日干货分享

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值