Please help translate Russian comments into English

 
//+------------------------------------------------------------------+
//|                                             SHI_Channel_true.mq4 |
//|                                 Copyright © 2004, Shurka & Kevin |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, Shurka & Kevin"
#property link      ""
//----
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
double ExtMapBuffer1[];
//---- input parameters
extern int AllBars = 240;
extern int BarsForFract = 0;
int    CurrentBar = 0;
double Step = 0;
int    B1 = -1, B2 = -1;
int    UpDown = 0;
double P1 = 0, P2 = 0, PP = 0;
int    i = 0, AB = 300, BFF = 0;
int    ishift = 0;
double iprice = 0;
datetime T1, T2;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0, DRAW_ARROW);
   SetIndexArrow(0, 164);
   SetIndexBuffer(0, ExtMapBuffer1);
   SetIndexEmptyValue(0, 0.0);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
      ObjectDelete("TL1");
      ObjectDelete("TL2");
      ObjectDelete("MIDL");
      Comment(" ");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DelObj()
  {
      ObjectDelete("TL1");
      ObjectDelete("TL2");
      ObjectDelete("MIDL");
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars = IndicatorCounted();
//---- 
      if((AllBars == 0) || (Bars < AllBars)) 
          AB = Bars; 
      else AB = AllBars; //AB-количество обсчитываемых баров
      if(BarsForFract > 0) 
             BFF = BarsForFract; 
      else
             switch (Period())
               {
                    case     1: BFF = 12; break;
                    case     5: BFF = 48; break;
                    case    15: BFF = 24; break;
                    case    30: BFF = 24; break;
                    case    60: BFF = 12; break;
                    case   240: BFF = 15; break;
                    case  1440: BFF = 10; break;
                    case 10080: BFF = 6;  break;
                    default: DelObj(); return(-1); break;
               }
   CurrentBar = 2; //считаем с третьего бара, чтобы фрактал "закрепился
   B1 = -1; 
   B2 = -1; 
   UpDown = 0;
   while(((B1 == -1) || (B2==-1)) && (CurrentBar<AB))
     {
             //UpDown = 1 значит первый фрактал найден сверху, UpDown = -1 значит первый фрактал
             //найден снизу, UpDown = 0 значит фрактал ещё не найден.
             //В1 и В2 - номера баров с фракталами, через них строим опорную линию.
             //Р1 и Р2 - соответственно цены через которые будем линию проводить
             if((UpDown < 1) && (CurrentBar == Lowest(Symbol(), Period(), MODE_LOW, BFF*2 + 1,
                CurrentBar - BFF))) 
               {
                    if(UpDown == 0) 
                      { 
                        UpDown = -1; 
                        B1 = CurrentBar; 
                        P1 = Low[B1]; 
                      }
                    else 
                      { 
                        B2 = CurrentBar; 
                        P2 = Low[B2];
                      }
               }
             if((UpDown > -1) && (CurrentBar == Highest(Symbol(), Period(), MODE_HIGH, BFF*2 + 1,
                CurrentBar - BFF))) 
               {
                    if(UpDown == 0) 
                      { 
                        UpDown = 1; 
                        B1 = CurrentBar; 
                        P1 = High[B1]; 
                      }
                    else 
                      { 
                        B2 = CurrentBar; 
                        P2 = High[B2]; 
                      }
               }
             CurrentBar++;
        }
      if((B1 == -1) || (B2 == -1)) 
        {
          DelObj(); 
          return(-1);
        } // Значит не нашли фракталов среди 300 баров 8-)
      Step = (P2 - P1) / (B2 - B1); //Вычислили шаг, если он положительный, то канал нисходящий
      P1 = P1 - B1*Step; 
      B1 = 0; //переставляем цену и первый бар к нулю
//А теперь опорную точку противоположной линии канала.
      ishift = 0; 
      iprice = 0;
      if(UpDown == 1)
        { 
             PP = Low[2] - 2*Step;
             for(i = 3; i <= B2; i++) 
               {
                    if(Low[i] < PP + Step*i) 
                        PP = Low[i] - i*Step; 
               }
             if(Low[0] < PP) 
               {
                 ishift = 0; 
                 iprice = PP;
               }
             if(Low[1] < PP + Step) 
               {
                 ishift = 1; 
                 iprice = PP + Step;
               }
             if(High[0] > P1) 
               {
                 ishift = 0; 
                 iprice = P1;
               }
             if(High[1] > P1 + Step) 
               {
                 ishift = 1; 
                 iprice = P1 + Step;
               }
        } 
      else
        { 
             PP = High[2] - 2*Step;
             for(i = 3; i <= B2; i++) 
               {
                    if(High[i] > PP + Step*i) 
                        PP = High[i] - i*Step;
               }
             if(Low[0] < P1) 
               {
                 ishift = 0; 
                 iprice = P1;
               }
             if(Low[1] < P1 + Step) 
               {
                 ishift = 1; 
                 iprice = P1 + Step;
               }
             if(High[0] > PP) 
               {
                 ishift = 0; 
                 iprice = PP;
               }
             if(High[1] > PP + Step) 
               {
                 ishift = 1; 
                 iprice = PP + Step;
               }
        }
//Теперь переставим конечную цену и бар на АВ, чтобы линии канала рисовались подлиннее
      P2 = P1 + AB*Step;
      T1 = Time[B1]; 
      T2 = Time[AB];
//Если не было пересечения канала, то 0, иначе ставим псису.
      if(iprice != 0) 
          ExtMapBuffer1[ishift] = iprice;
      DelObj();
      ObjectCreate("TL1", OBJ_TREND, 0, T2, PP + Step*AB, T1, PP); 
         ObjectSet("TL1", OBJPROP_COLOR, Lime); 
         ObjectSet("TL1", OBJPROP_WIDTH, 2); 
         ObjectSet("TL1", OBJPROP_STYLE, STYLE_SOLID); 
      ObjectCreate("TL2", OBJ_TREND, 0, T2, P2, T1, P1); 
         ObjectSet("TL2", OBJPROP_COLOR, Lime); 
         ObjectSet("TL2", OBJPROP_WIDTH, 2); 
         ObjectSet("TL2", OBJPROP_STYLE, STYLE_SOLID); 
      ObjectCreate("MIDL", OBJ_TREND, 0, T2, (P2 + PP + Step*AB) / 2, T1, (P1 + PP) / 2);
         ObjectSet("MIDL", OBJPROP_COLOR, Lime); 
         ObjectSet("MIDL", OBJPROP_WIDTH, 1); 
         ObjectSet("MIDL", OBJPROP_STYLE, STYLE_DOT);
         Comment(" Channel size = ", DoubleToStr(MathAbs(PP - P1) / Point, 0), " Slope = ", 
                 DoubleToStr(-Step / Point, 2));
//----
   return(0);
  }
