工作已完成
执行时间4 天
客户反馈
Отличная работа
指定
Добрый день! Нужно сконвертировать скрипт, написанный на MQL4, в MQL5. Скрипт выполняет следующий функционал:
- Пользовать самостоятельно ставит на графике 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); }}
反馈
1
等级
项目
588
36%
仲裁
31
45%
/
3%
逾期
16
3%
空闲
2
等级
项目
777
46%
仲裁
23
39%
/
13%
逾期
63
8%
工作中
3
等级
项目
105
30%
仲裁
8
25%
/
50%
逾期
40
38%
空闲
4
等级
项目
112
56%
仲裁
2
50%
/
0%
逾期
3
3%
空闲
5
等级
项目
573
36%
仲裁
64
20%
/
58%
逾期
147
26%
空闲
6
等级
项目
168
34%
仲裁
4
25%
/
25%
逾期
3
2%
工作中
7
等级
项目
41
12%
仲裁
4
50%
/
25%
逾期
1
2%
工作中
8
等级
项目
422
35%
仲裁
2
100%
/
0%
逾期
0
工作中
项目信息
预算
30+ USD
开发人员
27
USD
截止日期
到 3 天