Конвертация скрипта из MQL4 в MQL5

MQL5 Converting

Job finished

Execution time 4 days
Feedback from customer
Отличная работа

Specification

Добрый день! Нужно сконвертировать скрипт, написанный на MQL4, в MQL5. Скрипт выполняет следующий функционал:

  1. Пользовать самостоятельно ставит на графике 3 вертикальные линии, которые соответственно проходят каждая через свою свечу. На основании координат хаев этих свечей рассчитывается формула кривой (парабола), которая бы проходила через все три вершины.
  2. На графике строится кривая, по рассчитанной формуле. Исходит из крайнего левого хая (крайняя левая вертикальная линия), проходит последовательно через два остальных хая и строится дальше вправо.
  3. После удаления вертикальных линий, кривая остается на графике, привязанная к свечам, на базе которых была построена.
Длина кода на MQL4  - 150 строк, включая пробелы.



 #property copyright "ExpoMe"
 #property link      "http://www.metaquotes.net"

 #property indicator_chart_window
 #property indicator_buffers 1
 #property  indicator_color1 Blue
 #property  indicator_width1 2
 #property  indicator_style1 0
 double     Buffer1[];
 //+------------------------------------------------------------------+
 //| Объявляем внешние переменные                                     |
 //+------------------------------------------------------------------+
 datetime point_1;
 datetime point_2;
 datetime point_3;
 datetime LastBarTime;
 string line_name[10];
 int gg=1;
 int x1;
 int x2;
 int x3;
 int xx1; // В эту переменную сохраняется значение номера бара вершины перед прогоном при появлении нового бара.
 int xx2; // Если линии стоят, значит при поялвении нового бара номер бара вершины должен увеличиться на 1.
 int xx3; // Если этого не произошло и xx1=x1 после прогона, значит увеличиваем вручную.
 int max;
 int maxx;
 double y1;
 double y2;
 double y3;
 double y11;
 double y22;
 double y33;
 double x11;
 double x22;
 double x33;
 double y;
 double a1;
 double a2;
 double a3;

 //+------------------------------------------------------------------+
 //| Custom indicator initialization function                         |
 //+------------------------------------------------------------------+
 int init()
   {SetIndexBuffer(0,Buffer1);
   SetIndexStyle(0,DRAW_LINE);
 //---- indicators
 //----
    return(0);
   }
  
 int start()
   {
   // Пересчитываем инликатор только при появлении нового бара
   if(LastBarTime == iTime(Symbol(), 0, 0))
      return(0);
    LastBarTime = iTime(Symbol(), 0, 0);
   
   
 // Присваиваем значения переменных времени


 int obj_total=ObjectsTotal();

   for(int ii=0;ii<100;ii++)
     {string name = ObjectName(ii);
       if(ObjectType(name)!=OBJ_VLINE)
       continue;
       line_name[gg] = ObjectName(ii);
       gg=gg+1;
     
     }
    
   
    point_1=ObjectGet(line_name[1], OBJPROP_TIME1);
    point_2=ObjectGet(line_name[2], OBJPROP_TIME1);
    point_3=ObjectGet(line_name[3], OBJPROP_TIME1);
   
 // Запоминаем текущий номер бара вершины

 xx1=x1; 
    
 //Определяем номера баров ключевых точек
   for (int j=0;j<Bars; j++)
   { if (Time[j]==point_1) x1=j;}
  
  
   // Если после прогона сдвиг по вершине не произошел, значит линий нет, добавляем +1 вручную.
 if (x1==xx1) x1=x1+1;
  
  
 xx2=x2;
  
   for (int k=0;k<Bars; k++)
   {if (Time[k]==point_2) x2=k;  }
  
 if (x2==xx2) x2=x2+1;
  
 xx3=x3;

   for (int l=0;l<Bars; l++)
   {if (Time[l]==point_3) x3=l; }
  
 if (x3==xx3) x3=x3+1;

 // Comment ("n1=", j," n2=", k, " n3=", l);
 //Находим "высоту" вершин
   {
   y1=High[x1];
   y2=High[x2];
   y3=High[x3];
   //Comment ("y1=", y1," x1=", x1, " y2=", y2, "x2=", x2," y3=", y3, " x3=", x3);
   //Принимаем первую из них за начало координат
  
 a1=(y3-(x3*(y2-y1)+x2*y1-x1*y2)/(x2-x1))/(x3*(x3-x1-x2)+x1*x2);
 a2=((y2-y1)/(x2-x1))-a1*(x1+x2);
 a3=((x2*y1-x1*y2)/(x2-x1))+a1*x1*x2;

 max=MathMax(x1,x2);
 maxx=MathMax(max,x3);
  
  
   for (int i=maxx; i>=0; i--)
  
   { y=a1*i*i+a2*i+a3;
   Buffer1[i]=y;}
  

    return(0);
   }} 


Responded

1
Developer 1
Rating
(341)
Projects
588
36%
Arbitration
31
45% / 3%
Overdue
16
3%
Free
2
Developer 2
Rating
(564)
Projects
777
46%
Arbitration
23
39% / 13%
Overdue
63
8%
Working
3
Developer 3
Rating
(45)
Projects
105
30%
Arbitration
8
25% / 50%
Overdue
40
38%
Free
4
Developer 4
Rating
(42)
Projects
112
56%
Arbitration
2
50% / 0%
Overdue
3
3%
Free
5
Developer 5
Rating
(254)
Projects
573
36%
Arbitration
64
20% / 58%
Overdue
147
26%
Free
6
Developer 6
Rating
(156)
Projects
168
34%
Arbitration
4
25% / 25%
Overdue
3
2%
Working
7
Developer 7
Rating
(17)
Projects
41
12%
Arbitration
4
50% / 25%
Overdue
1
2%
Working
8
Developer 8
Rating
(359)
Projects
422
35%
Arbitration
2
100% / 0%
Overdue
0
Working

Project information

Budget
30+ USD
For the developer
27 USD
Deadline
to 3 day(s)