Как можно перевести код с Метастока ? - страница 2

 
Благодарю
 
wlad писал (а):
...
Как можно перевести код с Метастока
...
Простите - автор известен? Я б его немного покрутил (например не только вход, но и выход, и может чуть огрубить, чтоб отсеять одновременность вверх-вниз в некоторых случаях, если получится), а без ссылки на автора неудобно, как будто воруешь :).
 
Это верно, автор Бирович
здесь ссылка стр.23
http://www.activetradermag.com/pdf/May2002.pdf

Я б его немного покрутил....

Как накрутишь скажи... :)
 
Что то здесь всё таки не то. Это при текущем графике




А при перерасчете получается вот што




Где собака зарыта ?
 
Алгооритм индикатора "обеспечивает" перерисовку индикатора. Для красоты наверно...
 
Дело в том, что пробой уровня определется по цене Close. Используй сравнение с High и Low, но это тоже не гарантия корректной работы в случае если на одном баре и High и Low пробивают уровни.
 
Вот переписал индикатор
теперь сигналы поступают без ошибок,
так как перевёл в этот раз полностью код из метастока ( до этого много упустил и выкинул)
Осталась самая главная проблема - индикатор не рисует с поступлением новых котировок
кто бы мог ещё подсказать





а вот и код

//+------------------------------------------------------------------+
//|                                                   wg-3BarNet.mq4 |
//|                                                               wg |
//|                                                                  |
//+------------------------------------------------------------------+
 
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Green   
#property indicator_color2 Red
 
//---- buffers
double buy[];
double sell[];
double H1[];
double H2[];                    
double H3[];  
double L1[];
double L2[];                    
double L3[];  
 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   IndicatorBuffers(8);
   IndicatorShortName("3BarNet");
   
   SetIndexBuffer(0,buy);
   SetIndexBuffer(1,sell);
   SetIndexBuffer(2,H1);   
   SetIndexBuffer(3,H2);
   SetIndexBuffer(4,H3);
   SetIndexBuffer(5,L1);
   SetIndexBuffer(6,L2);
   SetIndexBuffer(7,L3);
    
   
   SetIndexStyle(0,DRAW_ARROW,EMPTY,1);
   SetIndexArrow(0,233);                   // стрелка вверх
   SetIndexDrawBegin(0,14);
   SetIndexLabel(0,"3BarNetLong");
   
   SetIndexStyle(1,DRAW_ARROW,EMPTY,1);
   SetIndexArrow(1,234);                   // стрелка вниз
   SetIndexDrawBegin(1,14);
   SetIndexLabel(1,"3BarNetShort");
   
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   static double H1_prev, L1_prev;
   static int direction=0;        // 1 up, 2 down
   
     int LLV,HHV;  // индекс наименьшего, наибольшего элемента
     int counted_bars=IndicatorCounted();
  //---- последний посчитанный бар будет пересчитан
     if(counted_bars>0) counted_bars--;
     int limit=Bars-counted_bars;
  //---- основной цикл
  for(int b=limit; b>=0; b--)
  {
    //-------H1 ------------
      LLV=iLowest(NULL,0,MODE_LOW,13,b+1);     // 
       if(Low[b]<Low[LLV]) 
        {
         H1[b]=High[b];
         H1_prev=High[b];
        } 
        else H1[b]=H1_prev;   
 
    //-------L1 ------------
      HHV=iHighest(NULL,0,MODE_HIGH,13,b+1);     // 
       if(High[b]>High[HHV]) 
        {
         L1[b]=Low[b];
         L1_prev=Low[b];
        } 
        else L1[b]=L1_prev;
        
    //-------- H2 -----------------      
     for(int e=1; e<=12; e++)
      {
       if(High[b+e]>H1[b])
        {
         H2[b]=High[b+e];
         break;
        }
        else 
         {
          if(e!=12)continue; 
          else H2[b]=High[b+13];
         }  
      }        
        
    //-------- L2 -----------------      
     for(int c=1; c<=12; c++)
      {
       if(Low[b+c]<L1[b])
        {
         L2[b]=Low[b+c];
         break;
        }
        else 
         {
          if(c!=12)continue; 
          else L2[b]=Low[b+13];
         }  
      }
      
     //-------- H3 ----------
      for(int f=2; f<=13; f++)
      {
       if(High[b+f]>H2[b])
        {
         H3[b]=High[b+f];
         break;
        }
        else 
         {
          if(f!=13)continue; 
          else H3[b]=High[b+14];
         }  
      }      
      
     //-------- L3 ----------
      for(int d=2; d<=13; d++)
      {
       if(Low[b+d]<L2[b])
        {
         L3[b]=Low[b+d];
         break;
        }
        else 
         {
          if(d!=13)continue; 
          else L3[b]=Low[b+14];
         }  
      }
     //-------  -----------
     if(Close[b]>H3[b]&& direction !=1) {buy[b]=Low[b];   direction=1;} else  buy[b]=0.0;
     if(Close[b]<L3[b]&& direction !=2) {sell[b]=High[b]; direction=2;} else sell[b]=0.0;
     
     }  
     
    
   return(0);
  }
//+------------------------------------------------------------------+

буду очень благодарен
Причина обращения: