Distance From Average In ATR For ThinkOrSwim

vanwooten

New member
Looking for a chart label to display the distance between current price to 21 EMA in ATR. So the badge would display 2.0 when current price is 2 current ATR from the current value of 21 EMA.
 
Last edited by a moderator:

Join useThinkScript to post your question to a community of 21,000+ developers and traders.

Looking for a chart label to display the distance between current price to 21 EMA in ATR. So the badge would display 2.0 when current price is 2 current ATR from the current value of 21 EMA.


i just made this, so i copied it and modified it.
https://usethinkscript.com/threads/...used-in-thinkorswim.13822/page-10#post-134964

added ATR code,
then divided the difference by atr , to get ATR units
labels display the $ difference, ATR, ATR units
can show average line and ATR offset lines


Code:
#diff_from_avg_in_atr_units

#https://usethinkscript.com/threads/distance-between-current-price-to-21-ema-in-atr.17228/
#distance between current price to 21 EMA in ATR

def data = close;
input avg1_type = AverageType.Simple;
#input avg1_type = AverageType.exponential;
input avg1_length = 21;
def avg1 = MovingAverage( avg1_type , data , avg1_length );
def diff = (avg1 - close);
def diff_per = absvalue(diff) * 100 / close;

# ATR --------------
input length = 14;
input averageType = AverageType.WILDERS;
def ATR1 = MovingAverage(averageType, TrueRange(high, close, low), length);
#ATR.SetDefaultColor(GetColor(8));
#-----------------

def diff_atrs = round(absvalue(diff/atr1), 2);

input show_labels = yes;
addlabel(show_labels, " ", color.black);
#addlabel(show_labels, "price to avg1 " + round(diff1,2) + "%", color.yellow);

addlabel(show_labels, "diff:  " + diff, color.yellow);
addlabel(show_labels, "ATR:  " + atr1, color.yellow);
addlabel(show_labels, "price to avg1:  " + diff_atrs + " ATR units", color.yellow);

input show_average_line = yes;
plot zavg1 = if show_average_line then avg1 else na;
zavg1.SetDefaultColor(Color.cyan);
zavg1.hidebubble();


input show_atr_lines = no;
plot z1 = if show_atr_lines then close + atr1 else na;
plot z2 = if show_atr_lines then close - atr1 else na;
z1.SetDefaultColor(Color.gray);
z1.hidebubble();
z2.SetDefaultColor(Color.gray);
z2.hidebubble();
#

gPDHi49.jpg
 
I have this. ADR + current price versus certain moving averages. Color labels change based how far current price from the MAs'.


Code:
# ADR vs MA Distance Percentage
# ProjectRyan



########################################################### ADR computation


def len = 1;

def dayHigh = DailyHighLow(AggregationPeriod.DAY, len, 0, no).DailyHigh;
def dayLow = DailyHighLow(AggregationPeriod.DAY, len, 0, no).DailyLow;

