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

 
Ломаю себе голову,
Как можно перевести код с Метастока

L1:=ValueWhen(1,H>Ref(HHV(H,13),-1),L);
H1:=ValueWhen(1,L<Ref(LLV(L,13),-1),H);
L2:=If(Ref(L,-1)<L1,Ref(L,-1),If(Ref(L,-2)<L1,Ref(L,-2),If(Ref(L,-3)<L1, Ref(L,-3),
If(Ref(L,-4)<L1,Ref(L,-4),If(Ref(L,-5)<L1,Ref(L,-5),If(Ref(L, -6)<L1, Ref(L,-6),
If(Ref(L,-7)<L1,Ref(L,-7),If(Ref(L,-8)<L1,Ref(L,-8),If(Ref(L, -9)<L1, Ref(L,-9),
If(Ref(L,-10)<L1,Ref(L,-10),If(Ref(L,-11)<L1,Ref(L,-11),
If(Ref(L,-12)<L1,Ref(L,-12),Ref(L,-13)))))))))))));
H2:=If(Ref(H,-1)>H1,Ref(H,-1),If(Ref(H,-2)>H1,Ref(H,-2),If(Ref(H,-3)>H1, Ref(H,-3),
If(Ref(H,-4)>H1,Ref(H,-4),If(Ref(H,-5)>H1,Ref(H,-5),If(Ref(H, -6)>H1, Ref(H,-6),
If(Ref(H,-7)>H1,Ref(H,-7),If(Ref(H,-8)>H1,Ref(H,-8),If(Ref(H, -9)>H1, Ref(H,-9),
If(Ref(H,-10)>H1,Ref(H,-10),If(Ref(H,-11)>H1,Ref(H,-11),
If(Ref(H,-12)>H1,Ref(H,-12),Ref(H,-13)))))))))))));
L3:=If(Ref(L,-2)<L2,Ref(L,-2),If(Ref(L,-3)<L2,Ref(L,-3),If(Ref(L,-4)<L2, Ref(L,-4),
If(Ref(L,-5)<L2,Ref(L,-5),If(Ref(L,-6)<L2,Ref(L,-6),If(Ref(L, -7)<L2, Ref(L,-7),
If(Ref(L,-8)<L2,Ref(L,-8),If(Ref(L,-9)<L2,Ref(L,-9),If(Ref(L, -10)<L2, Ref(L,-10),
If(Ref(L,-11)<L2,Ref(L,-11),If(Ref(L,-12)<L2,Ref(L,-12),
If(Ref(L,-13)<L2,Ref(L,-13),Ref(L,-14)))))))))))));
H3:=If(Ref(H,-2)>H2,Ref(H,-2),If(Ref(H,-3)>H2,Ref(H,-3),If(Ref(H,-4)>H2, Ref(H,-4),
If(Ref(H,-5)>H2,Ref(H,-5),If(Ref(H,-6)>H2,Ref(H,-6),If(Ref(H, -7)>H2, Ref(H,-7),
If(Ref(H,-8)>H2,Ref(H,-8),If(Ref(H,-9)>H2,Ref(H,-9),If(Ref(H, -10)>H2, Ref(H,-10),
If(Ref(H,-11)>H2,Ref(H,-11),If(Ref(H,-12)>H2,Ref(H,-12),
If(Ref(H,-13)>H2,Ref(H,-13),Ref(H,-14)))))))))))));

Спасибо зарание, если кто поможет
 

Тут как раз используется функция ValueWhen, принципиально отличающая MQL4 от языка метасток. Влоб не переведешь. ValueWhen возвращает значение минимума бара в точке прорыва максимумом бара 13-и дневного максимума, вторая строчка - значение максимума в точке прорыва минимумом 13-ти дневного минимума. Дальше проще - Ref - это ссылка на бар с определенным сдвигом. Конструкция if: if(условие, возвращаемое значение если условие выполняется, если не выполняется)

 
Это разве не равнозначно ?

L1:=ValueWhen(1,H>Ref(HHV(H,13),-1),L); ........... Метасток

