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

Pine Script(89):熟悉input.source,RSI到底该用什么价格计算

#Pine Script入门教学

我们在开发指标时,总会遇到一个经典问题:

我的均线是应该基于 close(收盘价)计算,还是应该基于 hl2(高低价均值)?

我的 RSI 到底是用 close 还是用 hlc3(高低收均值)更准?

input.source() 函数就是Pine Script提供的、用来在输入面板上创建价格数据下拉菜单的工具。它让用户可以自由选择一个指标的计算数据源。

这个功能非常强大,它主要有三大实战用途:

  • 方便地切换均线、RSI等指标的计算源(如 close vs hlc3),看看你的信号是否依然有效。
  • 配合 request.security() 函数,加载其他交易品种或时间周期的数据。
  • 这是一个高级用法,input.source() 允许你把图表上另一个指标的输出,作为你当前脚本的输入源(比如,计算“RSI的移动平均线”)。

input.source() 的参数很简单,核心只有两个:

  • defval:(必填) 默认的价格源。你必须从一个固定的列表中选择,我们马上会讲。
  • title:(强烈建议) 输入项的名称,即显示在设置面板上的标签,如 "RSI 价格数据"
  • tooltip:(推荐) 鼠标悬停在“i”图标上时,显示的详细帮助文本。
  • group:分组标题,用于组织多个相关的输入项。
  • inline:内联ID,用于将多个输入项显示在同一行。

重要提醒: 所有这些参数(如 defval, title 等)的值,都必须是常量(写死的值),不能是动态的变量。

defval 的“固定菜单”

input.source() 最重要的一个特性是,它的 defval(默认值)和下拉菜单里的选项,都来自一个预定义好的列表。你不能随便写,必须用下面的这几个内置变量:

输入值 含义
open K线的开盘价。
high K线的最高价。
low K线的最低价。
close K线的收盘价。
hl2 K线的中点价格,即 (最高价 + 最低价) / 2。
hlc3 K线的高、低、收三价平均值,即 (最高价 + 最低价 + 收盘价) / 3。
ohlc4 K线的开、高、低、收四价平均值,即 (开盘价 + 最高价 + 最低价 + 收盘价) / 4。
hlcc4 K线的高、低、以及双倍权重的收盘价的平均值,即 (最高价 + 最低价 + 收盘价 + 收盘价) / 4。

如果你给 defval 设定的值不在此列(比如你写了个 "myPrice"),Pine Script 就会报错。

实战代码示例

基础示例:创建一个可配置的 RSI

我们来创建一个 RSI 指标,但让用户自己决定 RSI 应该基于什么价格来计算。

// 创建输入
rsiData = input.source(close, title="RSI 价格数据")

plot(ta.rsi(rsiData, 9), color=color.teal, title="RSI")

现在用户可以在设置面板的“RSI 价格数据”下拉菜单中,随意切换 closehl2hlc3 等选项,ta.rsi() 函数会立刻用新的数据源重新计算。

进阶示例:带分组和提示的输入

我们来创建一个更专业的输入,用于变化率(ROC)指标,并给它加上分组和帮助信息。

// 创建输入
rocData = input.source(hl2, title="价格数据", group="变化率",
     tooltip="选择变化率(ROC)振荡指标计算所用的价格数据。")

这个输入:

  • 默认使用 hl2(K线中点价格)。
  • 在设置面板上,它会出现在一个名为“变化率”的分组下面。
  • 当用户鼠标悬停时,会显示 tooltip 里的详细说明。
完整示例脚本:三条不同数据源的均线

我们来写一个脚本,它会同时绘制三条 EMA,但我们可以为每一条 EMA 指定不同的价格源,这对于对比不同算法的均线非常有用。

//@version=6
indicator(title="数据源输入示例", overlay=true)

// --- 1. 创建输入 ---
fastAvgData = input.source(close, title="快线均线数据")
medAvgData  = input.source(hl2, title="中线均线数据")
slowAvgData = input.source(hlcc4, title="慢线均线数据")

// --- 2. 计算均线 ---
fastAverage = ta.ema(fastAvgData, 20)
medAverage  = ta.ema(medAvgData, 40)
slowAverage = ta.ema(slowAvgData, 60)

// --- 3. 绘制均线 ---
plot(fastAverage, color=#FFD700, linewidth=2, title="快线均线 (Close)")
plot(medAverage, color=#CFB53B, linewidth=2, title="中线均线 (hl2)")
plot(slowAverage, color=#E6BE8A, linewidth=2, title="慢线均线 (hlcc4)")

在这个脚本中,我们创建了 fastAvgDatamedAvgDataslowAvgData 三个输入变量,分别默认为 closehl2hlcc4。然后,三条 ta.ema() 均线各自使用了对应的数据源。

这个脚本现在非常灵活,你可以用它来测试:

  • 基于收盘价的快线 vs 基于中点价的中线。
  • 或者把三个输入都改成 close,看不同周期的表现。
  • 或者把三个周期都改成 20,但分别使用 closehl2hlc3,来观察不同数据源对均线形态的细微影响。

总结

input.source() 函数是 Pine Script 中提升指标灵活性和健壮性的核心工具。

  • 它为脚本设置添加一个价格数据下拉菜单。
  • 它的默认值 defval 必须是 open, high, low, close, hl2, hlc3, ohlc4, hlcc4 之一。
  • 它最强大的地方在于,它不仅能读取K线价格,还能读取其他指标的输出,是你构建复杂交易系统的基石。
赞(0)
未经允许不得转载:图道交易 » Pine Script(89):熟悉input.source,RSI到底该用什么价格计算
分享到

评论 抢沙发

登录

找回密码

注册