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

如何在PineScript中绘制随新信号自动消失的斐波那契扩展水平?

解决方案

核心思路

  • 用var变量持久化存储最新信号K线的高低价位,新信号出现时直接覆盖旧值
  • 基于信号K线的高低差计算斐波那契扩展水平位
  • 使用plot()函数绘制水平线,通过条件判断控制显示逻辑,实现新信号自动替换旧水平位的效果

修改后的完整代码

//@version=5
indicator("双均线信号斐波那契水平位", overlay=true)

// 双均线定义
long_ema = ta.ema(close, 9)
short_ema = ta.ema(close, 13)

// 生成信号(当前K线确认交叉,避免延迟或未来函数)
long_signal = ta.crossover(long_ema, short_ema)
short_signal = ta.crossunder(long_ema, short_ema)

// 绘制信号箭头
plotshape(long_signal, style=shape.arrowup, color=color.green, location=location.belowbar, size=size.normal)
plotshape(short_signal, style=shape.arrowdown, color=color.red, location=location.abovebar, size=size.normal)

// 持久化存储最新信号的K线高低点及信号类型
var float signal_high = na
var float signal_low = na
var bool is_long_signal = false

// 更新信号数据:新信号出现时覆盖旧数据
if long_signal or short_signal
    signal_high := high
    signal_low := low
    is_long_signal := long_signal

// 计算斐波那契扩展水平位(多单从信号低点向上扩展;空单从信号高点向下扩展)
price_range = signal_high - signal_low
// 常用斐波那契扩展比例
fib_levels = [0.0, 0.382, 0.618, 1.0, 1.382, 1.618]

// 绘制水平位:仅当有有效信号时显示,新信号更新后自动替换旧水平位
for level in fib_levels
    level_price = is_long_signal ? signal_low + price_range * level : signal_high - price_range * level
    plot(na(signal_high) ? na : level_price, title=str.tostring(level*100)+"%", color=is_long_signal ? color.new(color.green, 0) : color.new(color.red, 0), style=plot.style_linebr, linewidth=1)

代码说明

  • 信号修正:移除原代码的[1]偏移,确保信号在当前K线确认,避免信号延迟问题
  • 数据持久化:var变量仅初始化一次,新信号触发时直接覆盖旧的高低点和信号类型数据
  • 斐波那契逻辑:多单信号从低点向上计算扩展位,空单从高点向下计算,贴合趋势方向
  • 水平位控制:用plot()替代hline(),通过na(signal_high) ? na : level_price判断,无信号时不绘制,新信号更新后自动显示新的水平位,旧水平位随数据覆盖自然消失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:50:25