在Pine Script的参数控制面板中,input.string() 负责处理所有的文本(字符串)。
你可能会想,交易策略都是数字,为什么要输入文本? 答案是:警报与自动化。
这几乎是 input.string() 最核心的实战用途。
当你需要让策略对接第三方自动化工具(比如交易机器人)时,你发送的买入、卖出指令就是一段特定的文本。input.string() 允许你把这些指令“参数化”,方便你随时修改,而无需改动代码。
当然,它也常用于:
- 在图表上显示自定义的文本标签(
label.new())。 - 为订单设置特定的注释。
input.string() 的参数和其他输入函数类似,我帮你按实战重要性分了组:
1. 核心参数 (几乎必用)
defval:(必填) 默认的文本内容。比如"Buy Signal"。title:(强烈建议) 输入项的名称,即显示在设置面板上的标签,如"警报文本"。
2. 特殊形态 (下拉菜单 – 非常实用)
options:提供一个固定的文本选项列表,用方括号括起来,如["AAPL", "TSLA", "MSFT"]。一旦使用了options,input.string()就会从一个自由输入框,变成一个下拉菜单,极大提升了易用性。
3. 布局与提示 (提升专业度)
tooltip:鼠标悬停在“i”图标上时,显示的详细帮助文本。group:分组标题,用于组织复杂的参数面板。inline:内联ID,用于将多个输入项显示在同一行。
重要提醒: 所有这些参数(如 defval, title 等)的值,都必须是常量(写死的值),不能是动态的变量。
实战代码示例
基础示例:创建自定义警报消息
这是 input.string() 最基础,也是最重要的用法。
// 创建一个警报消息输入
alertMsgText = input.string("SPX中的新信号!", title="警报文本")
if close > ta.highest(close, 10)[1]
alert(alertMsgText) // alert() 函数可以使用动态文本
现在用户可以在设置面板里,把“警报文本”改成他们需要的任何内容(比如机器人的指令),alert() 函数就会发送修改后的文本。
进阶示例:用于自动化交易的机器人指令
我们来创建一个更专业的输入,包含分组和帮助信息,专门用于自动化交易。
// 创建
buyCommand = input.string("B,EURUSD,1", title="买入 (进入多头) 命令",
tooltip="策略会为买入(进入多头)订单生成带有此文本的警报。",
group="警报消息")
这个输入:
- 默认值是
"B,EURUSD,1"(一个典型的机器人指令)。 - 在设置面板上,它会出现在一个名为“警报消息”的分组下面。
- 当用户鼠标悬停时,会显示
tooltip里的详细说明。
input.string 最大的陷阱
这是几乎所有新手都会踩的坑,请你一定记住:
你不能把 input.string() 返回的变量,用在 alertcondition() 函数里。
// 这是一个错误的示例,无法编译!
myText = input.string("Buy", title="My Text")
// 下面这行会报错!
alertcondition(close > open, title="My Alert", message=myText)
原因: alertcondition() 函数要求它的所有参数(包括 message)都必须是常量,也就是在代码编译时就必须是确定的。 而 input.string() 返回的 myText 变量,是一个输入变量(input string),它的值在运行时才能确定,因为用户可以随时修改。
正确做法: 如果你需要使用动态的文本内容(即来自 input.string() 的文本)来发送警报,你必须使用 alert() 函数,并把它放在 if 语句或 strategy 逻辑中,就像我们第一个示例中那样。alert() 函数被设计为在执行时触发,所以它可以使用动态的文本。
完整示例脚本:均线交叉显示自定义标签
与 alert() 类似,label.new() 函数也是在执行时才创建的,所以它可以使用 input.string() 传来的动态文本。
//@version=6
indicator(title="字符串输入示例", overlay=true)
// --- 1. 创建 ---
buyMessage = input.string("Buy", title="买入信号文本")
sellMessage = input.string("Sell", title="卖出信号文本")
maLength = input.int(50, title="移动平均线周期")
// --- 2. 计算 ---
emaValue = ta.ema(close, maLength)
plot(emaValue, color=color.orange, linewidth=2, title="EMA")
// --- 3. 交易逻辑 ---
if ta.crossover(close, emaValue)
label.new(bar_index, high, color=#AAF0D1, text=buyMessage)
if ta.crossunder(close, emaValue)
label.new(bar_index, high, color=#FDBCB4, text=sellMessage)
在这个脚本中,当发生金叉时,图表会显示一个标签,标签上的文字就是用户在买入信号文本输入框里填写的(默认为 “Buy”)。
总结
input.string() 是你策略参数化的重要工具,尤其是当你需要与外部自动化系统交互时。
- 核心用途:
alert()函数的动态警报消息、label.new()的动态标签文本。 - 实用技巧: 使用
options参数,可以将文本框变为更易用的“下拉菜单”。 - 最大陷阱: 绝对不要试图将
input.string()的变量用于alertcondition(),请改用alert()函数。


