我们的新警报允许动态消息

Jan 25, 2021

我们的新脚本警报使用`alert()`函数,该函数可在策略和研究中使用,并允许在警报触发时生成完全动态的消息。

新警报使用类似于最近策略警报的模型工作,在该模型中,只有在图表用户界面中创建的一个警报才能汇总脚本中任意数量的`alert()`调用生成的所有触发器。单一策略警报将汇总所有经纪商事件触发器。

要创建新警报:

  1. 根据需要在脚本中包含尽可能多的`alert()`调用,并将每个调用都包含在定义触发条件的`if`块中。
  2. 使用图表的“创建警报”对话框为脚本创建一个警报,然后选择一种警报类型,包括“ alert()函数调用”。

在策略中使用时,用户可以选择创建仅在`alert()`事件、订单执行事件或在两者上触发的警报。还需要记住的是,动态警报消息中可以使用的变量数量没有限制,并且不再需要占位符,因为脚本中使用的任何变量也可以在新的`alert()`函数调用中使用,只要它是字符串格式即可。

以下是`alert()`函数的三个示例:

1)每根K线上都会触发脚本警报,并且消息中包含该K线的收盘价:

//@version=4
study("Simple alert() example")
plot(close)
alert("Close = " + tostring(close), alert.freq_once_per_bar_close)

2)检查三个指标的值:RSI,SMA和动量。如果任何指标超过指定水平(或价格),都会触发脚本警报,并且消息中将包含指标名称及其当前值。

//@version=4
study("alert() with multiple indicators", overlay=true)
f_triggerSma()=>
    _s  = sma(close, 14)
    _co = crossover(close, _s)
    _cu = crossunder(close, _s)
    if _co
        alert("Price (" + tostring(close) + ") crossing up SMA (" + tostring(_s) + ")", alert.freq_once_per_bar)
    else if _cu
        alert("Price (" + tostring(close) + ") crossing down SMA (" + tostring(_s) + ")", alert.freq_once_per_bar)
f_triggerRsi()=>
    _r  = rsi(close, 7)
    _co = crossover(_r, 70)
    _cu = crossunder(_r, 30)
    if _co
        alert("RSI (" + tostring(_r) + ") crossing up 70 level", alert.freq_once_per_bar)
    else if _cu
        alert("RSI (" + tostring(_r) + ") crossing down 30 level", alert.freq_once_per_bar)
f_triggerMom()=>
    _m  = mom(close, 14)
    _co = crossover(_m, 0)
    _cu = crossunder(_m, 0)
    if _co
        alert("Momentum (" + tostring(_m) + ")  crossing up 0 level", alert.freq_once_per_bar)
    else if _cu
        alert("Momentum (" + tostring(_m) + ")  crossing down 0 level", alert.freq_once_per_bar)

plot(sma(close, 14), "SMA")
f_triggerSma()
f_triggerRsi()
f_triggerMom()

3)在此示例中,检查了一个RSI指标的值,但一次检查了五个商品。如果RSI穿过任何一个商品的指定水平,将触发脚本警报,并且消息将在穿过时包含该商品和指标值。

//@version=4
study("alert() with multiple symbols")
f_triggerRsi(_ticker)=>
    _r = rsi(close, 7)
    _x = crossover(_r,70)
    _y = crossunder(_r,30)
    _rt = barstate.isrealtime
    [_rsi, _co, _cu, _rt_bar] = security(_ticker, timeframe.period, [_r, _x, _y, _rt])
    _msg = _ticker + ", " + timeframe.period + ": "
    if _co and _rt_bar
        _msg := _msg + "RSI (" + tostring(_rsi) + ") crossing up 70 level"
        alert(_msg,  alert.freq_once_per_bar_close)
    else if _cu and _rt_bar
        _msg := _msg + "RSI (" + tostring(_rsi) + ")  crossing down 30 level"
        alert(_msg,  alert.freq_once_per_bar_close)

plot(rsi(close, 7), "RSI", color=#8E1599)
band1 = hline(70, "Upper Band", color=#C0C0C0)
band0 = hline(30, "Lower Band", color=#C0C0C0)
fill(band1, band0, color=color.new(#9915FF,90), title="Background")

f_triggerRsi(syminfo.tickerid)
f_triggerRsi("NASDAQ:MSFT")
f_triggerRsi("FX:EURUSD")
f_triggerRsi("NASDAQ:TSLA")
f_triggerRsi("NASDAQ:PYPL")

脚本用户可以在帮助中心了解有关创建警报的更多信息。Pine编码人员可以在《 Pine用户手册》和《Pine语言参考手册》中阅读有关新警报的信息。

在我们的《Pine用户手册》发行说明(Release notes)中了解有关Pine的所有更新。


 

还没有关注我们的中文微信公众号?快来扫二维码吧!

Look first Then leap

TradingView专门为您而打造,请确保您充分利用我们出色的功能
开启图表