You need to get an adequate value on the last bar.
// M. M. Dubovikov et al. - The dimension of the minimum coverage and
/ / local analysis of fractal time series.
/ / - - - - authorship of the indicator
#property copyright "Copyright © 2008, Ilnur"
double Trand()
{
int n=5; / / interval
int nBars=100;
int rates_total; / / number of history in bars on the current tick
int prev_calculated;/ / amount of history in bars on the previous tick
datetime time[];
double open[];
double high[100]; // price array of maximums of price for the indicator calculation
double low[100]; / / price array of price minimums for indicator calculation
double close[];
long tick_volume[];
long volume[];
int spread[];
/ / - - - -
double ibuffer indicator buffer[];
//----
SetIndexBuffer(0,ibuffer);
//----
//=========== EMULATION OF INDICATOR BUFFERS ============|
int ArSize=ArraySize(ibuffer);
if(ArSize<iBars(_Symbol,tfTrand))
{
ArraySetAsSeries(ibuffer,false);
ArrayResize(ibuffer,iBars(Symbol(),tfTrand));
ArraySetAsSeries(ibuffer,true);
}
int bars=iBars(Symbol(),tfTrand);
int i,j,k,nTotal;
int ihigh,ilow,nInterval;
double Delta, XC, YC,Sx, Sy, Sxx,Sxy;
/ / - - - - the last counted bar will be recalculated
static int nCountedBars;
nCountedBars=bars-1;
if(nCountedBars>0) nCountedBars--;
if(nBars>0)
nTotal = MathMin(nBars,MathMin(bars-nCountedBars,bars-1));
else nTotal = MathMin(bars-nCountedBars,bars-1);
/ / - - - - main cycle
of the for indicator(j=nTotal; j>=>0; j--)
{
Sx=0; Sy=0; Sxx=0; Sxy=0;
for(i=0; i<=n; i++)
{
nInterval=MathPow(2,n-i);
/ / - - - - summing up the difference between the maximum and minimum prices in the interval
for(Delta=0,k=0; k<MathPow(2,i); k++)
{
ihigh= iHighest(Symbol(),tfTrand,MODE_HIGH,nInterval,nInterval*k+j);
ilow = iLowest(Symbol(),tfTrand,MODE_LOW, nInterval,nInterval*k+j);
Print("high[ihigh]="+high[ihigh]+" low[ilow]="+low[ilow]);
Delta+=high[ihigh]-low[ilow];
}
/ / - - - - calculate the coordinates of the variation on a double logarithmic scale
XC = (n-i)*MathLog(2.0);
Us = MathLog(Delta);
//---- accumulate data for finding of the coefficients of the regression line using OLS
Sx += XC;
Sy += Us;
Sxx += XC*XC;
Sxy += XC*Us;
}
/ / - - - - calculate the index of variation (coefficient of slope of the regression line)
ibuffer[j]=-(Sx*Sy-(n+1)*Sxy)/(Sx*Sx-(n+1)*Sxx);
}
return(ibuffer[0]);}
in the meantime, complete nonsense. SPS.
vdn_gol
Thanks for the idea. I just don’t want to carry around a bunch of spare parts. And optimization is more convenient.
dimeon
Call the indicator via iCustom.