Day Trading with Pivots

FutureTony

New member
VIP
There has been a lot of discussion here about different Pivot indicators and I wanted to share a slightly different one.

This is a modified Camarilla pivot setup that has been made popular by PostyTrades on Twitter. This setup involves:
  • A bear/bull reversal zone
  • A bear/bull last stand level
  • Two bear/bull extended targets
tIkLNdl.png


These levels, as with most pivots, are simply areas of reference. When combined with other analysis like Vol profile, Price Action, Support/Resistance, Trendlines, etc they can become powerful. Read more about these pivots here: Camarilla Pivots. They provide context on market opening and inform you what to expect - eg. RTH opens above the bearish reversal zone but then trades back through it...this is weakness and likely targets the bullish reversal zone. For this reason, there is a vertical line on the chart that displays the RTH open time but can be switched off OR modified to show another time.

This indicator can be used on Daily/Weekly/Monthly timeframes but it is intended for Day Trading futures. That doesn't mean it won't work for other instruments, just what I have spent time looking at. In addition to the Posty Pivots, I've also included the Central Pivot Range and prior period high/low values as other areas of interest. Each of these elements can be turned off/on in the options.
One thing of interest is the 'RoundLevel' variable. I'm rounding the Pivots to the nearest point on NQ (ie. RoundLevel = 0) but you would want it to be 2 if trading CL or even higher if looking at Forex.

Caveats:
This will not work on mobile as it does not support aggregation periods. I believe the same limitations exist on Range and Renko charts.
The thinkorswim DAY aggregation retrieves the daily close price and NOT the settlement price, which is slightly different. This makes a slight difference in the levels. If you want them to be exact, you need to set the 'Manual Close' to the actual previous day settlement. There may be another way around this but this was the way I had to resolve it.
By default, the indicator will show Today's levels only but you can show prior days as well - just make sure you set 'Manual Close' back to 0 if you want to look at multiple days.
And finally, I am not sure how this is similar/different than PivotBoss work. Maybe others can comment on this but I've derived most of the values here from the original Camarilla information. Possibly others could comment on similarities.

Feedback welcome!

Code:
# Complete Pivot Setup
# Created by @tony_futures
# Inspired from @PostyTrades and @SergeTrades

#input aggregationPeriod = AggregationPeriod.DAY;
input aggregationPeriod = {default DAY, WEEK, MONTH};
input showCPR = no;
input showPrevious = no;
input showReversalZone = yes;
input showLastStand = yes;
input showLabels = yes;
input showBullTargets = yes;
input showBearTargets = yes;
input showTodayOnly = yes;
input manualClose = 0.00;
input RoundLevel = 0;

def Today = if aggregationPeriod == AggregationPeriod.DAY and GetLastDay() == GetDay() then 1 else if aggregationPeriod == AggregationPeriod.MONTH and GetLastMonth() == GetMonth() then 1  else if aggregationPeriod == AggregationPeriod.WEEK and GetLastWeek() == GetWeek() then 1 else 0;

def prevHigh = high(period = aggregationPeriod)[1];
def prevLow = low(period = aggregationPeriod)[1];
def prevClose1 = close(period = aggregationPeriod)[1];
def prevClose = if manualClose != 0 then manualClose else prevClose1;

#Addlabel(aggregationPeriod == AggregationPeriod.DAY," Daily Close: " + prevClose, Color.WHITE);

def pivot = (prevHigh + prevLow + prevClose) / 3.0;
def bc = (prevHigh + prevLow) / 2.0;
def tc = (pivot - bc) + pivot;
def prevDiff = prevHigh - prevLow;
def prevDiff2 = prevDiff*1.1/2;
def prevDiff4 = prevDiff*1.1/4;
def prevDiff8 = prevDiff*1.1/8;
def R1 = prevDiff4 + prevClose;

def R3 = RoundDown(prevDiff2 + prevClose, RoundLevel);
def R2 = R3 - prevDiff8;
def R4 = RoundDown(prevDiff + prevClose,RoundLevel);
#def R5 = R4 - prevDiff8;
def R5 = RoundDown((R3 + (1.168 * (R3 - R1))),RoundLevel);

def S1 = PrevClose - prevDiff4;

