я решил написать саветник каторый рисует канал линию патдержки с сапротивления по точкам . Написал условие поиска верхней точки и нижней точки саздал 4 точки назвал их а,b,c,d у меня награфике он находит 3 точки и рисует паралельную линию канала .Подскажите пажалусто какую фунуцию использовать штобы найти когда точка 4 касается цены линии канала, линии потдержки или сапротивления последняя точка 4 служит для падтверждения што это паралельный канал васходящий или несходящий. Памогите как это правильно написать и какие функции использовать.
- Обсуждение
- Нужен скрип или маленькая програма ЗАПЛАЧУ!!!
- Помощь в кодировании
//+------------------------------------------------------------------+ //| построения каналов.mq4 | //| Copyright 2014, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2014, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict double V,Bar1,Bar2; int I,k; int Bar,Bar_2; double A, B, C, D; datetime TA,TB,TC,TD; int Новый_Канал; int Тип_Канала; //+------------------------------------------------------------------+ //| Мои функции | //+------------------------------------------------------------------+ double PT(int Br){ // Поиск точки double B1,B2; double Точка; Точка = 0; I = Br; while (I!=0){ Bar1 = High[I]; Bar2 = High[I+1]; if (Bar1 < Bar2) {Точка = Bar2; Bar = I+1;} B1 = High[I+2]; B2 = High[I+3]; if (B1>=B2 && B1<Точка) break; I = I + 1; } return(Точка); } double PNT(int Br){ double B1,B2; double Точка; Точка = 0; I = Br; while (I!=0){ Bar1 = Low[I]; Bar2 = Low[I+1]; if (Bar1 > Bar2) {Точка = Bar2; Bar = I+1;} B1 = Low[I+2]; B2 = Low[I+3]; if (B1<=B2 && B1>Точка) break; I = I + 1; } return(Точка); } double Диапозон_Канала(double Число_1,double Число_2){ double Результат = 0; // основной код Результат = Число_1-Число_2; //--- return(Результат);} //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- Зачистка --- ObjectDelete("Точка_A"); ObjectDelete("Точка_B"); ObjectDelete("Точка_C"); ObjectDelete("Точка_D"); ObjectDelete("K2"); ObjectDelete("восходящий канал"); ObjectDelete("нисходящий канал"); ObjectDelete("Тренд"); ObjectDelete("Тренд2"); //--- Выбор канала --- double Точка_А = PT(1); datetime Время_А = Time[Bar]; double Точка_Б = PNT(1); datetime Время_Б = Time[Bar]; if(Время_А > Время_Б) Новый_Канал = 1; if(Время_А < Время_Б) Новый_Канал = 2; //--- Две верхние точки и одна нижняя if (Новый_Канал == 1){ A = PT(1); TA = Time[Bar]; ObjectCreate("Точка_A",OBJ_ARROW_DOWN,0,TA,A); B = PNT(Bar); TB = Time[Bar]; ObjectCreate("Точка_B",OBJ_ARROW_DOWN,0,TB,B); C = PT(Bar); TC = Time[Bar]; ObjectCreate("Точка_C",OBJ_ARROW_DOWN,0,TC,C); D = PNT(Bar); TD = Time[Bar]; ObjectCreate("Точка_D",OBJ_ARROW_DOWN,0,TD,D); } //--- Две верхние точки и одна нижняя if (Новый_Канал == 2){ A = PNT(1); TA = Time[Bar]; ObjectCreate("Точка_A",OBJ_ARROW_DOWN,0,TA,A); B = PT(Bar); TB = Time[Bar]; ObjectCreate("Точка_B",OBJ_ARROW_DOWN,0,TB,B); C = PNT(Bar); TC = Time[Bar]; ObjectCreate("Точка_C",OBJ_ARROW_DOWN,0,TC,C); D = PT(Bar); TD = Time[Bar]; ObjectCreate("Точка_D",OBJ_ARROW_DOWN,0,TD,D); } if(A!=0 || B!=0 || C!=0){ //-- Линия тренда --- ObjectCreate(0,"Тренд",OBJ_CHANNEL,0,TC,C,TA,A,TB,B); // приоритет на нажатие мышью ObjectSet("Тренд",OBJPROP_RAY,False); ObjectSet("Тренд",OBJPROP_WIDTH,1); ObjectSet("Тренд",OBJPROP_FILL,true); ObjectSet("Тренд",OBJPROP_RAY_RIGHT,True); ObjectSetInteger(0,"Тренд",OBJPROP_COLOR,clrRed); //--- //--- Старый канал синий ObjectCreate(0,"Тренд2",OBJ_CHANNEL,0,TD,D,TB,B,TC,C); // приоритет на нажатие мышью ObjectSet("Тренд2",OBJPROP_RAY,False); ObjectSet("Тренд2",OBJPROP_WIDTH,1); ObjectSet("Тренд2",OBJPROP_FILL,true); ObjectSet("Тренд2",OBJPROP_RAY_RIGHT,True); ObjectSetInteger(0,"Тренд2",OBJPROP_COLOR,clrBlue); //--- if(C>B) V = Диапозон_Канала(C,B); if(C<B) V = Диапозон_Канала(B,C); V = NormalizeDouble(V,5)*100000; if (V >= 150){Comment("Ширина канала = ",V);} if (V < 150){Comment("Ширина канала = ",V);} //--- // if(A == B) { Найти пересечение линии канала с ценой в интернете и поставить в условие if( A<C ){ if( B>C || B<C){ Тип_Канала = 1; ObjectCreate("нисходящий канал",OBJ_LABEL,0,0,0); ObjectSetInteger(0,"нисходящий канал",OBJPROP_FONTSIZE,24); ObjectSetString(0,"нисходящий канал",OBJPROP_TEXT,"Нисходящий канал"); ObjectSetInteger(0,"нисходящий канал",OBJPROP_XDISTANCE,20); ObjectSetInteger(0,"нисходящий канал",OBJPROP_YDISTANCE,30); ObjectSetInteger(0,"нисходящий канал",OBJPROP_COLOR,clrRed); Sleep(500); ObjectSetInteger(0,"нисходящий канал",OBJPROP_COLOR,clrMediumBlue); Sleep(500); }} // } //--- // if(A == B) { if( A>C ){ if( B>C || B<C ){ Тип_Канала = 2; ObjectCreate("восходящий канал",OBJ_LABEL,0,0,0); ObjectSetInteger(0,"восходящий канал",OBJPROP_FONTSIZE,24); ObjectSetString(0,"восходящий канал",OBJPROP_TEXT,"Восходящий канал"); ObjectSetInteger(0,"восходящий канал",OBJPROP_XDISTANCE,20); ObjectSetInteger(0,"восходящий канал",OBJPROP_YDISTANCE,30); ObjectSetInteger(0,"восходящий канал",OBJPROP_COLOR,clrRed); Sleep(500); ObjectSetInteger(0,"восходящий канал",OBJPROP_COLOR,clrMediumBlue); Sleep(500); }} // } } else { ObjectCreate("K2",OBJ_LABEL,0,0,0); ObjectSetInteger(0,"K2",OBJPROP_FONTSIZE,24); ObjectSetString(0,"K2",OBJPROP_TEXT,"КАНАЛ НЕВОЗМОЖНО ПОСТРОИТЬ НЕХВАТАЕТ ОДНОЙ ИЗ ТОЧЕК"); ObjectSetInteger(0,"K2",OBJPROP_XDISTANCE,20); ObjectSetInteger(0,"K2",OBJPROP_YDISTANCE,30); ObjectSetInteger(0,"K2",OBJPROP_COLOR,clrRed);} /*Comment("D = ",D,"\n", "C = ",C,"\n", "B = ",B,"\n", "A = ",A); */ //--- }
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь