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

关于Pine Script变量赋值与绘图需求的技术求助

解决Pine Script中maColor返回LIME时的状态赋值与绘制问题

问题分析

你的代码存在两个核心问题:

  1. 语法错误:gold01定义行多了一个闭合括号,导致编译失败
  2. 类型不匹配: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)

关键修改说明

  1. 状态赋值修正:

    gold01 = maColor(ma05, ma100) == LIME ? ma05 : na
    

    当maColor返回LIME时,gold01赋值为ma05的当前值;否则赋值为na(Pine Script中na会让plot隐藏该段)。

  2. Plot参数调整:
    将plot()的颜色固定为LIME,确保绘制的gold01仅显示目标状态的均线段,同时可选保留原均线作为对比。

  3. 语法修正:移除了原代码中多余的闭合括号,保证编译通过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:05:06