//+------------------------------------------------------------------+
Thank you !
 
//+------------------------------------------------------------------+
//|                                             SHI_Channel_true.mq4 |
//|                                 Copyright © 2004, Shurka & Kevin |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, Shurka & Kevin"
#property link      ""
//----
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
double ExtMapBuffer1[];
//---- input parameters
extern int AllBars = 240;
extern int BarsForFract = 0;
int    CurrentBar = 0;
double Step = 0;
int    B1 = -1, B2 = -1;
int    UpDown = 0;
double P1 = 0, P2 = 0, PP = 0;
int    i = 0, AB = 300, BFF = 0;
int    ishift = 0;
double iprice = 0;
datetime T1, T2;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0, DRAW_ARROW);
   SetIndexArrow(0, 164);
   SetIndexBuffer(0, ExtMapBuffer1);
   SetIndexEmptyValue(0, 0.0);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
      ObjectDelete("TL1");
      ObjectDelete("TL2");
      ObjectDelete("MIDL");
      Comment(" ");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void DelObj()
  {
      ObjectDelete("TL1");
      ObjectDelete("TL2");
      ObjectDelete("MIDL");
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars = IndicatorCounted();
//---- 
      if((AllBars == 0) || (Bars < AllBars)) 
          AB = Bars; 
      else AB = AllBars; //AB-number cheat bars
      if(BarsForFract > 0) 
             BFF = BarsForFract; 
      else
             switch (Period())
               {
                    case     1: BFF = 12; break;
                    case     5: BFF = 48; break;
                    case    15: BFF = 24; break;
                    case    30: BFF = 24; break;
                    case    60: BFF = 12; break;
                    case   240: BFF = 15; break;
                    case  1440: BFF = 10; break;
                    case 10080: BFF = 6;  break;
                    default: DelObj(); return(-1); break;
               }
   CurrentBar = 2; //consider the third bar to the fractal "Lock"
   B1 = -1; 
   B2 = -1; 
   UpDown = 0;
   while(((B1 == -1) || (B2==-1)) && (CurrentBar<AB))
     {
             //UpDown = 1 then the first fractal discovered above, UpDown = -1 then the first fractal
             //found below, UpDown = 0 then the fractal is not found.
             //B1 and B2 - room bars with fractals, through them, build a support line.
             //P1 and P2 - respectively, the prices are going through the line of conduct
             if((UpDown < 1) && (CurrentBar == Lowest(Symbol(), Period(), MODE_LOW, BFF*2 + 1,
                CurrentBar - BFF))) 
               {
                    if(UpDown == 0) 
                      { 
                        UpDown = -1; 
                        B1 = CurrentBar; 
                        P1 = Low[B1]; 
                      }
                    else 
                      { 
                        B2 = CurrentBar; 
                        P2 = Low[B2];
                      }
               }
             if((UpDown > -1) && (CurrentBar == Highest(Symbol(), Period(), MODE_HIGH, BFF*2 + 1,
                CurrentBar - BFF))) 
               {
                    if(UpDown == 0) 
                      { 
                        UpDown = 1; 
                        B1 = CurrentBar; 
                        P1 = High[B1]; 
                      }
                    else 
                      { 
                        B2 = CurrentBar; 
                        P2 = High[B2]; 
                      }
               }
             CurrentBar++;
        }
      if((B1 == -1) || (B2 == -1)) 
        {
          DelObj(); 
          return(-1);
        } // Fractal mean not find the middle bars 300 8-)
      Step = (P2 - P1) / (B2 - B1); //Calculated step, if it is positive, then the channel downstream
      P1 = P1 - B1*Step; 
      B1 = 0; //swap the price and the first bar to zero
//And now the pivot point opposite edge of the channel.
      ishift = 0; 
      iprice = 0;
      if(UpDown == 1)
        { 
             PP = Low[2] - 2*Step;
             for(i = 3; i <= B2; i++) 
               {
                    if(Low[i] < PP + Step*i) 
                        PP = Low[i] - i*Step; 
               }
             if(Low[0] < PP) 
               {
                 ishift = 0; 
                 iprice = PP;
               }
             if(Low[1] < PP + Step) 
               {
                 ishift = 1; 
                 iprice = PP + Step;
               }
             if(High[0] > P1) 
               {
                 ishift = 0; 
                 iprice = P1;
               }
             if(High[1] > P1 + Step) 
               {
                 ishift = 1; 
                 iprice = P1 + Step;
               }
        } 
      else
        { 
             PP = High[2] - 2*Step;
             for(i = 3; i <= B2; i++) 
               {
                    if(High[i] > PP + Step*i) 
                        PP = High[i] - i*Step;
               }
             if(Low[0] < P1) 
               {
                 ishift = 0; 
                 iprice = P1;
               }
             if(Low[1] < P1 + Step) 
               {
                 ishift = 1; 
                 iprice = P1 + Step;
               }
             if(High[0] > PP) 
               {
                 ishift = 0; 
                 iprice = PP;
               }
             if(High[1] > PP + Step) 
               {
                 ishift = 1; 
                 iprice = PP + Step;
               }
        }
//Now permute the final price and bar on the AB to the line were drawn by the original canal
      P2 = P1 + AB*Step;
      T1 = Time[B1]; 
      T2 = Time[AB];
//If there was no crossing the channel, then 0, otherwise set iprice.
      if(iprice != 0) 
          ExtMapBuffer1[ishift] = iprice;
      DelObj();
      ObjectCreate("TL1", OBJ_TREND, 0, T2, PP + Step*AB, T1, PP); 
         ObjectSet("TL1", OBJPROP_COLOR, Lime); 
         ObjectSet("TL1", OBJPROP_WIDTH, 2); 
         ObjectSet("TL1", OBJPROP_STYLE, STYLE_SOLID); 
      ObjectCreate("TL2", OBJ_TREND, 0, T2, P2, T1, P1); 
         ObjectSet("TL2", OBJPROP_COLOR, Lime); 
         ObjectSet("TL2", OBJPROP_WIDTH, 2); 
         ObjectSet("TL2", OBJPROP_STYLE, STYLE_SOLID); 
      ObjectCreate("MIDL", OBJ_TREND, 0, T2, (P2 + PP + Step*AB) / 2, T1, (P1 + PP) / 2);
         ObjectSet("MIDL", OBJPROP_COLOR, Lime); 
         ObjectSet("MIDL", OBJPROP_WIDTH, 1); 
         ObjectSet("MIDL", OBJPROP_STYLE, STYLE_DOT);
         Comment(" Channel size = ", DoubleToStr(MathAbs(PP - P1) / Point, 0), " Slope = ", 
                 DoubleToStr(-Step / Point, 2));
//----
   return(0);
  }
//+------------------------------------------------------------------+
 

Thank you 1005phillip !

 

this is a real help for my despiration problem :(

many thanks for posting this codes! 

 
 

There is a plugin of Notepad++ that claims to be able to translate but it doesn't work on my Notepad++ even though the programmer answered my error messages and it seems that he is working on that issue - about a week mow.

Reason: