MQL4 - automated forex trading   /  

Forum

Please help translate Russian comments into English

Back to topics list To post a new topic, please log in or register

avatar
108
OldZ 2010.05.26 11:04 
//+------------------------------------------------------------------+
//|                                             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 !
Secrets of MetaTrader 4 Client Terminal: File Library in MetaEditor

Secrets of MetaTrader 4 Client Terminal: File Library in MetaEditor

When creating custom programs, code editor is of great importance. The more functions are available in the editor, the faster and more convenient is creation of the program. Many programs are created on basis of an already existing code. Do you use an indicator or a script that does not fully suit your purposes? Download the code of this program from our website and customize it for yourselves.


avatar
716
1005phillip 2010.05.26 16:00 
//+------------------------------------------------------------------+
//|                                             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);
  }
//+------------------------------------------------------------------+

avatar
108
OldZ 2010.05.26 18:47 

Thank you 1005phillip !

Back to topics list  

To add comments, please log in or register