----- Original Message -----
Sent: Sunday, October 16, 2005 4:58
PM
Subject: Re: [amibroker] Anyone up to
porting this MT4 indicator to AB?
Can someone look at this code and see where I've
gone amiss. Either I have a flatline after indicator is drawn when using "i--"
or before indicator is drawn but upside down & reversed if using "i++". If
you plot in AB you'll see what I mean
Changing "i--" to "i++" flips it around &
upside down.
f0 =0; f8 = 0; f10= 0; f18 =0; f20=0; f28=0; f30=0; f40=0; k=0;
var14 =0; var18=0; var1C=0; var20=0; var24=0; value = 0;
f38 =0; f48=0; var6=0; var12=0; varA=0; varE=0;
arr0[0]=0 ;
arr1[0]=0 ; arr2[0]=0; arr3[0]=0;
Len = 10;//Param("Len",1,5,30,1);
for( i=
BarCount -100-len
; i>=0
AND i < BarCount ; 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;
}
Plot(EXtMapbuffer1,"J_TPO",colorRed,styleLine);
PlotGrid
(0.85);
PlotGrid
(-0.85);
_SECTION_END
();
----- Original Message -----
Sent: Sunday, October 16, 2005 12:19
AM
Subject: [amibroker] Anyone up to
porting this MT4 indicator to AB?
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);
}
//+------------------------------------------------------------------+