WRB indicator (as on MT4 and MT5) for Pinescript (TradingView)

1
HI All

I am not sure if TradingView is also welcome on this forum. If not apologies for posting.

I am working on a pinescript code that will draw WRB and WRBHG boxes.

This issue I am facing so far is to modify the endDate of the box to be set as soon as the price penetrates the box. (either from above or from the bottom)

As far as I know pinescript process data from new to old...

The code below draws for now 6 boxes but can be changes to draw max 500. Unless the4 boxes are cut when the price penetrates it it is kinda useless to draw 500 boxes.

Code: Select all

//@version=5
indicator("v.0 WRBHG with Analysis", overlay = true, max_bars_back=5000, max_lines_count=4, max_labels_count=4, max_boxes_count = 4)

group0 = 'Period under study'
startDate = input.time(title='Start Date', defval=timestamp("2000-01-19 09:00:00 GMT+2"), group=group0)
endDate = input.time(title='End Date', defval=timestamp('2099-09-01 09:00:00 GMT+2'), tooltip='Date & time to stop analysis', group=group0)
use_custom_period = input.bool(title='use_custom_period', defval=true, group=group0, inline='HLline')

var withinSession = true

var WRBHG_upper = 0.0
var WRBHG_lower = 0.0
var fillColor = color.black
x_extend_count = input.int(title="x extend count", defval = 30)
transp  = input.int(title="Transparency", defval = 70)

body = math.abs(open-close)
wrb = body>body[1] and body>body[2] and body>body[3] ? math.avg(open,close) : na
hg = (wrb[1] and (low>high[2] or high<low[2]))? wrb[1] : na

var penetratedBox = false
var boxEndTime = endDate

if withinSession
    if hg
        if close[1] > open[1] and low > high [2]
            WRBHG_upper := low
            WRBHG_lower := high[2]
            fillColor := color.new(color.green, transp)
        else if close[1] < open[1] and low > high [2]
            WRBHG_upper := low
            WRBHG_lower := high[2]
            fillColor := color.new(color.green, transp)
        else
            WRBHG_upper := low[2]
            WRBHG_lower := high
            fillColor := color.new(color.red, transp)



        box.new(time[2], WRBHG_upper, endDate, WRBHG_lower, border_color = na, xloc = xloc.bar_time, bgcolor = fillColor)  

s3 = ta.ema(ohlc4, 3)
plot(s3, color=color.new(color.black,0))
Thanks for the help. Appriciate it.

Kind regards


Re: WRB indicator (as on MT4 and MT5) for Pinescript (TradingView)

2
I made the code a little cleaner
So far I cant figure out how to check old data against newer data,

It seems Pinescript goes from new to old instead of old to new

Code: Select all

//@version=5
indicator("v.0 WRBHG with Analysis", overlay = true, max_bars_back=5000, max_lines_count=4, max_labels_count=4, max_boxes_count = 4)

group0 = 'Period under study'
startDate = input.time(title='Start Date', defval=timestamp("2000-01-19 09:00:00 GMT+2"), group=group0)
endDate = input.time(title='End Date', defval=timestamp('2099-09-01 09:00:00 GMT+2'), tooltip='Date & time to stop analysis', group=group0)

group1 = 'Settings under study'
x_extend_count = input.int(title="x extend count", defval = 30, group=group1)
transp  = input.int(title="Transparency", defval = 70, group=group1)

var WRBHG_upper = 0.0
var WRBHG_lower = 0.0
var fillColor = color.black

// Store index of candles that meet the condition
var conditionMet = array.new_int(0)
// Determin WRB and WRBHG
body = math.abs(open-close)
wrb = body>body[1] and body>body[2] and body>body[3] ? math.avg(open,close) : na
wrbhg = (wrb[1] and (low>high[2] or high<low[2]))? wrb[1] : na

// Store left side price when the box is created and index of candles that meet the condition
if wrbhg
    if close[1] > open[1] and low > high[2]
        WRBHG_upper := low
        WRBHG_lower := high[2]
        fillColor := color.new(color.green, transp)
    else if close[1] < open[1] and low > high[2]
        WRBHG_upper := low
        WRBHG_lower := high[2]
        fillColor := color.new(color.yellow, transp)
    else
        WRBHG_upper := low[2]
        WRBHG_lower := high
        fillColor := color.new(color.red, transp)


    // Define the box
    box_id = box.new(time[2], WRBHG_upper, endDate, WRBHG_lower, border_color = na, xloc = xloc.bar_time, bgcolor = fillColor)