Pine脚本识别支撑/阻力区间
在这篇文章中,我们将使用Pine脚本构建一个转折百分位振荡器——一种跟踪价格在其最近结构转折点之间位置的工具。

一键发币: SUI | SOL | BNB | ETH | BASE | ARB | OP | POLYGON | 跨链桥/跨链兑换
支撑位和阻力位通常被认为是水平线——从之前的高点和低点绘制的静态价格水平。但在动态趋势中,结构会在移动过程中形成。这些内部区域——由转折点反应构建——通常是价格盘整、拒绝或继续的地方。
大多数指标缺少的是一个能够表示这种动态结构的方法。
这就是这个脚本解决的问题。
在这篇文章中,我们将使用Pine脚本构建一个转折百分位振荡器——一种跟踪价格在其最近结构转折点之间位置的工具。它不衡量动量或成交量。它只是简单地映射价格相对于在趋势中形成的最近支撑和阻力区的位置。
1、核心理念:从转折点构建结构
与其将支撑和阻力锚定在静态水平上,我们通过追踪最近的转折高点和转折低点来动态定义它们。一旦识别出来,我们就将当前价格与这个动态范围进行比较,以了解其相对位置。
结果是一个在以下范围内缩放的振荡器:
- 0: 价格接近最近的转折低点(支撑上下文)
- 100: 价格接近最近的转折高点(阻力上下文)
- 50: 价格处于结构中部(中性区域)
当评估回调、盘整或确定价格是否保持在最近结构之上或滑落到之下时,这种视角非常有用。
2、在Pine脚本中构建振荡器
2.1 识别转折高点和低点
我们将使用Pine内置的ta.pivothigh()
和ta.pivotlow()
函数来检测结构转折点。
//@version=5
indicator("转折百分位振荡器", overlay=false)
pivotLookback = input.int(5, "转折回溯期")pivotHigh = ta.pivothigh(high, pivotLookBack, pivotLookBack)
pivotLow = ta.pivotlow(low, pivotLookBack, pivotLookBack)
这些函数通过检查高点或低点是否在一个窗口内的最大值/最小值来找到局部高低点。
2.2 存储最近确认的转折点
我们将使用持久变量存储最近的值。
var float recentHigh = na
var float recentLow = na
if not na(pivotHigh)
recentHigh := pivotHighif not na(pivotLow)
recentLow := pivotLow
此逻辑确保即使价格继续更新,我们仍然保留最近的转折值。
2.3 在该转折范围内归一化价格
我们计算当前价格位于最近高点和低点之间的位置:
range = recentHigh - recentLow
percentile = range > 0 ? (close - recentLow) / range * 100 : na
这给出了一个从0到100的归一化值——一个反映价格在最新转折点定义的结构中所处位置的百分位读数。
2.4 绘制振荡器
plot(percentile, title="转折百分位", color=color.blue, linewidth=2)
hline(80, "上限", color=color.red)
hline(20, "下限", color=color.green)
hline(50, "中点", color=color.gray)
现在,振荡器直观地反映了价格是接近近期高点还是低点,或者是在两者之间漂移。
3、增强功能
这个工具本身很有用——但可以通过一些简单的升级使其更具操作性。
3.1 背景高亮显示区域上下文
高亮显示区域可以提高清晰度,特别是在趋势阶段。
bgcolor(percentile >= 80 ? color.new(color.red, 90) :
percentile <= 20 ? color.new(color.green, 90) : na)
这会在价格处于结构极端时突出图表背景——有助于识别趋势中的可能反应区域。
3.2 入场/出场结构重新进入检测
我们可以突出显示价格在突破或跌破后返回结构区的情况。
aboveRange = percentile > 100
belowRange = percentile < 0
reenterStructure = (aboveRange[1] and percentile <= 100) or (belowRange[1] and percentile >= 0)plotshape(reenterStructure, location=location.belowbar, style=shape.triangleup, color=color.orange, title="重新进入结构")
这对于标记价格在突破或跌破行为后的稳定非常有用。
3.3 结合趋势对齐过滤
这个振荡器在结合简单的趋势过滤器时效果很好。这里有一个使用EMA的例子:
emaFast = ta.ema(close, 8)
emaSlow = ta.ema(close, 21)
trendUp = emaFast > emaSlow
trendDown = emaFast < emaSlowplot(trendUp ? percentile : na, title="仅上升趋势", color=color.green)
plot(trendDown ? percentile : na, title="仅下降趋势", color=color.red)
这允许你在定义的方向阶段隔离振荡器读数。
3.4 显示正在测量的范围
如果你想在价格图表上可视化当前的高点和低点结构水平:
plot(recentHigh, title="最近的转折高点", color=color.red, linewidth=1, style=plot.style_linebr)
plot(recentLow, title="最近的转折低点", color=color.green, linewidth=1, style=plot.style_linebr)
这有助于将振荡器值与图表上的实际结构价格水平上下文化。
4、结束语
大多数指标测量动量或方向。这个指标测量的是位置——具体来说,价格在其最近结构范围内的运行位置。
它不是一个信号工具。它是一个上下文工具。
无论你是在构建趋势跟随系统、摆动框架还是基于结构的回调策略,这个振荡器都能帮助你定义:
- 当价格在趋势延续时接近阻力时
- 它在盘整期间是否尊重最近的支撑
- 当它在无明确方向的情况下在结构中部漂移时
在不同资产上测试它。尝试调整转折回溯期以加快或减缓结构检测速度。用它来提供信息——而不是强制执行你的交易逻辑。
原文链接:This Pine Script Reveals the Support/Resistance Zones Within Trends
DefiPlot翻译整理,转载请标明出处
免责声明:本站资源仅用于学习目的,也不应被视为投资建议,读者在采取任何行动之前应自行研究并对自己的决定承担全部责任。