损失厌恶:为什么赚 10% 的快乐抵不过亏 5% 的痛苦


"截断亏损,让利润奔跑。" 这是华尔街流传最广的交易准则,几乎每个量化新手都能背诵。但当你真正坐在屏幕前,看着持仓浮亏逐渐扩大——500 元、2000 元、5000 元——那个"再等等,说不定能反弹回来"的念头会像潮水一样将你的理性决策能力淹没。

这不是意志力的问题,也不是性格缺陷。这是写在人类神经回路里的生存本能——损失厌恶。理解它的机制,不是为了谴责自己,而是为了在设计交易系统时,将这一认知偏差当作必须处理的噪声,而非可以忽略的背景杂音。


一、那个凌晨三点的平仓决定

让我们回到一个几乎每个交易者都经历过的场景:

你在当天收盘前做多了一只标的,设置了 5% 的止损线。盘中,价格下跌了 3%,你告诉自己"还没到止损位,再看看"。价格继续下跌到 4.5%,距离止损线只有半个百分点。凌晨三点,你从睡梦中惊醒,习惯性打开手机看了一眼——价格跌到了 5.2%。

你的单子被止损了。

第二天,你发现价格在你被止损后的两个小时内就开始反弹,最终收涨 3%。而就在同一天,你持有的另一只盈利仓位,在涨了 8% 之后,你选择提前止盈——理由是"已经赚了不少,落袋为安"。

这两件事加在一起,就是量化交易中最经典的"截断利润,让亏损奔跑"现象。学术上,它有一个精确的名字:处置效应(Disposition Effect)。

处置效应只是损失厌恶在交易场景中的一个具体表现。要理解它,首先需要回到损失厌恶理论的源头。


二、前景理论:损失为何比收益更重

1981 年,心理学家 Daniel Kahneman 和 Amos Tversky 发表了一篇论文,题为《前景理论:风险决策分析》。这篇论文后来成为行为经济学的基础,被引用超过四万次。Kahneman 因此在 2002 年获得诺贝尔经济学奖(Tversky 于 1996 年去世,未能共同获奖)。

前景理论的核心发现可以浓缩为一个简洁的实验:

假设你面临两个选择:A)确定获得 5000 元;B)80% 的概率获得 6000 元,20% 的概率获得 0 元。

绝大多数人选择 A。

现在换一种表述:C)确定损失 5000 元;D)80% 的概率损失 6000 元,20% 的概率不损失任何东西。

绝大多数人选择 D。

这就是损失厌恶的原始形态:同样一个赌局,当它被框架为"可能的收益"时,人们倾向于规避风险;当它被框架为"可能的损失"时,人们反而愿意冒更大的风险。损失带来的痛苦,在心理上大约是等量收益带来的快乐的两倍——Kahneman 和 Tversky 给出的经典估计是 λ ≈ 2.0,即 1 元损失的负效用大约等于 2.25 元收益的正效用。

2.1 价值函数:一张图解释所有非理性

前景理论用一条"价值函数"来描述这个现象:

价值
  ↑
  |          收益分支(凹函数,边际递减)
  |         /
  |        /
  |-------/--------→ 收益/损失(参照点)
  |       \
  |        \
  |         损失分支(凸函数,更陡峭)
  |          (在参照点左侧,曲线更陡)
  |

这张图的含义远比它的数学形式重要:

  • 参照点依赖:你的感受不是基于绝对财富,而是相对于某个参照点(通常是入场价)的变化。
  • 损失分支更陡:亏损曲线的斜率在绝对值上大于收益曲线——这意味着同样的金额,亏损的心理冲击更大。
  • 收益分支凹:随着盈利增加,每多赚一点带来的快乐在递减。这解释了为什么交易者倾向于过早止盈。
  • 损失分支凸:随着亏损增加,每多亏一点的痛苦增加得越来越快。这解释了为什么交易者倾向于不止损、一直持有到回本。

参照点是整个框架的核心。在交易中,最常见的参照点就是入场价。一旦持仓变为浮亏,你的参照点就被"锁定"在那个数字上——你开始从"当前价格 vs 入场价"的视角看待这笔交易,而不是从"这笔交易当前预期收益是多少"的视角看待它。


