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);
} //+------------------------------------------------------------------+
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
|