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

Pine Script(87):熟悉 input.string,打造自定义警报与自动化文本

#Pine Script入门教学

在Pine Script的参数控制面板中,input.string() 负责处理所有的文本(字符串)。

你可能会想,交易策略都是数字,为什么要输入文本? 答案是:警报与自动化。

这几乎是 input.string() 最核心的实战用途。

当你需要让策略对接第三方自动化工具(比如交易机器人)时,你发送的买入、卖出指令就是一段特定的文本。input.string() 允许你把这些指令“参数化”,方便你随时修改,而无需改动代码。

当然,它也常用于:

  • 在图表上显示自定义的文本标签(label.new())。
  • 为订单设置特定的注释。

input.string() 的参数和其他输入函数类似,我帮你按实战重要性分了组:

1. 核心参数 (几乎必用)
  • defval:(必填) 默认的文本内容。比如 "Buy Signal"
  • title:(强烈建议) 输入项的名称,即显示在设置面板上的标签,如 "警报文本"
2. 特殊形态 (下拉菜单 – 非常实用)
  • options:提供一个固定的文本选项列表,用方括号括起来,如 ["AAPL", "TSLA", "MSFT"]。一旦使用了 optionsinput.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() 函数。
赞(0)
未经允许不得转载:图道交易 » Pine Script(87):熟悉 input.string,打造自定义警报与自动化文本
分享到

评论 抢沙发

登录

找回密码

注册