三、处置效应:数字告诉你有多普遍

处置效应由 Shefrin 和 Statman 于 1985 年首次提出,描述的是投资者倾向于过早卖出盈利仓位,而过久持有亏损仓位的倾向。这与经典的"截断亏损,让利润奔跑"原则完全相反。

3.1 大规模实证数据

处置效应不是一个只存在于理论中的现象。以下是几项关键研究的结论:

研究 样本规模 核心发现
Odean (1998) 10,000 个账户,1987-1993 投资者卖出盈利股票的概率是卖出亏损股票概率的 1.5 倍,尽管亏损股票未来表现更差
Barber & Odean (2000) 66,465 个散户账户 男性交易频率比女性高 45%,但收益率低约 1 个百分点
Feng & Seasholes (2008) 中国散户账户数据 经验丰富的投资者处置效应反而更强——因为他们更自信于"能判断回调"

第三项发现尤其值得量化交易者警惕:经验并不能消除处置效应,甚至可能使其恶化。原因是经验丰富的交易者往往对自己的"择时能力"有更高的自信,他们更倾向于认为亏损是"暂时的",盈利是"应得的",从而加剧了卖出盈利、持有亏损的行为偏差。

3.2 为什么处置效应在实盘中比回测中更严重

这里引出一个对量化交易者而言至关重要的命题:处置效应是回测无法捕捉的偏差

回测系统中,你的止损单是机械执行的——当价格触及止损线,系统自动平仓。没有焦虑,没有"再等等"的念想,没有凌晨三点的辗转反侧。

但实盘中,人是活的。人的决策受情绪驱动,受损失厌恶支配。

这意味着:你在回测中验证过的完美策略,在实盘中可能会产生完全不同的结果。 不是因为策略本身有问题,而是因为执行你的人是一个受损失厌恶影响的经济主体。


四、心理账户:你的钱不是你的钱

损失厌恶还有一个重要的推论机制:心理账户(Mental Accounting),由 Richard Thaler 在 1985 年提出。

Thaler 的核心观点是:人们倾向于将资金划分到不同的"心理账户"中,不同账户之间的资金不是等价的。

一个经典实验:

你准备买一张 1000 元的音乐会门票。到了剧院门口,你发现丢了 1000 元现金。你还会买票吗?

调查显示,约 88% 的人选择买。

换一个场景:你已经买了票(1000 元),到剧院门口发现票丢了。你还会重新买一张吗?

调查显示,只有 46% 的人选择买。

这两种情况的客观经济损失完全相同(损失 1000 元 + 持有或不持有门票),但人们的决策却截然不同。原因是:在第二种场景中,那张票已经进入了"音乐会账户",丢失它感觉像是"双重支付"——既丢了钱,又丢了已经拥有的一张票。

在交易中,心理账户的运作方式如下:

场景一:你有一笔用于"长线投资"账户的资金,目前浮盈 10%。你把它看作"已经赚到的钱",倾向于守住它,甚至提前止盈。

场景二:同一笔钱,现在浮亏 5%。你把它看作"还没亏掉的钱",倾向于不止损,幻想能回到原点。

同一个标的,同一个账户,只因为参照点不同,你就对它采取了完全不同的风险态度。这就是心理账户对损失厌恶的放大效应。

4.1 锚定效应:入场价如何劫持你的决策

与心理账户密切相关的是锚定效应——人们倾向于过度依赖第一个接收到的信息(锚点),即使这个锚点与当前决策完全不相关。

在交易中,你的入场价就是那个锚点。一旦你在 100 元买入了某标的,100 元就成为了你所有后续判断的参照基准:

  • "跌到 95 了,我亏了 5%"
  • "涨到 108 了,我赚了 8%"
  • "回到 100 就平仓,至少不亏"

但你的入场价与这只标的未来的预期收益之间没有任何逻辑联系。市场不在乎你在哪里入场。公司的基本面变化、订单簿的结构、宏观经济环境——这些才是决定价格方向的真正因素。你的入场价只是一个历史数据,它唯一的作用是让你产生了"已经赚/亏了多少"的感受。

