我们都知道 input.bool() 可以创建一个简单的勾选框开关。
但有时候,这在视觉上不够专业,或者不够直观。
比如你可能更希望用户在一个下拉菜单中明确选择 开’或 关,而不是一个孤零零的复选框。
input.string() 函数配合 options 参数,就能完美实现这个需求。
要创建一个“开/关”下拉菜单,我们只需要三步:
- 使用
input.string()函数,而不是input.bool()。 - 使用
options参数,提供一个包含两个文本选项的列表,比如["on", "off"]。 - 最关键的一步:用一个比较运算符 (
==),将input.string()返回的文本结果(”on” 或 “off”)立刻转换成一个布尔值(true或false)。
1. 开/关 (On/Off) 下拉菜单
我们来看这个“三步走”的标准模式:
myInput = input.string("on", title="Input title", options=["on", "off"]) == "on"
学长为你拆解这行代码:
input.string("on", ... options=["on", "off"]):这部分创建了一个文本下拉菜单,默认值是"on",选项有"on"和"off"。... == "on":这就是精髓所在。我们立刻判断这个输入框的当前值是否等于"on"。myInput = ...:- 如果用户选择了
"on",那么("on" == "on")结果为true,myInput变量的值就是true。 - 如果用户选择了
"off",那么("off" == "on")结果为false,myInput变量的值就是false。
- 如果用户选择了
通过这一行代码,myInput 就成了一个如假包换的布尔变量,可以直接用在 if 语句或条件操作符 (?:) 中,完美实现了开关功能。
我们来看一个指标如何应用这个开/关菜单。
//@version=6
indicator(title="On/Off drop-down menu", overlay=true)
// --- 1. 创建菜单 ---
colourChart = input.string("on", title="Coloured Background",
options=["on", "off"]) == "on"
// --- 2. 布尔变量 ---
bgcolor(colourChart ? color.new(color.orange, 85) : na)
这个脚本的逻辑非常清晰:
colourChart变量通过我们的“核心技巧”,成为了一个值为true或false的“开关”。bgcolor()函数通过条件操作符 (?:) 检查这个“开关”。- 如果
colourChart为true,就返回橘色;如果为false,就返回na(空值),从而关闭背景色。
2. 是/否 (Yes/No) 下拉菜单
掌握了上面的技巧,制作是/否菜单就易如反掌了,它们是完全相同的逻辑,只是换了个皮肤而已。
// 逻辑一样,只是把 "on" 换成了 "yes"
myInput = input.string("yes", title="Input title", options=["yes", "no"]) == "yes"
示例脚本: 我们把上面的例子改成“是/否”版本。
//@version=6
indicator(title="Yes/No drop-down menu", overlay=true)
// --- 1. 创建菜单 ---
colourChart = input.string("yes", title="Colour Background",
options=["yes", "no"]) == "yes"
// --- 2. 使用 ---
bgcolor(colourChart ? color.new(color.yellow, 80) : na)
你可以看到,除了文本从 on”换成了 yes,颜色从橘色换成了黄色,核心逻辑没有任何变化。
总结:input.string 开关 vs input.bool 开关
你可能会问,input.bool() 那个复选框不是更简单吗?为什么还要费劲用 input.string() 来做?
input.bool()复选框: 优点是简单、代码少,缺点是可读性稍差,且无法扩展。input.string()下拉菜单: 优点是界面更清晰、更专业,用户明确选择开或关。- 最大的优点是可扩展性: 想象一下,未来你想给这个开关增加第三个状态,比如
"Long Only"(只做多)。如果是input.bool(),你必须删掉它,换成input.string(),你所有相关的代码都得重写。如果是input.string(),你只需在options里加一个选项:["on", "off", "Long Only"],你的代码逻辑可以平滑过渡,这才是专业脚本的思维。
总而言之,input.string() 配合 options 和 == 比较,是打造专业、可扩展设置面板的标准做法。


