Sure.

Here you go.

VA set to default HOUR. Label shows when above or below VA.

Arrows are your logic.

input pricePerRowHeightMode = {AUTOMATIC, default TICKSIZE, CUSTOM};

input customRowHeight = 1.0;

input timePerProfile = {CHART, MINUTE, default HOUR, DAY, WEEK, MONTH, "OPT EXP", BAR};

input multiplier = 1; #### Hint: Set for time

input onExpansion = no;

input profiles = 1000;

input showPointOfControl = yes;

input showValueArea = yes;

input valueAreaPercent = 68;

input opacity = 0;

input displace = 0;

input ShowValueLabel = yes;

def period;

def yyyymmdd = getYyyyMmDd();

def seconds = secondsFromTime(0);

def month = getYear() * 12 + getMonth();

def day_number = daysFromDate(first(yyyymmdd)) + getDayOfWeek(first(yyyymmdd));

def

dom = getDayOfMonth(yyyymmdd);

def dow = getDayOfWeek(yyyymmdd - dom + 1);

def expthismonth = (if dow > 5 then 27 else 20) - dow;

def exp_opt = month + (dom > expthismonth);

switch (timePerProfile) {

case CHART:

period = 0;

case MINUTE:

period = floor(seconds / 60 + day_number * 24 * 60);

case HOUR:

period = floor(seconds / 3600 + day_number * 24);

case DAY:

period = countTradingDays(Min(first(yyyymmdd), yyyymmdd), yyyymmdd) - 1;

case WEEK:

period = floor(day_number / 7);

case MONTH:

period = floor(month - first(month));

case "OPT EXP":

period = exp_opt - first(exp_opt);

case BAR:

period = barNumber() - 1;

}

def count = CompoundValue(1, if period != period[1] then (count[1] + period - period[1]) % multiplier else count[1], 0);

def cond = count < count[1] + period - period[1];

def height;

switch (pricePerRowHeightMode) {

case AUTOMATIC:

height = PricePerRow.AUTOMATIC;

case TICKSIZE:

height = PricePerRow.TICKSIZE;

case CUSTOM:

height = customRowHeight;

}

profile

tpo = timeProfile("startNewProfile" = cond, "onExpansion" = onExpansion, "numberOfProfiles" = profiles, "pricePerRow" = height, "

value area percent" = valueAreaPercent);

def con = compoundValue(1, onExpansion, no);

def pc = if IsNaN(tpo.getPointOfControl()) and con then pc[1] else tpo.getPointOfControl();

def hVA = if IsNaN(tpo.getHighestValueArea()) and con then hVA[1] else tpo.getHighestValueArea();

def lVA = if IsNaN(tpo.getLowestValueArea()) and con then lVA[1] else tpo.getLowestValueArea();

def hProfile = if IsNaN(tpo.getHighest()) and con then hProfile[1] else tpo.getHighest();

def lProfile = if IsNaN(tpo.getLowest()) and con then lProfile[1] else tpo.getLowest();

def plotsDomain = IsNaN(close) == onExpansion;

plot

POC = if plotsDomain then pc[displace] else Double.NaN;

plot ProfileHigh = if plotsDomain then hProfile[displace] else Double.NaN;

plot ProfileLow = if plotsDomain then lProfile[displace] else Double.NaN;

plot

VAH = if plotsDomain then hVA[displace] else Double.NaN;

plot

VAL = if plotsDomain then lVA[displace] else Double.NaN;

DefineGlobalColor("Profile", color.blue);

DefineGlobalColor("Value Area", color.gray);

DefineGlobalColor("

Point Of Control", color.yellow);

tpo.show(globalColor("Profile"), if showPointOfControl then globalColor("Point Of Control") else color.current, if showValueArea then globalColor("Value Area") else color.current, opacity);

POC.SetDefaultColor(color.yellow);

POC.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);

VAH.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);

VAL.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);

VAH.SetDefaultColor(color.green);

VAL.SetDefaultColor(color.red);

ProfileHigh.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);

ProfileLow.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);

ProfileHigh.SetDefaultColor(GetColor(3));

ProfileLow.SetDefaultColor(GetColor(3));

ProfileHigh.hide();

ProfileLow.hide();

VAH.setlineweight(3);

VAL.setlineweight(3);

Poc.setlineweight(3);

def VA = VAH - VAL;

addlabel(ShowValueLabel,

if close <= VAH && close >= VAL && close >= POC

then "Inside VA, > POC: " +" (" +VAH +" / " +VAL +") "

else if close <= VAH && close >= VAL && close < POC

then "Inside VA, < POC: " +" (" +VAH +" / " +VAL +") "

else if close < VAL

then "< VA: " +" (" +VAL +") "

else if close > VAH

then "> VA: " +" (" +VAH +") "

else "",

if close <= VAH && close >= VAL && close >= POC

then color.yellow

else if close <= VAH && close >= VAL && close < POC

then color.dark_orange

else if close < VAL

then color.red

else if close > VAH

then color.green

else color.gray);

def lr = 6 * ( WMA(OHLC4, 10) - Average(OHLC4, 10) ) / 9;

def upBar = close > open;

def dnBar = close < open;

def short = lr > 0 && upBar && close > VAH;

def long = lr < 0 && dnBar && close < VAL;

plot longSignal = if long && !long[1] and !long[2] then low else Double.NaN;

plot shortSignal = if short && !short[1] and !short[2] then high else Double.NaN;

longSignal.setpaintingStrategy(paintingStrategy.ARROW_UP);

shortSignal.setpaintingStrategy(paintingStrategy.ARROW_DOWN);

longSignal.setdefaultColor(color.cyan);

shortSignal.setdefaultColor(color.magenta);

longSignal.setlineweight(5);

shortSignal.setlineweight(5);

longSignal.hidebubble();

shortSignal.hidebubble();

longSignal.hidetitle();

shortSignal.hidetitle();