def S3 = RoundUp(PrevClose - prevDiff2, RoundLevel);
def S2 = S3 + prevDiff8;
def S4 = RoundUp(prevClose - prevDiff, RoundLevel);
#def S5 = S4 + prevDiff8;
def S5 = RoundUp((S3 - (1.168 * ( S1 - S3))), RoundLevel);

# Central Pivot Range - turn off by changing showCPR to no
plot PLine = if showCPR and showTodayOnly and Today then pivot else if showCPR and !showTodayOnly then pivot else Double.NaN;
plot BCLine = if showCPR and showTodayOnly and Today then bc else if showCPR and !showTodayOnly then bc else Double.NaN;
plot TCLine = if showCPR and showTodayOnly and Today then tc else if showCPR and !showTodayOnly then tc else Double.NaN;

PLine.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
PLine.SetDefaultColor(Color.White);
BCLine.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
BCLine.SetDefaultColor(Color.CYAN);
TCLine.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
TCLine.SetDefaultColor(Color.MAGENTA);

# Previous Day High/Low - turn off by changing showPrevious to no
plot PreviousHigh = if showPrevious and showTodayOnly and Today then prevHigh else if showPrevious and !showTodayOnly then prevHigh else Double.NaN;
PreviousHigh.SetDefaultColor(Color.GRAY);
plot PreviousLow = if showPrevious and showTodayOnly and Today then prevLow else if showPrevious and !showTodayOnly then prevLow else Double.NaN;
PreviousLow.setDefaultColor(Color.GRAY);
# Reversal zones - turn off by changing showReversalZone to no
AddCloud(if showReversalZone and showTodayOnly and Today then r1 else if showReversalZone and !showTodayOnly then r1 else Double.NaN, r2, Color.DARK_ORANGE, Color.DARK_ORANGE);
AddCloud(if showReversalZone and showTodayOnly and Today then s1 else if showReversalZone and !showTodayOnly then s1 else Double.NaN, s2, Color.LIGHT_GREEN, Color.LIGHT_GREEN);
AddLabel(showReversalZone and showLabels, "Bear zone: " + RoundDown(R1, RoundLevel) + " to " + RoundDown(R2, RoundLevel), Color.LIGHT_RED);
AddLabel(showReversalZone and showLabels, "Bull zone: " + RoundDown(S1, RoundLevel) + " to " + RoundDown(S2, RoundLevel), Color.LIGHT_GREEN);

# Last stand lines - turn off by changing ShowLastStand to no
plot bullLastStand = if showLastStand and showTodayOnly and Today then S3 else if showLastStand and !showTodayOnly then S3 else Double.NaN;
bullLastStand.setDefaultColor(Color.GREEN);
plot bearLastStand = if showLastStand and showTodayOnly and Today then R3 else if showLastStand and !showTodayOnly then R3 else Double.NaN;
bearLastStand.setDefaultColor(Color.RED);

input showBubblesLeft = yes;
AddChartBubble(showBubblesLeft and showLastStand and Today and !Today[1], R3, "Bear Last Stand: " + R3, Color.GRAY, yes);
AddChartBubble(showBubblesLeft and showLastStand and Today and !Today[1], S3, "Bull Last Stand: " + S3, Color.GRAY, no);

AddChartBubble(showBubblesLeft and showPrevious and Today and !Today[1], PrevHigh, "Previous High: " + PrevHigh, Color.GRAY, yes);
AddChartBubble(showBubblesLeft and showPrevious and Today and !Today[1], PrevLow, "Previous Low: " + PrevLow, Color.GRAY, no);