问题在于,这种感受会直接驱动你的交易决策。


五、量化视角:把损失厌恶建模为系统噪声

对量化交易者而言,一个更有用的视角是将损失厌恶不是当作需要"教育"的心理问题,而是当作市场生态中可以被利用的结构性现象

5.1 市场效率缺陷中的信号

当大量散户投资者因为处置效应而过早卖出盈利仓位时,他们在人为地创造短期供给压力——这种压力与基本面无关,纯粹来自心理偏差。这是一种可预测的系统性偏差。

机构量化策略可以围绕这一现象设计如下逻辑:

"""
处置效应信号检测器

原理:当市场经历快速下跌后反弹时,
散户因为损失厌恶倾向于在回本后立即卖出。
这会在特定价格区间形成可识别的抛压模式。

注意:此代码仅作概念演示,不构成任何投资建议。
"""

import pandas as pd
import numpy as np
from dataclasses import dataclass
from typing import Optional


@dataclass
class DispositionSignal:
    """处置效应信号数据类"""
    timestamp: pd.Timestamp
    symbol: str
    sell_pressure_score: float  # 0-1,越高表示抛压越明显
    confidence: float           # 信号置信度
    recommended_action: str     # 建议动作


def detect_disposition_pressure(
    kline_data: pd.DataFrame,
    lookback_bars: int = 60,
    recovery_threshold: float = 0.03,
    volume_spike_threshold: float = 1.5
) -> Optional[DispositionSignal]:
    """
    检测处置效应引发的抛压信号

    参数:
        kline_data: K线数据,需包含 high/low/close/vol 字段
        lookback_bars: 回溯窗口(K线根数)
        recovery_threshold: 从日内低点的反弹幅度阈值(如0.03=3%)
        volume_spike_threshold: 成交量异常倍数阈值

    原理:
        处置效应发生时,价格经历了一个完整的"V型"走势:
        1. 下跌阶段:散户持仓变浮亏,损失厌恶激活
        2. 反弹至成本价附近:散户集中平仓,成交量放大
        3. 信号特征:日内低点反弹超过阈值 AND 成交量异常放大

    返回:
        DispositionSignal 或 None
    """

    if len(kline_data) < lookback_bars:
        return None

    recent = kline_data.tail(lookback_bars).copy()

    # Step 1: 计算日内低点与当前收盘价的关系
    intraday_low = recent['low'].min()
    current_close = recent['close'].iloc[-1]
    recovery_ratio = (current_close - intraday_low) / intraday_low

    # Step 2: 检测成交量异常
    avg_volume = recent['vol'].mean()
    current_volume = recent['vol'].iloc[-1]
    volume_ratio = current_volume / avg_volume

    # Step 3: 综合信号评分
    # 反弹幅度越大 + 成交量越大 -> 抛压越明显
    if recovery_ratio >= recovery_threshold and volume_ratio >= volume_spike_threshold:
        # 线性评分,越高越说明抛压明显
        sell_pressure_score = min(
            (recovery_ratio / (recovery_threshold * 3)) * 0.5 +
            (volume_ratio / volume_spike_threshold) * 0.5,
            1.0
        )

        # 置信度:反弹幅度与成交量的相关性
        recovery_returns = recent['close'].pct_change().dropna()
        volume_returns = recent['vol'].pct_change().dropna()

        # 正相关说明量价同向(抛压来自主动卖出而非被动成交)
        correlation = np.corrcoef(recovery_returns, volume_returns)[0, 1]
        confidence = max(0, correlation) if not np.isnan(correlation) else 0.5

        return DispositionSignal(
            timestamp=recent['timestamp'].iloc[-1],
            symbol=kline_data['symbol'].iloc[0],
            sell_pressure_score=sell_pressure_score,
            confidence=confidence,
            recommended_action="做空" if sell_pressure_score > 0.7 else "观望"
        )

    return None

