我们在上一篇文章中,已经详细盘点过 input.int()、input.color() 等各种各输入函数。它们各自创建了独特的设置选项,但作为一个整体,它们都遵循着一些通用的规则和特性。
1. 代码顺序,决定了设置面板的顺序
你的脚本设置面板并不是随机排序的,它的显示顺序严格按照你代码中 input() 函数出现的顺序自上而下排列 。
- 这意味着你必须像一个产品经理一样,去思考你控制面板的布局,把逻辑相关的设置放在一起。 比如一个均线设置,合理的顺序应该是:
input.source()– 价格源 (先定数据)input.int()– 长度 (再定周期)input.color()– 颜色 (最后定外观)
使用 group 参数来组织,当你的脚本参数变得非常复杂(比如有三条均线、两条RSI的设置)时,group 参数就是你最好的朋友。
- 当TradingView读取到第一个
group="我的组"的输入时,它会立刻扫描整个脚本,把所有属于"我的组"的输入全部找到并组合在一起显示。 - 然后它才会继续显示那些没有被分组的输入项。
示例代码:
// 创建均线的输入
maSource = input.source(close, title="价格数据", group="我的输入")
maLength = input.int(20, title="长度") // 这个没有组
maColour = input.color(color.orange, title="颜色", group="我的输入")
在设置面板中,你看到的顺序将是:价格数据、颜色,它们都在“我的输入”组里,然后才是长度,因为它在组外。
2. 永远把Input放在脚本的顶部
Pine Script语法非常灵活,它甚至允许你把 input() 函数藏在 if 语句或自定义函数里 。
永远不要这么做!
这是一个非常糟糕的编码习惯,会让你的代码变得混乱不堪,极难阅读和调试。
建议把你所有的 input() 函数,都集中存放在脚本的顶部,紧跟在 indicator() 或 strategy() 声明的下方 。
把这里想象成你策略的总控制室,任何需要调整的参数,都应该能在这里一目了然地找到。
这不仅方便你自己,也方便任何阅读你代码的人。
//@version=6
indicator(title="输入示例", overlay=true)
// --- 总控制室 ---
maColour = input.color(color.orange, title="颜色")
maLength = input.int(20, title="长度")
maSource = input.source(close, title="价格数据")
// --- 其他 ---
3. 输入函数不只是取值,更是即时加工
这是 input() 功能最精妙的地方,input() 函数在创建设置项的同时,还会返回该设置的当前值 。
这意味着,你可以在拿到这个值的第一时间,就对它进行加工处理”。
实战技巧1:百分比的换算,千万不要让你的用户在输入止损 5.75%时,去手动输入 0.0575,这是非常垃圾的体验。
你应该让他们输入 5.75,然后在代码中帮他们完成计算:
// 用户输入5.75,代码立刻乘以 0.01
stopDistance = input.float(5.75, title="止损距离 (%)") * 0.01
实战技巧 2:用字符串输入创建开关,有时input.bool() 提供的勾选框不够直观,我们更希望用户能从下拉菜单中选择 “On” 或 “Off”。
我们可以用 input.string() 配合 options 参数来实现,并立刻将其转换为代码真正需要的布尔值(true/false):
// 创建开关
showMAPlot_Str = input.string("On", title="均线绘图显示", options=["On", "Off"])
// 将 "On" 转换为 true,其他转换为 false
showMAPlot = (showMAPlot_Str == "On")
// if showMAPlot
// plot(ma)
这种加工的思路,是提升你脚本易用性的核心。
4. 自动重新计算:所见即所得
当你把输入值存入一个变量(如 maLength)后,你不需要关心它何时被更新。
当用户在设置面板中,把均线从20改为50时,TradingView会自动检测到这个变化,并立刻对整个脚本进行一次完整的重新计算。
图表上的所有K线都会被重新过一遍,确保你的指标和策略输出,永远反映的是最新的设置。
这就是你能所见即所得拖动滑块、实时看到图表变化的原因。
5. 任何脚本类型,包括库都能使用
最后,input() 功能是通用的,无论你是在写指标 (indicator)、策略 (strategy),还是更高级的库 (library) 脚本,你都可以使用输入功能 。
在库中使用 input(),可以让你在测试这些可重用函数时,方便地传入不同的参数,观察计算结果,这在开发复杂系统时非常有用。
总结
input() 功能是Pine Script的脸面,它们不仅仅是变量,更是你脚本的用户界面。
掌握这些通用特性,有意识地去组织你的输入顺序、使用 group、在代码中预处理用户输入,这些专业的编码习惯,正是将你的脚本从一个自用的工具提升为一份专业作品的关键所在。


