如何标记下跌K线序列后的第一根上涨K线(Pine Script)
Pine Script 标记连续下跌后的第一根上涨K线
原代码问题分析
- 仅检查前一根K线是否为非上涨K线,无法识别连续多根下跌后的第一根上涨K线。
UpBar定义过于严格(要求high和low均超过前一根K线),会遗漏部分实际属于上涨的K线(如光头阳线、收盘价上涨但low未创新高的K线)。
解决思路
通过状态变量跟踪当前是否处于连续下跌阶段,逻辑如下:
- 出现下跌K线时,开启连续下跌跟踪状态;
- 跟踪状态下,第一根上涨K线出现时标记该K线,并关闭跟踪状态;
- 遍历全K线序列,重复上述逻辑。
完整代码
//@version=5 indicator("连续下跌后第一根上涨K线标记", overlay=true) // 自定义涨跌K线判断:可根据需求调整 // 原定义(严格版) UpBar = high > high[1] and low > low[1] DownBar = high < high[1] and low < low[1] // 可选:更通用的收盘价涨跌判断(减少遗漏) // UpBar = close > close[1] // DownBar = close < close[1] // 状态变量:标记是否处于连续下跌跟踪阶段(var确保变量跨K线保留状态) var inDownTrend = false // 更新状态逻辑 if DownBar inDownTrend := true else if UpBar and inDownTrend inDownTrend := false // 标记条件:当前为上涨K线,且前一根处于连续下跌跟踪阶段 markBar = UpBar and inDownTrend[1] // 绘制标记(在K线下方显示蓝色三角) plotchar(markBar, title="第一根上涨K线", char="▲", color=color.blue, location=location.belowbar, size=size.small)
代码说明
var inDownTrend = false:使用var关键字初始化状态变量,确保变量值在K线更新时不会被重置,持续跟踪状态。- 状态切换逻辑:下跌K线触发跟踪状态开启,跟踪状态下的第一根上涨K线触发状态关闭。
- 标记逻辑:
markBar判断当前K线是上涨K线,且前一根K线处于跟踪状态,确保标记的是连续下跌后的第一根上涨K线。 - 可按需替换涨跌K线的判断逻辑,比如用收盘价判断更符合常规的涨跌认知,避免遗漏。
内容的提问来源于stack exchange,提问作者Ryan kenshin
相关产品推荐
相关产品推荐

