vZone (Volumes Based Support/Resistance)

nitrous

Member
VIP
Now only if there was some way, where we could automatically draw lines, that plot the highest volume bars in the volume sub graph.

That would make this study almost complete :)
When you make the change or update the code can you please post the full code so we can test it thank you
This is the new code that I am testing:

Code:
## vZoneSTUDY.ts
## This Indicator is based on the Following concept and, I suggest watch the video before you start to use this.
##
## https://www.screencast.com/users/MarketGauge/folders/DATE1010/media/f1702bb2-2090-463a-8ad2-59639c1166cd
## This is to Plot Support/Resistance based on High Volume Candle in three different time zones for the day.
##
## Removing the header Credit credits and description is not permitted, any modification needs to be shared.
## A big thanks to @COS251 for helping me with Coding this, Reviewing and Testing it.
##
## V 1.1 : Just added the ability to disable the vZones, automatically, extending from previous in to current session.
##  Note : It is available as an option, should somebody prefer the extension. Set "Extend" to your needs accordingly.
## V 1.0 : Split Day in to three Zones and Find the highest Volume Candle for each zone and plot Support/Resistance.
##        :     Zone 1 : 09:30 - 11:00
##        :     Zone 2 : 11:00 - 14:00
##        :     Zone 3 : 14:00 - 16:00
##        :     vZones are Plotted on 15m and lower charts.
##        :  Plots EMA Cloud to assist with identifying reversals, Keeping EMA Clouds for all Timeframes


declare upper;
declare once_per_bar;

def Future = if GetSymbolPart(1) == "/YM:XCBT" or GetSymbolPart(1) == "/ES:XCME" or GetSymbolPart(1) == "/NQ:XCME" or GetSymbolPart(1) == "/RTY:XCME" or GetSymbolPart(1) == "/EMD:XCME" or GetSymbolPart(1) == "/NKD:XCME" or GetSymbolPart(1) == “/DX:XICE" or GetSymbolPart(1) == "/6E:XCME" or  GetSymbolPart(1) == "/6A:XCME" or GetSymbolPart(1) == "/ZB:XCBT" or GetSymbolPart(1) == "/ZN:XCBT" or GetSymbolPart(1) == "/CL:XNYM" or GetSymbolPart(1) == "/NG:XNYM" or GetSymbolPart(1) == "/GC:XCEC" or GetSymbolPart(1) == "/SI:XCEC" or  GetSymbolPart(1) == "/HG:XCEC” or GetSymbolPart(1) == "/6B:XCME" or GetSymbolPart(1) == "/ZC:XCBT" or GetSymbolPart(1) == "/ZS:XCBT" or GetSymbolPart(1) == "/CC:XICE" or GetSymbolPart(1) == "/KC:XICE" or GetSymbolPart(1) == ”/CT:XICE" or GetSymbolPart(1) == "/ZW:XCBT" or GetSymbolPart(1) == "/SB:XICE" or GetSymbolPart(1) == "/LE:XCME" or GetSymbolPart(1) == "/HO:XNYM" or GetSymbolPart(1) == "/HE:XCME" or GetSymbolPart(1) == "/OJ:XICE" then yes else no;

AddLabel(if Future then yes else no, "Future", Color.YELLOW);

input   showEMACloud = Yes;
input  audibleAlerts = Yes;
input Extend = {default "No", "Yes"};

def Today = GetYYYYMMDD();
def StartTime = 0930;
def   Update1 = 1100;
def   Update2 = 1400;
def   EndTime = 1600;

def Zone1 = SecondsFromTime(StartTime) >= 0 and SecondsTillTime(Update1) >= 0;
def Zone2 =   SecondsFromTime(Update1) >= 0 and SecondsTillTime(Update2) >= 0;
def Zone3 =   SecondsFromTime(Update2) >= 0 and SecondsTillTime(EndTime) >= 0;

DefineGlobalColor("Zone1", CreateColor(204, 255, 225));
DefineGlobalColor("Zone2", CreateColor(252, 220, 101));
DefineGlobalColor("Zone3", CreateColor(204, 204, 198));
DefineGlobalColor( "EMA1+", CreateColor(201, 255, 234));
DefineGlobalColor( "EMA1-", CreateColor(255, 105, 105));
DefineGlobalColor( "EMA2+", CreateColor(125, 176, 130));
DefineGlobalColor( "EMA2-", CreateColor(194, 152, 227));
DefineGlobalColor( "EMA3+", CreateColor(161, 217, 247));
DefineGlobalColor( "EMA3-", CreateColor(255, 255, 112));

