tradingview pine 脚本- 消息

tradingview pine script- message

我对警报有疑问,更准确地说是对消息有疑问。我希望警报在 3commas 上执行 bot 命令。虽然警报添加了一个负责它的功能

message_type": "bot",  "bot_id": 8511507,  "email_token": "13ebda92-86ce-4716-ae39-45259de05e98",  "delay_seconds": 0}

我收到一个错误:

"line 101: required (...)+ loop did not match anything at character 'b'"

indicator("TMA Centered Bands Indicator", "TMA v0.41", overlay = true, max_lines_count = 500, max_labels_count = 500)

//INPUTS
var GRP1 = "Parameters"
HalfLength = input.int(12, "Centered TMA half period", group = GRP1)
string PriceType = input.string("Weighted", "Price to use", options = ["Close", "Open", "High", "Low", "Median", "Typical", "Weighted", "Average"], group = GRP1)
AtrPeriod = input.int(100, "Average true range period", group = GRP1)
AtrMultiplier = input.float(2, "Average true range multiplier", group = GRP1)
TMAangle = input.int(4, "Centered TMA angle caution", group = GRP1)

//VARIABLES
float tmac = na
float tmau = na
float tmad = na

var float pastTmac = na //from the previous candle
var float pastTmau = na
var float pastTmad = na

float tmau_temp = na //before looping
float tmac_temp = na
float tmad_temp = na

float point = syminfo.pointvalue //NEEDS MORE TESTS

bool last = false //checks if a loop is needed

var string alertSignal = "EMPTY" //needed for alarms to avoid repetition

//COLORS
var GRP2 = "Colors"
var color colorBuffer = na
color colorDOWN = input.color(color.new(color.red, 0), "Bear", inline = "5", group = GRP2)
color colorUP = input.color(color.new(color.green, 0), "Bull", inline = "5", group = GRP2)
color colorBands = input.color(color.new(color.white, 0), "Bands", inline = "5", group = GRP2)
bool cautionInput = input.bool(true, "Caution label", inline = "6", group = GRP2)

//ALERTS
var GRP3 = "Alerts (Needs to create alert manually after every change)"
bool crossUpInput = input.bool(false, "Crossing up", inline = "7", group = GRP3)
bool crossDownInput = input.bool(false, "Crossing down", inline = "7", group = GRP3)
bool comingBackInput = input.bool(false, "Coming back", inline = "7", group = GRP3)
bool onArrowDownInput = input.bool(false, "On arrow down", inline = "8", group = GRP3)
bool onArrowUpInput = input.bool(false, "On arrow up", inline = "8", group = GRP3)

//CLEAR LINES
a_allLines = line.all
if array.size(a_allLines) > 0
    for p = 0 to array.size(a_allLines) - 1
        line.delete(array.get(a_allLines, p))
        
//GET PRICE        
Price(x) =>
    float price = switch PriceType
        "Close" => close[x]
        "Open" => open[x]
        "High" => high[x]
        "Low" => low[x]
        "Median" => (high[x] + low[x]) / 2
        "Typical" => (high[x] + low[x] + close[x]) / 3
        "Weighted" => (high[x] + low[x] + close[x] + close[x]) / 4
        "Average" => (high[x] + low[x] + close[x] + open[x])/ 4
    price