这段代码的思路不是教你怎么交易,而是演示一种将认知偏差量化为可计算信号的思维方式。当你把"损失厌恶"翻译成"处置效应抛压",再翻译成"反弹幅度 × 成交量异常"的数学表达式,你就把一个心理学概念变成了一个可回测、可优化的量化因子。

5.2 期望效用视角下的仓位管理

从规范经济学的角度,避免损失厌恶对决策的干扰,意味着你应该基于期望效用最大化而非短期的账面盈亏来做决策。

一个简化的期望效用函数(基于前景理论):

"""
基于前景理论的仓位效用计算

公式:U(w) = sum(p_i * v(x_i)),其中 v(x) 是S形价值函数

参数:
    w: 当前财富
    x: 收益/损失(正为收益,负为损失)
    p: 概率
    lambda_: 损失厌恶系数(经典值2.25)
    alpha: 风险偏好系数(经典值0.88)
    delta: 概率权重函数参数(经典值0.61)
"""

import numpy as np


def s_shaped_value(x: float, lambda_: float = 2.25, alpha: float = 0.88) -> float:
    """
    前景理论S形价值函数

    参数:
        x: 收益或损失金额
        lambda_: 损失厌恶系数
        alpha: 风险偏好系数(收益区域)
    """
    if x >= 0:
        # 收益分支:凹函数(边际递减)
        return np.power(x, alpha)
    else:
        # 损失分支:凸函数且更陡峭
        return -lambda_ * np.power(-x, alpha)


def expected_utility(positions: list[dict], lambda_: float = 2.25) -> float:
    """
    计算持仓组合的期望效用

    参数:
        positions: 持仓列表,每项包含 {'return': float, 'prob': float, 'capital': float}
    """
    total_utility = 0.0
    for pos in positions:
        value_change = pos['capital'] * pos['return']
        utility = pos['prob'] * s_shaped_value(value_change, lambda_)
        total_utility += utility
    return total_utility


def compare_positions():
    """
    比较两种策略的期望效用差异

    策略A:确定性盈利100元(100%概率)
    策略B:50%概率盈利250元,50%概率亏损50元
    """
    strategy_a = [{'return': 100 / 10000, 'prob': 1.0, 'capital': 10000}]
    strategy_b = [
        {'return': 250 / 10000, 'prob': 0.5, 'capital': 10000},
        {'return': -50 / 10000, 'prob': 0.5, 'capital': 10000}
    ]

    eu_a = expected_utility(strategy_a)
    eu_b = expected_utility(strategy_b)

    print(f"策略A期望效用(确定性盈利100元): {eu_a:.4f}")
    print(f"策略B期望效用(50%*250 vs 50%*(-50)): {eu_b:.4f}")
    print(f"两者相差: {eu_a - eu_b:.4f}")

    # 计算:对于损失厌恶者,策略B需要多高的盈利才能与策略A等价?
    # 设需要盈利 X 元,则 0.5*v(X) + 0.5*v(-50) = v(100)
    # 2.25*(50^0.88) - 0.5*(100^0.88) = 0.5*(X^0.88)
    # X ≈ 184 元(而非数学期望的200元)
    print("\n对于λ=2.25的损失厌恶者,策略B需要盈利约184元才能与策略A等价(而非期望值的200元)")


if __name__ == "__main__":
    compare_positions()

输出结果将揭示一个关键结论:损失厌恶者系统性地低估正期望值策略的价值。策略B的数学期望是 (250 - 50) / 2 = 100 元,与策略A的确定性 100 元完全相同。但由于损失厌恶的存在,损失厌恶者感受到的效用不等价——他们需要策略B有更高的期望收益才会觉得它有吸引力。

这直接解释了为什么在实盘中,当你持有一个有正期望收益的策略时,期间的正常回撤会让你觉得"这个策略不行了",从而放弃它——尽管从期望效用最大化角度,你应该坚持。


六、大脑机制:为什么意志力无法战胜损失厌恶

将损失厌恶仅仅归因于"性格"或"态度"是一个常见的误解。神经科学研究表明,损失厌恶有深厚的生理基础。

6.1 杏仁核与伏隔核的对抗