def  ema1low = 9;
def ema1high = 45;
def  ema2low = 135;
def ema2high = 150;
#def  ema3low = 72;
#def ema3high = 89;

def  ema5 = if showEMACloud then ExpAverage(close,  ema1low) else Double.NaN;
def ema13 = if showEMACloud then ExpAverage(close, ema1high) else Double.NaN;
def ema34 = if showEMACloud then ExpAverage(close,  ema2low) else Double.NaN;
def ema51 = if showEMACloud then ExpAverage(close, ema2high) else Double.NaN;
#def ema72 = if showEMACloud then ExpAverage(close,  ema3low) else Double.NaN;
#def ema89 = if showEMACloud then ExpAverage(close, ema3high) else Double.NaN;

AddCloud( ema5, ema13, GlobalColor("EMA1+"), GlobalColor("EMA1-"));
AddCloud(ema34, ema51, GlobalColor("EMA2+"), GlobalColor("EMA2-"));
#AddCloud(ema72, ema89, GlobalColor("EMA3+"), GlobalColor("EMA3-"));

def CrossAbove = if showEMACloud and ema5 > ema13 and ema5[1] <= ema13[1] then 1 else 0;
def CrossBelow = if showEMACloud and ema5 < ema13 and ema5[1] >= ema13[1] then 1 else 0;

Alert(showEMACloud and audibleAlerts and CrossAbove, "Buy", Alert.BAR, Sound.Ding);
Alert(showEMACloud and audibleAlerts and CrossBelow, "Sell", Alert.BAR, Sound.Ring);

################################################################
##########         Booleans Set for Plot Use           #########
################################################################
def afterStart;
def beforeEnd;
def openPrice;
if GetAggregationPeriod() <= AggregationPeriod.FIFTEEN_MIN {
    afterStart = GetTime() > RegularTradingStart(GetYYYYMMDD());
    beforeEnd = GetTime() < RegularTradingEnd(GetYYYYMMDD());
    openPrice = DailyOpen();
} else {
    afterStart = Double.NaN;
    beforeEnd = Double.NaN;
    openPrice = Double.NaN;
}

plot DailyO = if openPrice then openPrice else Double.NaN;

script Zone {
    def H ;
    def L ;
    def V ;

    input CountIn = 0930;
    input CountOut = 1100;
    def TF = SecondsFromTime(CountIn) >= 0 and SecondsTillTime(CountOut) >= 0;

    if TF and !TF[1] {
        H = high;
        L = low;
        V = volume;
    } else if TF and volume > V[1] {
        H = high;
        L = low;
        V = volume;
    } else {
        H = H[1];
        L = L[1];
        V = V[1];
    }
    plot VZH = H;
    plot VZL = L;
    VZH.Hide();
    VZL.Hide();
}

#def Z1H;
#def Z1L;
#def Z2H;
#def Z2L;
#def Z3H;
#def Z3L;

plot Z1H;
plot Z1L;
plot Z2H;
plot Z2L;
plot Z3H;
plot Z3L;

Z1H.SetDefaultColor(GlobalColor("Zone1"));
Z2H.SetDefaultColor(GlobalColor("Zone2"));
Z3H.SetDefaultColor(GlobalColor("Zone3"));
Z1L.SetDefaultColor(GlobalColor("Zone1"));
Z2L.SetDefaultColor(GlobalColor("Zone2"));
Z3L.SetDefaultColor(GlobalColor("Zone3"));