def ADR = (dayHigh / dayLow + dayHigh[1] / dayLow[1] + dayHigh[2] / dayLow[2] + dayHigh[3] / dayLow[3] + dayHigh[4] / dayLow[4] + dayHigh[5] / dayLow[5] + dayHigh[6] / dayLow[6] + dayHigh[7] / dayLow[7] + dayHigh[8] / dayLow[8] + dayHigh[9] / dayLow[9] + dayHigh[10] / dayLow[10] +  dayHigh[11] / dayLow[11] + dayHigh[12] / dayLow[12] + dayHigh[13] / dayLow[13] + dayHigh[14] / dayLow[14] + dayHigh[15] / dayLow[15] +  dayHigh[16] / dayLow[16] + dayHigh[17] / dayLow[17] + dayHigh[18] / dayLow[18] + dayHigh[19] / dayLow[19] + dayHigh[20] / dayLow[20] +  dayHigh[21] / dayLow[21] + dayHigh[22] / dayLow[22] + dayHigh[23] / dayLow[23] + dayHigh[24] / dayLow[24] + dayHigh[25] / dayLow[25] + dayHigh[26] / dayLow[26] + dayHigh[27] / dayLow[27] + dayHigh[28] / dayLow[28] + dayHigh[29] / dayLow[29] + dayHigh[30] / dayLow[30] +  dayHigh[31] / dayLow[31] + dayHigh[32] / dayLow[32] + dayHigh[33] / dayLow[33] + dayHigh[34] / dayLow[34] + dayHigh[35] / dayLow[35] +  dayHigh[36] / dayLow[36] + dayHigh[37] / dayLow[37] + dayHigh[38] / dayLow[38] + dayHigh[39] / dayLow[39] + dayHigh[40] / dayLow[40] + dayHigh[41] / dayLow[41] + dayHigh[42] / dayLow[42] + dayHigh[43] / dayLow[43] + dayHigh[44] / dayLow[44] + dayHigh[45] / dayLow[45] + dayHigh[46] / dayLow[46] + dayHigh[47] / dayLow[47] + dayHigh[48] / dayLow[48] + dayHigh[49] / dayLow[49] + dayHigh[50] / dayLow[50]) / 51;

def ADR_perc = 100 * (ADR - 1);

def ADR_perc25 = ADR_perc + (ADR_perc * 0.25);

def ADR_perc50 = ADR_perc + (ADR_perc * 0.5);

def ADR_perc75 = ADR_perc + (ADR_perc * 0.75);

AddLabel (yes, Round(ADR_perc, 1) + "%" + " :ADR" , if ADR_perc is greater than or equal to 4.0 then Color.Magenta else Color.GRAY);



########################################################## Distance Between two MAs ### MTF Moving Average

# input Period = aggregationPeriod.HOUR;
input Period1 = AggregationPeriod.Day;
input Period2 = AggregationPeriod.Day;
input Period3 = AggregationPeriod.Day;

# input AvgType = averageType.EXPONENTIAL;
input AvgType1 = AverageType.Simple;
input AvgType2 = AverageType.Simple;
input AvgType3 = AverageType.Simple;

# input Length = 50;
input Length1 = 10;
input Length2 = 20;
input Length3 = 50;

# input priceclose = close;
input priceclose1 = close;
input priceclose2 = close;
input priceclose3 = close;


plot AVG1 = MovingAverage(AvgType1, close(period = Period1), Length1);
plot AVG2 = MovingAverage(AvgType2, close(period = Period2), Length2);
plot AVG3 = MovingAverage(AvgType3, close(period = Period3), Length3);


def pct1 = (priceclose1 / AVG1) - 1;
def pct1_perc = pct1 * 100;

def pct2 = (priceclose2 / AVG2) - 1;
def pct2_perc = pct2 * 100;

def pct3 = (priceclose3 / AVG3) - 1;
def pct3_perc = pct3 * 100;


def Diff_perc = pct2 - pct1;
def Perc = ((Diff_perc / ADR_perc)*100);

def Level0 = ADR_perc * 0.01;
def Level1 = ADR_perc * 0.30;
def Level2 = ADR_Perc * 0.50;
def Level3 = ADR_Perc * 1.00;


#### Labels

AddLabel(1, Round(pct1_perc,1) + "% :" +  Length1  + "ma" , if pct1_perc < 0.00 then Color.Gray else if pct1_perc > 0.00 and pct1_perc < ADR_perc then Color.Green else if pct1_perc >= ADR_perc and pct1_perc < ADR_perc50 then Color.Yellow else if pct1_perc >= ADR_perc50 then Color.Red else Color.GRAY);



AddLabel(1, Round(pct2_perc,1) + "% :" +  Length2  + "ma" , if pct2_perc < 0.00 then Color.Gray else if pct2_perc > 0.00 and pct2_perc < ADR_perc then Color.Green else if pct2_perc >= ADR_perc and pct2_perc < ADR_perc75 then Color.Yellow else if pct2_perc >= ADR_perc75 then Color.Red else Color.GRAY);



