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

Pine Script(85):熟悉 input.float,实现精准的小数参数控制

#Pine Script入门教学

如果说 input.int() 负责的是周期长度、K线根数这类整数,那么 input.float() 负责的就是策略中所有关乎精度的计算。

在交易的世界里,小数无处不在。比如:

风控乘数: 1.75 倍的 ATR 止损。

资金管理: 0.5% 的百分比止盈。

指标因子: 像超级趋势(SuperTrend)或抛物线转向(PSAR)这类指标,其核心参数就是小数。

input.float() 函数就是 Pine Script 提供的,专门用来在“输入”面板上创建**浮点数(即小数)**输入选项的工具。

input.float() 的两种形态

input.int() 一样,input.float() 也有两种形态:

  1. 数值输入框(默认): 一个可以让你手动输入小数(如 3.14)或按箭头增减的框。
  2. 下拉菜单: 当你提供一组固定的选项时,它会变成一个下拉菜单。

无论哪种形态,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.0011 之间。
  • 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 (步长),这三项一个都不能少。

赞(0)
未经允许不得转载:图道交易 » Pine Script(85):熟悉 input.float,实现精准的小数参数控制
分享到

评论 抢沙发

登录

找回密码

注册