switch (Extend){

Case "Yes":
 Z1H = Zone(CountIn = StartTime, CountOut = Update1).VZH;
 Z2H = Zone(CountIn =   Update1, CountOut = Update2).VZH;
 Z3H = Zone(CountIn =   Update2, CountOut = EndTime).VZH;

 Z1L = Zone(CountIn = StartTime, CountOut = Update1).VZL;
 Z2L = Zone(CountIn =   Update1, CountOut = Update2).VZL;
 Z3L = Zone(CountIn =   Update2, CountOut = EndTime).VZL;

Case "No":
 Z1H = if today != today[1] then Double.NaN else Zone(CountIn = StartTime, CountOut = Update1).VZH;
 Z2H = if today and  !Zone2 then Double.NaN else Zone(CountIn =   Update1, CountOut = Update2).VZH;
 Z3H = if today and  !Zone3 then Double.NaN else Zone(CountIn =   Update2, CountOut = EndTime).VZH;

 Z1L = if today != today[1] then Double.NaN else Zone(CountIn = StartTime, CountOut = Update1).VZL;
 Z2L = if today and  !Zone2 then Double.NaN else Zone(CountIn =   Update1, CountOut = Update2).VZL;
 Z3L = if today and  !Zone3 then Double.NaN else Zone(CountIn =   Update2, CountOut = EndTime).VZL;
}

def BelowVZ = if close < Z1L or close < Z2L or close < Z3L then 1 else 0;
def AboveVZ = if close > Z1H or close > Z2H or close > Z3H then 1 else 0;

AddLabel(if (GetAggregationPeriod() > AggregationPeriod.FIFTEEN_MIN) then yes else no, "vBox Zones on 5/10/15M Charts Only", Color.RED);

#AddCloud(if afterStart and beforeEnd then Z1H else Double.NaN, if afterStart and beforeEnd then Z1L else Double.NaN, GlobalColor("Zone1"), GlobalColor("Zone1"));
#AddCloud(if    Update1 and beforeEnd then Z2H else Double.NaN, if    Update1 and beforeEnd then Z2L else Double.NaN, GlobalColor("Zone2"), GlobalColor("Zone2"));
#AddCloud(if    Update2 and beforeEnd then Z3H else Double.NaN, if    Update2 and beforeEnd then Z3L else Double.NaN, GlobalColor("Zone3"), GlobalColor("Zone3"));

Alert(audibleAlerts and AboveVZ, "Above High VolumeBar Caution Long", Alert.BAR, Sound.Ding);
Alert(audibleAlerts and BelowVZ, "Below High VolumeBar Look for Reversal", Alert.BAR, Sound.Ring);
 

bmn

Member
@SuryaKiranC , would it be possible to show each box/lines for the time between the start of the 1st zone to endtime of the 3rd zone (selecting "Yes" to extension param seems buggy)?

e.g.
zone 1 @8 AM to @12 PM
zone 2 @12 PM to @2 PM
zone 3 @2PM to @4:15 PM

Show the 1st zone box/lines from 8AM to 4:15 PM
Show the 2nd zone box/lines from 12PM to 4:15PM
Show the 3rd zone box/lines from 2PM to 4:15PM
(the extension would be of the most recent range of each zone)

For previous highest vol ranges of each zone for the same day, show dotted lines (same colors) and extend it to the 3rd zone's end time.

e.g.
Zone 1 range shifts between 8AM and 12PM multiple times.
a max vol candle range is derived @8AM > changes @9:45AM > Changes @11:50 AM
This would result in the main box/lines change as usual (and 11:50AM range would be extended to the end of 3rd zone)
And for ranges derived @8AM and @9:45AM would be drawn in dotted lines between 9:45AM (end of the first instance - 8AM candle ) to 4:15PM and 11:50AM (end of the 2nd instance - 9:45 candle) and 4:15PM. Guess you would only need to draw one boundary since the 2nd one would be drawn by the next instance. Maybe text-only bubbles would be needed to indicate lower and upper boundary of each zone to differentiate.

Also, alerts would work with previous/dotted zones as well.
Oh, and is it possible to hide the vertical boxes/lines that show at the time of shift in ranges?

This is just a thought, not sure how easy it would be though. :)

Thanks for this awesome indicator.
 
I agree, you can try this on 15,... I need to see how it reacts and if I can understand extraction for profit, otherwise I will stay with price action..
I to am mainly a price action trader..I do think this study fits perfectly into price action...

You can use this method even on the daily, drawing levels at highs and lows of extreme volume days

Unusual amounts of volume create a memory point in the market
 

SuryaKiranC

Well-known member
e.g.
Zone 1 range shifts between 8AM and 12PM multiple times.
a max vol candle range is derived @8AM > changes @9:45AM > Changes @11:50 AM
This would result in the main box/lines change as usual (and 11:50AM range would be extended to the end of 3rd zone)
And for ranges derived @8AM and @9:45AM would be drawn in dotted lines between 9:45AM (end of the first instance - 8AM candle ) to 4:15PM and 11:50AM (end of the 2nd instance - 9:45 candle) and 4:15PM. Guess you would only need to draw one boundary since the 2nd one would be drawn by the next instance. Maybe text-only bubbles would be needed to indicate lower and upper boundary of each zone to differentiate.

Also, alerts would work with previous/dotted zones as well.
Oh, and is it possible to hide the vertical boxes/lines that show at the time of shift in ranges?

This is just a thought, not sure how easy it would be though. :)

Thanks for this awesome indicator.
Zone are defined as following, all time in EST.

## : Zone 1 : 09:30 - 11:00
## : Zone 2 : 11:00 - 14:00
## : Zone 3 : 14:00 - 16:00

As for the possibility, I supposed anything is a possibility, But that would be a deviation of the original theory explained in the video, if there is a well defined theory/strategy and edge to custom time zones by all means we can.

As for the Plots, Zone1 is plotted for the entire time of the trading hours. Zone2 & 3 from the defined start to end of trade hours.

Extend_On/Off is only to meant from the zones from prior day to be extended in to current day. Please refer to the screenshot, posed in the original post to see the difference.


Hiding the vertical lines, could be done but may require addition coding, more variable declaration, messy coding. Would you not rather see the same zone connected through out the session? that would be easier to track, when you are running around and switching through tickers and tracking a zillion thing during trader hours.

If we have a defined strategy though, we could always start a different indicator.

-S
 

bigboss

New member
VIP
I watched the video and it mentions zone 1 should be regular trading hours (rth) start to 90 minutes after open, zone 3 should be 120 minutes from rth end, and zone 2 everything in between. I trade futures that have start times other than 9:30 EST (like /CL and /6E) so I converted all the times for zone calculations to be dynamic based on the rules from the video. With this version you shouldn't need to mess with the script when you change to instruments with odd start and end times.

Ruby:
## vZoneSTUDY.ts
## This Indicator is based on the Following concept and, I suggest watch the video before you start to use this.
##
## https://www.screencast.com/users/MarketGauge/folders/DATE1010/media/f1702bb2-2090-463a-8ad2-59639c1166cd
## This is to Plot Support/Resistance based on High Volume Candle in three different time zones for the day.
##
## Removing the header Credit credits and description is not permitted, any modification needs to be shared.
## A big thanks to @COS251 for helping me with Coding this, Reviewing and Testing it.
##
## V 1.1_bigboss : adjusted logic to automatically detect start time, 90 minutes in, and 2 hours before end time for zones.
## V 1.1 : Just added the ability to disable the vZones, automatically, extending from previous in to current session.
##  Note : It is available as an option, should somebody prefer the extension. Set "Extend" to your needs accordingly.
## V 1.0 : Split Day in to three Zones and Find the highest Volume Candle for each zone and plot Support/Resistance.
##        :     Zone 1 : 09:30 - 11:00
##        :     Zone 2 : 11:00 - 14:00
##        :     Zone 3 : 14:00 - 16:00
##        :     vZones are Plotted on 15m and lower charts.
##        :  Plots EMA Cloud to assist with identifying reversals, Keeping EMA Clouds for all Timeframes


declare upper;
declare once_per_bar;

def Future = if GetSymbolPart(1) == "/YM:XCBT" or GetSymbolPart(1) == "/ES:XCME" or GetSymbolPart(1) == "/NQ:XCME" or GetSymbolPart(1) == "/RTY:XCME" or GetSymbolPart(1) == "/EMD:XCME" or GetSymbolPart(1) == "/NKD:XCME" or GetSymbolPart(1) == “/DX:XICE" or GetSymbolPart(1) == "/6E:XCME" or  GetSymbolPart(1) == "/6A:XCME" or GetSymbolPart(1) == "/ZB:XCBT" or GetSymbolPart(1) == "/ZN:XCBT" or GetSymbolPart(1) == "/CL:XNYM" or GetSymbolPart(1) == "/NG:XNYM" or GetSymbolPart(1) == "/GC:XCEC" or GetSymbolPart(1) == "/SI:XCEC" or  GetSymbolPart(1) == "/HG:XCEC” or GetSymbolPart(1) == "/6B:XCME" or GetSymbolPart(1) == "/ZC:XCBT" or GetSymbolPart(1) == "/ZS:XCBT" or GetSymbolPart(1) == "/CC:XICE" or GetSymbolPart(1) == "/KC:XICE" or GetSymbolPart(1) == ”/CT:XICE" or GetSymbolPart(1) == "/ZW:XCBT" or GetSymbolPart(1) == "/SB:XICE" or GetSymbolPart(1) == "/LE:XCME" or GetSymbolPart(1) == "/HO:XNYM" or GetSymbolPart(1) == "/HE:XCME" or GetSymbolPart(1) == "/OJ:XICE" then yes else no;

AddLabel(if Future then yes else no, "Future", Color.YELLOW);

input   showEMACloud = Yes;
input  audibleAlerts = Yes;
input Extend = {default "No", "Yes"};

def Today = GetYYYYMMDD();

def Zone1 = gettime() >= RegularTradingStart(GetYYYYMMDD()) and gettime() <= RegularTradingStart(GetYYYYMMDD()) + 90*60*1000;
def Zone2 = gettime() > RegularTradingStart(GetYYYYMMDD()) + 90*60*1000 and gettime() <= RegularTradingEnd(GetYYYYMMDD())-120*60*1000;
def Zone3 = gettime() > RegularTradingEnd(GetYYYYMMDD())-120*60*1000 and getTime() <= RegularTradingEnd(GetYYYYMMDD());

DefineGlobalColor("Zone1", CreateColor(204, 255, 225));
DefineGlobalColor("Zone2", CreateColor(252, 220, 101));
DefineGlobalColor("Zone3", CreateColor(204, 204, 198));
DefineGlobalColor( "EMA1+", CreateColor(201, 255, 234));
DefineGlobalColor( "EMA1-", CreateColor(255, 105, 105));
DefineGlobalColor( "EMA2+", CreateColor(125, 176, 130));
DefineGlobalColor( "EMA2-", CreateColor(194, 152, 227));
DefineGlobalColor( "EMA3+", CreateColor(161, 217, 247));
DefineGlobalColor( "EMA3-", CreateColor(255, 255, 112));

def  ema1low = 5;
def ema1high = 13;
def  ema2low = 34;
def ema2high = 51;
def  ema3low = 72;
def ema3high = 89;

def  ema5 = if showEMACloud then ExpAverage(close,  ema1low) else Double.NaN;
def ema13 = if showEMACloud then ExpAverage(close, ema1high) else Double.NaN;
def ema34 = if showEMACloud then ExpAverage(close,  ema2low) else Double.NaN;
def ema51 = if showEMACloud then ExpAverage(close, ema2high) else Double.NaN;
def ema72 = if showEMACloud then ExpAverage(close,  ema3low) else Double.NaN;
def ema89 = if showEMACloud then ExpAverage(close, ema3high) else Double.NaN;

AddCloud( ema5, ema13, GlobalColor("EMA1+"), GlobalColor("EMA1-"));
AddCloud(ema34, ema51, GlobalColor("EMA2+"), GlobalColor("EMA2-"));
AddCloud(ema72, ema89, GlobalColor("EMA3+"), GlobalColor("EMA3-"));

def CrossAbove = if showEMACloud and ema5 > ema13 and ema5[1] <= ema13[1] then 1 else 0;
def CrossBelow = if showEMACloud and ema5 < ema13 and ema5[1] >= ema13[1] then 1 else 0;

Alert(showEMACloud and audibleAlerts and CrossAbove, "Buy", Alert.BAR, Sound.Ding);
Alert(showEMACloud and audibleAlerts and CrossBelow, "Sell", Alert.BAR, Sound.Ring);

################################################################
##########         Booleans Set for Plot Use           #########
################################################################
def afterStart;
def beforeEnd;
def openPrice;
if GetAggregationPeriod() <= AggregationPeriod.FIFTEEN_MIN {
    afterStart = GetTime() > RegularTradingStart(GetYYYYMMDD());
    beforeEnd = GetTime() < RegularTradingEnd(GetYYYYMMDD());
    openPrice = DailyOpen();
} else {
    afterStart = Double.NaN;
    beforeEnd = Double.NaN;
    openPrice = Double.NaN;
}

plot DailyO = if openPrice then openPrice else Double.NaN;

script Zone {
    def H ;
    def L ;
    def V ;

#    input CountIn = 0930;
#    input CountOut = 1100;
    input TimeFrame = yes;   
#    def TF = SecondsFromTime(CountIn) >= 0 and SecondsTillTime(CountOut) >= 0;
    def tf = timeframe;
    if TF and !TF[1] {
        H = high;
        L = low;
        V = volume;
    } else if TF and volume > V[1] {
        H = high;
        L = low;
        V = volume;
    } else {
        H = H[1];
        L = L[1];
        V = V[1];
    }
    plot VZH = H;
    plot VZL = L;
    VZH.Hide();
    VZL.Hide();
}

def Z1H;
def Z1L;
def Z2H;
def Z2L;
def Z3H;
def Z3L;

switch (Extend){

Case "Yes":
 Z1H = Zone(Zone1).VZH;
 Z2H = Zone(Zone2).VZH;
 Z3H = Zone(Zone3).VZH;

 Z1L = Zone(Zone1).VZL;
 Z2L = Zone(Zone2).VZL;
 Z3L = Zone(Zone3).VZL;



Case "No":
 Z1H = if today != today[1] then Double.NaN else Zone(Zone1).VZH;
 Z2H = if today and  !Zone2 then Double.NaN else Zone(Zone2).VZH;
 Z3H = if today and  !Zone3 then Double.NaN else Zone(Zone3).VZH;

 Z1L = if today != today[1] then Double.NaN else Zone(Zone1).VZL;
 Z2L = if today and  !Zone2 then Double.NaN else Zone(Zone2).VZL;
 Z3L = if today and  !Zone3 then Double.NaN else Zone(Zone3).VZL;

}

def BelowVZ = if close < Z1L or close < Z2L or close < Z3L then 1 else 0;
def AboveVZ = if close > Z1H or close > Z2H or close > Z3H then 1 else 0;

AddLabel(if (GetAggregationPeriod() > AggregationPeriod.FIFTEEN_MIN) then yes else no, "vBox Zones on 5/10/15M Charts Only", Color.RED);

AddCloud(if afterStart and beforeEnd then Z1H else Double.NaN, if afterStart and beforeEnd then Z1L else Double.NaN, GlobalColor("Zone1"), GlobalColor("Zone1"));
AddCloud(if    beforeEnd then Z2H else Double.NaN, if    beforeEnd then Z2L else Double.NaN, GlobalColor("Zone2"), GlobalColor("Zone2"));
AddCloud(if    beforeEnd then Z3H else Double.NaN, if    beforeEnd then Z3L else Double.NaN, GlobalColor("Zone3"), GlobalColor("Zone3"));

Alert(audibleAlerts and AboveVZ, "Above High VolumeBar Caution Long", Alert.BAR, Sound.Ding);
Alert(audibleAlerts and BelowVZ, "Below High VolumeBar Look for Reversal", Alert.BAR, Sound.Ring);
 

ImKidKid

New member
2019 Donor
VIP
Zone are defined as following, all time in EST.

## : Zone 1 : 09:30 - 11:00
## : Zone 2 : 11:00 - 14:00
## : Zone 3 : 14:00 - 16:00

As for the possibility, I supposed anything is a possibility, But that would be a deviation of the original theory explained in the video, if there is a well defined theory/strategy and edge to custom time zones by all means we can.

As for the Plots, Zone1 is plotted for the entire time of the trading hours. Zone2 & 3 from the defined start to end of trade hours.

Extend_On/Off is only to meant from the zones from prior day to be extended in to current day. Please refer to the screenshot, posed in the original post to see the difference.


Hiding the vertical lines, could be done but may require addition coding, more variable declaration, messy coding. Would you not rather see the same zone connected through out the session? that would be easier to track, when you are running around and switching through tickers and tracking a zillion thing during trader hours.

If we have a defined strategy though, we could always start a different indicator.

-S
Whats up man I like the VolumeBox code! I want to do the samething but for DPL!
 

bmn

Member
Zone are defined as following, all time in EST.

## : Zone 1 : 09:30 - 11:00
## : Zone 2 : 11:00 - 14:00
## : Zone 3 : 14:00 - 16:00

As for the possibility, I supposed anything is a possibility, But that would be a deviation of the original theory explained in the video, if there is a well defined theory/strategy and edge to custom time zones by all means we can.

