//+-----------------------------------------------------------------------------------------------+ //| HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH | //| HH \ \ САМЫЙ КРУТОЙ ТОРГОВЫЙ РОБОТ / / HH | //| HH )----)-------------------------------------------------------------------------(----( HH | //| HH / / Жалобы и предлодения отправляйте на: sheverdinpavel@mail.ru \ \ HH | //| HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH | //+-----------------------------------------------------------------------------------------------+ //------------------------------------------------------------------------------------------------+ // ГЛОБАЛЬНЫЕ И ВНЕШНИЕ ПЕРЕМЕННЫЕ | //------------------------------------------------------------------------------------------------+ extern bool Kapital =false; //Выключатель управления капиталом extern int Risk =5, //Процент риска на сделку P_ATR =21; //Период ATR extern double Profit =0.0015; //------------------------------------------------------------------------------------------------+ int DAY0, DAY1, DAY2, DAY3, DAY4, DAY5, order_id_0, order_id_1, order_id_2, order_id_3, order_id_4, order_id_5; double Stop_min, //Разрешенный уровень стопов Pips, AL, AH, EL, EH, UL, UH; datetime Tm_O; //Время открытия текущей позиции //------------------------------------------------------------------------------------------------+ int init(){ Pips=MarketInfo(Symbol(),17); if(!IsTesting() && IsExpertEnabled()) Alert("Советник успешно установлен."); if(!IsTesting() && !IsExpertEnabled()) Alert("Внимание! отжата кнопка на вкладке советники!"); if(IsTesting()) Print("НАЧАЛО НОВОГО ТЕСТИРОВАНИЯ."); return;} //------------------------------------------------------------------------------------------------+ int deinit(){ if(!IsTesting()) Alert("Советник завершил работу."); if(IsTesting()) Print("ТЕСТИРОВАНИЕ ЗАВЕРШЕНО."); return;} //------------------------------------------------------------------------------------------------+ //HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH //HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH int start(){ Stop_min=MathPow(10,-Digits) * MarketInfo(Symbol(),14); //------------------------------------------------------------------------------------------------+ if(TimeHour(Time[0]) == 10 && !(DAY0 == Day())){ AL=MathMin( MathMin(MathMin(Low [1],Low [2]),MathMin(Low [3],Low [4])), MathMin(MathMin(Low [5],Low [6]),MathMin(Low [7],Low [8]))); OrderDelete(order_id_0); order_id_0=OrderSend(Symbol(),OP_SELLSTOP,Lots(SL_S(AL-Pips),AL-Pips),AL-Pips,3,SL_S(AL-Pips),TP_S(AL-Pips),NULL,0,0,Red ); DAY0 = Day(); } //------------------------------------------------------------------------------------------------+ if(TimeHour(Time[0]) == 10 && !(DAY1 == Day())){ AH=MathMax( MathMax(MathMax(High[1],High[2]),MathMax(High[3],High[4])), MathMax(MathMax(High[5],High[6]),MathMax(High[7],High[8]))); OrderDelete(order_id_1); order_id_1=OrderSend(Symbol(),OP_BUYSTOP ,Lots(SL_B(AH+Pips),AH+Pips),AH+Pips,3,SL_B(AH+Pips),TP_B(AH+Pips),NULL,0,0,Green); DAY1 = Day(); } //------------------------------------------------------------------------------------------------+ if(TimeHour(Time[0]) == 16 && !(DAY2 == Day())){ EL=MathMin( MathMin(MathMin(Low [1],Low [2]),MathMin(Low [3],Low [4])), MathMin(MathMin(Low [5],Low [6]),MathMin(Low [7],Low [8]))); OrderDelete(order_id_2); order_id_2=OrderSend(Symbol(),OP_SELLSTOP,Lots(SL_S(EL-Pips),EL-Pips),EL-Pips,3,SL_S(EL-Pips),TP_S(EL-Pips),NULL,0,0,Red ); DAY2 = Day(); } //------------------------------------------------------------------------------------------------+ if(TimeHour(Time[0]) == 16 && !(DAY3 == Day())){ EH=MathMax( MathMax(MathMax(High[1],High[2]),MathMax(High[3],High[4])), MathMax(MathMax(High[5],High[6]),MathMax(High[7],High[8]))); OrderDelete(order_id_3); order_id_3=OrderSend(Symbol(),OP_BUYSTOP ,Lots(SL_B(EH+Pips),EH+Pips),EH+Pips,3,SL_B(EH+Pips),TP_B(EH+Pips),NULL,0,0,Green); DAY3 = Day(); } //------------------------------------------------------------------------------------------------+ if(TimeHour(Time[0]) == 23 && !(DAY4 == Day())){ UL=MathMin( MathMin(MathMin(Low [1],Low [2]),MathMin(Low [3],Low [4])), MathMin(MathMin(Low [5],Low [6]),MathMin(Low [7],Low [8]))); OrderDelete(order_id_0); order_id_0=OrderSend(Symbol(),OP_SELLSTOP,Lots(SL_S(UL-Pips),UL-Pips),UL-Pips,3,SL_S(UL-Pips),TP_S(UL-Pips),NULL,0,0,Red ); DAY4 = Day(); } //------------------------------------------------------------------------------------------------+ if(TimeHour(Time[0]) == 23 && !(DAY5 == Day())){ UH=MathMax( MathMax(MathMax(High[1],High[2]),MathMax(High[3],High[4])), MathMax(MathMax(High[5],High[6]),MathMax(High[7],High[8]))); OrderDelete(order_id_1); order_id_1=OrderSend(Symbol(),OP_BUYSTOP ,Lots(SL_B(UH+Pips),UH+Pips),UH+Pips,3,SL_B(UH+Pips),TP_B(UH+Pips),NULL,0,0,Green); DAY5 = Day(); } //------------------------------------------------------------------------------------------------+ return;} //HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH //HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH //------------------------------------------------------------------------------------------------+ // ФУНКЦИИ РАСЧЕТА ТОРГОВЫХ УРОВНЕЙ | //------------------------------------------------------------------------------------------------+ double SL_B(double P){ double A=P-4*iATR(NULL,0,P_ATR,1); double B=P-Stop_min; if(A > B) return(B); else return(A);} //------------------------------------------------------------------------------------------------+ double SL_S(double P){ double A=P+4*iATR(NULL,0,P_ATR,1); double B=P+Stop_min; if(A < B) return(B); else return(A);} //------------------------------------------------------------------------------------------------+ double TP_B(double P){ double A=P+Profit; return(A);} //------------------------------------------------------------------------------------------------+ double TP_S(double P){ double A=P-Profit; return(A);} //------------------------------------------------------------------------------------------------+ // ФУНКЦИЯ РАСЧЕТА РАЗМЕРА ПОЗИЦИИ | //------------------------------------------------------------------------------------------------+ double Lots(double sl, double pr){ double A; if(Kapital) A=MarketInfo(Symbol(),24)*MathCeil( (MarketInfo(Symbol(),17)*AccountBalance()*Risk)/ (MarketInfo(Symbol(),16)*MarketInfo(Symbol(),24)*MathAbs(sl-pr)*100)); else A=0.05; if(A < MarketInfo(Symbol(),23)) Alert("Слишком маленький лот. Lots = ",A); return(A);} //------------------------------------------------------------------------------------------------+ // ФУНКЦИЯ ОБРАБОТКИ ОШИБОК | //------------------------------------------------------------------------------------------------+ /*int ERROR(){ int error = GetLastError(); switch(error){ case 2: Alert("Общая ошибка."); break; case 4: Alert("Торговый сервер занят. Пробуем ещё раз.."); Sleep(3000); break; case 64: Alert("Счет заблокирован."); break; case 133: Alert("Торговля запрещена"); break; case 137: Alert("Брокер занят. Пробуем ещё раз.."); Sleep(3000); break; case 139: Alert("Ордер заблокирован и уже обрабатывается"); break; case 145: Alert("Модификация запрещена. ","Ордер слишком близок к рынку"); break; case 146: Alert("Подсистема торговли занята. Пробуем ещё..");Sleep(500); break; default: Alert("Возникла ошибка №",error);} return;}*/ // +---------------------------------------------+ // | HHHHHH HH HH HHHHH HHHHH HH HH HHHH | // | H HH H HH HH HH HH HHH HH HH HH | // | HH HHHHHH HHHHH HHHHH HH H HH HH HH | // | HH HH HH HH HH HH HHH HH HH | // | HH HH HH HHHHH HHHHH HH HH HHHH | // +---------------------------------------------+