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

Pine Script技术问询:如何获取分形K线的高点与低点

Pine Script分形高点/低点获取问题解决

问题说明

需要在Pine Script中识别分形(upFractal/downFractal)时,精准获取对应分形K线的高点或低点。当前代码中使用ta.highest(10)无法正确获取目标K线的价格,需要修正逻辑。

核心问题分析

当前代码的分形判断逻辑基于n周期前的K线(即high[n]/low[n]),但触发upFractal时用ta.highest(10)取的是最近10根K线的最高值,并非分形所在K线的高点。正确做法是直接引用分形定义中使用的high[n]和low[n],同时记录分形对应的K线索引。

修改后的完整代码

//@version=5
strategy("Fractal | Fib Retrace",  overlay=true)

n = input.int(title="Periods", defval=10, minval=2)
// UpFractal
bool upflagDownFrontier = true
bool upflagUpFrontier0 = true
bool upflagUpFrontier1 = true
bool upflagUpFrontier2 = true
bool upflagUpFrontier3 = true
bool upflagUpFrontier4 = true

for i = 1 to n
    upflagDownFrontier := upflagDownFrontier and (high[n-i] < high[n])
    upflagUpFrontier0 := upflagUpFrontier0 and (high[n+i] < high[n])
    upflagUpFrontier1 := upflagUpFrontier1 and (high[n+1] <= high[n] and high[n+i + 1] < high[n])
    upflagUpFrontier2 := upflagUpFrontier2 and (high[n+1] <= high[n] and high[n+2] <= high[n] and high[n+i + 2] < high[n])
    upflagUpFrontier3 := upflagUpFrontier3 and (high[n+1] <= high[n] and high[n+2] <= high[n] and high[n+3] <= high[n] and high[n+i + 3] < high[n])
    upflagUpFrontier4 := upflagUpFrontier4 and (high[n+1] <= high[n] and high[n+2] <= high[n] and high[n+3] <= high[n] and high[n+4] <= high[n] and high[n+i + 4] < high[n])
flagUpFrontier = upflagUpFrontier0 or upflagUpFrontier1 or upflagUpFrontier2 or upflagUpFrontier3 or upflagUpFrontier4

upFractal = (upflagDownFrontier and flagUpFrontier)


// downFractal
bool downflagDownFrontier = true
bool downflagUpFrontier0 = true
bool downflagUpFrontier1 = true
bool downflagUpFrontier2 = true
bool downflagUpFrontier3 = true
bool downflagUpFrontier4 = true

for i = 1 to n
    downflagDownFrontier := downflagDownFrontier and (low[n-i] > low[n])
    downflagUpFrontier0 := downflagUpFrontier0 and (low[n+i] > low[n])
    downflagUpFrontier1 := downflagUpFrontier1 and (low[n+1] >= low[n] and low[n+i + 1] > low[n])
    downflagUpFrontier2 := downflagUpFrontier2 and (low[n+1] >= low[n] and low[n+2] >= low[n] and low[n+i + 2] > low[n])
    downflagUpFrontier3 := downflagUpFrontier3 and (low[n+1] >= low[n] and low[n+2] >= low[n] and low[n+3] >= low[n] and low[n+i + 3] > low[n])
    downflagUpFrontier4 := downflagUpFrontier4 and (low[n+1] >= low[n] and low[n+2] >= low[n] and low[n+3] >= low[n] and low[n+4] >= low[n] and low[n+i + 4] > low[n])
flagDownFrontier = downflagUpFrontier0 or downflagUpFrontier1 or downflagUpFrontier2 or downflagUpFrontier3 or downflagUpFrontier4

downFractal = (downflagDownFrontier and flagDownFrontier)

var float fractalTop = na
var float fractalBottom = na
var float fractalindex = na
var int fractalindexbars = na 

// 修正:直接取分形所在K线的高点(n周期前的high)
if upFractal
    fractalTop := high[n]
    fractalindex := bar_index - n  // 记录分形对应的K线索引

// 新增:处理向下分形的低点获取
if downFractal
    fractalBottom := low[n]
    fractalindex := bar_index - n  // 记录分形对应的K线索引

plotshape(downFractal, style=shape.triangledown, location=location.belowbar, offset=-n, color=#F44336, size = size.small)
plotshape(upFractal, style=shape.triangleup,   location=location.abovebar, offset=-n, color=#009688, size = size.small)

plot(fractalTop, title = "fractal Top")
plot(fractalBottom, title = "fractal Bottom")
plot(fractalindex, title = "fractal Index")

plot(bar_index, title = "Bar index")

关键改动说明

  • 分形价格获取:将ta.highest(10)替换为high[n](向上分形)和low[n](向下分形),直接指向分形定义中使用的目标K线价格。
  • 分形索引记录:新增bar_index - n获取分形实际所在的K线索引,解决索引偏移问题。
  • 向下分形逻辑补全:添加了downFractal触发时的fractalBottom赋值逻辑,完善需求覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 09:41:29