Pine Script卖出触发条件确认及绘图实现技术问询
Pine Script 卖出信号确认图形绘制问题修正
原代码存在的问题
- 单个变量
indicePrimeiroEvento会被新的触发事件覆盖,无法跟踪历史触发事件,导致仅能检测最后一次触发后的确认信号。 - 触发K线最低价的引用方式错误,
low[indicePrimeiroEvento]不符合Pine Script索引规则,无法正确获取触发K线的最低价。 - 回溯周期的判断逻辑无效,
bar_index >= bar_index[indicePrimeiroEvento] - lookbackPeriod写法无实际意义,无法限制确认信号的检测范围。
修正后的代码
//@version=4 study(title="Eventos e Alerta", shorttitle="Eventos e Alerta", overlay=true) lookbackPeriod = 60 // 确认信号的最大回溯周期,超过此周期不再检测该触发事件 // 用数组存储触发事件的K线索引和对应最低价 var int[] triggerBars = array.new_int() var float[] triggerLows = array.new_float() // 1. 检测卖出触发条件:当前K线high>前一根high,low>前一根low triggerCondition = high > high[1] and low > low[1] // 记录触发事件 if triggerCondition array.push(triggerBars, bar_index) array.push(triggerLows, low) // 2. 检测确认条件:当前K线收盘价低于某一触发K线的最低价,且触发事件在回溯周期内 confirmCondition = false float targetLow = na int matchedTriggerIdx = na // 遍历所有未过期的触发事件 for i = 0 to array.size(triggerBars) - 1 triggerBarIdx = array.get(triggerBars, i) // 仅检测回溯周期内的触发事件 if bar_index - triggerBarIdx <= lookbackPeriod triggerLow = array.get(triggerLows, i) if close < triggerLow confirmCondition := true targetLow := triggerLow matchedTriggerIdx := triggerBarIdx break // 找到第一个符合条件的事件后停止遍历 // 在确认K线下方绘制向下三角形 plotshape(series=confirmCondition, title="卖出确认信号", location=location.belowbar, color=color.red, style=shape.triangledown, size=size.small) // 可选:绘制触发K线到确认K线的水平虚线 if confirmCondition line.new(x1=matchedTriggerIdx, y1=targetLow, x2=bar_index, y2=targetLow, color=color.red, width=1, style=style.dashed)
代码逻辑说明
- 触发事件存储:用两个数组分别记录所有满足条件的触发K线索引和对应最低价,避免单个变量覆盖导致的历史事件丢失问题。
- 确认信号检测:遍历数组中的触发事件,仅检测回溯周期内的事件,当当前K线收盘价低于触发K线最低价时,标记确认信号。
- 图形绘制:在确认信号触发的K线下方绘制红色向下三角形,可选添加触发K线与确认K线之间的虚线,直观展示信号逻辑。
- 回溯周期控制:通过
bar_index - triggerBarIdx <= lookbackPeriod限制仅检测最近60根K线内的触发事件,避免不必要的性能消耗。
内容的提问来源于stack exchange,提问作者Alex C.
相关产品推荐
相关产品推荐