神经经济学家 Brian Knutson 通过功能性磁共振成像(fMRI)实验揭示了损失厌恶的神经机制:

  • 杏仁核(Amygdala):大脑的"威胁探测器",负责处理恐惧和焦虑。当你的持仓出现浮亏时,杏仁核被激活,驱动你做出规避损失的行为。
  • 伏隔核(Nucleus Accumbens):大脑的"奖励中心",负责处理愉悦感。当你的持仓出现浮盈时,伏隔核被激活,驱动你锁定收益。

关键发现是:杏仁核对损失的激活强度显著高于伏隔核对等量收益的激活强度。这与 Kahneman 的心理测量实验结果完全吻合——不是"感觉"上损失更痛苦,而是大脑神经系统物理性地对损失做出了更强烈的反应。

这意味着意志力在对抗损失厌恶时的作用极为有限。你无法用意志力让你的杏仁核安静下来,就像你无法用意志力让自己的心跳变慢一样。

6.2 皮质醇与决策质量

另一个被量化交易者忽视的生理因素是皮质醇(Cortisol)——一种压力激素。当交易者处于亏损压力下时,皮质醇水平升高,这会:

  1. 缩小注意力范围:只关注最近的亏损数据,忽视更长期的策略表现
  2. 降低风险评估能力:倾向于高估负面事件的概率
  3. 强化短期导向:更看重即时情绪安慰而非长期收益最大化

Cortez 和 Wang (2022) 的研究发现,散户交易者在交易日结束前最后一个小时的决策质量显著下降,与皮质醇水平的昼夜节律变化高度相关。


七、系统性应对:把偏差从执行层移除

理解了损失厌恶的机制之后,量化交易者的应对策略应该遵循一个核心原则:减少人在执行回路中的参与度

7.1 机械止损 vs 心理止损

最简单的原则:止损必须由系统执行,而非由人判断。

"""
机械止损系统设计

核心理念:止损条件一旦触发,必须立即执行,
不留给人工判断的窗口。

注意:此代码仅作概念演示,不构成任何投资建议。
"""

import time
from enum import Enum
from dataclasses import dataclass
from typing import Callable, Optional


class StopLossType(Enum):
    FIXED = "fixed"          # 固定比例止损
    ATR = "atr"              # ATR动态止损
    TIME_BASED = "time"      # 时间止损
    SIGNAL_BASED = "signal"  # 信号止损


@dataclass
class Position:
    symbol: str
    entry_price: float
    size: float
    entry_time: pd.Timestamp


class MechanicalStopLoss:
    """
    机械止损管理

    设计要点:
    1. 止损条件由配置决定,不由情绪决定
    2. 触发后立即执行,不等待下一根K线
    3. 所有操作记录日志,用于事后分析
    """

    def __init__(
        self,
        stop_loss_type: StopLossType,
        stop_loss_pct: float = 0.05,
        max_hold_bars: int = 20,
        trailing_pct: float = 0.03
    ):
        self.stop_loss_type = stop_loss_type
        self.stop_loss_pct = stop_loss_pct
        self.max_hold_bars = max_hold_bars
        self.trailing_pct = trailing_pct
        self.highest_price_since_entry = None

    def check_stop_loss(
        self,
        position: Position,
        current_price: float,
        current_bar_index: int
    ) -> tuple[bool, str, float]:
        """
        检查是否触发止损

        返回:
            (是否触发, 触发原因, 平仓价格)
        """

        # 固定比例止损
        loss_pct = (position.entry_price - current_price) / position.entry_price
        if loss_pct >= self.stop_loss_pct:
            return True, f"固定止损触发(亏损{loss_pct:.2%})", current_price

        # 时间止损
        bars_held = current_bar_index
        if bars_held >= self.max_hold_bars and loss_pct > 0:
            return True, f"时间止损触发(持有{bars_held}根K线,亏损{loss_pct:.2%})", current_price

        # 追踪止损(只保护利润,不锁定亏损)
        if self.highest_price_since_entry is None:
            self.highest_price_since_entry = position.entry_price

        if current_price > self.highest_price_since_entry:
            self.highest_price_since_entry = current_price

        # 从最高点回撤超过阈值则止损
        drawdown = (self.highest_price_since_entry - current_price) / self.highest_price_since_entry
        if drawdown >= self.trailing_pct and current_price > position.entry_price:
            return True, f"追踪止损触发(回撤{drawdown:.2%})", current_price

        return False, "", 0.0

    def execute_stop(self, position: Position, reason: str, price: float) -> None:
        """
        执行止损平仓

        在生产环境中,这里应接入券商API执行实际平仓操作。
        """
        pnl = (price - position.entry_price) * position.size
        print(f"[止损执行] 品种: {position.symbol}")
        print(f"[止损执行] 原因: {reason}")
        print(f"[止损执行] 入场价: {position.entry_price:.4f}")
        print(f"[止损执行] 平仓价: {price:.4f}")
        print(f"[止损执行] 盈亏: {pnl:.2f}")

        # ⚠️ 关键设计:执行后不等待人工确认,立即推送通知
        # 移除人工确认窗口,是对抗损失厌恶的核心手段