plot bull1 = if showBullTargets and showTodayOnly and Today then R5 else if showBullTargets and !showTodayOnly then R5 else Double.NaN;
bull1.setDefaultColor(Color.MAGENTA);
plot bear1 = if showBearTargets  and showTodayOnly and Today then S5 else if showBearTargets and !showTodayOnly then S5 else Double.NaN;
bear1.setDefaultColor(Color.CYAN);
AddChartBubble(showBubblesLeft and showBullTargets and Today and !Today[1], R5, "Bull Target 1: " + R5, Color.GRAY, yes);
AddChartBubble(showBubblesLeft and showBearTargets and Today and !Today[1], S5, "Bear Target 1: " + S5, Color.GRAY, no);
plot bull2 = if showBullTargets  and showTodayOnly and Today then R4 else if showBullTargets and !showTodayOnly then R4 else Double.NaN;
bull2.setDefaultColor(Color.MAGENTA);
plot bear2 = if showBearTargets  and showTodayOnly and Today then S4 else if showBearTargets and !showTodayOnly then S4 else Double.NaN;
bear2.setDefaultColor(Color.CYAN);
AddChartBubble(showBubblesLeft and showBullTargets and Today and !Today[1], R4, "Bull Target 2: " + R4, Color.GRAY, yes);
AddChartBubble(showBubblesLeft and showBearTargets and Today and !Today[1], S4, "Bear Target 2: " + S4, Color.GRAY, no);

input showOpen = yes;
input Open_Time = 0930;
AddVerticalLine(secondsFromTime(Open_Time)[1] < 0 and secondsFromTime(Open_Time) >= 0 and Today and showOpen, concat("Open", ""), Color.Green, curve.POINTS);

input showBubblesRight = No;
input displaceRightBubble = 3;
def showBubbleNow = !IsNaN(close) and IsNaN(close[-1]);
AddChartBubble(showBubblesRight and showLastStand and showBubbleNow[displaceRightBubble], R3, "Bear Last Stand: " + R3, Color.GRAY, yes);
AddChartBubble(showBubblesRight and showLastStand and showBubbleNow[displaceRightBubble], S3, "Bull Last Stand: " + S3, Color.GRAY, no);

AddChartBubble(showBubblesRight and showPrevious and showBubbleNow[displaceRightBubble], PrevHigh, "Previous High: " + PrevHigh, Color.GRAY, yes);
AddChartBubble(showBubblesRight and showPrevious and showBubbleNow[displaceRightBubble], PrevLow, "Previous Low: " + PrevLow, Color.GRAY, no);

AddChartBubble(showBubblesRight and showBullTargets and showBubbleNow[displaceRightBubble], R5, "Bull Target 1: " + R5, Color.GRAY, yes);
AddChartBubble(showBubblesRight and showBearTargets and showBubbleNow[displaceRightBubble], S5, "Bear Target 1: " + S5, Color.GRAY, no);

AddChartBubble(showBubblesRight and showBullTargets and showBubbleNow[displaceRightBubble], R4, "Bull Target 2: " + R4, Color.GRAY, yes);
AddChartBubble(showBubblesRight and showBearTargets and showBubbleNow[displaceRightBubble], S4, "Bear Target 2: " + S4, Color.GRAY, no);
 
Last edited:

bigboss

New member
VIP
I really like what you've put together here. The zones are especially helpful in helping people who are new to pivot trading visualize where to expect significant price action. It reminds me of ripster ema clouds and how they help traders treat ema clouds as zones of support / resistance.

It does not appear the function to plot previous days is working....
 

FutureTony

New member
VIP
I really like what you've put together here. The zones are especially helpful in helping people who are new to pivot trading visualize where to expect significant price action. It reminds me of ripster ema clouds and how they help traders treat ema clouds as zones of support / resistance.

It does not appear the function to plot previous days is working....
You need to set showTodayOnly to 'No' and make sure that manualclose is set to '0'. Then you should see the previous days working.
 

Shrum

Member
Thanks for your work on this, I just started following him on Twitter. This will make it easier to visualize. Maybe we could start some tips on here from people whom may have been following him a long time. I did see a tweet about spacemen key levels and I have no idea what that is
 

akoplan

New member
Hello, looked briefly at the chart/study this morning. One issue I see is the levels change depending whether you have overnight off or on on TOS. More specifically, the overnight level from the prior day will supersede the day level from the prior day, like yesterday Tues. 9/14. I use overnight highs and overnight lows, as well as the prior day RTH highs and lows and would want to see those levels on the chart, and have the chart plot the zones consistently whether the ETH is on or off on TOS. In that regard until fixed or analyzed, do you only use this when set to ETH (levels are drastically different). Thank you. For reference - tues. 9/14 ETH high 4479.5 (showing on chart) but RTH high was 4477.25. Tues RTH low was lower than the overnight low, so chart is showing 4425.25. That appears inconsistent with the previous high calculation. Unless, it is meant to chart the high and low of the prior 24 hours. Again, I would prefer distinction betw a daily high or low RTH and the overnight high/low levels, especially since there is a greater than 90% likelihood of hitting one or the other session overnight levels during RTH
 
