For those that follow the ICT community, there has been a lot of discussion on the gap that forms when globex trading opens up on Sunday (NWOG).
This concept is very similar to something I had already been using so I reworded that to create an indicator that displays the last 3 gaps for your trading pleasure:
A few caveats. This indicator relies on pulling data from your charts. If you want the last 3 weeks of gaps, I suggest having at least 15 days of data on the chart. I like to keep my charts clean so the default is to chart these on the right margin (expansion area) of your chart.
You need to make sure you have that activated (I have 5 bars in the image above). If you choose to have them drawn across the chart (showOnRight = no), they will only draw for the current day. You will have to change the code if you want it to show across the entire chart. Again, I find that too busy as I am using this for day trading.
You can also toggle to show labels or bubbles that indicate which area is this week, last week, two weeks ago. One last thing - you can change the indicator timeframe from weekly to daily to get new day opening gaps (NDOG) as well. This was mostly a quick and dirty effort, I'm sure there are ways to simplify the code to make it easier to maintain if anyone is up for it...I'm happy with it for now.
Updated the code to use 5 weeks instead of 3 weeks. Cheers!
shared study link: http://tos.mx/BhtPVOV Click here for --> Easiest way to load shared links
This concept is very similar to something I had already been using so I reworded that to create an indicator that displays the last 3 gaps for your trading pleasure:
A few caveats. This indicator relies on pulling data from your charts. If you want the last 3 weeks of gaps, I suggest having at least 15 days of data on the chart. I like to keep my charts clean so the default is to chart these on the right margin (expansion area) of your chart.
You need to make sure you have that activated (I have 5 bars in the image above). If you choose to have them drawn across the chart (showOnRight = no), they will only draw for the current day. You will have to change the code if you want it to show across the entire chart. Again, I find that too busy as I am using this for day trading.
You can also toggle to show labels or bubbles that indicate which area is this week, last week, two weeks ago. One last thing - you can change the indicator timeframe from weekly to daily to get new day opening gaps (NDOG) as well. This was mostly a quick and dirty effort, I'm sure there are ways to simplify the code to make it easier to maintain if anyone is up for it...I'm happy with it for now.
Updated the code to use 5 weeks instead of 3 weeks. Cheers!
shared study link: http://tos.mx/BhtPVOV Click here for --> Easiest way to load shared links
Ruby:
# Global Color setup
# Created by @tony_futures inspired by ICT concept
DefineGlobalColor("weekly", Color.DARK_ORANGE);
DefineGlobalColor("weekly2", CreateColor(136, 93, 100));
DefineGlobalColor("weekly3", COLOR.PLUM);
DefineGlobalColor("weekly4", COLOR.WHITE);
DefineGlobalColor("weekly5", COLOR.CYAN);
#Calculate the gaps and the midpoints
input aggregationPeriod = AggregationPeriod.WEEK;
def weeklyClose = close(period = aggregationPeriod);
def weeklyOpen = open(period = aggregationPeriod);
def weeklyChange = weeklyClose != weeklyClose[1];
def prevWeeklyClose = if weeklyChange then Round(weeklyClose[1],2) else prevWeeklyClose[1];
def newWeekOpen = if weeklyChange then Round(weeklyOpen,2) else newWeekOpen[1];
def gapUp = newWeekOpen > prevWeeklyClose;
def halfAmount = AbsValue(newWeekOpen - prevWeeklyClose) / 2;
def halfGap = if gapUp then (prevWeeklyClose + halfAmount) else (newWeekOpen + halfAmount);
def oneBackClose = if weeklyChange then prevWeeklyClose[1] else oneBackClose[1];
def oneBackOpen = if weeklyChange then newWeekOpen[1] else oneBackOpen[1];
def twoBackClose = if weeklyChange then oneBackClose[1] else twoBackClose[1];
def twoBackOpen = if weeklyChange then oneBackOpen[1] else twoBackOpen[1];
def halfAmount2 = AbsValue(oneBackOpen - oneBackClose) / 2;
def gapUp2 = oneBackOpen > oneBackClose;
def halfGap2 = if gapUp2 then (oneBackClose + halfAmount2) else (oneBackOpen + halfAmount2);
def halfAmount3 = AbsValue(twoBackOpen - twoBackClose) / 2;
def gapUp3 = twoBackOpen > twoBackClose;
def halfGap3 = if gapUp3 then (twoBackClose + halfAmount3) else (twoBackOpen + halfAmount3);
def threeBackClose = if weeklyChange then twoBackClose[1] else threeBackClose[1];
def threeBackOpen = if weeklyChange then twoBackOpen[1] else threeBackOpen[1];
def halfAmount4 = AbsValue(threeBackOpen - threeBackClose) / 2;
def gapUp4 = threeBackOpen > threeBackClose;
def halfGap4 = if gapUp4 then (threeBackClose + halfAmount4) else (threeBackOpen + halfAmount4);
def fourBackClose = if weeklyChange then threeBackClose[1] else fourBackClose[1];
def fourBackOpen = if weeklyChange then threeBackOpen[1] else fourBackOpen[1];
def halfAmount5 = AbsValue(fourBackOpen - fourBackClose) / 2;
def gapUp5 = fourBackOpen > fourBackClose;
def halfGap5 = if gapUp5 then (fourBackClose + halfAmount5) else (fourBackOpen + halfAmount5);
input plotLines = yes;
def Today = GetLastDay() == GetDay();
input showOnRight = yes;
def exp = if showOnRight then IsNaN(close[1]) else yes;
plot week1 = if exp and Today and plotLines then prevWeeklyClose else Double.NaN;
week1.setDefaultColor(GlobalColor("weekly"));
week1.setLineWeight(2);
week1.hideBubble();
plot week2 = if exp and Today and plotLines then newWeekOpen else Double.NaN;
week2.setDefaultColor(GlobalColor("weekly"));
week2.setLineWeight(2);
week2.hideBubble();
plot week3 = if exp and Today and plotLines then oneBackClose else Double.NaN;
week3.setDefaultColor(GlobalColor("weekly2"));
week3.setLineWeight(2);
week3.hideBubble();
plot week4 = if exp and Today and plotLines then oneBackOpen else Double.NaN;
week4.setDefaultColor(GlobalColor("weekly2"));
week4.setLineWeight(2);
week4.hideBubble();
plot week5 = if exp and Today and plotLines then twoBackClose else Double.NaN;
week5.setDefaultColor(GlobalColor("weekly3"));
week5.setLineWeight(2);
week5.hideBubble();
plot week6 = if exp and Today and plotLines then twoBackOpen else Double.NaN;
week6.setDefaultColor(GlobalColor("weekly3"));
week6.setLineWeight(2);
week6.hideBubble();
plot week7 = if exp and Today and plotLines then threeBackClose else Double.NaN;
week7.setDefaultColor(GlobalColor("weekly4"));
week7.setLineWeight(2);
week7.hideBubble();
plot week8 = if exp and Today and plotLines then threeBackOpen else Double.NaN;
week8.setDefaultColor(GlobalColor("weekly4"));
week8.setLineWeight(2);
week8.hideBubble();
plot week9 = if exp and Today and plotLines then fourBackClose else Double.NaN;
week9.setDefaultColor(GlobalColor("weekly5"));
week9.setLineWeight(2);
week9.hideBubble();
plot week10 = if exp and Today and plotLines then fourBackOpen else Double.NaN;
week10.setDefaultColor(GlobalColor("weekly5"));
week10.setLineWeight(2);
week10.hideBubble();
plot halfWay = if exp and Today and plotLines then halfGap else Double.NaN;
halfWay.setDefaultColor(Color.GRAY);
halfWay.hideBubble();
plot halfWay2 = if exp and Today and plotLines then halfGap2 else Double.NaN;
halfWay2.setDefaultColor(Color.GRAY);
halfWay2.hideBubble();
plot halfWay3 = if exp and Today and plotLines then halfGap3 else Double.NaN;
halfWay3.setDefaultColor(Color.GRAY);
halfWay3.hideBubble();
plot halfWay4 = if exp and Today and plotLines then halfGap4 else Double.NaN;
halfWay4.setDefaultColor(Color.GRAY);
halfWay4.hideBubble();
plot halfWay5 = if exp and Today and plotLines then halfGap5 else Double.NaN;
halfWay5.setDefaultColor(Color.GRAY);
halfWay5.hideBubble();
input showBubbles = no;
AddChartBubble(showBubbles and exp and !exp[1], if gapUp then week1 else week2,"Current",GlobalColor("weekly"),no);
AddChartBubble(showBubbles and exp and !exp[1], if gapUp2 then week3 else week4,"Previous",GlobalColor("weekly2"),no);
AddChartBubble(showBubbles and exp and !exp[1], if gapUp3 then week5 else week6,"Two Back",GlobalColor("weekly3"),no);
input showLabels = no;
AddLabel(showLabels,"Current", GlobalColor("weekly"));
AddLabel(showLabels,"Previous", GlobalColor("weekly2"));
AddLabel(showLabels,"Two Back", GlobalColor("weekly3"));
AddLabel(showLabels,"Three Back", GlobalColor("weekly4"));
AddLabel(showLabels,"Four Back", GlobalColor("weekly5"));
Last edited by a moderator: