//+------------------------------------------------------------------+ //| Urdala_Trol.mq4 | //| Сергей (urdala) Рашевский | //| urdala@mail.ru | //+------------------------------------------------------------------+ #property copyright "Сергей (urdala) Рашевский" #property link "http://urdala-forex.at.ua" extern string S0="Тейк профит в пунктах."; extern double TP = 5; extern string S1="Лот(0- не исользовать)."; extern double Lots = 0; extern string S2="Лот в % от баланса(0- не исользовать)."; extern double LotsProc=1; extern string S3="Минимальное расстояние между ордерами."; extern int Step=40; extern string S4="Трейлинг стоп."; extern int TS=30; extern string S5="Коэффициент увеличения лота(0- увеличение на начальный лот)."; extern double Kef = 0; extern string S6="Магическое число."; extern int Magic=777; extern string S7="Значение максимального проскальзывания.(Slippage)"; extern int Slippage=3; int D=1; //-------------------------------------------------------------------- int start() { int OB,OS,TB,TS; double ProfitBuy,ProfitSell,Lot; double LotBuy,LotSell; int PipBuy,PipSell; if (Lots!=0) Lot=NormalizeDouble(Lots,2); if (LotsProc!=0) Lot=NormalizeDouble(AccountBalance()/100000*LotsProc,2); if (Lot1)ModSell(); if (OB>1)ModBuy(); //-------------------------------------------------------------------- if (OB==0 && OS==0) { OpenOrder(Symbol(),0,Lot,NormalizeDouble(Ask,Digits),0,0,"",Magic); OpenOrder(Symbol(),1,Lot,NormalizeDouble(Bid,Digits),0,0,"",Magic); return(0); } //-------------------------------------------------------------------- if (OB==1)Tral(TB); if (OS==1)Tral(TS); //-------------------------------------------------------------------- if (OB==0 && OS>0) { RefreshRates(); OpenOrder(Symbol(),0,Lot,NormalizeDouble(Ask,Digits),0,0,"",Magic); RefreshRates(); if (MathAbs(PipSell)>=Step && Kef==0)OpenOrder(Symbol(),1,LotSell+Lot,NormalizeDouble(Bid,Digits),0,0,"",Magic); if (MathAbs(PipSell)>=Step && Kef>0)OpenOrder(Symbol(),1,LotSell*Kef,NormalizeDouble(Bid,Digits),0,0,"",Magic); } if (OB>0 && OS==0) { RefreshRates(); OpenOrder(Symbol(),1,Lot,NormalizeDouble(Bid,Digits),0,0,"",Magic); RefreshRates(); if (MathAbs(PipBuy)>=Step && Kef==0)OpenOrder(Symbol(),0,LotBuy+Lot,NormalizeDouble(Ask,Digits),0,0,"",Magic); if (MathAbs(PipBuy)>=Step && Kef>0)OpenOrder(Symbol(),0,LotBuy*Kef,NormalizeDouble(Ask,Digits),0,0,"",Magic); } //-------------------------------------------------------------------- return(0); } //-------------------------------------------------------------------- int ModBuy() { double Lots,Summ,BU,Profit; for (int i=0; i=NormalizeDouble(OrderStopLoss(),Digits) && OrderStopLoss()!=0)return(0); ModifyOrder(OrderTicket(),OrderOpenPrice(),TralPrice,OrderTakeProfit()); return(0); } //---------------------------------------------------------------------------- int OpenOrder(string symbol,int cmd,double volume,double price,double stoploss,double takeprofit,string comment,int magic) { RefreshRates(); int err,i,ticket; while(i<10) { if (cmd>1)ticket=OrderSend(symbol,cmd,NormalizeDouble(volume,2),NormalizeDouble(price,Digits),Slippage,0,0,comment,magic); if (cmd==1)ticket=OrderSend(symbol,cmd,NormalizeDouble(volume,2),NormalizeDouble(Bid,Digits),Slippage,0,0,comment,magic); if (cmd==0)ticket=OrderSend(symbol,cmd,NormalizeDouble(volume,2),NormalizeDouble(Ask,Digits),Slippage,0,0,comment,magic); err = GetLastError(); if (err == 0) break; Alert(Symbol(),Error(err)," при открытии ордера"); Sleep(1000); i++; } return(ticket); } //---------------------------------------------------------------------------- int ModifyOrder(int ticket,double price,double stoploss,double takeprofit) { int err,i; RefreshRates(); while(i<10) { OrderModify(ticket,NormalizeDouble(price,Digits),NormalizeDouble(stoploss,Digits),NormalizeDouble(takeprofit,Digits),0,CLR_NONE); err = GetLastError(); if (err == 0) break; Alert(Symbol(),Error(err)," при модификации ордера"); Sleep(1000); i++; } return(0); } //---------------------------------------------------------------------------- string Error(int error_code) { string error_string; switch(error_code) { case 0: error_string="Нет ошибок"; break; case 1: error_string="Нет ошибки, но результат неизвестен"; break; case 2: error_string="Общая ошибка"; break; case 3: error_string="Неправильные параметры"; break; case 4: error_string="Торговый сервер занят"; break; case 5: error_string="Старая версия клиентского терминала"; break; case 6: error_string="Нет связи с торговым сервером"; break; case 7: error_string="Недостаточно прав"; break; case 8: error_string="Слишком частые запросы"; break; case 9: error_string="Недопустимая операция нарушающая функционирование сервера"; break; case 64: error_string="Счет заблокирован"; break; case 65: error_string="Неправильный номер счета"; break; case 128: error_string="Истек срок ожидания совершения сделки"; break; case 129: error_string="Неправильная цена"; break; case 130: error_string="Неправильные стопы"; break; case 131: error_string="Неправильный объем"; break; case 132: error_string="Рынок закрыт"; break; case 133: error_string="Торговля запрещена"; break; case 134: error_string="Недостаточно денег для совершения операции"; break; case 135: error_string="Цена изменилась"; break; case 136: error_string="Нет цен"; break; case 137: error_string="Брокер занят"; break; case 138: error_string="Новые цены"; break; case 139: error_string="Ордер заблокирован и уже обрабатывается"; break; case 140: error_string="Разрешена только покупка"; break; case 141: error_string="Слишком много запросов"; break; case 145: error_string="Модификация запрещена, так как ордер слишком близок к рынку"; break; case 146: error_string="Подсистема торговли занята"; break; case 147: error_string="Использование даты истечения ордера запрещено брокером"; break; case 148: error_string="Количество открытых и отложенных ордеров достигло предела, установленного брокером.";break; case 4000: error_string="Нет ошибки"; break; case 4001: error_string="Неправильный указатель функции"; break; case 4002: error_string="Индекс массива - вне диапазона"; break; case 4003: error_string="Нет памяти для стека функций"; break; case 4004: error_string="Переполнение стека после рекурсивного вызова"; break; case 4005: error_string="На стеке нет памяти для передачи параметров"; break; case 4006: error_string="Нет памяти для строкового параметра"; break; case 4007: error_string="Нет памяти для временной строки"; break; case 4008: error_string="Неинициализированная строка"; break; case 4009: error_string="Неинициализированная строка в массиве"; break; case 4010: error_string="Нет памяти для строкового массива"; break; case 4011: error_string="Слишком длинная строка"; break; case 4012: error_string="Остаток от деления на ноль"; break; case 4013: error_string="Деление на ноль"; break; case 4014: error_string="Неизвестная команда"; break; case 4015: error_string="Неправильный переход"; break; case 4016: error_string="Неинициализированный массив"; break; case 4017: error_string="Вызовы DLL не разрешены"; break; case 4018: error_string="Невозможно загрузить библиотеку"; break; case 4019: error_string="Невозможно вызвать функцию"; break; case 4020: error_string="Вызовы внешних библиотечных функций не разрешены"; break; case 4021: error_string="Недостаточно памяти для строки, возвращаемой из функции"; break; case 4022: error_string="Система занята"; break; case 4050: error_string="Неправильное количество параметров функции"; break; case 4051: error_string="Недопустимое значение параметра функции"; break; case 4052: error_string="Внутренняя ошибка строковой функции"; break; case 4053: error_string="Ошибка массива"; break; case 4054: error_string="Неправильное использование массива-таймсерии"; break; case 4055: error_string="Ошибка пользовательского индикатора"; break; case 4056: error_string="Массивы несовместимы"; break; case 4057: error_string="Ошибка обработки глобальныех переменных"; break; case 4058: error_string="Глобальная переменная не обнаружена"; break; case 4059: error_string="Функция не разрешена в тестовом режиме"; break; case 4060: error_string="Функция не разрешена"; break; case 4061: error_string="Ошибка отправки почты"; break; case 4062: error_string="Ожидается параметр типа string"; break; case 4063: error_string="Ожидается параметр типа integer"; break; case 4064: error_string="Ожидается параметр типа double"; break; case 4065: error_string="В качестве параметра ожидается массив"; break; case 4066: error_string="Запрошенные исторические данные в состоянии обновления"; break; case 4067: error_string="Ошибка при выполнении торговой операции"; break; case 4099: error_string="Конец файла"; break; case 4100: error_string="Ошибка при работе с файлом"; break; case 4101: error_string="Неправильное имя файла"; break; case 4102: error_string="Слишком много открытых файлов"; break; case 4103: error_string="Невозможно открыть файл"; break; case 4104: error_string="Несовместимый режим доступа к файлу"; break; case 4105: error_string="Ни один ордер не выбран"; break; case 4106: error_string="Неизвестный символ"; break; case 4107: error_string="Неправильный параметр цены для торговой функции"; break; case 4108: error_string="Неверный номер тикета"; break; case 4109: error_string="Торговля не разрешена. Необходимо включить опцию Разрешить советнику торговать в свойствах эксперта."; break; case 4110: error_string="Длинные позиции не разрешены. Необходимо проверить свойства эксперта."; break; case 4111: error_string="Короткие позиции не разрешены. Необходимо проверить свойства эксперта."; break; case 4200: error_string="Объект уже существует"; break; case 4201: error_string="Запрошено неизвестное свойство объекта"; break; case 4202: error_string="Объект не существует"; break; case 4203: error_string="Неизвестный тип объекта"; break; case 4204: error_string="Нет имени объекта"; break; case 4205: error_string="Ошибка координат объекта"; break; case 4206: error_string="Не найдено указанное подокно"; break; default: error_string="Ошибка при работе с объектом"; } return(error_string); }