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

Pine Script(164):用另一个指标的数据触发警报

#Pine Script入门教学

如何根据另一个指标的数据触发TradingView警报

有时我们想在自己的警报逻辑里,直接用上图表上另一个指标已经算好的数据。如果为此去复制那个指标的代码,不仅费时费力,还会让逻辑分散在多个脚本里、难以维护。好在我们不必这么做:TradingView提供了一个很强的功能,让我们可以基于图上任何其他指标来创建警报。下面就来看怎么实现。

TradingView有一个“指标套用指标”(apply indicator on indicator)的特性,允许一个指标直接获取并使用图上另一个指标画出的数值。借助它,我们可以把一个指标的输出当作另一个指标的输入,从而快速测试和验证各种交易想法,全程甚至不用写一行新代码。

这个特性也打开了一扇新门:基于其他指标的值来生成警报。这样一来,我们不必重复“造轮子”(复制整个指标代码),只需取到那些已经画好的值,构建警报逻辑(也许再加点过滤条件),就大功告成了。

我们甚至可以用它做一个通用的警报脚本,然后用这一个脚本,为图表上各式各样的指标创建高度自定义的警报条件。

要做一个能基于其他指标的值生成警报的指标,大致需要以下几步:

  1. 新建一个“警报专用”指标,在这个脚本里编写响应其他指标数值的警报逻辑。
  2. 添加一个“源”输入项:用input.source()在脚本中加一个特殊输入。它会在指标设置中生成一个下拉菜单,让用户选择不同的数据源(如开盘价、收盘价等);如果图上还有其他指标,它们的绘图输出(如MACD线、RSI值)也会自动出现在这个菜单里。
  3. 编写警报逻辑:用alertcondition(),基于上一步“源”输入提供的数据来构建条件,也可以加入额外的过滤逻辑,比如基于时间、价格或其他内部计算的指标值。
  4. 加载指标:把新建的“警报专用”指标,以及你想作为数据来源的那个指标,都加到图表上。
  5. 配置数据源:打开“警报专用”指标的设置,把它的“源”输入配置为使用另一个指标画出的值。
  6. 创建警报:为“警报专用”指标手动创建一个警报。从此这个脚本就会根据另一个指标的值为你站岗放哨了。

下面通过一个实例演练这些步骤。我们先写一个新指标,让它能基于其他指标的数据生成警报,然后把这个新指标和一个TradingView内置指标(如MACD)加到图表上、配置好,最终实现“A指标为B指标创建警报”的效果。

示例指标:基于另一个指标触发警报

下面这个示例指标会创建一个名为“数据源(Other Data)”的输入项,让我们能取到其他指标画出的数据。当这个数据源的数值连续两根K线上涨或下跌时,脚本就触发警报;同时我们再用一条指数移动平均线(EMA)作过滤。这样在生成警报前,就把外部指标的数据和自己指标内部算出的数据巧妙地结合了起来。先看看最终效果——下图是把这个“警报专用”指标套用在MACD上的样子:

这是该指标的完整代码:

//@version=5
indicator(title="套用其他指标的警报", overlay=true)

// 输入选项
otherData = input.source(close, title="其他数据源")
emaLength = input.int(12, title="EMA周期")

// 计算指标值
emaValue = ta.ema(close, emaLength)

// 设置警报的子条件
crossOver  = ta.crossover(close, emaValue)
crossUnder = ta.crossunder(close, emaValue)
rising = otherData > otherData[1] and
     otherData[1] > otherData[2]
falling = otherData < otherData[1] and
     otherData[1] < otherData[2]

// 组合最终的警报逻辑
longAlert  = crossOver and rising
shortAlert = crossUnder and falling

// 创建警报
alertcondition(condition=longAlert,
     title="做多警报",
     message="价格上穿EMA且MACD正在上涨!")
alertcondition(condition=shortAlert,
     title="做空警报",
     message="价格下穿EMA且MACD正在下跌!")

// 绘制并高亮警报
plot(emaValue, color=color.teal, linewidth=2)
plotarrow(longAlert ? 1 :
         shortAlert ? -1 :
         na,
     colorup=color.new(color.green, 20), 
     colordown=color.new(color.red, 20),
     maxheight=20)

逐段解析。首先是指标的声明和输入选项:

indicator(title="套用其他指标的警报", overlay=true)

// 输入选项
otherData = input.source(close, title="其他数据源")
emaLength = input.int(12, title="EMA周期")

