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