//MAIN
for i = HalfLength to 0

    //ATR
    atr = 0.0
    for j = 0 to  AtrPeriod - 1
        atr += math.max(high[i + j + 10], close[i + j + 11]) - math.min(low[i + j + 10], close[i + j + 11])
    atr /= AtrPeriod
    
    //BANDS
    sum = (HalfLength + 1) * Price(i)
    sumw = (HalfLength + 1)
    k = HalfLength
    for j = 1 to HalfLength
        sum += k * Price(i + j)
        sumw += k
        if (j <= i)
            sum  += k * Price(i - j)
            sumw += k
        k -= 1
    tmac := sum/sumw
    tmau := tmac+AtrMultiplier*atr
    tmad := tmac-AtrMultiplier*atr
    
    //ALERTS
    if i == 0 //Only on a real candle 
        if (high > tmau and alertSignal != "UP") //crossing up band
            if crossUpInput == true //checks if activated
                alert("Crossing up Band") //calling alert
            alertSignal := "UP" //to avoid repeating 
        else if (low < tmad and alertSignal != "DOWN") //crossing down band
            if crossDownInput == true
                alert("{  "message_type": "bot",  "bot_id": 8511507,  "email_token": "13ebda92-86ce-4716-ae39-45259de05e98",  "delay_seconds": 0}")
            alertSignal := "DOWN"
        else if (alertSignal == "DOWN" and high >= tmad and alertSignal != "EMPTY") //back from the down band
            if comingBackInput == true
                alert("Coming back")
            alertSignal := "EMPTY"
        else if (alertSignal == "UP" and low <= tmau and alertSignal != "EMPTY") //back from the up band
            if comingBackInput == true
                alert("Coming back")
            alertSignal := "EMPTY"
            
    //CHANGE TREND COLOR
    if pastTmac != 0.0
        if tmac > pastTmac
            colorBuffer := colorUP
        if tmac < pastTmac
            colorBuffer := colorDOWN
            
    //SIGNALS
    reboundD = 0.0
    reboundU = 0.0
    caution = 0.0
    if pastTmac != 0.0
        if (high[i + 1] > pastTmau and close[i + 1] > open[i + 1] and close[i] < open[i])
            reboundD := high[i] + AtrMultiplier * atr / 2
            if (tmac - pastTmac > TMAangle * point)
                caution := reboundD + 10 * point
        if (low[i + 1] < pastTmad and close[i + 1] < open[i + 1] and close[i] > open[i])
            reboundU := low[i] - AtrMultiplier * atr / 2
            if (pastTmac - tmac > TMAangle * point)
                caution := reboundU - 10 * point
    
    //LAST REAL
    if barstate.islast and i == HalfLength
        last := true
        tmau_temp := tmau
        tmac_temp := tmac
        tmad_temp := tmad
        
    //DRAW HANDICAPPED BANDS
    if barstate.islast and i < HalfLength
        line.new(bar_index - (i + 1), pastTmau, bar_index - (i), tmau, width = 2, style = line.style_dotted, color = colorBands)
        line.new(bar_index - (i + 1), pastTmac, bar_index - (i), tmac, width = 2, style = line.style_dotted, color = colorBuffer)
        line.new(bar_index - (i + 1), pastTmad, bar_index - (i), tmad, width = 2, style = line.style_dotted, color = colorBands)
        
    //DRAW SIGNALS
    if reboundD != 0
        label.new(bar_index - (i), reboundD, color = colorDOWN, style = label.style_triangledown, size = size.tiny, textcolor = na)
        if i == 0 and onArrowDownInput == true //alert
            alert("Down arrow") 
        if caution != 0 and cautionInput == true
            label.new(bar_index - (i), reboundD, color = colorUP, style = label.style_xcross, size = size.tiny, textcolor = na)
    if reboundU != 0
        label.new(bar_index - (i), reboundU, color = colorUP, style = label.style_triangleup, size = size.tiny, textcolor = na)
        if i == 0 and onArrowUpInput == true //alert
            alert("UP arrow") 
        if caution != 0 and cautionInput == true
            label.new(bar_index - (i), reboundU, color = colorDOWN, style = label.style_xcross, size = size.tiny, textcolor = na)
            
    //SAVE HISTORY
    pastTmac := tmac
    pastTmau := tmau
    pastTmad := tmad
    
    //LOOP IS ONLY FOR HANDICAPPED
    if barstate.islast != true
        break
        
//DRAW REAL BANDS
plot(last ? tmau_temp : tmau, title = "TMA Up", color = colorBands, linewidth=1, style = plot.style_line, offset = -HalfLength)
plot(last ? tmac_temp : tmac, title = "TMA Mid", color = colorBuffer, linewidth=1, style = plot.style_line, offset = -HalfLength)
plot(last ? tmad_temp : tmad, title = "TMA Down", color = colorBands, linewidth=1, style = plot.style_line, offset = -HalfLength)

您的字符串包含双引号,因此解决此问题的最简单方法是在您的字符串周围使用单引号。

alert('{  "message_type": "bot",  "bot_id": 8511507,  "email_token": "13ebda92-86ce-4716-ae39-45259de05e98",  "delay_seconds": 0}')