Reputation: 13
I am trying to print a dynamic Label on my chart depending on the price behavior. Basically I am trying to plot the total cumulative volume of that wave on chart when the direction changes. Below is the part code snippet where I try to use the label.new() function through if condition
if directionHasChanged or barstate.islast and not barstate.isrealtime or barstate.isrealtime and not barstate.isconfirmed
plotChar := true
if directionIsDown and plotChar
label.new(bar_index,high,style=label.style_none,text=volString,color=color.white)
But I am getting script error that reads - "The 'resolution' argument is incompatible with functions that have side effects."
What could be the reason and what is the possible solution or workaround to achieve the same. Below is the entire code of my script. Any help is appreciated. I am almost stuck for couple of days now
//@version=4
study("Weis Wave Chart", shorttitle="Weis", overlay=true, resolution="")
lblOffset = input(5, title="Label Offset")
method = input(defval="ATR", options=["ATR", "Traditional", "Part of Price"], title="Renko Assignment Method")
methodvalue = input(defval=14.0, type=input.float, minval=0, title="Value")
pricesource = input(defval="Close", options=["Close", "High / Low", "Open / Close"], title="Price Source")
useClose = pricesource == "Close"
useOpenClose = pricesource == "Open / Close" or useClose
useTrueRange = input(defval="Auto", options=["Always", "Auto", "Never"], title="Use True Range instead of Volume")
isOscillating = input(defval=false, type=input.bool, title="Oscillating")
normalize = input(defval=false, type=input.bool, title="Normalize")
vol = useTrueRange == "Always" or useTrueRange == "Auto" and na(volume) ? tr : volume
op = useClose ? close : open
hi = useOpenClose ? close >= op ? close : op : high
lo = useOpenClose ? close <= op ? close : op : low
if method == "ATR"
methodvalue := atr(round(methodvalue))
if method == "Part of Price"
methodvalue := close / methodvalue
currclose = float(na)
prevclose = nz(currclose[1])
prevhigh = prevclose + methodvalue
prevlow = prevclose - methodvalue
currclose := hi > prevhigh ? hi : lo < prevlow ? lo : prevclose
direction = int(na)
direction := currclose > prevclose ? 1 : currclose < prevclose ? -1 : nz(direction[1])
directionHasChanged = change(direction) != 0
directionIsUp = direction > 0
directionIsDown = direction < 0
extr = float(na)
fixnan_1 = fixnan(extr[1])
prevextr = directionHasChanged ? currclose : fixnan_1
extr := directionIsUp and hi >= prevextr ? hi : directionIsDown and lo <= prevextr ? lo : prevextr
barcount = 1
barcount := not directionHasChanged and normalize ? barcount[1] + barcount : barcount
vol := not directionHasChanged ? vol[1] + vol : vol
res = barcount > 1 ? vol / barcount : vol
volString = tostring(res)
f_calc_bar_time(offset) => ret = time + ((time-time[1]) * offset)
//var label = label.new(bar_index, na)
//label.set_text(label, "green")
//label.set_size(label, "10")
//label.set_textcolor(label, color.white)
//label.set_yloc(label, yloc.belowbar)
//label.set_style(label, label.style_none)
mLow = security(syminfo.tickerid, '5m', low[1], gaps = barmerge.gaps_off, lookahead = barmerge.lookahead_on)
mHigh = security(syminfo.tickerid, '5m', high[1], gaps = barmerge.gaps_off, lookahead = barmerge.lookahead_on)
//f_print_low(_txt) => var _lbl = label(na), label.delete(_lbl), _lbl := label.new(time + (time-time[1]) * 5, low, style=label.style_none,text=_txt,color=color.white)
//f_print_high(_txt) => var _lbl = label(na), label.delete(_lbl), _lbl := label.new(bar_index[0], high, style=label.style_none,text=_txt,color=color.white)
//if directionHasChanged
//if directionIsUp
//label.new(f_calc_bar_time(lblOffset), mLow, xloc=xloc.bar_time, text=tostring(res), style=label.style_none, color=color.white)
//if directionIsDown
//label.new(f_calc_bar_time(lblOffset), mHigh, xloc=xloc.bar_time, text=tostring(res), style=label.style_none, color=color.white)
var plotChar = false
var up = false
var down = false
var upLbl = 0
var dwnLbl = 0
if directionHasChanged or barstate.islast and not barstate.isrealtime or barstate.isrealtime and not barstate.isconfirmed
plotChar := true
if directionIsDown and plotChar
label.new(bar_index,high,style=label.style_none,text=volString,color=color.white)
if directionIsUp and plotChar
down := true
dwnLbl := 1
//plotchar(series=plotChar, color=color.white,char='3')
plotchar(series=up,color=color.white,location=location.abovebar, text="3")
plotchar(series=down,color=color.white,location=location.belowbar, text="3")
//label.new(upLbl,high,style=label.style_none,text=volString,color=color.white)
//label.new(dwnLbl,low,style=label.style_none,text=volString,color=color.white)
plotChar := false
up := false
down := false
upLbl := 0
dwnLbl := 0
plot(directionHasChanged or barstate.islast and not barstate.isrealtime or barstate.isrealtime and not barstate.isconfirmed ? extr[1] : na, offset=-1, color=#1155CC, transp=50, linewidth=2, title="Wave Line")
Upvotes: 0
Views: 1305
Reputation: 6865
The reason is the resolution=""
parameter in your study()
declaration.
study("Weis Wave Chart", shorttitle="Weis", overlay=true, resolution="")
When you remove it, the script compiles without errors.
You have to change it to this:
study("Weis Wave Chart", shorttitle="Weis", overlay=true)
Upvotes: 1