//+-----------------------------------------------------------------+ //| JS-MA-Day.mq4 | //+-----------------------------------------------------------------+ //| HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH | //| H\ \ http://wsforex.ru/ / / H | //| H )----)----------------------------------------------(----( H | //| H/ / Пишу торговые системы на заказ: wsforex.ru \ \ H | //| HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH | //+-----------------------------------------------------------------+ #property copyright "wsforex@list.ru" #property link "http://wsforex.ru/" //+-----------------------------------------------------------------+ //| Разработка : Сергей.Ж - мой сайт - "http://wsforex.ru/" | //+-----------------------------------------------------------------+ extern int CloseHour = 23; extern int MA.Period = 27; extern int TakeProfit = 0; // Если TakeProfit=0 то он не устанавливается: extern int StopLoss = 860; // Если StopLoss=0 то он ставится по МА extern int Slippage = 10; // Проскальзывание цены: extern int NumberOfTry = 5; // Количество торговых попыток открытия ордера: extern bool MM = false; // MM Управление капиталом если ММ=False то лот стандартный extern double MaxRisk = 3.3; // Риск в процентах от свободных средств extern double Lots = 0.01; extern int MagicNumber = 7773777; //+-----------------------------------------------------------------+ //| Разработка : Сергей.Ж - мой сайт - "http://wsforex.ru/" | //+-----------------------------------------------------------------+ extern bool UseSound = True; extern bool ShowComment = True; extern string NameFileSound = "expert.wav"; // Звук Открытия позиции extern string SoundSuccess = "expert.wav"; // Звук Стопа extern string SoundError = "timeout.wav"; // Звук Ошибки //+-----------------------------------------------------------------+ //| Разработка : Сергей.Ж - мой сайт - "http://wsforex.ru/" | //+-----------------------------------------------------------------+ extern bool Ea.Disabled = False; extern color clOpenBuy = LightBlue; // Цвет значка открытия покупки extern color clOpenSell = LightCoral; // Цвет значка открытия продажи extern color clCloseBuy = Blue; // Цвет значка закрытия покупки extern color clCloseSell = Red; // Цвет значка закрытия продажи //+-----------------------------------------------------------------+ //| Разработка : Сергей.Ж - мой сайт - "http://wsforex.ru/" | //+-----------------------------------------------------------------+ int init() { //---- if (!IsTesting()) { if (IsExpertEnabled()) Comment("\nСоветник установлен и будет запущен следующим тиком"); else Comment("\nВнимание! отжата кнопка на вкладке советники"); } //---- return(0); } //+-----------------------------------------------------------------+ //| Разработка : Сергей.Ж - мой сайт - "http://wsforex.ru/" | //+-----------------------------------------------------------------+ string Dayof(){ string dd; switch(DayOfWeek()){ case 1: dd="Понедельник"; break; case 2: dd="Вторник"; break; case 3: dd="Среда"; break; case 4: dd="Четверг"; break; case 5: dd="Пятница"; break; case 6: dd="Суббота"; break; case 7: dd="Воскресенье"; break; } return(dd); } //+-----------------------------------------------------------------+ //| Разработка : Сергей.Ж - мой сайт - "http://wsforex.ru/" | //+-----------------------------------------------------------------+ string IIcm(int com){ if(com==1)return("да:"); else return("нет:"); } //+-----------------------------------------------------------------+ //| Разработка : Сергей.Ж - мой сайт - "http://wsforex.ru/" | //+-----------------------------------------------------------------+ string shet(){ string s; if (IsDemo())s="Демо"; else s="Реал"; return(s); } //+-----------------------------------------------------------------+ //| Разработка : Сергей.Ж - мой сайт - "http://wsforex.ru/" | //+-----------------------------------------------------------------+ int start() { //---- RefreshRates(); int lv=MarketInfo(Symbol(),MODE_STOPLEVEL); // ----- Comment("\nСоветник весь в работе: - ",IIcm(Ea.Disabled==False), "\nДень: - ",Dayof(), "\nТорговый счёт: - ",shet(), "\nSpread: - ",MarketInfo(Symbol(),MODE_SPREAD), "\nStopLevel: - ",MarketInfo(Symbol(),MODE_STOPLEVEL) ); //---- if(Hour()>=CloseHour) { ClosePos(OP_BUY, MagicNumber); ClosePos(OP_SELL, MagicNumber); } double sl,tp; RefreshRates(); double ma0day =iMA(Symbol(), PERIOD_D1, MA.Period, 0, MODE_SMA, PRICE_MEDIAN, 0); double ma1day =iMA(Symbol(), PERIOD_D1, MA.Period, 0, MODE_SMA, PRICE_MEDIAN, 1); double ma2day =iMA(Symbol(), PERIOD_D1, MA.Period, 0, MODE_SMA, PRICE_MEDIAN, 2); //---- if(Hour()<2 && OrdersCount(Symbol(), OP_SELL, MagicNumber)==0 && ma0dayiOpen(Symbol(), PERIOD_D1, 0) && ma1dayiOpen(Symbol(), PERIOD_D1, 1)) { if(StopLoss>0) sl=Bid+StopLoss*Point; else sl=ma1day; if(TakeProfit>0) tp=Bid-TakeProfit*Point; else tp=0; if((sl-Bid)/Point>lv) { OpenPosition(Symbol(), OP_SELL, GetLots(), sl, tp, MagicNumber); } } if(Hour()<2 && OrdersCount(Symbol(), OP_BUY, MagicNumber)==0 && ma0day>ma1day && ma0dayma2day && ma1day0) sl=Ask-StopLoss*Point; else sl=ma1day; if(TakeProfit>0) tp=Ask+TakeProfit*Point; else tp=0; if((Ask-sl)/Point>lv) { OpenPosition(Symbol(), OP_BUY, GetLots(), sl, tp, MagicNumber); } } //---- return(0); } //+-----------------------------------------------------------------+ //| Разработка : Сергей.Ж - мой сайт - "http://wsforex.ru/" | //+-----------------------------------------------------------------+ int OpenPosition(string sy,int op,double ll,double sl=0,double tp=0,int mn=0) { color clOpen; datetime ot; double pp, pa, pb; int dg, err, it, ticket=0; string lsComm=" "; //+---- if (sy=="" || sy=="0") sy=Symbol(); if (op==OP_BUY) clOpen=clOpenBuy; else clOpen=clOpenSell; for (it=1; it<=NumberOfTry; it++) { if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break; while (!IsTradeAllowed()) Sleep(5000); RefreshRates(); dg=MarketInfo(sy, MODE_DIGITS); pa=MarketInfo(sy, MODE_ASK); pb=MarketInfo(sy, MODE_BID); if (op==OP_BUY) pp=pa; else pp=pb; pp=NormalizeDouble(pp, dg); sl=NormalizeDouble(sl, dg); tp=NormalizeDouble(tp, dg); ot=TimeCurrent(); ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, 0, clOpen); if (ticket>0) { if (UseSound) PlaySound(NameFileSound); break; } else { err=GetLastError(); if (err==128 || err==142 || err==143) { Sleep(1000*66.666); if (ExistPositions(sy, op, mn, ot)) { if (UseSound) PlaySound(NameFileSound); break; } } Print("Error(",err,") opening position: ",error(err),", try ",it); Print("Ask=",pa," Bid=",pb," sy=",sy," ll=",ll," op=",GetNameOP(op), " pp=",pp," sl=",sl," tp=",tp," mn=",mn); if (pa==0 && pb==0) Message("Проверьте в Обзоре рынка наличие символа "+sy); if (err==2 || err==64 || err==65 || err==133) { Ea.Disabled=True; break; } if (err==4 || err==131 || err==132) { Sleep(1000*300); break; } if (err==140 || err==148 || err==4110 || err==4111) break; if (err==141) Sleep(1000*100); if (err==145) Sleep(1000*17); if (err==146) while (IsTradeContextBusy()) Sleep(1000*11); if (err!=135) Sleep(1000*7.7); } } return(ticket); } //+-----------------------------------------------------------------+ //| Разработка : Сергей.Ж - мой сайт - "http://wsforex.ru/" | //+-----------------------------------------------------------------+ bool ExistPositions(string sy="", int op=-1, int mn=-1, datetime ot=0) { int i, k=OrdersTotal(); if (sy=="0") sy=Symbol(); for (i=0; i0) Print(m); } //+-----------------------------------------------------------------+ //| Разработка : Сергей.Ж - мой сайт - "http://wsforex.ru/" | //+-----------------------------------------------------------------+ int OrdersCount(string sy="", int op=-1, int mn=0) { //+---- int orders=0; int cnt=OrdersTotal(); for (int i=0; i=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderType()==type && OrderMagicNumber()==mn) { for (it=1; it<=NumberOfTry; it++) { if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break; while (!IsTradeAllowed()) Sleep(5000); RefreshRates(); pa=MarketInfo(OrderSymbol(), MODE_ASK); pb=MarketInfo(OrderSymbol(), MODE_BID); if (OrderType()==OP_BUY) { pp=pb; clClose=clCloseBuy; } else { pp=pa; clClose=clCloseSell; } ll=OrderLots(); pp=NormalizeDouble(pp, dg); fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose); if (fc) { if (UseSound) PlaySound(SoundSuccess); break; } else { err=GetLastError(); if (UseSound) PlaySound(SoundError); if (err==146) while (IsTradeContextBusy()) Sleep(1000*11); Print("Error(",err,") Close ",GetNameOP(OrderType())," ", error(err),", try ",it); Print(OrderTicket()," Ask=",pa," Bid=",pb," pp=",pp); Print("sy=",OrderSymbol()," ll=",ll," sl=",OrderStopLoss(), " tp=",OrderTakeProfit()," mn=",OrderMagicNumber()); Sleep(1000*5); } } } } } } //+-----------------------------------------------------------------+ //| Разработка : Сергей.Ж - мой сайт - "http://wsforex.ru/" | //+-----------------------------------------------------------------+ double GetLots(){ //--- double Lot=Lots; if(!MM)return(Lot); double Free =AccountFreeMargin(); double LotVal =MarketInfo(Symbol(),MODE_TICKVALUE); double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT); double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT); double Step =MarketInfo(Symbol(),MODE_LOTSTEP); //--- if(StopLoss>0){ Lot=MathFloor((Free*MaxRisk/100)/(StopLoss*LotVal)/Step)*Step; }else{ Lot=MathFloor((Free*MaxRisk/100)/(1000*LotVal)/Step)*Step; } if(LotMax_Lot) Lot=Max_Lot; return(Lot); //--- } //+-----------------------------------------------------------------+ //| Разработка : Сергей.Ж - мой сайт - "http://wsforex.ru/" | //+-----------------------------------------------------------------+ string error(int eer) { string er; switch(eer) { //---- case 0: case 1: er="Нет ошибки, но результат неизвестен"; break; case 2: er="Общая ошибка"; break; case 3: er="Неправильные параметры"; break; case 4: er="Торговый сервер занят"; break; case 5: er="Старая версия клиентского терминала"; break; case 6: er="Нет связи с торговым сервером"; break; case 7: er="Недостаточно прав"; break; case 8: er="Слишком частые запросы"; break; case 9: er="Недопустимая операция нарушающая функционирование сервера"; break; case 64: er="Счет заблокирован"; break; case 65: er="Неправильный номер счета"; break; case 128: er="Истек срок ожидания совершения сделки"; break; case 129: er="Неправильная цена"; break; case 130: er="Неправильные стопы"; break; case 131: er="Неправильный объем"; break; case 132: er="Рынок закрыт"; break; case 133: er="Торговля запрещена"; break; case 134: er="Недостаточно денег для совершения операции"; break; case 135: er="Цена изменилась"; break; case 136: er="Нет цен"; break; case 137: er="Брокер занят"; break; case 138: er="Новые цены - Реквот"; break; case 139: er="Ордер заблокирован и уже обрабатывается"; break; case 140: er="Разрешена только покупка"; break; case 141: er="Слишком много запросов"; break; case 145: er="Модификация запрещена, так как ордер слишком близок к рынку"; break; case 146: er="Подсистема торговли занята"; break; case 147: er="Использование даты истечения ордера запрещено брокером"; break; case 148: er="Количество открытых и отложенных ордеров достигло предела "; break; //---- case 4000: er="Нет ошибки"; break; case 4001: er="Неправильный указатель функции"; break; case 4002: er="Индекс массива - вне диапазона"; break; case 4003: er="Нет памяти для стека функций"; break; case 4004: er="Переполнение стека после рекурсивного вызова"; break; case 4005: er="На стеке нет памяти для передачи параметров"; break; case 4006: er="Нет памяти для строкового параметра"; break; case 4007: er="Нет памяти для временной строки"; break; case 4008: er="Неинициализированная строка"; break; case 4009: er="Неинициализированная строка в массиве"; break; case 4010: er="Нет памяти для строкового массива"; break; case 4011: er="Слишком длинная строка"; break; case 4012: er="Остаток от деления на ноль"; break; case 4013: er="Деление на ноль"; break; case 4014: er="Неизвестная команда"; break; case 4015: er="Неправильный переход"; break; case 4016: er="Неинициализированный массив"; break; case 4017: er="Вызовы DLL не разрешены"; break; case 4018: er="Невозможно загрузить библиотеку"; break; case 4019: er="Невозможно вызвать функцию"; break; case 4020: er="eВызовы внешних библиотечных функций не разрешены"; break; case 4021: er="Недостаточно памяти для строки, возвращаемой из функции"; break; case 4022: er="Система занята"; break; case 4050: er="Неправильное количество параметров функции"; break; case 4051: er="Недопустимое значение параметра функции"; break; case 4052: er="Внутренняя ошибка строковой функции"; break; case 4053: er="Ошибка массива"; break; case 4054: er="Неправильное использование массива-таймсерии"; break; case 4055: er="Ошибка пользовательского индикатора"; break; case 4056: er="Массивы несовместимы"; break; case 4057: er="Ошибка обработки глобальныех переменных"; break; case 4058: er="Глобальная переменная не обнаружена"; break; case 4059: er="Функция не разрешена в тестовом режиме"; break; case 4060: er="Функция не подтверждена"; break; case 4061: er="Ошибка отправки почты"; break; case 4062: er="Ожидается параметр типа string"; break; case 4063: er="Ожидается параметр типа integer"; break; case 4064: er="Ожидается параметр типа double"; break; case 4065: er="В качестве параметра ожидается массив"; break; case 4066: er="Запрошенные исторические данные в состоянии обновления"; break; case 4067: er="Ошибка при выполнении торговой операции"; break; case 4099: er="Конец файла"; break; case 4100: er="Ошибка при работе с файлом"; break; case 4101: er="Неправильное имя файла"; break; case 4102: er="Слишком много открытых файлов"; break; case 4103: er="Невозможно открыть файл"; break; case 4104: er="Несовместимый режим доступа к файлу"; break; case 4105: er="Ни один ордер не выбран"; break; case 4106: er="Неизвестный символ"; break; case 4107: er="Неправильный параметр цены для торговой функции"; break; case 4108: er="Неверный номер тикета"; break; case 4109: er="Торговля не разрешена"; break; case 4110: er="Длинные позиции не разрешены"; break; case 4111: er="Короткие позиции не разрешены"; break; case 4200: er="Объект уже существует"; break; case 4201: er="Запрошено неизвестное свойство объекта"; break; case 4202: er="Объект не существует"; break; case 4203: er="Неизвестный тип объекта"; break; case 4204: er="Нет имени объекта"; break; case 4205: er="Ошибка координат объекта"; break; case 4206: er="Не найдено указанное подокно"; break; case 4207: er="Ошибка при работе с объектом"; break; default: er="unknown error"; } return(er); } //+-----------------------------------------------------------------+ //| Разработка : Сергей.Ж - мой сайт - "http://wsforex.ru/" | //+-----------------------------------------------------------------+