7.2 决策层级分离

另一个有效的策略是认知任务分离:把策略研究与策略执行交给不同的认知模式。

任务类型 认知模式 执行者 时间窗口
策略研究 分析型、慢速、理性 策略师 数天至数周
参数优化 计算型、系统化 量化系统 数小时至数天
策略执行 机械型、自动化 程序化系统 毫秒级
绩效复盘 分析型、慢速 策略师 每周/每月

在这个框架中,策略执行者必须对策略研究者的结论保持盲目——即执行系统不知道当前持仓是浮盈还是浮亏,它只知道"价格触及了止损线,执行平仓"。这种认知盲区实际上是优势而非缺陷。

7.3 改变参照点:用"概率"替代"盈亏"

认知重构是另一个被严重低估的工具。

损失厌恶的核心驱动是以当前价格 vs 入场价作为参照点。如果你能把参照点切换为策略的长期预期收益,损失厌恶的影响力会显著下降。

这不是自我欺骗,而是一种有认知科学依据的决策框架转换:

  • 原始参照点:"我的持仓亏了 500 元"(损失框架)
  • 重构参照点:"这个策略在历史上胜率 65%,当前这笔交易在预期范围内"(概率框架)

在代码层面,可以通过以下方式固化这种认知框架:

import pandas as pd
from dataclasses import dataclass
from datetime import datetime


@dataclass
class TradeRecord:
    """交易记录(带预期概率标注)"""
    symbol: str
    entry_time: datetime
    entry_price: float
    exit_time: datetime
    exit_price: float
    strategy_win_rate: float  # 该策略的历史胜率
    strategy_expectancy: float  # 该策略的期望收益


@dataclass
class PerformanceMetrics:
    """绩效指标(以策略视角而非单笔视角呈现)"""
    total_trades: int
    strategy_win_rate: float
    actual_win_rate: float
    expectancy: float
    largest_losing_streak: int
    average_winner: float
    average_loser: float
    risk_of_ruin: float


def calculate_performance_metrics(trades: list[TradeRecord]) -> PerformanceMetrics:
    """
    计算绩效指标

    核心设计:始终以策略维度的统计数据为参照,
    而非单笔交易的盈亏。
    """

    if not trades:
        raise ValueError("没有交易记录")

    winners = [t for t in trades if t.exit_price > t.entry_price]
    losers = [t for t in trades if t.exit_price <= t.entry_price]

    wins_pct = len(winners) / len(trades)
    avg_winner = sum(
        (t.exit_price - t.entry_price) / t.entry_price for t in winners
    ) / len(winners) if winners else 0.0

    avg_loser = sum(
        (t.exit_price - t.entry_price) / t.entry_price for t in losers
    ) / len(losers) if losers else 0.0

    # 期望收益 = 胜率 × 平均盈利 - 败率 × 平均亏损
    expectancy = wins_pct * avg_winner - (1 - wins_pct) * abs(avg_loser)

    # 最大连续亏损次数
    max_streak = 0
    current_streak = 0
    for t in trades:
        if t.exit_price <= t.entry_price:
            current_streak += 1
            max_streak = max(max_streak, current_streak)
        else:
            current_streak = 0

    return PerformanceMetrics(
        total_trades=len(trades),
        strategy_win_rate=trades[0].strategy_win_rate if trades else 0.0,
        actual_win_rate=wins_pct,
        expectancy=expectancy,
        largest_losing_streak=max_streak,
        average_winner=avg_winner,
        average_loser=avg_loser,
        risk_of_ruin=0.0  # 简化版,可扩展
    )