AddLabel(1, Round(pct3_perc,1) + "% :" +  Length3  + "ma" , if pct3_perc < 0.00 then Color.Gray else if pct3_perc > 0.00 and pct3_perc < ADR_perc then Color.Green else if pct3_perc >= ADR_perc and pct3_perc < ADR_perc75 then Color.Yellow else if pct3_perc >= ADR_perc75 then Color.Red else Color.GRAY);
 
  • Like
Reactions: Cab
I have this. ADR + current price versus certain moving averages. Color labels change based how far current price from the MAs'.


Code:
# ADR vs MA Distance Percentage
# ProjectRyan



########################################################### ADR computation


def len = 1;

def dayHigh = DailyHighLow(AggregationPeriod.DAY, len, 0, no).DailyHigh;
def dayLow = DailyHighLow(AggregationPeriod.DAY, len, 0, no).DailyLow;

def ADR = (dayHigh / dayLow + dayHigh[1] / dayLow[1] + dayHigh[2] / dayLow[2] + dayHigh[3] / dayLow[3] + dayHigh[4] / dayLow[4] + dayHigh[5] / dayLow[5] + dayHigh[6] / dayLow[6] + dayHigh[7] / dayLow[7] + dayHigh[8] / dayLow[8] + dayHigh[9] / dayLow[9] + dayHigh[10] / dayLow[10] +  dayHigh[11] / dayLow[11] + dayHigh[12] / dayLow[12] + dayHigh[13] / dayLow[13] + dayHigh[14] / dayLow[14] + dayHigh[15] / dayLow[15] +  dayHigh[16] / dayLow[16] + dayHigh[17] / dayLow[17] + dayHigh[18] / dayLow[18] + dayHigh[19] / dayLow[19] + dayHigh[20] / dayLow[20] +  dayHigh[21] / dayLow[21] + dayHigh[22] / dayLow[22] + dayHigh[23] / dayLow[23] + dayHigh[24] / dayLow[24] + dayHigh[25] / dayLow[25] + dayHigh[26] / dayLow[26] + dayHigh[27] / dayLow[27] + dayHigh[28] / dayLow[28] + dayHigh[29] / dayLow[29] + dayHigh[30] / dayLow[30] +  dayHigh[31] / dayLow[31] + dayHigh[32] / dayLow[32] + dayHigh[33] / dayLow[33] + dayHigh[34] / dayLow[34] + dayHigh[35] / dayLow[35] +  dayHigh[36] / dayLow[36] + dayHigh[37] / dayLow[37] + dayHigh[38] / dayLow[38] + dayHigh[39] / dayLow[39] + dayHigh[40] / dayLow[40] + dayHigh[41] / dayLow[41] + dayHigh[42] / dayLow[42] + dayHigh[43] / dayLow[43] + dayHigh[44] / dayLow[44] + dayHigh[45] / dayLow[45] + dayHigh[46] / dayLow[46] + dayHigh[47] / dayLow[47] + dayHigh[48] / dayLow[48] + dayHigh[49] / dayLow[49] + dayHigh[50] / dayLow[50]) / 51;

def ADR_perc = 100 * (ADR - 1);

def ADR_perc25 = ADR_perc + (ADR_perc * 0.25);

def ADR_perc50 = ADR_perc + (ADR_perc * 0.5);

def ADR_perc75 = ADR_perc + (ADR_perc * 0.75);

AddLabel (yes, Round(ADR_perc, 1) + "%" + " :ADR" , if ADR_perc is greater than or equal to 4.0 then Color.Magenta else Color.GRAY);



########################################################## Distance Between two MAs ### MTF Moving Average

# input Period = aggregationPeriod.HOUR;
input Period1 = AggregationPeriod.Day;
input Period2 = AggregationPeriod.Day;
input Period3 = AggregationPeriod.Day;

