保持敬畏之心
交易是一场持久战

Pine Script(96):熟悉input.source,实现RSI/布林带高级叠加

#Pine Script入门教学

我们经常有这样的需求:我想计算RSI的移动平均线,或者我想把布林带应用在MACD上。

新手的第一反应是:去复制RSI的全部源代码,然后在我新脚本里再对它计算均线,这是一个非常低效且难以维护的办法。

专业的做法,就是利用 input.source() 函数,来实现TradingView强大的指标叠加指标功能。

input.source() 会创建一个下拉菜单,这个菜单的魔法在于,它不仅包含了 open, high, low, close,它还会自动扫描你图表上所有其他指标的绘图,并把它们作为可选项!

实现指标叠加的 4 步

要让你的自定义指标能读取另一个指标的数据,只需遵循以下4个步骤

  1. 第1步:添加 input.source() 在你的脚本中,添加一个 input.source() 输入。这是读取功能的唯一入口
    data = input.source(close, title="Data")
    

    这行代码创建了一个名为 data 的变量,它默认等于 close(收盘价)。但很快,我们就会在设置里把它改成“RSI”或“MACD”

  2. 第2步:在代码中使用它 在你的计算逻辑中,不要写死 close,而是使用你刚创建的 data 变量
    // 错误写法: roc = ta.roc(close, 10)
    // 正确写法:
    roc = ta.roc(data, 10) // 计算 'data' 数据源的10周期ROC
    

    这样你的指标就从写死算收盘价变成了灵活算 data 变量。

  3. 第3步:加载两个指标 在你的图表上,同时添加两个指标:
    • 你想被读取的指标(比如:一个内置的RSI指标)。
    • 你刚写的这个新指标(它包含 input.source())。
  4. 第4步:在设置中链接它们,这是最关键的一步。打开你新指标的设置面板,找到输入标签页。 点击你那个名为 Data”的下拉菜单,此时你不仅会看到 open, high, low, close… 你还会看到一个新选项,比如 “RSI: Plot” 。 选择它,data 变量的值就不再是 close,而是变成了 RSI 指标的实时输出值,你的新指标就会立刻开始计算“RSI 的 ROC”。
完整示例脚本:计算任何数据的 ROC

我们来编写一个灵活的 ROC(变化率)指标,它可以计算任何输入源的 ROC。

//@version=6
indicator(title="Example - indicator on indicator", overlay=false)

// --- 1. 创建 ---
data     = input.source(close, title="Data")
lookback = input.int(20, title="Lookback period")
lenMA    = input.int(12, title="Length MA")

// --- 2. 使用 data ---
roc   = ta.roc(data, lookback)
rocMA = ta.sma(roc, lenMA)

// --- 3. 绘制 ---
plot(roc, color=color.teal, style=plot.style_histogram,
     linewidth=4, title="RoC")
plot(rocMA, color=color.orange, linewidth=2, title="RoC MA")

hline(0, color=color.gray, linestyle=hline.style_solid)

// --- 4. 辅助 ---
bgColour = if ta.crossover(roc, 0)
    color.new(color.green, 90)
else if ta.crossunder(roc, 0)
    color.new(color.red, 90)

bgcolor(bgColour)

下面解释下这段代码:

  1. data = input.source(...):这是本节课的核心。它创建了那个神奇的下拉菜单
  2. roc = ta.roc(data, lookback):这是 input.source 的应用。我们的 ROC 计算的是 data 变量,而不是写死的 close
  3. plot(roc, ..., title="RoC")这是另一个关键! 我们为 plot() 函数指定了一个 title="RoC",这有什么用?这能让第三个指标来读取我们这个脚本的输出!如果你不写 title,其他指标的 input.source 下拉菜单里只会显示一个含糊不清的Plot,鬼才知道那是什么
input.source 的规矩

input.source() 非常强大,但它有几个你必须遵守的规矩:

  • 规矩1:只认 plot()

    input.source() 只能“看见”由 plot() 函数绘制出来的数据,它看不见 hline()fill() 或者 bgcolor()

  • 规矩2:defval 必须是K线价格 input.source(defval, ...) 中,defval(默认值)必须open, high, low, close, hl2, hlc3ohlc4 之一 。你不能在代码里把默认值写成 defval=ta.rsi(close, 14),这会报错,你只能手动在设置里去选择 RSI。
  • 规矩3:策略 (Strategy) 无法使用此功能 这是一个重大限制:策略 (Strategy) 无法通过 input.source() 来读取指标的绘图。这个“指标叠加指标”的功能,目前(据本文撰写时)是指标 (Indicator) 专用的,一个指标也无法读取一个策略的绘图
总结

input.source() 是 Pine Script 中实现脚本模块化和灵活性的“胶水”。当你下次想“在XX指标上计算XX”时,不要再去复制粘贴别人的源代码了。

你只需要:

  1. 在你自己的脚本里添加一个 input.source()
  2. 把图表上另一个指标的 plot 输出,作为你脚本的数据源。

这就是专业脚本开发者的工作方式,告别重复造轮子,专注于组合与创新。

赞(0)
未经允许不得转载:图道交易 » Pine Script(96):熟悉input.source,实现RSI/布林带高级叠加
分享到

评论 抢沙发

登录

找回密码

注册