Best,
Xard777
Here is the code...
Code: Select all
static double cachedAdrAvg = 0.0;
static double cachedYestAvg = 0.0;
static int lastDailyBars = 0;
int currDailyBars = iBars(symbol, PERIOD_D1);
if (cachedAdrAvg == 0.0 || currDailyBars > lastDailyBars)
{
double sum1 = 0, sum5 = 0, sum10 = 0, sum20 = 0;
int cnt1 = 0, cnt5 = 0, cnt10 = 0, cnt20 = 0;
int maxBars = MathMin(Bars(symbol, PERIOD_D1), BarsCount);
int maxD = MathMin(20, maxBars - 1);
for (int i = 1; i <= maxD; i++)
{
double r = iHigh(symbol, PERIOD_D1, i) - iLow(symbol, PERIOD_D1, i);
sum20 += r; cnt20++;
if (i <= 10) { sum10 += r; cnt10++; }
if (i <= 5) { sum5 += r; cnt5++; }
if (i <= 1) { sum1 += r; cnt1++; }
}
double adr1 = (cnt1 > 0) ? sum1 / cnt1 : 0;
double adr5 = (cnt5 > 0) ? sum5 / cnt5 : 0;
double adr10 = (cnt10 > 0) ? sum10 / cnt10 : 0;
double adr20 = (cnt20 > 0) ? sum20 / cnt20 : 0;
double adrAvgRaw = (adr1 + adr5 + adr10 + adr20) / 4;
cachedAdrAvg = adrAvgRaw * pipsize;
cachedYestAvg = (iHigh(symbol, PERIOD_D1, 1) - iLow(symbol, PERIOD_D1, 1)) * pipsize;
lastDailyBars = currDailyBars;
if (DebugWithSquealers) Print("SQUEALER: Cached ADR Update - New Daily Bars: ", currDailyBars, ", ADR Avg: ", cachedAdrAvg, ", Yest Avg: ", cachedYestAvg);
}
double adrAvg = cachedAdrAvg;
double yestAvg = cachedYestAvg;
if (DebugWithSquealers) Print("SQUEALER: 20 Day Range - Raw Avg: ", adrAvg / pipsize, ", Pipsize: ", pipsize, ", Result: ", adrAvg);
ObjectSetString(chartID, ID1+"Xard14", OBJPROP_TEXT, DoubleToString(adrAvg, 0));
ObjectSetInteger(chartID, ID1+"Xard14", OBJPROP_COLOR, adrAvg > yestAvg ? C'255,140,255' : clrDeepSkyBlue);