
止损后立刻再进场,为什么总是亏更多?
做过程序化交易的人都遇到过这种场景:一笔单子被止损打掉,系统马上又发出一个同方向信号,你犹豫了一下还是让它进去了,结果又被打止损。连续几笔下来,账户回撤迅速扩大。问题不在策略本身,而是止损之后的时间管理没做好。
人在连续亏损后会变得急躁,程序没有情绪,但程序的信号生成逻辑、仓位计算模块、过滤条件如果不做冷却处理,就会在震荡行情里反复挨打。下一笔交易到底该等多久,不是一个拍脑袋的数字,需要从市场结构、策略类型、资金曲线三个角度来定。

冷却时间的底层逻辑
市场在短时间内反复触发同一个方向的止损,说明当前价格区间存在强阻力或强支撑。价格第一次触碰被弹回,第二次触碰又被弹回,第三次大概率还是弹回。程序化交易系统如果每次信号都无差别执行,就是在同一个坑里摔三次。
冷却时间的本质是给市场一个重新选择方向的机会。价格要么突破这个区间,要么继续在这个区间里震荡。等市场自己做出选择之后再进场,胜率会明显提高。
冷却期的长度取决于策略的时间周期。
日内高频策略,冷却期可以短到15分钟到30分钟。
中频波段策略,冷却期设置在2到4小时比较合适。
日线级别的趋势策略,冷却期至少1到2个交易日。
这些数字不是死规定,核心原则是冷却期要覆盖掉当前震荡区间完成一次完整多空转换所需要的时间。
用代码给策略加一道冷却闸门
程序化交易的好处是规则可以写死,不给自己找借口。下面这段伪代码展示了一种常见的冷却期实现方式,记录上一次止损的时间戳,在冷却期内拒绝新开仓信号。
last_stop_loss_time = None
cooldown_minutes = 120
def on_bar(bar):
global last_stop_loss_time
current_time = bar.datetime
if last_stop_loss_time is not None:
elapsed = (current_time - last_stop_loss_time).total_seconds() / 60
if elapsed < cooldown_minutes:
return
signal = generate_signal(bar)
if signal == 'buy' and position == 0:
open_long()
elif signal == 'sell' and position == 0:
open_short()
def on_stop_loss():
global last_stop_loss_time
last_stop_loss_time = get_current_time()
close_position()
这段代码的关键在于on_stop_loss回调里记录时间戳,然后在每根K线到来时先检查冷却期是否结束。冷却期内即使信号再强烈,也不允许开仓。
冷却期之外还要做信号过滤
单纯等时间不够,止损后市场可能已经进入了新的趋势,但你的策略参数还是按照旧趋势来生成信号。需要加一层条件判断。
止损发生后,把当前K线的波动率、成交量、均线排列状态记录下来。下一笔交易开仓前,要求这些指标至少有两个发生了实质性变化。价格重新站上关键均线,成交量比止损时放大20%以上,波动率从高位回落。条件满足才允许进场。
这种过滤方式能有效避开那些假突破。止损往往发生在假突破之后,价格快速反向运动打掉止损,然后又回到原来的方向。如果冷却期结束就急着进场,很可能再次被假突破伤害。等成交量确认、均线重新排列,说明市场真正选择了方向。
仓位要不要调整
止损后的第一笔交易,仓位应该减半。这不是因为策略失效,而是因为账户资金曲线出现了回撤。假设你的策略正常回撤幅度是5%,止损后回撤达到了8%,说明当前市场环境对这个策略不友好。减半仓位是在用最小的代价测试市场是否恢复正常。
连续两笔止损之后,第三笔交易的仓位应该降到正常水平的三分之一。连续三笔止损,当天停止交易。程序化交易的纪律性就体现在这里,不是靠感觉决定要不要继续,而是靠硬规则。
资金曲线管理模块应该独立于信号生成模块。信号说可以买,资金曲线管理模块有权否决。两个模块配合,才能在止损后保持账户安全。
不同策略类型的处理差异
趋势跟踪策略在震荡市里会频繁止损,冷却期要设得足够长,至少要等到价格突破震荡区间上沿或下沿。突破确认之后,趋势策略的胜率会大幅回升。
均值回归策略在趋势市里会频繁止损,冷却期要等到价格偏离度重新回到极端值。均值回归策略不怕震荡,怕的是单边。止损后等价格再次偏离均线超过两个标准差,再考虑进场。
套利策略的止损通常来自价差异常扩大,冷却期要等到价差回归正常区间。套利策略的止损后处理相对简单,因为价差的均值回归特性比价格本身更强。
高频做市策略的止损来自库存风险,冷却期要等到库存回到中性水平。做市策略的止损后处理核心是降低报价频率和报价数量,等市场流动性恢复。
把冷却规则写进策略框架
一个完整的程序化交易策略框架应该包含以下模块:
信号生成模块,负责计算开平仓信号。
风险控制模块,负责计算止损止盈位置和仓位大小。
冷却管理模块,负责记录止损时间、计算冷却期、过滤新信号。
资金曲线管理模块,负责根据回撤幅度调整仓位。
冷却管理模块和资金曲线管理模块是很多散户程序化交易者忽略的部分。信号生成得再好,没有这两层保护,一次连续止损就能把之前的利润全部吐回去。
止损不是失败,是交易成本。冷却期是控制这个成本的关键手段。把冷却规则写进代码,让程序帮你管住手,长期来看账户曲线会平滑很多。