# input AvgType = averageType.EXPONENTIAL;
input AvgType1 = AverageType.Simple;
input AvgType2 = AverageType.Simple;
input AvgType3 = AverageType.Simple;

# input Length = 50;
input Length1 = 10;
input Length2 = 20;
input Length3 = 50;

# input priceclose = close;
input priceclose1 = close;
input priceclose2 = close;
input priceclose3 = close;


plot AVG1 = MovingAverage(AvgType1, close(period = Period1), Length1);
plot AVG2 = MovingAverage(AvgType2, close(period = Period2), Length2);
plot AVG3 = MovingAverage(AvgType3, close(period = Period3), Length3);


def pct1 = (priceclose1 / AVG1) - 1;
def pct1_perc = pct1 * 100;

def pct2 = (priceclose2 / AVG2) - 1;
def pct2_perc = pct2 * 100;

def pct3 = (priceclose3 / AVG3) - 1;
def pct3_perc = pct3 * 100;


def Diff_perc = pct2 - pct1;
def Perc = ((Diff_perc / ADR_perc)*100);

def Level0 = ADR_perc * 0.01;
def Level1 = ADR_perc * 0.30;
def Level2 = ADR_Perc * 0.50;
def Level3 = ADR_Perc * 1.00;


#### Labels

AddLabel(1, Round(pct1_perc,1) + "% :" +  Length1  + "ma" , if pct1_perc < 0.00 then Color.Gray else if pct1_perc > 0.00 and pct1_perc < ADR_perc then Color.Green else if pct1_perc >= ADR_perc and pct1_perc < ADR_perc50 then Color.Yellow else if pct1_perc >= ADR_perc50 then Color.Red else Color.GRAY);



AddLabel(1, Round(pct2_perc,1) + "% :" +  Length2  + "ma" , if pct2_perc < 0.00 then Color.Gray else if pct2_perc > 0.00 and pct2_perc < ADR_perc then Color.Green else if pct2_perc >= ADR_perc and pct2_perc < ADR_perc75 then Color.Yellow else if pct2_perc >= ADR_perc75 then Color.Red else Color.GRAY);



AddLabel(1, Round(pct3_perc,1) + "% :" +  Length3  + "ma" , if pct3_perc < 0.00 then Color.Gray else if pct3_perc > 0.00 and pct3_perc < ADR_perc then Color.Green else if pct3_perc >= ADR_perc and pct3_perc < ADR_perc75 then Color.Yellow else if pct3_perc >= ADR_perc75 then Color.Red else Color.GRAY);
Is it possible to change the color of the labels to match the color that I select from the color swatches for the moving averages? Using a few moving averages on each time chart can make distinguishing them confusing.
 
Is it possible to change the color of the labels to match the color that I select from the color swatches for the moving averages? Using a few moving averages on each time chart can make distinguishing them confusing.
Yup. I made some mod of above code where:
  • when: Price is above MA + Difference between current price and MA is < than ADR: label's color is the same as the MA.
  • if: Price is above MA + Difference between current price and MA is > than ADR: label's color turns red

Code:
# ADR vs MA Distance Percentage
# ProjectRyan
# V2; Fixed colors

########################################################### ADR computation

def len = 1;

def dayHigh = DailyHighLow(AggregationPeriod.DAY, len, 0, no).DailyHigh;
def dayLow = DailyHighLow(AggregationPeriod.DAY, len, 0, no).DailyLow;

