I don't believe I'm infringing on anyones
copyright/ownership as this indicator is freely available for the MT4 platform
and no indication is given of a copyright owner. Seems to work OK in showing
trend change when used in conjunction with confirming PA.
Thanks.
/+------------------------------------------------------------------+ //|
J_TPO.mq4
| //|
Copyright ©
2004,
| //|
| //+------------------------------------------------------------------+ #property
copyright "Copyright © 2004, ." #property link
""
#property indicator_separate_window #property
indicator_minimum -1 #property indicator_maximum 1 #property
indicator_buffers 1 #property indicator_color1 DodgerBlue //---- input
parameters extern int Len=10; //----
buffers double
ExtMapBuffer1[]; //+------------------------------------------------------------------+ //|
Custom indicator initialization
function
| //+------------------------------------------------------------------+ int
init() { //---- indicators
SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,
ExtMapBuffer1); //---- return(0); }
//+------------------------------------------------------------------+ //|
J_TPO
indicatop
| //+------------------------------------------------------------------+ int
start() { //int limit; //int
counted_bars=IndicatorCounted(); //---- check for possible
errors //if(counted_bars<0) return(-1); //---- last
counted bar will be recounted //if(counted_bars>0)
counted_bars--; //limit=Bars-counted_bars; //---- main
loop double f0, f8, f10, f18, f20,
f28, f30, f40, k, var14, var18, var1C, var20,
var24, shift, value; int f38, f48, var6, var12,
varA, varE; double arr0[300], arr1[300], arr2[300],
arr3[300];
//f38=0; for(int
i=Bars-Len-100; i>=0; i--)
{ var14=0; var1C=0;
if(f38==0)
{ f38=1;
f40=0; if (Len-1>= 2)
f30=Len-1; else f30=2;
f48=f30+1;
f10=Close[i]; arr0[f38] = Close[i];
k=f48; f18
= 12 / (k * (k - 1) * (k + 1)); f20 = (f48 +
1) * 0.5; }
else {
if (f38 <= f48) f38 = f38 +
1; else f38 = f48 + 1;
f8 = f10;
f10 = Close[i]; if (f38 > f48)
{ for (var6 = 2; var6<=f48;
var6++) arr0[var6-1] = arr0[var6];
arr0[f48] = Close[i];
} else arr0[f38] = Close[i];
if ((f30 >= f38) && (f8 != f10))
f40 = 1; if ((f30 == f38)
&& (f40 == 0)) f38 = 0;
} if (f38 >= f48)
{ for
(varA=1; varA<=f48; varA++)
{ arr2[varA] = varA;
arr3[varA] = varA;
arr1[varA] =
arr0[varA]; }
for
(varA=1; varA<=(f48-1); varA++)
{ var24 = arr1[varA];
var12 = varA;
var6 = varA + 1;
for (var6=varA+1;
var6<=f48;
var6++)
{ if
(arr1[var6] < var24)
{
var24 = arr1[var6];
var12 =
var6;
} }
var20 = arr1[varA];
arr1[varA] = arr1[var12];
arr1[var12] = var20;
var20 = arr2[varA];
arr2[varA] = arr2[var12];
arr2[var12] =
var20; }
varA = 1;
while (f48 > varA)
{ var6 = varA + 1;
var14 = 1;
var1C = arr3[varA];
while (var14 != 0)
{ if (arr1[varA] !=
arr1[var6])
{ if
((var6 - varA) > 1)
{
var1C = var1C / (var6 - varA);
varE = varA;
for (varE=varA; varE<=(var6-1);
varE++)
arr3[varE] =
var1C;
}
var14 = 0;
} else
{
var1C = var1C + arr3[var6];
var6 = var6 + 1;
}
}
varA = var6;
}
var1C = 0;
for (varA=1; varA<=f48; varA++)
var1C = var1C + (arr3[varA] -
f20) * (arr2[varA] -
f20);
var18 = f18 *
var1C; } else
var18 = 0;
value = var18; if
(value == 0) value = 0.00001;
ExtMapBuffer1[i]=value; } //---- done
return(0);
} //+------------------------------------------------------------------+
Please note that this group is for discussion between users only.
To get support from AmiBroker please send an e-mail directly to
SUPPORT {at} amibroker.com
For other support material please check also:
http://www.amibroker.com/support.html
SPONSORED LINKS
YAHOO! GROUPS LINKS
|