As for the Plots, Zone1 is plotted for the entire time of the trading hours. Zone2 & 3 from the defined start to end of trade hours.

Extend_On/Off is only to meant from the zones from prior day to be extended in to current day. Please refer to the screenshot, posed in the original post to see the difference.


Hiding the vertical lines, could be done but may require addition coding, more variable declaration, messy coding. Would you not rather see the same zone connected through out the session? that would be easier to track, when you are running around and switching through tickers and tracking a zillion thing during trader hours.

If we have a defined strategy though, we could always start a different indicator.

-S
Ok, I now understand the decision behind zones' timing.

For extending the zones' drawings, I think the following might help describe what I'm thinking.

X4zwrO9.jpeg


Green lines/box= Zone 1
-- 1: Low of 1st highest vol candle withing this zone
-- 2: High of the 1st highest vol candle within the zone
-- 3: High of the 2nd and final highest vol candle within the zone (note, the Low of the 2nd and final highest vol candle within the zone happens to be same as 2)

Yellow lines/Box = Zone 2
-- 4: Low of 1st highest vol candle withing this zone
-- 5: High of the 1st highest vol candle within the zone
-- 6: High of the 2nd highest vol candle within the zone (note, the Low of the 2nd highest vol candle within the zone happens to be same as 5)
-- 7: Low of the 3rd and final highest vol candle within the zone
-- 8: High of the 3rd and final highest vol candle within the zone

Blue Lines/Box = Zone 3
-- 9: Low of 1st highest vol candle withing this zone
-- 10: High of the 1st highest vol candle within the zone
-- 11: Low of the 2ndrd and final highest vol candle within the zone
-- 12 High of the 2nd and final highest vol candle within the zone

For all non-final instances of the highest vol candles within each zone are marked with lines and extends until the end of RTH (16:00).
For all final instances of the highest vol candles within each zone are marked with boxes and extends until the end of RTH.

I was thinking about these lines/boxes extending until the end of day to use them as S/R levels. Also, alerts when candles crossing these lines/boxes would be a "nice-to-have" (aka, not necessary if too complex).

Please let me know if this helps. That said, not sure how complex this makes things so I totally understand if it's not something that is doable. Thanks
 

SuryaKiranC

Well-known member
Ok, I now understand the decision behind zones' timing.

For extending the zones' drawings, I think the following might help describe what I'm thinking.

X4zwrO9.jpeg


Green lines/box= Zone 1
-- 1: Low of 1st highest vol candle withing this zone
-- 2: High of the 1st highest vol candle within the zone
-- 3: High of the 2nd and final highest vol candle within the zone (note, the Low of the 2nd and final highest vol candle within the zone happens to be same as 2)

Yellow lines/Box = Zone 2
-- 4: Low of 1st highest vol candle withing this zone
-- 5: High of the 1st highest vol candle within the zone
-- 6: High of the 2nd highest vol candle within the zone (note, the Low of the 2nd highest vol candle within the zone happens to be same as 5)
-- 7: Low of the 3rd and final highest vol candle within the zone
-- 8: High of the 3rd and final highest vol candle within the zone

Blue Lines/Box = Zone 3
-- 9: Low of 1st highest vol candle withing this zone
-- 10: High of the 1st highest vol candle within the zone
-- 11: Low of the 2ndrd and final highest vol candle within the zone
-- 12 High of the 2nd and final highest vol candle within the zone

For all non-final instances of the highest vol candles within each zone are marked with lines and extends until the end of RTH (16:00).
For all final instances of the highest vol candles within each zone are marked with boxes and extends until the end of RTH.

I was thinking about these lines/boxes extending until the end of day to use them as S/R levels. Also, alerts when candles crossing these lines/boxes would be a "nice-to-have" (aka, not necessary if too complex).

Please let me know if this helps. That said, not sure how complex this makes things so I totally understand if it's not something that is doable. Thanks

We do all of this today, but all with boxes though not with lines for some and then boxes for new zone. Most days you wont. find Zone1 Re-plotting, As Zone1 consists of Accumulated Overnight Volume and is the shortest zone to find another candle higher than the open candle, that said there is a chance, we can see that Zone replotted, after the initial few candles.