def ADR = (dayHigh / dayLow + dayHigh[1] / dayLow[1] + dayHigh[2] / dayLow[2] + dayHigh[3] / dayLow[3] + dayHigh[4] / dayLow[4] + dayHigh[5] / dayLow[5] + dayHigh[6] / dayLow[6] + dayHigh[7] / dayLow[7] + dayHigh[8] / dayLow[8] + dayHigh[9] / dayLow[9] + dayHigh[10] / dayLow[10] +  dayHigh[11] / dayLow[11] + dayHigh[12] / dayLow[12] + dayHigh[13] / dayLow[13] + dayHigh[14] / dayLow[14] + dayHigh[15] / dayLow[15] +  dayHigh[16] / dayLow[16] + dayHigh[17] / dayLow[17] + dayHigh[18] / dayLow[18] + dayHigh[19] / dayLow[19] + dayHigh[20] / dayLow[20] +  dayHigh[21] / dayLow[21] + dayHigh[22] / dayLow[22] + dayHigh[23] / dayLow[23] + dayHigh[24] / dayLow[24] + dayHigh[25] / dayLow[25] + dayHigh[26] / dayLow[26] + dayHigh[27] / dayLow[27] + dayHigh[28] / dayLow[28] + dayHigh[29] / dayLow[29] + dayHigh[30] / dayLow[30] +  dayHigh[31] / dayLow[31] + dayHigh[32] / dayLow[32] + dayHigh[33] / dayLow[33] + dayHigh[34] / dayLow[34] + dayHigh[35] / dayLow[35] +  dayHigh[36] / dayLow[36] + dayHigh[37] / dayLow[37] + dayHigh[38] / dayLow[38] + dayHigh[39] / dayLow[39] + dayHigh[40] / dayLow[40] + dayHigh[41] / dayLow[41] + dayHigh[42] / dayLow[42] + dayHigh[43] / dayLow[43] + dayHigh[44] / dayLow[44] + dayHigh[45] / dayLow[45] + dayHigh[46] / dayLow[46] + dayHigh[47] / dayLow[47] + dayHigh[48] / dayLow[48] + dayHigh[49] / dayLow[49] + dayHigh[50] / dayLow[50]) / 51;

def ADR_perc = 100 * (ADR - 1);

def ADR_perc25 = ADR_perc + (ADR_perc * 0.25);

def ADR_perc50 = ADR_perc + (ADR_perc * 0.5);

def ADR_perc75 = ADR_perc + (ADR_perc * 0.75);

AddLabel (yes, Round(ADR_perc, 1) + "%" + " :ADR" , if ADR_perc is greater than or equal to 4.0 then Color.MAGENTA else Color.GRAY);


########################################################## Distance Between two MAs ### MTF Moving Average

# input Period = aggregationPeriod.HOUR;
input Period1 = AggregationPeriod.DAY;
input Period2 = AggregationPeriod.DAY;
input Period3 = AggregationPeriod.DAY;

# input AvgType = averageType.EXPONENTIAL;
input AvgType1 = AverageType.SIMPLE;
input AvgType2 = AverageType.SIMPLE;
input AvgType3 = AverageType.SIMPLE;

# input Length = 50;
input Length1 = 10;
input Length2 = 20;
input Length3 = 50;

# input priceclose = close;
input priceclose1 = close;
input priceclose2 = close;
input priceclose3 = close;


plot AVG1 = MovingAverage(AvgType1, close(period = Period1), Length1);
AVG1.setdefaultcolor(color.Green);
plot AVG2 = MovingAverage(AvgType2, close(period = Period2), Length2);
AVG2.setdefaultcolor(color.Cyan);
plot AVG3 = MovingAverage(AvgType3, close(period = Period3), Length3);
AVG3.setdefaultcolor(color.Yellow);


def pct1 = (priceclose1 / AVG1) - 1;
def pct1_perc = pct1 * 100;

def pct2 = (priceclose2 / AVG2) - 1;
def pct2_perc = pct2 * 100;

def pct3 = (priceclose3 / AVG3) - 1;
def pct3_perc = pct3 * 100;


def Diff_perc = pct2 - pct1;
def Perc = ((Diff_perc / ADR_perc) * 100);

def Level0 = ADR_perc * 0.01;
def Level1 = ADR_perc * 0.30;
def Level2 = ADR_perc * 0.50;
def Level3 = ADR_perc * 1.00;


