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.
#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();
#
# 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.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);
Yup. I made some mod of above code where: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.
# 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);
Thank Youi 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(); #
![]()
Start a new thread and receive assistance from our community.
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.
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.