You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pine Script基于前14根K线高低点计算止损止盈错误排查

问题根源

你的代码计算结果不符合预期,核心是3个逻辑错误:

  • ta.highest(high,14)、ta.lowest(low,14)默认包含当前未走完的K线,实时行情中当前K线的高低点会一直变动,导致计算基准飘移。你需要的是前置14根已收盘K线,必须做1个周期的偏移。
  • 止损、止盈的差值是每根K线基于最新收盘价、最新高低点实时计算的,开仓后不会锁定数值,持仓过程中SL/TP会跟着新K线一直变,和你开仓时的计算基准完全脱节。
  • 多余的float()转换没有实际作用,不会影响计算结果,但会干扰代码逻辑排查。
修正后可直接运行的代码
//@version=5
strategy("14周期前置K线SL/TP计算", overlay=true)

// 可调整参数
lookback_len = input.int(14, title="前置K线根数", minval=1)
tp1_multiplier = input.float(1.5, title="第一止盈倍率")
tp2_multiplier = input.float(3.0, title="第二止盈倍率")

// 计算不含当前K线的前N根K线高低点
prev_14_high = ta.highest(high, lookback_len)[1]
prev_14_low = ta.lowest(low, lookback_len)[1]

// 示例开仓条件:上破前14根高点做多,下破前14根低点做空,可替换为你自己的开仓逻辑
long_entry_sig = ta.crossover(close, prev_14_high)
short_entry_sig = ta.crossunder(close, prev_14_low)

// 开仓时锁定止损宽度,持仓期间不重新计算
var float long_sl_offset = na
var float short_sl_offset = na
if long_entry_sig
    // 按你原逻辑取开仓价到前14根高点的差值作为多单止损宽度
    long_sl_offset := prev_14_high - close
if short_entry_sig
    // 按你原逻辑取开仓价到前14根低点的差值作为空单止损宽度
    short_sl_offset := close - prev_14_low

// 计算固定SL/TP价格
long_sl_price = strategy.position_avg_price - long_sl_offset
long_tp1_price = strategy.position_avg_price + long_sl_offset * tp1_multiplier
long_tp2_price = strategy.position_avg_price + long_sl_offset * tp2_multiplier

short_sl_price = strategy.position_avg_price + short_sl_offset
short_tp1_price = strategy.position_avg_price - short_sl_offset * tp1_multiplier
short_tp2_price = strategy.position_avg_price - short_sl_offset * tp2_multiplier

// 下单逻辑
if long_entry_sig
    strategy.entry("多单", strategy.long)
    strategy.exit("多单出场", "多单", stop=long_sl_price, limit=long_tp1_price)
if short_entry_sig
    strategy.entry("空单", strategy.short)
    strategy.exit("空单出场", "空单", stop=short_sl_price, limit=short_tp1_price)

// 绘图核对基准位
plot(prev_14_high, color=color.red, title="前14根高点", style=plot.style_linebr)
plot(prev_14_low, color=color.green, title="前14根低点", style=plot.style_linebr)
plot(strategy.position_size > 0 ? long_sl_price : na, color=color.orange, title="多单止损", linewidth=2, style=plot.style_linebr)
plot(strategy.position_size < 0 ? short_sl_price : na, color=color.orange, title="空单止损", linewidth=2, style=plot.style_linebr)
调整说明
  • 如果你实际需要的多单止损基准是前14根低点(即多单止损放在前低下方,这是更通用的逻辑),只需要把开仓时long_sl_offset的赋值改为close - prev_14_low即可;对应空单止损放在前高上方的话,把short_sl_offset赋值改为prev_14_high - close。
  • 代码中加了高低点、止损位的绘图,加载到图表后可以直接逐根K线核对数值,确认计算逻辑和你的预期一致。
  • 如果你需要分批次止盈(比如TP1平一半仓位,TP2平剩余仓位),可以在strategy.exit里增加对应仓位参数即可。

内容的提问来源于stack exchange,提问作者Pham Tan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 12:39:14