关于Pine Script变量赋值与绘图需求的技术求助
解决Pine Script中maColor返回LIME时的状态赋值与绘制问题
问题分析
你的代码存在两个核心问题:
- 语法错误:
gold01定义行多了一个闭合括号,导致编译失败 - 类型不匹配:
plot()函数要求输入数值型数据,直接传入布尔值(条件判断结果)会触发类型错误
修正方案
我们需要:
- 修正语法错误,正确判断
maColor是否返回LIME - 将布尔状态转换为可绘制的数值(用均线值或
na隐藏非目标状态) - 调整
plot()参数以符合Pine Script要求
修正后的完整代码
//@version=5 indicator('Madrid Moving Average Ribbon', shorttitle='Madrid Ribbon', overlay=true) // ╔══════════════════════════════════════╗ // ║ CONSTANTS ║ // ╚══════════════════════════════════════╝ PHI = (1 + math.sqrt(5)) / 2 PI = 104348 / 33215 BULL = 1 BEAR = -1 NONE = 0 // ╔══════════════════════════════════════╗ // ║ Colors ║ // ╚══════════════════════════════════════╝ // v3 Style Gradient GRN01 = #7CFC00 GRN02 = #32CD32 GRN03 = #228B22 GRN04 = #006400 GRN05 = #008000 GRN06 = #093507 RED01 = #FF4500 RED02 = #FF0000 RED03 = #B22222 RED04 = #8B0000 RED05 = #800000 RED06 = #330d06 // ──────────[ v3 Style Colors ] AQUA = #00FFFF BLACK = #000000 BLUE = #0000FF FUCHSIA = #FF00FF GRAY = #808080 GREEN = #008000 LIME = #00FF00 MAROON = #800000 NAVY = #000080 OLIVE = #808000 ORANGE = #FF7F00 PURPLE = #800080 RUBI = #FF0000 SILVER = #C0C0C0 TEAL = #008080 YELLOW = #FFFF00 WHITE = #FFFFFF // ╔══════════════════════════════════════╗ // ║ functions () ║ // ╚══════════════════════════════════════╝ // ──────────[ Moving Average Color ] maColor(_ma, _maRef) => diffMA = ta.change(_ma) macol = diffMA >= 0 and _ma > _maRef ? LIME : diffMA < 0 and _ma > _maRef ? MAROON : diffMA <= 0 and _ma < _maRef ? RUBI : diffMA >= 0 and _ma < _maRef ? GREEN : GRAY macol // ╔══════════════════════════════════════════════════════════════════════════════╗ // ║ main ( ) ║ // ╚══════════════════════════════════════════════════════════════════════════════╝ // ────────────────────[ Input Parameters ] _10 = input(false, '───────────[ Madrid Ribbon]───────────') i_exp = input(true, title='Expnential MA') // ────────────────────[ Processing ] src = close ma05 = i_exp ? ta.ema(src, 5) : ta.sma(src, 5) ma100 = i_exp ? ta.ema(src, 100) : ta.sma(src, 100) // ────────────────────[ Plot ] // 修正:正确判断LIME状态,转换为可绘制数值(满足条件时取ma05,否则隐藏) gold01 = maColor(ma05, ma100) == LIME ? ma05 : na // 绘制gold01:仅显示maColor为LIME的均线段,颜色固定为LIME plot(gold01, color=LIME, style=plot.style_line, title='Gold01 (LIME State)', linewidth=3) // 可选:保留原均线绘制作为对比 plot(ma05, color=maColor(ma05, ma100), style=plot.style_line, title='MMA05', linewidth=2)
关键修改说明
状态赋值修正:
gold01 = maColor(ma05, ma100) == LIME ? ma05 : na当
maColor返回LIME时,gold01赋值为ma05的当前值;否则赋值为na(Pine Script中na会让plot隐藏该段)。Plot参数调整:
将plot()的颜色固定为LIME,确保绘制的gold01仅显示目标状态的均线段,同时可选保留原均线作为对比。语法修正:移除了原代码中多余的闭合括号,保证编译通过。
内容的提问来源于stack exchange,提问作者STH
相关产品推荐
相关产品推荐