if(High[1] > ArrayMaximum(High[],13,1)
L1=Low[1]; . ..... ..... ..MQL4
 
wlad писал (а):
Это разве не равнозначно ?

L1:=ValueWhen(1,H>Ref(HHV(H,13),-1),L); ........... Метасток

if(High[1] > ArrayMaximum(High[],13,1)
L1=Low[1]; . ..... ..... ..MQL4

Напиши это в индикаторе для МТ и посмотри равнозначно или нет. По крайней мере одна ошибка есть.
 
Integer:
wlad:
Это разве не равнозначно ?

L1:=ValueWhen(1,H>Ref(HHV(H,13),-1),L); ........... Метасток

if(High[1] > ArrayMaximum(High[],13,1)
L1=Low[1]; . ..... ..... ..MQL4

Напиши это в индикаторе для МТ и посмотри равнозначно или нет. По крайней мере одна ошибка есть.
Где находитсья ошибка
 


Нужно High[0], если максимум ищется с первого бара, а то прорыва никогда не будет, и для поиска максимумов в ценах есть спец. функции Highest и Lowest

 
По коду Метастока я понял, что сравнение ведется с предыдущего бара
Как же мне грамотно перевести этот код от начала и до конца


 
С горем попалам перевол, ненужное выкинул
Остолось удалить ненужные сигналы
Что можно добавиь, чтобы сигнал не повторялсья
 

Судя по тому, что вместо кода представлена картинка, то для удаления стрелок следует воспользовать графическим редактором.

 
Integer:

Судя по тому, что вместо кода представлена картинка, то для удаления стрелок следует воспользовать графическим редактором.

Пардон, вот и код

//+------------------------------------------------------------------+
//|                                                          3Bn.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("3Bn");
   
   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);                   // Pfeiltyp 
   SetIndexDrawBegin(0,14);
   SetIndexLabel(0,"3BarNetLong");
   
   SetIndexStyle(1,DRAW_ARROW,EMPTY,1);
   SetIndexArrow(1,234);                   // Pfeiltyp 
   SetIndexDrawBegin(1,14);
   SetIndexLabel(1,"3BarNetShort");
   
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
   {
    
     int limit,i,j;
     int LLV,HHV,b;
     int counted_bars=IndicatorCounted();
  //---- последний посчитанный бар будет пересчитан
     if(counted_bars>0) counted_bars--;
     limit=Bars-counted_bars;
  //---- основной цикл
     for(b=limit; b>0; b--)
     {
      H2[b]=High[b+1];
      L2[b]=Low[b+1];
       
         //------------
     if(High[b+2]>H2[b])H3[b]=High[b+2];
    else if(High[b+3]>H2[b])H3[b]=High[b+3];
    else if(High[b+4]>H2[b])H3[b]=High[b+4];
    else if(High[b+5]>H2[b])H3[b]=High[b+5];
    else if(High[b+6]>H2[b])H3[b]=High[b+6];
    else if(High[b+7]>H2[b])H3[b]=High[b+7];
    else if(High[b+8]>H2[b])H3[b]=High[b+8];
    else if(High[b+9]>H2[b])H3[b]=High[b+9];
    else if(High[b+10]>H2[b])H3[b]=High[b+10];
    else if(High[b+11]>H2[b])H3[b]=High[b+11];
    else if(High[b+12]>H2[b])H3[b]=High[b+12];   
    else if(High[b+13]>H2[b])H3[b]=High[b+13];
    else H3[b]=High[b+14];     
    //---------------
    if(Low[b+2]<L2[b])L3[b]=Low[b+2];
    else if(Low[b+3]<L2[b])L3[b]=Low[b+3];
    else if(Low[b+4]<L2[b])L3[b]=Low[b+4];
    else if(Low[b+5]<L2[b])L3[b]=Low[b+5];
    else if(Low[b+6]<L2[b])L3[b]=Low[b+6];
    else if(Low[b+7]<L2[b])L3[b]=Low[b+7];
    else if(Low[b+8]<L2[b])L3[b]=Low[b+8];
    else if(Low[b+9]<L2[b])L3[b]=Low[b+9];
    else if(Low[b+10]<L2[b])L3[b]=Low[b+10];
    else if(Low[b+11]<L2[b])L3[b]=Low[b+11];
    else if(Low[b+12]<L2[b])L3[b]=Low[b+12];   
    else if(Low[b+13]<L2[b])L3[b]=Low[b+13];
    else L3[b]=Low[b+14]; 
        
     if(Close[b]>H3[b]) buy[b]=Low[b];
      else buy[b]=0;  
     
     if(Close[b]<L3[b]) sell[b]=High[b];
      else sell[b]=0; 
         
           
     } 
    //----------------------- 
 
   return(0);
  }
//+------------------------------------------------------------------+
 
//+------------------------------------------------------------------+
//|                                                          3Bn.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("3Bn");
   
   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);                   // Pfeiltyp 
   SetIndexDrawBegin(0,14);
   SetIndexLabel(0,"3BarNetLong");
   
   SetIndexStyle(1,DRAW_ARROW,EMPTY,1);
   SetIndexArrow(1,234);                   // Pfeiltyp 
   SetIndexDrawBegin(1,14);
   SetIndexLabel(1,"3BarNetShort");
   
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
   {
     static int lt;
     int limit,i,j;
     int LLV,HHV,b;
     int counted_bars=IndicatorCounted();
  //---- последний посчитанный бар будет пересчитан
     if(counted_bars>0) counted_bars--;
     limit=Bars-counted_bars;
  //---- основной цикл
     for(b=limit; b>0; b--)
     {
      H2[b]=High[b+1];
      L2[b]=Low[b+1];
       
         //------------
     if(High[b+2]>H2[b])H3[b]=High[b+2];
    else if(High[b+3]>H2[b])H3[b]=High[b+3];
    else if(High[b+4]>H2[b])H3[b]=High[b+4];
    else if(High[b+5]>H2[b])H3[b]=High[b+5];
    else if(High[b+6]>H2[b])H3[b]=High[b+6];
    else if(High[b+7]>H2[b])H3[b]=High[b+7];
    else if(High[b+8]>H2[b])H3[b]=High[b+8];
    else if(High[b+9]>H2[b])H3[b]=High[b+9];
    else if(High[b+10]>H2[b])H3[b]=High[b+10];
    else if(High[b+11]>H2[b])H3[b]=High[b+11];
    else if(High[b+12]>H2[b])H3[b]=High[b+12];   
    else if(High[b+13]>H2[b])H3[b]=High[b+13];
    else H3[b]=High[b+14];     
    //---------------
    if(Low[b+2]<L2[b])L3[b]=Low[b+2];
    else if(Low[b+3]<L2[b])L3[b]=Low[b+3];
    else if(Low[b+4]<L2[b])L3[b]=Low[b+4];
    else if(Low[b+5]<L2[b])L3[b]=Low[b+5];
    else if(Low[b+6]<L2[b])L3[b]=Low[b+6];
    else if(Low[b+7]<L2[b])L3[b]=Low[b+7];
    else if(Low[b+8]<L2[b])L3[b]=Low[b+8];
    else if(Low[b+9]<L2[b])L3[b]=Low[b+9];
    else if(Low[b+10]<L2[b])L3[b]=Low[b+10];
    else if(Low[b+11]<L2[b])L3[b]=Low[b+11];
    else if(Low[b+12]<L2[b])L3[b]=Low[b+12];   
    else if(Low[b+13]<L2[b])L3[b]=Low[b+13];
    else L3[b]=Low[b+14]; 
        
        buy[b]=0;  
        sell[b]=0; 
        
     if(Close[b]>H3[b] && lt!=1){
      buy[b]=Low[b];
      lt=1;
     }
     
     if(Close[b]<L3[b] && lt!=2){
      sell[b]=High[b];
      lt=2;
     }
         
           
     } 
    //----------------------- 
 
   return(0);
  }
//+------------------------------------------------------------------+
Причина обращения: