This code makes most v3 scripts work in v4 with only a few minor changes below. Place the framework code before the first input statement. You can totally delete all comments.
Pros: - to port to v4 you only need to make a few simple changes, not affecting the core v3 code functionality Cons: - without #include - large redundant code block, but can be reduced as needed - no proper syntax highlighting, intellisence for substitute constant names
Make the following changes in v3 script:
1. standard types can't be var names, color_transp can't be in a function, rename in v3 script: color() => color.new() bool => bool_ integer => integer_ float => float_ string => string_
2. init na requires explicit type declaration float a = na color col = na
3. persistent var init (optional): s = na s := nz(s[1], s) // or s := na(s[1]) ? 0 : s[1] // can be replaced with var s var s = 0 s := s + 1
1. optional explicit type declaration/conversion (you still can't cast series to int) float s
2. persistent var modifier var s var float s
3. string series - persistent strings now can be used in cond and output to screen dynamically
4. label and line objects - can be dynamically created, deleted, modified using get/set functions, moved before/after the current bar - can be in if or a function unlike plot - max limit: 50-55 label, and 50-55 line drawing objects in addition to already existing plots - both not affected by max plot outputs 64 - can only be used in the main chart - can serve as the only output function - at least one is required: plot, barcolor, line, label etc. - dynamic var values (including strings) can be output to screen as text using label.new and to_string
str = close >= open ? "up" : "down" label.new(bar_index, high, text=str)
col = close >= open ? color.green : color.red label.new(bar_index, na, "close = " + tostring(close), color=col, textcolor=color.white, style=label.style_labeldown, yloc=yloc.abovebar)
// create new objects, delete old ones l = line.new(bar_index, high, bar_index[10], low[10], width=4) line.delete(l[1])
// free object buffer by deleting old objects first, then create new ones var l = na line.delete(l) l = line.new(bar_index, high, bar_index[10], low[10], width=4)