我们在开发指标时,总会遇到一个经典问题:
我的均线是应该基于 close(收盘价)计算,还是应该基于 hl2(高低价均值)?
我的 RSI 到底是用 close 还是用 hlc3(高低收均值)更准?
input.source() 函数就是Pine Script提供的、用来在输入面板上创建价格数据下拉菜单的工具。它让用户可以自由选择一个指标的计算数据源。
这个功能非常强大,它主要有三大实战用途:
- 方便地切换均线、RSI等指标的计算源(如
closevshlc3),看看你的信号是否依然有效。 - 配合
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 价格数据”下拉菜单中,随意切换 close、hl2、hlc3 等选项,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)")
在这个脚本中,我们创建了 fastAvgData、medAvgData 和 slowAvgData 三个输入变量,分别默认为 close、hl2 和 hlcc4。然后,三条 ta.ema() 均线各自使用了对应的数据源。
这个脚本现在非常灵活,你可以用它来测试:
- 基于收盘价的快线 vs 基于中点价的中线。
- 或者把三个输入都改成
close,看不同周期的表现。 - 或者把三个周期都改成
20,但分别使用close、hl2和hlc3,来观察不同数据源对均线形态的细微影响。
总结
input.source() 函数是 Pine Script 中提升指标灵活性和健壮性的核心工具。
- 它为脚本设置添加一个价格数据下拉菜单。
- 它的默认值
defval必须是open,high,low,close,hl2,hlc3,ohlc4,hlcc4之一。 - 它最强大的地方在于,它不仅能读取K线价格,还能读取其他指标的输出,是你构建复杂交易系统的基石。


