adr_sl-noline

Download script
Author: Copyright � Terry Nicholls
adr_sl-noline

This script is designed to provide traders with a real-time dashboard on their trading chart that calculates and displays specific price movement statistics. It focuses on the "Average Daily Range" (ADR), which helps traders understand how much an asset typically moves within a single day.

Core Functionality

The tool performs three main actions to help with market analysis and risk management:

1. Historical Range Tracking The script automatically calculates and displays the following data points at the top of your chart:

  • Today’s Movement: The current live range for the ongoing trading day.
  • Yesterday’s Movement: The total pip movement from the previous completed day.
  • Multi-Day Averages: The average daily range calculated over specific timeframes: 5 days, 10 days, and 20 days. This allows you to see if current volatility is higher or lower than normal for that specific asset.

2. Risk Management Calculations (Stop Loss Targets) Beyond just showing the averages, the script provides practical figures for setting Stop Loss (SL) orders. It calculates two different safety "buffer" zones based on the ranges of the 1-day, 5-day, 10-day, and 20-day periods:

  • Half Range (1/2): A calculation showing half of the average range.
  • Three-Quarters Range (3/4): A slightly wider calculation showing 75% of the average range.

These values are displayed as "targets," giving you a concrete number of pips to consider when deciding where to place your protective stops relative to current market volatility.

3. Dynamic Visual Dashboard Instead of forcing you to do manual math, the script handles all calculations in the background and draws a clean text dashboard directly on your screen.

  • Labels: It clearly distinguishes between the "Daily Range" stats and the "Stop Loss" target stats.
  • Formatting: The data is organized into rows so you can quickly see the difference between, for example, a 5-day average range versus the specific Stop Loss suggested for that period.

How it benefits the trader

By providing these numbers in one place, the script helps you determine if the market is "stretched" (moving further than its average) or if there is still "room" left for the price to move before hitting a significant exhaustion point. It effectively takes the guesswork out of determining how much volatility you should expect during a trading session.

Price Data Components
Series array that contains the highest prices of each barSeries array that contains the lowest prices of each bar
10 Views
0 Downloads
0 Favorites
adr_sl-noline
//+------------------------------------------------------------------+
//|                                                ADR_SL-NoLine.mq4 |
//|                                       Copyright © Terry Nicholls |
//| Some code modified from TSR_Ranges.mq4 by Ogeima                 |
//| made for FXiGoR for the TSR Trend Slope Retracement method       |
//| modified to the DYNAMIC Daily Range Breakout System              |
//+------------------------------------------------------------------+

/* This will display at the top of your chart the Average Daily Range (pip movement)
   for Yesterday, Today, and 5, 10, and 20 day periods.
   Below that will display the number of pips for a Stop Loss based on 1/2 and 3/4
   of the ADR. */

#property copyright "Copyright © Terry Nicholls"

#property indicator_chart_window

extern double  Risk_to_Reward_ratio =  3.0;

int nDigits;
double today_high=0;
double today_low=0;
double D=0;
double nD=0;
double nhR1=0;
double nqR1=0;
double nhR5=0;
double nqR5=0;
double nhR10=0;
double nqR10=0;
double nhR20=0;
double nqR20=0;
double rates_d1[2][6];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

int init()
  {
   IndicatorShortName("Avg_Dly_Rng");
   return(0);
  }

//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+

int deinit()
  {
   ObjectDelete("Avg_Dly_Rng1");
   ObjectDelete("Avg_Dly_Rng2");
   ObjectDelete("Avg_Dly_Rng3");
   ObjectDelete("Avg_Dly_Rng4");
   ObjectDelete("Avg_Dly_Rng5");
   ObjectDelete("Avg_Dly_Rng6");
   ObjectDelete("Avg_Dly_Rng7");
   ObjectDelete("Avg_Dly_Rng8");
   ObjectDelete("Avg_Dly_Rng9");
   ObjectDelete("Avg_Dly_Rng10");
   ObjectDelete("Avg_Dly_Rng11");
   ObjectDelete("Avg_Dly_Rng12");
   ObjectDelete("Avg_Dly_Rng13");
   ObjectDelete("Avg_Dly_Rng14");
   ObjectDelete("Avg_Dly_Rng15");
   ObjectDelete("Avg_Dly_Rng16");
   ObjectDelete("Avg_Dly_Rng17");
   ObjectDelete("Avg_Dly_Rng18");
   ObjectDelete("Avg_Dly_Rng19");
   ObjectDelete("Avg_Dly_Rng20");
   ObjectDelete("Avg_Dly_Rng21");
   ObjectDelete("Avg_Dly_Rng22");
   ObjectDelete("Avg_Dly_Rng23");
   ObjectDelete("Avg_Dly_Rng24");
   ObjectDelete("Avg_Dly_Rng25");
   ObjectDelete("Avg_Dly_Rng26");
   ObjectDelete("Avg_Dly_Rng27");
   return(0);
  }

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+

int start()
  {
ArrayCopyRates(rates_d1, Symbol(), PERIOD_D1);   //---- Get new daily prices

   int R1=0,R5=0,R10=0,R20=0,RAvg=0;
   int RoomUp=0,RoomDown=0,StopLoss_Long=0,StopLoss_Short=0;
   double   SL_Long=0,SL_Short=0;
   double   low0=0,high0=0;
   string   Text="";
   int i=0;

today_high = rates_d1[0][3];
today_low = rates_d1[0][2];

D = (today_high - today_low);

   R1 =  (iHigh(NULL,PERIOD_D1,1)-iLow(NULL,PERIOD_D1,1))/Point;
   for(i=1;i<=5;i++)
      R5    =    R5  +  (iHigh(NULL,PERIOD_D1,i)-iLow(NULL,PERIOD_D1,i))/Point;
   for(i=1;i<=10;i++)
      R10   =    R10 +  (iHigh(NULL,PERIOD_D1,i)-iLow(NULL,PERIOD_D1,i))/Point;
   for(i=1;i<=20;i++)
      R20   =    R20 +  (iHigh(NULL,PERIOD_D1,i)-iLow(NULL,PERIOD_D1,i))/Point;

   R5 = R5/5;
   R10 = R10/10;
   R20 = R20/20;
   RAvg  =  (R1+R5+R10+R20)/4;    

   low0  =  iLow(NULL,PERIOD_D1,0);
   high0 =  iHigh(NULL,PERIOD_D1,0);
   RoomUp   =  RAvg - (Bid - low0)/Point;
   RoomDown =  RAvg - (high0 - Bid)/Point;
   StopLoss_Long  =  RoomUp/Risk_to_Reward_ratio;
   SL_Long        =  Bid - nhR1*Point;
   StopLoss_Short =  RoomDown/Risk_to_Reward_ratio;
   SL_Short       =  Bid + nhR1*Point;

if (D > 1)
{
	nD = D;
}
else
{
	nD = D*10000;
}

if (R1 > 1)
{
	nhR1 = R1/2;
}
else
{
	nhR1 = 0;
}

if (R1 > 1)
{
	nqR1 = R1*0.75;
}
else
{
	nqR1 = 0;
}

if (R5 > 1)
{
	nhR5 = R5/2;
}
else
{
	nhR5 = 0;
}

if (R5 > 1)
{
	nqR5 = R5*0.75;
}
else
{
	nqR5 = 0;
}

if (R10 > 1)
{
	nhR10 = R10/2;
}
else
{
	nhR10 = 0;
}

if (R10 > 1)
{
	nqR10 = R10*0.75;
}
else
{
	nqR20 = 0;
}

if (R20 > 1)
{
	nhR20 = R20/2;
}
else
{
	nhR20 = 0;
}

if (R20 > 1)
{
	nqR20 = R20*0.75;
}
else
{
	nqR20 = 0;
}

// Displays Average Daily Range for Today, Yesterday, 5 Days, 10 Days, and 20 Days

        ObjectCreate("Avg_Dly_Rng1", OBJ_LABEL, 0, 0, 0);
        ObjectSetText("Avg_Dly_Rng1","Today: ", 12, "Arial Bold", RoyalBlue);
        ObjectSet("Avg_Dly_Rng1", OBJPROP_CORNER, 0);
        ObjectSet("Avg_Dly_Rng1", OBJPROP_XDISTANCE, 225);
        ObjectSet("Avg_Dly_Rng1", OBJPROP_YDISTANCE, 2);
        
        ObjectCreate("Avg_Dly_Rng2", OBJ_LABEL, 0, 0, 0);
        ObjectSetText("Avg_Dly_Rng2",DoubleToStr(nD ,0),12, "Arial Bold", Tomato);
        ObjectSet("Avg_Dly_Rng2", OBJPROP_CORNER, 0);
        ObjectSet("Avg_Dly_Rng2", OBJPROP_XDISTANCE, 285);
        ObjectSet("Avg_Dly_Rng2", OBJPROP_YDISTANCE, 2);
        
        ObjectCreate("Avg_Dly_Rng3", OBJ_LABEL, 0, 0, 0);
        ObjectSetText("Avg_Dly_Rng3","1 Day: ", 12, "Arial Bold", RoyalBlue);
        ObjectSet("Avg_Dly_Rng3", OBJPROP_CORNER, 0);
        ObjectSet("Avg_Dly_Rng3", OBJPROP_XDISTANCE, 325);
        ObjectSet("Avg_Dly_Rng3", OBJPROP_YDISTANCE, 2);
        
        ObjectCreate("Avg_Dly_Rng4", OBJ_LABEL, 0, 0, 0);
        ObjectSetText("Avg_Dly_Rng4",DoubleToStr(R1 ,0),12, "Arial Bold", Tomato);
        ObjectSet("Avg_Dly_Rng4", OBJPROP_CORNER, 0);
        ObjectSet("Avg_Dly_Rng4", OBJPROP_XDISTANCE, 380);
        ObjectSet("Avg_Dly_Rng4", OBJPROP_YDISTANCE, 2);
        
        ObjectCreate("Avg_Dly_Rng5", OBJ_LABEL, 0, 0, 0);
        ObjectSetText("Avg_Dly_Rng5","5 Day: ", 12, "Arial Bold", RoyalBlue);
        ObjectSet("Avg_Dly_Rng5", OBJPROP_CORNER, 0);
        ObjectSet("Avg_Dly_Rng5", OBJPROP_XDISTANCE, 420);
        ObjectSet("Avg_Dly_Rng5", OBJPROP_YDISTANCE, 2);
        
        ObjectCreate("Avg_Dly_Rng6", OBJ_LABEL, 0, 0, 0);
        ObjectSetText("Avg_Dly_Rng6",DoubleToStr(R5 ,0),12, "Arial Bold", Tomato);
        ObjectSet("Avg_Dly_Rng6", OBJPROP_CORNER, 0);
        ObjectSet("Avg_Dly_Rng6", OBJPROP_XDISTANCE, 475);
        ObjectSet("Avg_Dly_Rng6", OBJPROP_YDISTANCE, 2);
        
        ObjectCreate("Avg_Dly_Rng7", OBJ_LABEL, 0, 0, 0);
        ObjectSetText("Avg_Dly_Rng7","10 Day: ", 12, "Arial Bold", RoyalBlue);
        ObjectSet("Avg_Dly_Rng7", OBJPROP_CORNER, 0);
        ObjectSet("Avg_Dly_Rng7", OBJPROP_XDISTANCE, 515);
        ObjectSet("Avg_Dly_Rng7", OBJPROP_YDISTANCE, 2);
        
        ObjectCreate("Avg_Dly_Rng8", OBJ_LABEL, 0, 0, 0);
        ObjectSetText("Avg_Dly_Rng8",DoubleToStr(R10 ,0),12, "Arial Bold", Tomato);
        ObjectSet("Avg_Dly_Rng8", OBJPROP_CORNER, 0);
        ObjectSet("Avg_Dly_Rng8", OBJPROP_XDISTANCE, 579);
        ObjectSet("Avg_Dly_Rng8", OBJPROP_YDISTANCE, 2);
        
        ObjectCreate("Avg_Dly_Rng9", OBJ_LABEL, 0, 0, 0);
        ObjectSetText("Avg_Dly_Rng9","20 Day: ", 12, "Arial Bold", RoyalBlue);
        ObjectSet("Avg_Dly_Rng9", OBJPROP_CORNER, 0);
        ObjectSet("Avg_Dly_Rng9", OBJPROP_XDISTANCE, 619);
        ObjectSet("Avg_Dly_Rng9", OBJPROP_YDISTANCE, 2);
        
        ObjectCreate("Avg_Dly_Rng10", OBJ_LABEL, 0, 0, 0);
        ObjectSetText("Avg_Dly_Rng10",DoubleToStr(R20 ,0),12, "Arial Bold", Tomato);
        ObjectSet("Avg_Dly_Rng10", OBJPROP_CORNER, 0);
        ObjectSet("Avg_Dly_Rng10", OBJPROP_XDISTANCE, 683);
        ObjectSet("Avg_Dly_Rng10", OBJPROP_YDISTANCE, 2);
        
// Displyas Stop Loss targets for 1/2 and 3/4 of Average Daily Ranges

        ObjectCreate("Avg_Dly_Rng11", OBJ_LABEL, 0, 0, 0);
        ObjectSetText("Avg_Dly_Rng11","S/L @ 1/2 & 3/4 ADRs: ", 10, "Arial Bold", RoyalBlue);
        ObjectSet("Avg_Dly_Rng11", OBJPROP_CORNER, 0);
        ObjectSet("Avg_Dly_Rng11", OBJPROP_XDISTANCE, 185);
        ObjectSet("Avg_Dly_Rng11", OBJPROP_YDISTANCE, 20);
        
        ObjectCreate("Avg_Dly_Rng12", OBJ_LABEL, 0, 0, 0);
        ObjectSetText("Avg_Dly_Rng12","1 = ", 9, "Arial Bold", RoyalBlue);
        ObjectSet("Avg_Dly_Rng12", OBJPROP_CORNER, 0);
        ObjectSet("Avg_Dly_Rng12", OBJPROP_XDISTANCE, 327);
        ObjectSet("Avg_Dly_Rng12", OBJPROP_YDISTANCE, 20);
        
        ObjectCreate("Avg_Dly_Rng13", OBJ_LABEL, 0, 0, 0);
        ObjectSetText("Avg_Dly_Rng13",DoubleToStr(nhR1 ,0),9, "Arial Bold", Tomato);
        ObjectSet("Avg_Dly_Rng13", OBJPROP_CORNER, 0);
        ObjectSet("Avg_Dly_Rng13", OBJPROP_XDISTANCE, 353);
        ObjectSet("Avg_Dly_Rng13", OBJPROP_YDISTANCE, 20);
        
        ObjectCreate("Avg_Dly_Rng14", OBJ_LABEL, 0, 0, 0);
        ObjectSetText("Avg_Dly_Rng14","/", 9, "Arial", RoyalBlue);
        ObjectSet("Avg_Dly_Rng14", OBJPROP_CORNER, 0);
        ObjectSet("Avg_Dly_Rng14", OBJPROP_XDISTANCE, 379);
        ObjectSet("Avg_Dly_Rng14", OBJPROP_YDISTANCE, 20);
        
        ObjectCreate("Avg_Dly_Rng15", OBJ_LABEL, 0, 0, 0);
        ObjectSetText("Avg_Dly_Rng15",DoubleToStr(nqR1 ,0),9, "Arial Bold", Tomato);
        ObjectSet("Avg_Dly_Rng15", OBJPROP_CORNER, 0);
        ObjectSet("Avg_Dly_Rng15", OBJPROP_XDISTANCE, 385);
        ObjectSet("Avg_Dly_Rng15", OBJPROP_YDISTANCE, 20);
        
        ObjectCreate("Avg_Dly_Rng16", OBJ_LABEL, 0, 0, 0);
        ObjectSetText("Avg_Dly_Rng16","5 = ", 9, "Arial Bold", RoyalBlue);
        ObjectSet("Avg_Dly_Rng16", OBJPROP_CORNER, 0);
        ObjectSet("Avg_Dly_Rng16", OBJPROP_XDISTANCE, 422);
        ObjectSet("Avg_Dly_Rng16", OBJPROP_YDISTANCE, 20);
        
        ObjectCreate("Avg_Dly_Rng17", OBJ_LABEL, 0, 0, 0);
        ObjectSetText("Avg_Dly_Rng17",DoubleToStr(nhR5 ,0),9, "Arial Bold", Tomato);
        ObjectSet("Avg_Dly_Rng17", OBJPROP_CORNER, 0);
        ObjectSet("Avg_Dly_Rng17", OBJPROP_XDISTANCE, 448);
        ObjectSet("Avg_Dly_Rng17", OBJPROP_YDISTANCE, 20);
        
        ObjectCreate("Avg_Dly_Rng18", OBJ_LABEL, 0, 0, 0);
        ObjectSetText("Avg_Dly_Rng18","/", 9, "Arial", RoyalBlue);
        ObjectSet("Avg_Dly_Rng18", OBJPROP_CORNER, 0);
        ObjectSet("Avg_Dly_Rng18", OBJPROP_XDISTANCE, 474);
        ObjectSet("Avg_Dly_Rng18", OBJPROP_YDISTANCE, 20);
        
        ObjectCreate("Avg_Dly_Rng19", OBJ_LABEL, 0, 0, 0);
        ObjectSetText("Avg_Dly_Rng19",DoubleToStr(nqR5 ,0),9, "Arial Bold", Tomato);
        ObjectSet("Avg_Dly_Rng19", OBJPROP_CORNER, 0);
        ObjectSet("Avg_Dly_Rng19", OBJPROP_XDISTANCE, 480);
        ObjectSet("Avg_Dly_Rng19", OBJPROP_YDISTANCE, 20);
        
        ObjectCreate("Avg_Dly_Rng20", OBJ_LABEL, 0, 0, 0);
        ObjectSetText("Avg_Dly_Rng20","10 = ", 9, "Arial Bold", RoyalBlue);
        ObjectSet("Avg_Dly_Rng20", OBJPROP_CORNER, 0);
        ObjectSet("Avg_Dly_Rng20", OBJPROP_XDISTANCE, 517);
        ObjectSet("Avg_Dly_Rng20", OBJPROP_YDISTANCE, 20);
        
        ObjectCreate("Avg_Dly_Rng21", OBJ_LABEL, 0, 0, 0);
        ObjectSetText("Avg_Dly_Rng21",DoubleToStr(nhR10 ,0),9, "Arial Bold", Tomato);
        ObjectSet("Avg_Dly_Rng21", OBJPROP_CORNER, 0);
        ObjectSet("Avg_Dly_Rng21", OBJPROP_XDISTANCE, 549);
        ObjectSet("Avg_Dly_Rng21", OBJPROP_YDISTANCE, 20);
        
        ObjectCreate("Avg_Dly_Rng22", OBJ_LABEL, 0, 0, 0);
        ObjectSetText("Avg_Dly_Rng22","/", 9, "Arial", RoyalBlue);
        ObjectSet("Avg_Dly_Rng22", OBJPROP_CORNER, 0);
        ObjectSet("Avg_Dly_Rng22", OBJPROP_XDISTANCE, 576);
        ObjectSet("Avg_Dly_Rng22", OBJPROP_YDISTANCE, 20);
        
        ObjectCreate("Avg_Dly_Rng23", OBJ_LABEL, 0, 0, 0);
        ObjectSetText("Avg_Dly_Rng23",DoubleToStr(nqR10 ,0),9, "Arial Bold", Tomato);
        ObjectSet("Avg_Dly_Rng23", OBJPROP_CORNER, 0);
        ObjectSet("Avg_Dly_Rng23", OBJPROP_XDISTANCE, 582);
        ObjectSet("Avg_Dly_Rng23", OBJPROP_YDISTANCE, 20);
        
        ObjectCreate("Avg_Dly_Rng24", OBJ_LABEL, 0, 0, 0);
        ObjectSetText("Avg_Dly_Rng24","20 = ", 9, "Arial Bold", RoyalBlue);
        ObjectSet("Avg_Dly_Rng24", OBJPROP_CORNER, 0);
        ObjectSet("Avg_Dly_Rng24", OBJPROP_XDISTANCE, 621);
        ObjectSet("Avg_Dly_Rng24", OBJPROP_YDISTANCE, 20);
        
        ObjectCreate("Avg_Dly_Rng25", OBJ_LABEL, 0, 0, 0);
        ObjectSetText("Avg_Dly_Rng25",DoubleToStr(nhR20 ,0),9, "Arial Bold", Tomato);
        ObjectSet("Avg_Dly_Rng25", OBJPROP_CORNER, 0);
        ObjectSet("Avg_Dly_Rng25", OBJPROP_XDISTANCE, 653);
        ObjectSet("Avg_Dly_Rng25", OBJPROP_YDISTANCE, 20);
        
        ObjectCreate("Avg_Dly_Rng26", OBJ_LABEL, 0, 0, 0);
        ObjectSetText("Avg_Dly_Rng26","/", 9, "Arial", RoyalBlue);
        ObjectSet("Avg_Dly_Rng26", OBJPROP_CORNER, 0);
        ObjectSet("Avg_Dly_Rng26", OBJPROP_XDISTANCE, 680);
        ObjectSet("Avg_Dly_Rng26", OBJPROP_YDISTANCE, 20);
        
        ObjectCreate("Avg_Dly_Rng27", OBJ_LABEL, 0, 0, 0);
        ObjectSetText("Avg_Dly_Rng27",DoubleToStr(nqR20 ,0),9, "Arial Bold", Tomato);
        ObjectSet("Avg_Dly_Rng27", OBJPROP_CORNER, 0);
        ObjectSet("Avg_Dly_Rng27", OBJPROP_XDISTANCE, 686);
        ObjectSet("Avg_Dly_Rng27", OBJPROP_YDISTANCE, 20);

   return(0);
  }

//+------------------------------------------------------------------+

Comments