#### Labels

#AddLabel(1, Round(pct1_perc,1) + "% :" +  Length1  + "ma" , if pct1_perc < 0.00 then Color.Gray else if pct1_perc > 0.00 and pct1_perc < ADR_perc then Color.Green else if pct1_perc >= ADR_perc and pct1_perc < ADR_perc50 then Color.Yellow else if pct1_perc >= ADR_perc50 then Color.Red else Color.GRAY);
AddLabel(1, Round(pct1_perc, 1) + "% :" +  Length1  + "ma" , if pct1_perc < 0.00 then Color.GRAY else if pct1_perc > 0.00 and pct1_perc < ADR_perc then Color.GREEN else if pct1_perc > 0.00 and pct1_perc >= ADR_perc then Color.Red else Color.GRAY);


#AddLabel(1, Round(pct2_perc,1) + "% :" +  Length2  + "ma" , if pct2_perc < 0.00 then Color.Gray else if pct2_perc > 0.00 and pct2_perc < ADR_perc then Color.Green else if pct2_perc >= ADR_perc and pct2_perc < ADR_perc75 then Color.Yellow else if pct2_perc >= ADR_perc75 then Color.Red else Color.GRAY);
AddLabel(1, Round(pct2_perc, 1) + "% :" +  Length2  + "ma" , if pct2_perc < 0.00 then Color.GRAY else if pct2_perc > 0.00 and pct2_perc < ADR_perc then Color.CYAN else if pct2_perc >= ADR_perc then Color.Red else Color.GRAY);


#AddLabel(1, Round(pct3_perc,1) + "% :" +  Length3  + "ma" , if pct3_perc < 0.00 then Color.Gray else if pct3_perc > 0.00 and pct3_perc < ADR_perc then Color.Green else if pct3_perc >= ADR_perc and pct3_perc < ADR_perc75 then Color.Yellow else if pct3_perc >= ADR_perc75 then Color.Red else Color.GRAY);
AddLabel(1, Round(pct3_perc, 1) + "% :" +  Length3  + "ma" , if pct3_perc < 0.00 then Color.GRAY else if pct3_perc > 0.00 and pct3_perc < ADR_perc then Color.YELLOW else if pct3_perc > 0.00 and pct3_perc >= ADR_perc then Color.Red else Color.GRAY);
 

Similar threads

Not the exact question you're looking for?

Start a new thread and receive assistance from our community.

87k+ Posts
302 Online
Create Post

Similar threads

Similar threads

The Market Trading Game Changer

Join 2,500+ subscribers inside the useThinkScript VIP Membership Club
  • Exclusive indicators
  • Proven strategies & setups
  • Private Discord community
  • ‘Buy The Dip’ signal alerts
  • Exclusive members-only content
  • Add-ons and resources
  • 1 full year of unlimited support

Frequently Asked Questions

What is useThinkScript?

useThinkScript is the #1 community of stock market investors using indicators and other tools to power their trading strategies. Traders of all skill levels use our forums to learn about scripting and indicators, help each other, and discover new ways to gain an edge in the markets.

How do I get started?

We get it. Our forum can be intimidating, if not overwhelming. With thousands of topics, tens of thousands of posts, our community has created an incredibly deep knowledge base for stock traders. No one can ever exhaust every resource provided on our site.

If you are new, or just looking for guidance, here are some helpful links to get you started.

What are the benefits of VIP Membership?
VIP members get exclusive access to these proven and tested premium indicators: Buy the Dip, Advanced Market Moves 2.0, Take Profit, and Volatility Trading Range. In addition, VIP members get access to over 50 VIP-only custom indicators, add-ons, and strategies, private VIP-only forums, private Discord channel to discuss trades and strategies in real-time, customer support, trade alerts, and much more. Learn all about VIP membership here.
How can I access the premium indicators?
To access the premium indicators, which are plug and play ready, sign up for VIP membership here.
Back
Top