在Pine Script 的功能中,input.int() 负责周期,input.float() 负责精度,而 input.price() 则负责交互。
这是Pine Script中最接近手动划线的输入功能,它能为你的脚本设置面板,添加一个价格输入框。
input.price() 的强大之处在于它极度灵活的交互性:
- 手动输入: 你可以像
input.float()一样,手动键入一个精确的价格。 - 图表点选: 在设置窗口中,你可以点击一个按钮,然后在图表上任意位置点击来拾取价格。
- 拖拽操作: 在设置中,你还可以拖放来设定价格。
这使它成为定义关键价位的完美工具,比如:
- 设置关键的支撑/阻力位。
- 定义一个可视化的交易区间。
- 设置一个可拖拽的警报触发线。
- 指定指标的超买超卖水平。
input.price() 的参数和其他输入函数类似,我帮你按实战重要性分了组:
1. 核心参数 (必用)
defval:(必填) 默认的价格值。title:(强烈建议) 输入项的名称,即显示在设置面板上的标签,如"关键价位"。
2. 布局与提示 (提升专业度)
tooltip:鼠标悬停在“i”图标上时,显示的详细帮助文本。group:分组标题,用于组织多个相关的输入项。inline:内联ID,用于将多个输入项显示在同一行。
3. 特殊交互参数 (需厘清)
confirm:是否在脚本添加到图表时,立刻强制用户在图表上点击来选定价格。默认为false。
所有这些参数(如 defval, title 等)的值,都必须是常量,不能是动态的变量。
input.price vs input.float
这是新手必问的问题:input.price() 和 input.float() 到底有什么区别?
| 特性 | input.price() (价格输入) | input.float() (小数输入) |
| 核心价值 | 交互性、视觉化 | 精确性、自动化 |
| 设置方式 | 手动输入、图表点选、拖拽 | 只能手动输入 |
| 参数约束 | 没有 minval, maxval, step |
有 minval, maxval, step |
| 适用场景 | S/R位、警报线、交易区间 | 乘数、百分比、因子 |
很多新手以为必须设置 confirm=true 才能点击图表选价格,这是错的。
confirm=true只是一个一次性的引导功能,它只在你首次将脚本添加到图表时,强制你先点击图表来设定初始价格。
无论 confirm 是 true 还是 false,只要你打开脚本的设置面板,你随时都可以通过“点击图表”或“拖拽”的方式来修改价格。
实战代码示例
基础示例:在指定价位绘制一条水平线
我们来看如何在一个用户指定的价格点画一条线。
// 创建
plotPrice = input.price(1.1500, title="Price Level")
plot(plotPrice, style=plot.style_circles, color=color.orange,
title="Key Level")
在这段代码中,plotPrice 变量的值,会100%跟随用户在设置面板中的操作。
当用户在设置中,无论是手动输入 1.1600,还是点击图表在 1.1700 处拾取了价格,plotPrice 变量都会立刻更新,plot() 函数也会自动在新的价位上重绘这条水平线。
进阶示例:带分组和提示的警报触发器
// 定义
triggerLevel = input.price(1.1450, title="Alert Trigger Level #1",
group="Key Price Levels",
tooltip="指定一个价格值,当K线收盘价穿越该值时,将触发脚本警报。")
这个输入:
- 默认值为
1.1450。 - 在设置面板上,它会出现在一个名为“Key Price Levels”的分组下面。
- 当用户鼠标悬停时,会显示
tooltip里的详细说明。
完整示例脚本:可交互的价格区间
input.price() 最经典的应用就是用两个输入来定义一个“价格区间”。这个脚本将绘制这个区间,填充背景,并在价格突破时高亮显示。
//@version=6
indicator(title="Price input example", overlay=true)
// --- 1. 创建三个输入 ---
upperBound = input.price(1.1475, title="Upper Bound of Range")
lowerBound = input.price(1.1200, title="Lower Bound of Range")
// 一个 input.color() 来定义区间颜色
rangeColour = input.color(color.new(color.silver, 80),
title="Range Background Colour")
// --- 2. 绘制 ---
ubPlot = plot(upperBound, style=plot.style_cross, color=color.green,
title="Upper Bound")
lbPlot = plot(lowerBound, style=plot.style_cross, color=color.red,
title="Lower Bound")
// --- 3. 填充 ---
fill(ubPlot, lbPlot, color=rangeColour)
// --- 4. 定义 ---
crossAboveUB = ta.crossover(close, upperBound)
crossBelowLB = ta.crossunder(close, lowerBound)
// --- 5. 突破 ---
bgcolor(crossAboveUB ? color.new(color.green, 80) :
crossBelowLB ? color.new(color.red, 80) : na)
这个脚本现在是活的,用户可以打开设置,点击图表上的一个波峰来设置upperBound,再点击一个波谷来设置lowerBound,一个自定义的 S/R 区间就瞬间生成了,并且突破警报也随之自动生效。这就是 input.price() 相比 input.float() 带来的降维打击。
总结
input.price() 函数是 Pine Script 中实现图表交互的核心工具。
- 它只返回一个浮点数值(价格)。
- 它的核心价值在于允许用户通过图表点选和拖拽来设置价格,而不仅仅是键盘输入。
- 它没有
minval/maxval/step约束,但input.float()有。 - 它是你构建 S/R 区间、可拖拽警报线、视觉化交易工具的必备函数。


