如果说 input.int() 负责的是周期长度、K线根数这类整数,那么 input.float() 负责的就是策略中所有关乎精度的计算。
在交易的世界里,小数无处不在。比如:
风控乘数: 1.75 倍的 ATR 止损。
资金管理: 0.5% 的百分比止盈。
指标因子: 像超级趋势(SuperTrend)或抛物线转向(PSAR)这类指标,其核心参数就是小数。
input.float() 函数就是 Pine Script 提供的,专门用来在“输入”面板上创建**浮点数(即小数)**输入选项的工具。
input.float() 的两种形态
和 input.int() 一样,input.float() 也有两种形态:
- 数值输入框(默认): 一个可以让你手动输入小数(如 3.14)或按箭头增减的框。
- 下拉菜单: 当你提供一组固定的选项时,它会变成一个下拉菜单。
无论哪种形态,input.float() 函数都会返回该输入选项当前设定的浮点数值。
input.float() 的参数和 input.int() 几乎一样,但我帮你按实战重要性重新排了序。
1. 核心参数 (几乎必用)
defval:(必填) 默认值。比如1.75。title:(强烈建议) 输入项的名称,即显示在设置面板上的标签,如"ATR 乘数"。
2. 关键约束 (提升易用性的关键)
minval/maxval:设置允许输入的最小值和最大值。step:(新手巨坑!) 设置你点一下“上/下”箭头时,数值变化的步长。
3. 特殊形态 (下拉菜单)
options:提供一个固定的浮点数选项列表,用方括号括起来,如[1.5, 2.0, 2.75, 3.0]。
4. 布局与提示 (提升专业度)
tooltip:鼠标悬停时显示的帮助提示文本。group:分组标题,用于组织复杂的参数面板。inline:内联ID,用于将多个输入项显示在同一行。
重要提醒: 所有这些参数(如 defval, title, minval 等)的值,都必须是常量(写死的值),不能是动态的变量。
step 参数的陷阱
这是
input.float()最容易出错的地方。step参数的默认值是 1。想象一下,你设置了一个
defval=1.75,但忘了设置step。当用户点击“向上”箭头时,你猜值会变成多少?答案是
2.75(1.75 + 1),而不是1.76。如果你设置的是一个百分比
defval=0.02,点击一下就会变成1.02,这个输入框当场报废。正确做法: 凡是使用
input.float(),你必须根据你的精度需求,手动指定step的值。
我们来看一个正确的进阶示例:
// 创建一个浮点数输入
psarStart = input.float(0.02, title="抛物线起始值",
minval=0.001, maxval=1, step=0.01)
这个输入才是专业的:
- 默认值
0.02。 - 取值范围被限制在
0.001到1之间。 step=0.01保证了用户每次点击箭头,数值会按0.01增减(如 0.02, 0.03, 0.04…),这才是我们想要的效果。
实战代码示例
基础示例:创建 ATR 乘数
我们先来个最简单的,创建一个 ATR 乘数,并立刻在代码中使用它。
// 创建一个浮点数输入
atrMultiplier = input.float(1.75, title="ATR 乘数", step=0.25)
// --- 使用 ---
wmaValue = ta.wma(close, 30)
atrValue = ta.atr(14) * atrMultiplier
// 创建基于ATR的上轨和下轨
plot(wmaValue + atrValue, title="上轨")
plot(wmaValue - atrValue, title="下轨")
在这段代码中,atrMultiplier 变量的值会随着用户在设置面板的修改而自动更新,图表上的通道也会随之重绘。
完整示例脚本:超级趋势 (SuperTrend) 指标
超级趋势(SuperTrend)是 input.float() 的完美应用场景,因为它需要一个乘数因子(小数)和一个周期长度(整数)。
//@version=6
indicator(title="浮点输入示例", overlay=true)
// --- 1. 创建输入 ---
supTrendFactor = input.float(2.75, title="超级趋势倍数", step=0.25)
supTrendLength = input.int(10, title="超级趋势周期", minval=1)
// --- 2. 计算 ---
[superTrend, direction] = ta.supertrend(supTrendFactor, supTrendLength)
// --- 3. 绘制 ---
plot(direction > 0 ? superTrend : na, color=color.red,
style=plot.style_linebr, linewidth=2, title="下降趋势")
plot(direction < 0 ? superTrend : na, color=color.green,
style=plot.style_linebr, linewidth=2, title="上升趋势")
在这段代码中,supTrendFactor 变量和 supTrendLength 变量完美配合,让用户可以自由调校超级趋势的参数,而无需修改任何代码。
总结
input.float() 函数是你策略参数面板中负责“精度”的控件。当你需要设置乘数、百分比、因子等带小数的参数时,请使用它。它和 input.int() 最大的区别和“陷阱”在于 step 参数。最后提醒: 使用 input.float() 时,请养成三件套的专业习惯:defval (默认值)、title (名称)、step (步长),这三项一个都不能少。


