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

MQL5 In conversione

Lavoro terminato

Tempo di esecuzione 4 giorni
Feedback del cliente
Отличная работа

Specifiche

Добрый день! Нужно сконвертировать скрипт, написанный на 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);
   }} 


Con risposta

1
Sviluppatore 1
Valutazioni
(341)
Progetti
588
36%
Arbitraggio
31
45% / 3%
In ritardo
16
3%
Gratuito
2
Sviluppatore 2
Valutazioni
(564)
Progetti
777
46%
Arbitraggio
23
39% / 13%
In ritardo
63
8%
In elaborazione
3
Sviluppatore 3
Valutazioni
(45)
Progetti
105
30%
Arbitraggio
8
25% / 50%
In ritardo
40
38%
Gratuito
4
Sviluppatore 4
Valutazioni
(42)
Progetti
112
56%
Arbitraggio
2
50% / 0%
In ritardo
3
3%
Gratuito
5
Sviluppatore 5
Valutazioni
(254)
Progetti
573
36%
Arbitraggio
64
20% / 58%
In ritardo
147
26%
Gratuito
6
Sviluppatore 6
Valutazioni
(156)
Progetti
168
34%
Arbitraggio
4
25% / 25%
In ritardo
3
2%
In elaborazione
7
Sviluppatore 7
Valutazioni
(17)
Progetti
41
12%
Arbitraggio
4
50% / 25%
In ritardo
1
2%
In elaborazione
8
Sviluppatore 8
Valutazioni
(359)
Progetti
422
35%
Arbitraggio
2
100% / 0%
In ritardo
0
In elaborazione

Informazioni sul progetto

Budget
30+ USD
Per lo sviluppatore
27 USD
Scadenze
a 3 giorno(i)