我们用input.source()创建了第一个输入,这是一个特殊的“源”输入,正是它实现了“指标套用指标”的功能。默认值设为收盘价close,之后可以手动改成任何其他指标的输出值;该输入返回的值存进otherData变量。第二个输入则是一个普通整数,用来设定EMA的周期。接着计算指标内部要用的值:

// 计算指标值
emaValue = ta.ema(close, emaLength)

这里只算了一条12周期的EMA。因为我们打算用“指标套用指标”功能,其他所需数据会直接从图上另一个指标取,不用在这里重复计算。下一步定义警报的逻辑条件:

// 设置警报的子条件
crossOver  = ta.crossover(close, emaValue)
crossUnder = ta.crossunder(close, emaValue)
rising = otherData > otherData[1] and
     otherData[1] > otherData[2]
falling = otherData < otherData[1] and
     otherData[1] < otherData[2]

// 组合最终的警报逻辑
longAlert  = crossOver and rising
shortAlert = crossUnder and falling

警报逻辑由两部分组成:价格与EMA的交叉关系,以及外部数据源连续两根K线的趋势。crossOvercrossUnder判断价格是上穿还是下穿EMA;risingfalling判断从otherData(外部数据源)取到的数值是否连续两根K线上涨或下跌。这段代码看着有点抽象,但强大之处正在于此:如果把数据源设成MACD快线,rising就代表“MACD快线连续两根K线上涨”;设成RSI,rising就代表“RSI连续两根K线上涨”,能灵活适应任何套用的指标。最后把两个子条件组合起来:价格上穿EMA(crossOver)且外部数据源连续上涨(rising)时,longAlert成立;反之,价格下穿EMA(crossUnder)且外部数据源连续下跌(falling)时,shortAlert成立。定义好这些布尔变量,就可以创建真正的警报了:

// 创建警报
alertcondition(condition=longAlert,
     title="做多警报",
     message="价格上穿EMA且MACD正在上涨!")
alertcondition(condition=shortAlert,
     title="做空警报",
     message="价格下穿EMA且MACD正在下跌!")

我们为longAlertshortAlert分别创建了警报。条件满足时警报就触发(前提是已手动启用),并弹出message里预设的消息。由于alertcondition()本身不会在图表上留下任何可见标记,我们用最后一段代码把信号可视化:

// 绘制并高亮警报
plot(emaValue, color=color.teal, linewidth=2)
plotarrow(longAlert ? 1 :
         shortAlert ? -1 :
         na,
     colorup=color.new(color.green, 20), 
     colordown=color.new(color.red, 20),
     maxheight=20)

先画出EMA线,再用plotarrow()longAlert为真时画一个绿色向上箭头,在shortAlert为真时画一个红色向下箭头。

用另一个指标的绘图值生成警报

要让上面的指标真正基于其他指标来生成警报,还需要几步操作。首先,把我们的自定义指标和作为数据源的指标(例如MACD)都加到图表上。初始状态如下图:

此时自定义指标默认还在用收盘价(close)作数据源。接下来配置它:点击自定义指标名称旁的齿轮图标,打开设置窗口:

在设置窗口切到“输入(Inputs)”标签页,点开“其他数据源(Other Data)”下拉菜单,选择MACD的某个绘图输出值(例如MACD快线):

做完这步,自定义指标就开始基于MACD的值进行计算了:

计算逻辑虽然配好了,但还差最后一步:手动创建警报。在“创建警报”窗口里选择我们的自定义指标,设好通知方式:

创建并配置好后,当MACD连续下跌且价格跌破EMA时,指标就会触发警报,弹出的警报就像这样:

就这样,我们成功基于另一个指标画出的值触发了警报,全程无需复制一行代码。用同样的方法,这个通用警报脚本可以为任何其他指标服务。

小结

TradingView的“指标套用指标”功能,允许一个指标直接使用另一个指标画出的数值进行计算,让我们能快速测试新想法、组合不同的分析工具,而不用写任何新代码。一个指标甚至可以基于另一个指标的值来生成警报,关键有几步:先创建一个专门用于警报的新指标,在里面用alertcondition()定义警报逻辑,其核心是包含一个用input.source()创建的“源”输入项;然后把这个自定义指标和作为数据源的指标都加到图表上;最后配置自定义指标的“源”输入,让它指向另一个指标的绘图输出值。这样,我们的自定义指标就成功取到并用上了另一个指标的计算结果。

赞(0)
未经允许不得转载:图道交易 » Pine Script(164):用另一个指标的数据触发警报
分享到

评论 抢沙发

登录

找回密码

注册