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

Pine Script技术求助:实现双叠加层显示及ATR样式调整

问题描述

我做了一个指标,想让ATR显示成指定样式,同时要实现同时显示两个不同叠加层的功能,但写的Pine Script代码达不到预期效果。

原代码:

indicator("Komut dosyam",overlay = true or false)

overlay_numero=input.int(1,title="Overlay Num",options = [0,1],inline="select a number for overlay")

overlaynum(overlay_numero)=>
    ali=if overlay_numero==1
        overlay=false
    else if overlay_numero==0
        overlay=true
    ali 
.....

//none of them couldnt work as of like this
plot(ta.valuewhen(overlaynum(overlay_numero = 1) and plot_string_4=="ATR",source = atr,occurrence=0),color=color.red)
plot(ta.valuewhen(overlaynum(overlay_numero = 1) and plot_string_4=="MFI",source = mfi,occurrence=mfi_value),color=color.aqua)
plot(ta.valuewhen(overlaynum(overlay_numero = 1) and plot_string_4=="CMO",source = cmo,occurrence=0),color=color.silver)
plot(ta.valuewhen(overlaynum(overlay_numero = 1) and plot_string_4=="RSI",source = rsi,occurrence=0),color=color.blue)
plot(ta.valuewhen(overlaynum(overlay_numero = 1) and plot_string_4=="MOM",source = mom,occurrence=0),color=color.lime)
问题分析
  1. 指标叠加属性错误:indicator的overlay参数必须是固定布尔值(true或false),不能用true or false这种无效写法;而且Pine Script中指标的叠加属性是初始化时确定的,没法通过函数动态修改。
  2. ta.valuewhen用法错误:这个函数是用来提取满足条件时的历史值,不是用来控制指标显示/隐藏的,用它切换显示不同指标逻辑完全不对。
  3. 双叠加层实现思路错:单指标默认只能在主图或副图显示,要同时有主图和副图内容,得用plot的location参数把部分指标放到主图底部,或者拆成两个独立指标。
修正方案

方案1:单指标实现主图+底部副图(模拟双叠加层)

让指标默认叠加主图,把ATR放在主图底部显示,其他指标在主图叠加,满足同时显示两个区域的需求:

//@version=5
indicator("Multi Indicator Dual Display", overlay = true)

// 开关控制各指标显示
show_atr = input.bool(true, "显示ATR")
show_mfi = input.bool(true, "显示MFI")
show_cmo = input.bool(true, "显示CMO")
show_rsi = input.bool(true, "显示RSI")
show_mom = input.bool(true, "显示MOM")

// 计算指标值
atr_val = ta.atr(14)
mfi_val = ta.mfi(close, high, low, 14)
cmo_val = ta.cmo(close, 14)
rsi_val = ta.rsi(close, 14)
mom_val = ta.mom(close, 10)

// ATR按目标样式显示(示例用带状填充,可根据需求换style)
if show_atr
    // location.bottom 让ATR在主图下方显示,模拟副图效果
    plot(atr_val, color=color.new(color.red, 80), style=plot.style_area, title="ATR", location=location.bottom)

// 其他指标在主图显示,未选中则返回na隐藏
plot(show_mfi ? mfi_val : na, color=color.aqua, title="MFI")
plot(show_cmo ? cmo_val : na, color=color.silver, title="CMO")
plot(show_rsi ? rsi_val : na, color=color.blue, title="RSI")
plot(show_mom ? mom_val : na, color=color.lime, title="MOM")

方案2:拆分两个独立指标(完全分离主图和副图窗口)

如果需要真正的两个独立叠加层窗口,就拆成两个指标:

  1. 主图叠加指标(overlay=true):
//@version=5
indicator("Main Chart Overlays", overlay = true)

show_mfi = input.bool(true, "显示MFI")
show_cmo = input.bool(true, "显示CMO")
show_rsi = input.bool(true, "显示RSI")
show_mom = input.bool(true, "显示MOM")

mfi_val = ta.mfi(close, high, low, 14)
cmo_val = ta.cmo(close, 14)
rsi_val = ta.rsi(close, 14)
mom_val = ta.mom(close, 10)

plot(show_mfi ? mfi_val : na, color=color.aqua, title="MFI")
plot(show_cmo ? cmo_val : na, color=color.silver, title="CMO")
plot(show_rsi ? rsi_val : na, color=color.blue, title="RSI")
plot(show_mom ? mom_val : na, color=color.lime, title="MOM")
  1. 副图ATR指标(overlay=false):
//@version=5
indicator("ATR Target Style", overlay = false)

show_atr = input.bool(true, "显示ATR")
atr_val = ta.atr(14)

// 按目标样式调整plot参数,比如柱状、带状等
plot(show_atr ? atr_val : na, color=color.red, style=plot.style_columns, title="ATR")

关键调整说明

  • 移除了原代码中无效的overlay动态切换逻辑,改用输入开关控制指标显示。
  • 用**三元运算符(? :)**替代错误的ta.valuewhen,未选中的指标返回na,plot会自动隐藏该系列。
  • ATR的样式可以通过style参数调整:plot.style_area是带状填充,plot.style_columns是柱状,plot.style_line是线条,根据你的目标样式选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 07:28:15