Zone2 & 3 are easy re-plot, and zone2 is the lengthiest of the 3 and Zone3 could get the pop in the volume as much as last candle. That said all 3 of them are plotted from the time they start to the End of the Day. then Extension on/off is only plotting last session in to Current.

Having mix and match of these zone plots between lines and cloud, while not impossible, but could involve in a bit of tedious coding.

-S
 

bmn

Member
We do all of this today, but all with boxes though not with lines for some and then boxes for new zone. Most days you wont. find Zone1 Re-plotting, As Zone1 consists of Accumulated Overnight Volume and is the shortest zone to find another candle higher than the open candle, that said there is a chance, we can see that Zone replotted, after the initial few candles.

Zone2 & 3 are easy re-plot, and zone2 is the lengthiest of the 3 and Zone3 could get the pop in the volume as much as last candle. That said all 3 of them are plotted from the time they start to the End of the Day. then Extension on/off is only plotting last session in to Current.

Having mix and match of these zone plots between lines and cloud, while not impossible, but could involve in a bit of tedious coding.

-S
9b3cLl1.jpeg

Here's the updated version (more constant with how clouds are drawn). I believe the only needed change would be to extend the clouds to the end and also extend the previous high/low of each zone to the end with lines (or dotted lines).
 
Last edited:

SuryaKiranC

Well-known member
for some reason its slowing down my TOS. Curious is this available in Trading view?
We didn't code it for Trading View, But again this is not our original concept, so it is possible there is a Trading View version out there.

As for slow, would you mind listing your config and what Timeframe you are loading this, and how many charts you keep open?
 

rlohmeyer

Active member
Interesting indicator, nice touch with the EMA clouds. I use a specific volume indicator modified from the TD Ameritrade Vol Profile which I call POC Zone. It pares down the code to what I need with easy visuals.
Below is an image of todays 1 minute chart for Microsoft with the POC Zones set to 15 bars (15 minutes) on the chart and an explanation of how they help confirm a directional trade (along with a number of others).

The image is self explanatory. I can post the indicator if anyone is interested.

8t0TWXP.jpg
 

rlohmeyer

Active member
Here is a link to POC_Zones modified from VolProfile. The logic of using high volume areas with this indicator is similar to the logic of the using the Volume Area on the open. This indicator allows you to determine the number of bars (intraday) or Days to include in your POC_Zones plus the size of the Value Area with a cloud visual.

http://tos.mx/PpSzPfs
Ruby:
# Modified @rlohmeyer
# TD Ameritrade IP Company, Inc. (c) 2010-2020
input ProfileTime = {default BAR, DAY};
input multiplier = 5;
input profiles = 78;
input showPOC = yes;
input valueAreaPercent = 70;
input opacity = 20;

def na = Double.NaN;
def period;
def yyyymmdd = GetYYYYMMDD();
switch (ProfileTime) {
case BAR:
    period = BarNumber() - 1;
case DAY:
    period = CountTradingDays(Min(First(yyyymmdd), yyyymmdd), yyyymmdd) - 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 = PricePerRow.TICKSIZE;


profile vol = VolumeProfile("startNewProfile" = cond, "onExpansion" = no, "numberOfProfiles" = profiles, "pricePerRow" = height, "value area percent" = valueAreaPercent);
def con = CompoundValue(1, no, no);
def pc = if IsNaN(vol.GetPointOfControl()) and con then pc[1] else vol.GetPointOfControl();
def hVA = if IsNaN(vol.GetHighestValueArea()) and con then hVA[1] else vol.GetHighestValueArea();
def lVA = if IsNaN(vol.GetLowestValueArea()) and con then lVA[1] else vol.GetLowestValueArea();

def plotsDomain = IsNaN(close) == no;
plot POC = if plotsDomain then pc else Double.NaN;
plot VAHigh = if plotsDomain then hVA else Double.NaN;
plot VALow = if plotsDomain then lVA else Double.NaN;
DefineGlobalColor("PC", Color.CYAN);
POC.SetDefaultColor(GlobalColor("PC"));
POC.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
VAHigh.SetDefaultColor(GlobalColor("PC"));
VAHigh.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
VALow.SetDefaultColor(GlobalColor("PC"));
VALow.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
declare hide_on_daily;
AddCloud(VAHigh,VALow, Color.CYAN, Color.CYAN, no);
 
Last edited by a moderator:

Similar threads

Top