
程序化交易中有什么好的止损方式
程序化交易执行止损,核心目标是控制单笔亏损上限,防止连续亏损击穿本金。没有万能止损,只有匹配策略逻辑与市场波动特征的止损。以下五种方式在股票与期货实战中反复验证有效。
1. 固定百分比止损
以开仓价为基准,价格反向波动达到预设百分比时平仓。股票常用3%至8%,期货因杠杆放大,常用0.5%至2%。
代码示例(Python伪代码):

def fixed_pct_stop(entry_price, current_price, pct):
if current_price <= entry_price * (1 - pct):
return True
return False
该方式简单透明,适合趋势策略。缺陷在于无法适应波动率变化。高波动品种容易被随机波动扫损,低波动品种止损过宽。
改进方案:根据历史波动率动态调整百分比。计算过去20日ATR与收盘价之比,乘以系数2.0,得到止损百分比。
2. ATR动态止损
ATR(平均真实波幅)衡量近期波动幅度。开仓后,止损距离设为N倍ATR。股票常用1.5至3倍,期货常用1至2倍。
ATR止损随市场波动自动收缩或扩张。波动放大时止损放宽,避免被短期噪声触发;波动收窄时止损收紧,保护利润。
计算步骤:
真实波幅 = max(最高-最低, |最高-昨收|, |最低-昨收|)
ATR = 过去14周期真实波幅的移动平均
多头止损价 = 开仓价 - 2 * ATR
空头止损价 = 开仓价 + 2 * ATR
期货日内交易中,ATR止损配合1分钟或5分钟K线效果显著。股票中长线可将周期改为日线。
3. 移动止损(跟踪止损)
开仓后,止损位随价格有利方向移动,永不后退。常见实现:
吊灯止损:最高价 - 3 * ATR
抛物线SAR:根据加速因子调整
百分比跟踪:最高浮盈回撤一定比例
代码示例:
def trailing_stop(high_since_entry, entry_price, atr, mult=3):
stop = high_since_entry - mult * atr
return max(stop, entry_price - mult * atr)
移动止损锁定利润,适合趋势流畅的股票与期货合约。震荡市中容易被反复触发,需结合趋势过滤。
关键参数:回撤比例或ATR倍数。过小导致频繁离场,过大丧失保护。用历史数据遍历测试,选择夏普比率最高的参数。
4. 时间止损
开仓后持仓超过N个周期仍未达到目标利润,无论盈亏均平仓。股票常用5至20个交易日,期货日内常用3至10根K线。
时间止损解决流动性停滞或逻辑失效问题。程序化交易中,时间止损防止资金被无效占用。配合价格止损,形成双保险。
代码逻辑:记录开仓时间,每根K线检查持仓时长。若超过阈值且浮盈小于预设最小盈利,发出平仓指令。
注意:时间止损周期需根据品种活跃时段调整。股票开盘后30分钟与收盘前30分钟波动较大,期货夜盘与日盘特性不同。
5. 资金回撤止损
从账户净值最高点回撤达到预设比例时,强制清仓并暂停交易。股票账户常用10%至20%,期货账户常用5%至10%。
该方式保护整体本金,避免单次极端行情或连续亏损摧毁账户。程序化交易中,资金回撤止损是最后防线。
实现:每日收盘后计算账户净值。若净值/历史最高净值 - 1 <= -阈值,平掉所有仓位,停止策略运行,等待人工复核。
期货交易需考虑保证金变动。回撤止损触发后,检查可用资金是否满足隔夜保证金要求。不足则优先平仓。
组合止损方案
单一止损方式存在盲区。实战中叠加使用:
固定百分比止损作为硬约束
ATR止损作为主逻辑
移动止损保护利润
时间止损清理无效仓位
资金回撤止损控制全局风险
股票程序化交易中,固定百分比与移动止损组合最常用。期货因杠杆高,ATR止损与资金回撤止损更关键。
止损参数优化要点:
用样本外数据验证
避免过度拟合
考虑滑点与手续费
期货需测试不同保证金比例
常见错误
止损过窄导致频繁触发。程序化回测中,止损宽度小于平均真实波幅的0.5倍时,胜率极低。
止损过宽导致单笔亏损过大。止损距离超过3倍ATR时,连续三笔亏损可造成20%以上回撤。
移动止损启动过早。开仓后立即移动止损,价格正常回撤即被扫出。建议浮盈达到1倍ATR后再启动移动止损。
忽略品种差异。股票与期货波动特性不同,同一止损参数不可直接移植。期货主力合约与次主力合约波动也不同。
实战建议
股票程序化交易:日线级别,使用2倍ATR止损,配合5%固定止损。移动止损在浮盈3%后启动,回撤2%离场。时间止损设为10个交易日。
期货程序化交易:30分钟K线,使用1.5倍ATR止损。移动止损在浮盈1.5倍ATR后启动,回撤0.8倍ATR离场。时间止损设为8根K线。资金回撤止损设为6%。
所有止损规则必须写入策略代码,由程序自动执行。人工干预会破坏统计一致性。回测时逐笔模拟止损触发,记录滑点影响。
持续监控止损触发频率。若某月触发次数超过历史均值2倍标准差,检查市场波动率是否突变,临时放宽止损或降低仓位。