【问题标题】:PineScript: Setting alerts with variables from scriptPineScript:使用脚本中的变量设置警报
【发布时间】:2022-09-24 12:12:12
【问题描述】:

我正在尝试在警报框中创建警报,如下所示:

Test Signal (Nifty Spot price) {{time}}: 
{{ticker}} Recommendation {{strategy.order.action}} at CMP: {{close}} with SL:{{plot(\"StopLoss\")}} Target(with 1:1 Risk-to-Reward Ratio): {{plot(\"Target\")}}.

但是,最终消息中的止损和目标不会被替换。

最后的警报消息如下:

我的代码是这样的:

buyTarget = close + ((close - atrLow) * rrRatio)
sellTarget = close - ((atrHigh - close) * rrRatio)

// Trading
var float sl = na
var float tgt = na
h = hour(time(\'1\'), syminfo.timezone)
m = minute(time(\'1\'), syminfo.timezone)
hourVal = h * 100 + m
if (mktAlwaysOn or (hourVal < endOfDay))
    // Entry
    var string alert_msg = na
    if (sureBuyInTrend)
        alert_msg := \'Buy: \' + syminfo.ticker + \' , SL: \' + str.tostring(math.floor(atrLow[0])) + \', Target(RR=1:1):\' + str.tostring(math.floor(buyTarget)) + \'. CMP: \' + str.tostring(close)
        strategy.entry(\"enter long\", strategy.long, lotSize, limit=na, stop=na, comment=\"Enter Long\", alert_message=alert_msg)
        sl := atrLow
        tgt := buyTarget
        // alert(\'Buy:\' + syminfo.ticker + \' ,SL:\' + str.tostring(math.floor(atrLow[0])) + \', Target:\' + str.tostring(math.floor(buyTarget)), alert.freq_once_per_bar)
    if (sureSellInTrend)
        alert_msg := \'Sell: \' + syminfo.ticker + \' , SL: \' + str.tostring(math.floor(atrHigh[0])) + \', Target(RR=1:1): \' + str.tostring(math.floor(sellTarget)) + \'. CMP: \' + str.tostring(close)
        strategy.entry(\"enter short\", strategy.short, lotSize, limit=na, stop=na, comment=\"Enter Short\", alert_message=alert_msg)
        sl := atrHigh
        tgt := sellTarget
        // alert(\'Sell:\' + syminfo.ticker + \' ,SL:\' + str.tostring(math.floor(atrHigh[0])) + \', Target:\' + str.tostring(math.floor(sellTarget)), alert.freq_once_per_bar)
    
    alert(alert_msg, alert.freq_once_per_bar)

    // Exit: target or SL
    shortExitComment = (close > sl) ? \"Short SL hit\" : sureBuyInTrend ? \"Short target hit\" : na
    var string exit_msg = na
    if (sureSellInTrend or (close < sl) or (close > buyTarget))
        exit_msg := (close < sl) ? \"Long SL hit. Sorry\" : (close > buyTarget) ? \'Long target hit. Enjoy\': sureSellInTrend ? \'Next Sell signal came. Exiting\' : na
        strategy.close(\"enter long\", comment=close < sl ? \"Long SL hit\" : \"Long target hit\", alert_message=exit_msg)

    if (sureBuyInTrend or (close > sl) or (close < sellTarget))
        exit_msg := (close > sl) ? \"Short SL hit. Sorry\" : (close < sellTarget) ? \'Short target hit. Enjoy\': sureBuyInTrend ? \'Next Buy signal came. Exiting\' : na
        strategy.close(\"enter short\", comment=close > sl ? \"Short SL hit\" : \"Short target hit\", alert_message=exit_msg)

else if(not mktAlwaysOn)
    // Close all open position at the end if Day
    strategy.close_all(comment = \"Close all entries\", alert_message=\"Closing all the pending open positions as market close is near. Thanks.\")

// Hack for alerts
targetPrice = sureBuyInTrend ? buyTarget : sureSellInTrend ? sellTarget : na
plot(math.round(sl,2), title=\"StopLoss\", display = display.all)
plot(math.round(targetPrice,2), title=\"Target\", display = display.all)


所以逻辑很简单:

对于 SL,我正在考虑 ATR,并以此为基础推导出 buySL 和 sellSL。 对于目标,我们只考虑 R:R = 1:1 并从价格中加/减。 但是我正在做的一些错误没有出现。

任何帮助将不胜感激。

  • 你有多少地块?您确定您的地块在发出警报时具有有效值(不是na)吗?
  • 是的。因为我刚刚更改了颜色并看到图表正确显示在图表中。一个是SL,另一个是目标。两者都在带有值的图表中绘制。
  • 也许您使用的是两个单引号而不是一个双引号。检查您的策略代码和警报设置

标签: pine-script


【解决方案1】:

我以不同的方式解决了它。 在strategy.entry 中,有一个参数为alert_message。 我使用它,然后在“警报设置”对话框中引用它,如下所示:

Alert: 
{{strategy.order.alert_message}}

Action:
{{strategy.order.action}} @ {{strategy.order.contracts}} filled on {{ticker}}. New strategy position is {{strategy.position_size}}.
Order number: {{strategy.order.id}}

代码是这样的:

    // Entry
    var string alert_msg = na
    if (sureBuyInTrend)
        alert_msg := 'Buy: ' + syminfo.ticker + ' , SL: ' + str.tostring(math.floor(atrLow[0])) + ', Target(RR=1:1):' + str.tostring(math.floor(buyTarget)) + '. CMP: ' + str.tostring(close)
        strategy.entry("enter long", strategy.long, lotSize, limit=na, stop=na, comment="Enter Long", alert_message=alert_msg)
        sl := atrLow
        tgt := buyTarget
    if (sureSellInTrend)
        alert_msg := 'Sell: ' + syminfo.ticker + ' , SL: ' + str.tostring(math.floor(atrHigh[0])) + ', Target(RR=1:1): ' + str.tostring(math.floor(sellTarget)) + '. CMP: ' + str.tostring(close)
        strategy.entry("enter short", strategy.short, lotSize, limit=na, stop=na, comment="Enter Short", alert_message=alert_msg)
        sl := atrHigh
        tgt := sellTarget

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-16
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多