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)
问题分析
- 指标叠加属性错误:
indicator的overlay参数必须是固定布尔值(true或false),不能用true or false这种无效写法;而且Pine Script中指标的叠加属性是初始化时确定的,没法通过函数动态修改。 ta.valuewhen用法错误:这个函数是用来提取满足条件时的历史值,不是用来控制指标显示/隐藏的,用它切换显示不同指标逻辑完全不对。- 双叠加层实现思路错:单指标默认只能在主图或副图显示,要同时有主图和副图内容,得用
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:拆分两个独立指标(完全分离主图和副图窗口)
如果需要真正的两个独立叠加层窗口,就拆成两个指标:
- 主图叠加指标(
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")
- 副图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
相关产品推荐
相关产品推荐

