如何用Pine Script编写收盘价突破前期高点且区间无更高高点的条件
问题诊断
你的代码没有输出预期标识,核心有三个错误:
- 未使用
var关键字声明the_high变量,每根K线计算时都会将the_high重置为当前K线最高价,high > the_high的条件永远不成立,无法正常累积历史高点。 barssince()函数要求入参是布尔型条件表达式,原代码传入了数值型的the_high[-1],返回值始终为无效值na,后续highest()计算结果也为无效值,space_between永远不满足触发条件。- 原有逻辑没有匹配需求里「高点与后续蜡烛实体重合、中间无更高高点阻挡」的判断规则,全局高点的更新逻辑也不符合需求。
修正后代码
//@version=4 study("High Space Higher Close",overlay=true) // 用var声明变量,仅初始化一次,避免每根K线重置 var float prev_phase_high = na var float last_high_bar = na // 判断当前K线是否为阶段新高,20为阶段高点判断周期,可按需调整 is_new_high = high > highest(high, 20)[1] if is_new_high prev_phase_high := high last_high_bar := bar_index // 计算两个高点之间的最高值,判断是否有阻挡 bars_since_high = bar_index - last_high_bar interim_high = highest(high, bars_since_high)[1] no_block = interim_high <= prev_phase_high // 判断收盘价突破前期阶段高点,且实体覆盖前期高点,中间无阻挡 trigger_signal = close >= prev_phase_high and no_block and not is_new_high // 绘制标识:圆形标阶段高点,三角形标符合要求的突破点 plotshape(is_new_high, size=size.normal, location=location.abovebar, style=shape.circle, color=color.red) plotshape(trigger_signal, size=size.normal, location=location.abovebar, style=shape.triangleup, color=color.green)
逻辑说明
- 用
var关键字声明变量,保证历史阶段高点和对应K线位置只在满足条件时更新,不会每根K线重置。 - 通过指定周期的最高值判断阶段高点,你可以根据自己的需求调整
highest(high, 20)里的周期参数,适配不同的高点判断规则,匹配你示例图的效果。 - 计算阶段高点出现后到当前K线之间的所有K线最高价,确认没有超过前期阶段高点的阻挡,满足两个高点之间只有更低高点的要求。
- 当收盘价超过前期阶段高点,且中间无阻挡时触发信号,绘制对应的标识。
内容的提问来源于stack exchange,提问作者Drewdavid
相关产品推荐
相关产品推荐