Last edited:

FutureTony

New member
VIP
Hello, looked briefly at the chart/study this morning. One issue I see is the levels change depending whether you have overnight off or on on TOS. More specifically, the overnight level from the prior day will supersede the day level from the prior day, like yesterday Tues. 9/14. I use overnight highs and overnight lows, as well as the prior day RTH highs and lows and would want to see those levels on the chart, and have the chart plot the zones consistently whether the ETH is on or off on TOS. In that regard until fixed or analyzed, do you only use this when set to ETH (levels are drastically different). Thank you. For reference - tues. 9/14 ETH high 4479.5 (showing on chart) but RTH high was 4477.25. Tues RTH low was lower than the overnight low, so chart is showing 4425.25. That appears inconsistent with the previous high calculation. Unless, it is meant to chart the high and low of the prior 24 hours. Again, I would prefer distinction betw a daily high or low RTH and the overnight high/low levels, especially since there is a greater than 90% likelihood of hitting one or the other session overnight levels during RTH
The study is intended to use the high and low of the previous 24 hrs. You could experiment with just the RTH but I'm not sure if that would be better. These pivots are meant to be reference areas and I'm sure they could be effective (but different) either way. Possibly you could combine with something like this study: Globex High/Low to pinpoint those areas. Cheers!
 
I am trying to see if we can get imbalance range for past 14days. So this is the logic i am looking for if someone can assist. Look at first hour high and low vs last 14 days first hour high low avg and it produces a label in left corner so we can that. Can someone assist?
 
This gives out DTR but dont know how to make to give imbalnce in similar way:


# Custom ATR Plot by 7of9 for BRT
# edited 3/20/19

declare upper;

input AtrAvgLength = 14;

def ATR = WildersAverage(TrueRange(high(period = aggregationPeriod.DAY), close(period = aggregationPeriod.DAY), low(period = aggregationPeriod.DAY)), AtrAvgLength);

def TodayHigh = Highest(high(period = aggregationPeriod.DAY), 1);
def TodayLow = Lowest(low(period = aggregationPeriod.DAY), 1);

def DTR = TodayHigh - TodayLow;

def DTRpct = Round((DTR / ATR) * 100, 0);

AddLabel (yes, "DTR " + Round (DTR , 2) + " vs ATR " + round (ATR,2)+ " " + round (DTRpct,0) + "%", (if DTRpct <= 70 then Color.GREEN else if DTRpct >= 90 then Color.RED else Color.ORANGE));
 
This gives out DTR but dont know how to make to give imbalnce in similar way:


# Custom ATR Plot by 7of9 for BRT
# edited 3/20/19

declare upper;

input AtrAvgLength = 14;

def ATR = WildersAverage(TrueRange(high(period = aggregationPeriod.DAY), close(period = aggregationPeriod.DAY), low(period = aggregationPeriod.DAY)), AtrAvgLength);

def TodayHigh = Highest(high(period = aggregationPeriod.DAY), 1);
def TodayLow = Lowest(low(period = aggregationPeriod.DAY), 1);

def DTR = TodayHigh - TodayLow;

def DTRpct = Round((DTR / ATR) * 100, 0);

AddLabel (yes, "DTR " + Round (DTR , 2) + " vs ATR " + round (ATR,2)+ " " + round (DTRpct,0) + "%", (if DTRpct <= 70 then Color.GREEN else if DTRpct >= 90 then Color.RED else Color.ORANGE));
@FutureTony Can you asist?
 

iSultan

Member
VIP
is there any scanner for this indicator , for example ..
scan for price close over bull last line time frame ( 15 min ) or close over bullish reversal area .
I tried but every time gave error .
 

FutureTony

New member
VIP
I don't believe the scanner will work on studies that use embedded time aggregation but maybe someone on here knows more about that than me. I only use this on Futures, so don't need a scanner.
 

Similar threads

Top