[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [amibroker] Anyone up to porting this MT4 indicator to AB?



PureBytes Links

Trading Reference Links

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
Here's a link to a pic of how the code looks in MT4 http://img114.imageshack.us/my.php?image=tpo0bg.jpg 
 
Changing "i--" to "i++" flips it around & upside down.

_SECTION_BEGIN("J_TPO");

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 -----
From: Steve
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
Investment management software Real estate investment software Investment property software
Software support Real estate investment analysis software Investment software


YAHOO! GROUPS LINKS