
为什么你的止损总是被精准打掉
做股票和期货的人都有过这种憋屈经历。刚割肉离场,价格立刻朝原方向狂奔。心里骂主力就差自己那几百股。问题不在运气,在于止损位设置的方式和市场的呼吸节奏对不上。
市场每分钟都在呼吸,这个呼吸的幅度就是波动率。把止损塞在呼吸范围内,等于站在路中间等人撞。把止损扔到呼吸范围外老远,单次亏损又可能吃掉半个月利润。止损的艺术就是找到那个平衡点。
用ATR找到市场的呼吸幅度
ATR全称平均真实波幅,它测量过去一段时间价格平均每天晃荡多大。股票软件和期货软件里都能调出来。参数用14天比较通用。
假设某只股票现价50块,ATR显示每天平均波动1.5块。你把止损设在49.5块,距离现价只有0.5块,连市场半天正常晃荡都扛不住。价格一个喷嚏就扫掉止损,然后继续原来的路。

正确的做法是让止损距离至少等于1倍ATR。也就是至少放到48.5块以下。这样市场日常呼吸碰不到你的止损。碰到说明方向真的变了。
仓位大小决定止损宽窄
止损距离不是孤立定的。它和仓位绑在一起。
公式很简单。单笔最大亏损金额除以止损距离等于可开仓位。单笔最大亏损金额由总资金比例决定。职业交易员通常控制在总资金1%到2%之间。
期货自带杠杆,这个计算更关键。螺纹钢期货一跳10块钱,ATR显示日均波动80个点。你准备用2%总亏损来止损。账户50万,2%就是1万。1万除以800块每手波动等于12.5手。取整12手。如果ATR突然放大到120个点,同样1万亏损只能开8手。
仓位跟着波动率自动缩水。波动小的时候仓位大,波动大的时候仓位小。资金曲线会平滑很多。
趋势不同止损位置不同
震荡区间里,价格在上下沿之间来回蹭。止损放在区间外沿再加一点ATR缓冲。做多的话,止损放在区间下沿减去0.5倍ATR。做空反过来。
单边趋势里,移动止损更管用。用前一根K线的最低点作为多单止损,或者用20日均线作为动态防线。价格每创一次新高,止损跟着往上提。ATR乘以2作为追踪距离比较常见。
日内交易者用更短周期。5分钟图上的ATR可能只有3个点。止损放到5到6个点就够。持仓时间短,不需要扛隔夜跳空。
股票和期货的止损差异
股票没有杠杆,跌10%就是亏10%本金。期货10倍杠杆,跌1%就是亏10%本金。同等止损距离,期货的冲击大十倍。
股票止损可以稍微宽一点,给公司基本面发酵时间。期货必须严格按ATR来,因为杠杆放大每一个点的伤害。
股票有涨跌停板。一字跌停时止损单可能无法成交。遇到这种情况,开盘集合竞价就要挂单。期货连续交易,止损单随时能触发,滑点控制在两个跳以内算正常。
程序化交易中的止损代码框架
用Python写一个基于ATR的移动止损逻辑。
import numpy as np
def atr_stop_loss(highs, lows, closes, period=14, multiplier=2.0):
tr_list = []
for i in range(1, len(highs)):
tr = max(
highs[i] - lows[i],
abs(highs[i] - closes[i-1]),
abs(lows[i] - closes[i-1])
)
tr_list.append(tr)
atr = np.mean(tr_list[-period:])
stop_price = closes[-1] - multiplier * atr
return stop_price
# 多单持仓时调用
stop = atr_stop_loss(high_arr, low_arr, close_arr, 14, 2.0)
if current_price < stop:
close_position()
这段代码只做一件事。计算过去14根K线的平均真实波幅,乘以2倍系数,用当前收盘价减去这个值。价格跌破这个线就平多单。做空反过来加。
系数2.0不是固定的。短线用1.5到2.0,中线用2.0到3.0。系数越大止损越宽容,单笔亏损金额相应提高,仓位要按比例缩小。
拒绝情绪干扰的硬规则
止损设置完就写进交易软件的条件单。不要手动盯着盘面临时改主意。改一次就有第二次。
每天收盘后复盘。检查止损触发的原因。是市场正常波动扫掉的,就把ATR系数放大0.5。是方向真错了,就接受这笔亏损。连续被扫三次,说明当前波动率已经变化,重新拉数据算ATR。
资金管理高于一切。任何时候单笔亏损不超过总资金2%。用ATR测算距离,用2%反推仓位。这两条锁死,账户不会伤筋动骨。
止损不是预测,是保险。你不需要知道价格会不会回来。你只需要知道如果它不回来,你还能留在牌桌上。
