首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PineScript:使用脚本中的变量设置警报

PineScript:使用脚本中的变量设置警报
EN

Stack Overflow用户
提问于 2022-09-22 04:42:12
回答 1查看 47关注 0票数 2

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

代码语言:javascript
复制
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")}}.

但是,最终消息中没有替换StopLoss和Target。

最后一条警报消息如下所示:

我的代码是:

代码语言:javascript
复制
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和加/减的价格。但我所犯的错误却没有出现。

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2022-09-24 04:12:12

我用不同的方法解决了这个问题。在strategy.entry中,有一个名为alert_message的论点。我使用它,然后在“警报设置”对话框中引用它如下:

代码语言:javascript
复制
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}}

代码如下:

代码语言:javascript
复制
    // 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73809439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档