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

如何在Pine Script中实现价格触及Pivot高低线时自动下单?

问题:Pivot高低线触发下单仅部分生效,如何实现价格触及自动下单

尝试使用以下Pine Script脚本在每一条pivotHigh和pivotLow线上下达买入和卖出订单,但仅能成功生成部分订单。需要实现价格触及这些线时自动下单。

原脚本代码

//variable declartions
plotPivots = true
hih = pivothigh(high, pivotLookup, pivotLookup)
lol = pivotlow (low , pivotLookup, pivotLookup)
top = valuewhen(hih, high[pivotLookup], 0)
bottom = valuewhen(lol, low [pivotLookup], 0)
plot(top, offset=-pivotLookup, linewidth=2, color=(top != top[1] ? na : (plotPivots ? color.silver : na)), title="pivotTop")
plot(bottom, offset=-pivotLookup, linewidth=2, color=(bottom != bottom[1] ? na : (plotPivots ? color.silver : na)), title="pivotBottom")

if crossover(close, top)
    box.new(left=bar_index, top=top, right=bar_index+boxLength, bottom=bottom, bgcolor=color.new(color.green, boxTransparency), border_color=color.new(color.green, 80))
    strategy.entry("BUY", strategy.long, comment="BUY STOP", alert_message="BUY")
    
if crossunder(close, bottom)
    box.new(left=bar_index, top=top, right=bar_index+boxLength, bottom=bottom, bgcolor=color.new(color.red, boxTransparency), border_color=color.new(color.red, 80))
    strategy.entry("SELL", strategy.short,  comment="SELL STOP", alert_message="SELL")

问题原因

  1. 仅监控最新Pivot水平:原脚本中top和bottom仅存储最新的pivot高低点,新的pivot生成后会覆盖旧值,导致之前的pivot线不再被监控,自然无法触发订单。
  2. 订单类型错误:代码注释写的是"BUY STOP",但实际用strategy.entry默认生成市价单,而非止损触发单,无法实现“价格触及线时下单”的逻辑。
  3. 触发条件局限:仅用crossover(close, top)判断,若价格在K线内部触及pivot线但收盘价未上穿,不会触发订单。

解决方案代码

//@version=5
strategy("Pivot触发生成订单", overlay=true, default_qty_type=strategy.cash, default_qty_value=1000, initial_capital=10000)

// 参数设置
pivotLookup = input.int(2, title="Pivot查找范围")
boxLength = input.int(5, title="标记框长度")
boxTransparency = input.int(90, title="标记框透明度")

// 存储历史Pivot水平的数组
var float[] pivotHighs = array.new_float()
var float[] pivotLows = array.new_float()

// 识别新的Pivot并添加到数组
hih = ta.pivothigh(high, pivotLookup, pivotLookup)
lol = ta.pivotlow(low, pivotLookup, pivotLookup)

if hih
    pivotLevel = ta.valuewhen(hih, high[pivotLookup], 0)
    array.push(pivotHighs, pivotLevel)
    // 绘制Pivot高线
    plot(pivotLevel, offset=-pivotLookup, linewidth=2, color=color.silver, title="Pivot High")

if lol
    pivotLevel = ta.valuewhen(lol, low[pivotLookup], 0)
    array.push(pivotLows, pivotLevel)
    // 绘制Pivot低线
    plot(pivotLevel, offset=-pivotLookup, linewidth=2, color=color.silver, title="Pivot Low")

// 遍历所有未触发的Pivot High,触发多单
for i = 0 to array.size(pivotHighs) - 1
    pivotLevel = array.get(pivotHighs, i)
    // 检查价格是否触及Pivot High,且未持有多单
    if high >= pivotLevel and strategy.position_size <= 0
        box.new(left=bar_index, top=pivotLevel, right=bar_index+boxLength, bottom=ta.lowest(low, pivotLookup*2), bgcolor=color.new(color.green, boxTransparency), border_color=color.new(color.green, 80))
        strategy.entry("BUY_" + str.tostring(i), strategy.long, stop=pivotLevel, comment="BUY STOP", alert_message="BUY at " + str.tostring(pivotLevel))
        // 触发后移除该Pivot水平,避免重复下单
        array.remove(pivotHighs, i)
        break

// 遍历所有未触发的Pivot Low,触发空单
for i = 0 to array.size(pivotLows) - 1
    pivotLevel = array.get(pivotLows, i)
    // 检查价格是否触及Pivot Low,且未持有空单
    if low <= pivotLevel and strategy.position_size >= 0
        box.new(left=bar_index, top=ta.highest(high, pivotLookup*2), bottom=pivotLevel, right=bar_index+boxLength, bgcolor=color.new(color.red, boxTransparency), border_color=color.new(color.red, 80))
        strategy.entry("SELL_" + str.tostring(i), strategy.short, stop=pivotLevel, comment="SELL STOP", alert_message="SELL at " + str.tostring(pivotLevel))
        // 触发后移除该Pivot水平,避免重复下单
        array.remove(pivotLows, i)
        break

// 可选:反向Pivot触发时平仓
if hih
    strategy.close_all(comment="Close on new Pivot High")
if lol
    strategy.close_all(comment="Close on new Pivot Low")

关键修改说明

  • 存储历史Pivot:用var数组保存所有生成的pivot高低水平,确保每条线都被监控。
  • 止损触发订单:使用strategy.entry的stop参数,设置触发价格为pivot线水平,实现价格触及自动下单。
  • 宽范围触发判断:用high >= pivotLevel(多单)和low <= pivotLevel(空单),覆盖K线内部触及的情况。
  • 避免重复下单:订单触发后从数组中移除对应的pivot水平,并用唯一ID(如BUY_0)区分订单。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:35:25