def performance_report(trades: list[TradeRecord]) -> str:
    """生成以策略视角为核心的绩效报告"""

    metrics = calculate_performance_metrics(trades)

    report = f"""
{'='*50}
绩效报告(策略维度)
{'='*50}
总交易次数:{metrics.total_trades}
策略预期胜率:{metrics.strategy_win_rate:.1%}
实际胜率:{metrics.actual_win_rate:.1%}

平均盈利:+{metrics.average_winner:.2%}
平均亏损:{metrics.average_loser:.2%}
期望收益:{metrics.expectancy:+.4f}

最大连续亏损:{metrics.largest_losing_streak} 次

{'='*50}
关键参照
{'='*50}
当前连续亏损是否超过策略历史最大值?
→ {'是,建议复盘' if metrics.largest_losing_streak > metrics.strategy_win_rate * 5 else '否,属于正常波动范围'}

实际胜率是否接近策略预期?
→ {'是,执行正常' if abs(metrics.actual_win_rate - metrics.strategy_win_rate) < 0.1 else '偏离较大,需分析原因'}
"""

    return report

这份报告的设计意图是:无论你当前持仓盈亏如何,你的决策参照系始终是策略的历史统计数据——胜率、期望收益、最大连续亏损——而非单笔交易的账面数字。这从根本上重构了"参照点",使损失厌恶失去其触发条件。


八、结语:与自己的神经回路和解

损失厌恶不是你的敌人。它是几十万年前进化留给你的遗产——在那个生存资源极度匮乏的世界里,对损失的敏感是一种生存优势。丢失一个苹果的代价可能高于找到一个苹果的收益,因此大脑将"避免损失"设置为比"追求收益"更高的优先级。

但金融市场的运行环境与非洲草原完全不同。在金融市场中,你需要在别人因为损失厌恶而恐慌抛售时保持冷静,需要在别人因为蝇头小利而急于止盈时坚持持仓。你的竞争优势,恰恰在于能够比大多数参与者更理性地处理损失带来的情绪压力。

理解损失厌恶,不是为了谴责自己曾经"扛单"或"卖飞",而是为了在设计系统和流程时,将这一认知偏差当作必须被系统处理的外部变量,而非依赖个人意志力来对抗的内部敌人。

当你发现自己盯着持仓盈亏数字感到焦虑时,那不是市场在警告你,而是你的神经回路在提醒你:需要切换回策略视角了。

记住:好的交易系统不是设计给"理想人"执行的,而是设计给"实际人"执行的——一个有损失厌恶、有锚定效应、有处置倾向的人。系统越健壮,就越不需要依赖人的理性;系统越脆弱,就越容易受到认知偏差的侵蚀。

这是你设计系统时最值得问的一个问题:这个系统的收益,是来自市场,还是来自你对自身认知偏差的补偿?


下一步行动

如果你想深入理解行为金融学的量化应用
推荐阅读《Advances in Behavioral Finance》第一卷(Thaler, 1993)和 Odean (1998) 的经典论文 "Do Investors Trade Too Much?"

如果你想动手检测自己策略的处置效应
使用 TickDB 的 /kline 接口获取历史数据,复现本文中的 DispositionSignal 检测器,对你的交易记录进行分析。

如果你想了解如何用 SKILL 加速量化开发
在 AI 助手中搜索并安装 tickdb-market-data SKILL,用自然语言描述你的策略逻辑,快速生成数据获取和信号计算的代码框架。


本文不构成任何投资建议。市场有风险,投资需谨慎。