boovood Опубликовано 23 октября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 октября, 2016 Глубоко уважаемые программистя и вновь я нуждаюсь в вашей помощи, помогите советоми или правильно написанным кодом с пояснениями(что будет лучше)Написал советник знаю много строк кода, и вроде всё правильно но вылазит одна ошибка на компиляции и если убрать слешами она исчезает но появляется во время работы советника SendOrder error 4501Стратегия советникаот максимума за 10 дней прошло 50 пунктов вниз то открываются ордера селлесли от минимума прошло 50 пунктов верх то открываются ордера байпо причине того что советник начал сливать я перевернул основные ордера и поставил их лот на автоматическое вычилсления переменная А задаёт на какое число будет делиться депозит для определения автоматически лота для основного ордераПроблема возникла при вставке функции определения какая ошибка и выставление соответствующего основного ордера //+------------------------------------------------------------------+//| МА_50-20.mq4 |//| Copyright 2016, https://vk.com/id266344775 |//| https://vk.com/id266344775 |//+------------------------------------------------------------------+#property copyright "Copyright 2016, https://vk.com/id266344775"#property link "https://vk.com/id266344775"#property version "1.00"#property strict//+------------------------------------------------------------------+extern string text = "Работает только на Дневном графикех";extern int Magic = 12345;extern int Moy = 5;extern int Slippage = 4;extern int A = 15000;extern int TakeProfit = 20;extern int StopLoss = 20;extern double multipler = 1.5;extern int day = 10;//+------------------------------------------------------------------+extern bool type;double Lots,Lots_sell,Lots_buy,cLots,SL,TP,p,maxp,minp;int ticket;//+------------------------------------------------------------------+int OnInit() {double multiplier; if(Digits == 2 || Digits == 4) multiplier = 1; if(Digits == 3 || Digits == 5) multiplier = 10; if(Digits == 6) multiplier = 100; TakeProfit*= multiplier; StopLoss *= multiplier; Slippage *= multiplier; return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+void OnDeinit(const int reason){}//+------------------------------------------------------------------+void OnTick()//int start(){Comment( "-----------------------------------------------------------", "\n"," Account: - №: ",AccountNumber(), "\n"," TimeCurrent: - : ",TimeCurrent(), "\n"," AccountCompany ",AccountCompany(), "\n"," AccountLeverage 1 : ",AccountLeverage(), "\n","-----------------------------------------------------------", "\n"," AccountBalance ",NormalizeDouble(AccountBalance(),2), "\n"," AccountMargin ",NormalizeDouble(AccountMargin(),2), "\n"," AccountEquity ",NormalizeDouble(AccountEquity(),2), "\n"," Lots ",cLots, "\n","-----------------------------------------------------------");//+------------------------------------------------------------------GetLots();Lots=cLots;if (isCloseLastPosByStop(Symbol(),OP_SELL,-1)){NormalizeDouble(Lots_sell=GetLotLastPos(Symbol(),OP_SELL,Magic)*multipler,2);}else{Lots_sell=Lots;}if (isCloseLastPosByStop(Symbol(),OP_BUY, -1)){NormalizeDouble(Lots_buy =GetLotLastPos(Symbol(), OP_BUY,Magic)*multipler,2);}else{Lots_buy=Lots;}//+------------------------------------------------------------------//Open orders//+------------------------------------------------------------------+MaxPrice();MinPrice();if(maxp-.005>Ask) {type=true;}if(minp+.005 {type=false ;}// Fun_Error(); if(CountBuy()==0) if(type==false) {Print ("сигнал buy"); SL=NormalizeDouble(Ask-StopLoss*0.0001,4); TP=NormalizeDouble(Ask+TakeProfit*0.0001,4); ticket=OrderSend(Symbol(),OP_BUY, 0.01, NormalizeDouble(Ask,4),Slippage,SL,TP,"МА_50-20",Magic,0,Blue); if(ticket Print("Не удалось открыть ордер на покупку"); SL=NormalizeDouble(Bid+TakeProfit*0.0001+.0002,4); TP=NormalizeDouble(Bid-StopLoss*0.0001+.0002,4); ticket=OrderSend(Symbol(),OP_SELL,Lots_sell, NormalizeDouble(Bid,4),Slippage,SL,TP,"МА_50-20",Moy,0,Red); if(ticket Print("Не удалось открыть основной ордер на продажу"); } if(CountSell()==0) if(type==true) {Print ("сигнал sell"); SL=NormalizeDouble(Bid+StopLoss*0.0001,4); TP=NormalizeDouble(Bid-TakeProfit*0.0001,4); ticket=OrderSend(Symbol(),OP_SELL,0.01, NormalizeDouble(Bid,4),Slippage,SL,TP,"МА_50-20",Magic,0,Red); if(ticket Print("Не удалось открыть ордер на продажу"); SL=NormalizeDouble(Ask-TakeProfit*0.0001-.0002,4); TP=NormalizeDouble(Ask+StopLoss*0.0001-.0002,4); ticket=OrderSend(Symbol(),OP_BUY, Lots_buy, NormalizeDouble(Ask,4),Slippage,SL,TP,"МА_50-20",Moy,0,Blue); if(ticket Print("Не удалось открыть основной ордер на покупку"); }//+------------------------------------------------------------------+}//+------------------------------------------------------------------+void MaxPrice(){ for(int i = 0; i { p=iHigh(Symbol(),PERIOD_D1,i); if(p>maxp) {maxp=p; } }return; }void MinPrice(){ for(int i = 0; i { p=iLow(Symbol(),PERIOD_D1,i); if(p {minp=p; } }return;}double GetLots(){ cLots = AccountBalance()/A; cLots = MathMax(cLots, MarketInfo(Symbol(),MODE_MINLOT)); cLots = MathMin(cLots, MarketInfo(Symbol(),MODE_MAXLOT)); cLots = NormalizeDouble(cLots,2); return(cLots);}int CountSell(){ int count=0; for(int i=OrdersTotal()-1; i>=0; i--) {if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)==true && OrderMagicNumber()==Magic&& OrderType()==OP_SELL) {count++; } } return(count);}int CountBuy(){ int count=0; for(int i=OrdersTotal()-1; i>=0; i--) {if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)==true && OrderMagicNumber()==Magic&& OrderType()==OP_BUY) {count++; } } return(count);}bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) { datetime t=0; double ocp, osl; int dg, i, j=-1, k=OrdersHistoryTotal(); if (sy=="0") sy=Symbol(); for (i=0; i if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op if (mn if (t t=OrderCloseTime(); j=i; } } } } } } } if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) { dg=MarketInfo(sy, MODE_DIGITS); if (dg==0) if (StringFind(OrderSymbol(), "JPY") ocp=NormalizeDouble(OrderClosePrice(), dg); osl=NormalizeDouble(OrderStopLoss(), dg); if (ocp==osl) return(True); } return(False);}double GetLotLastPos(string sy="", int op=-1, int mn=-1) { datetime o=0; double l=-1; int i, k=OrdersHistoryTotal(); if (sy=="0") sy=Symbol(); for (i=0; i if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op if (mn if (o o=OrderCloseTime(); l=OrderLots(); } } } } } } } return(l);}int Fun_Error(int Error) { switch(Error) { // Преодолимые ошибки case 0: return (0); case 1: Print("Попытка изменить уже установленные значения такими же значениями.");return(1); case 2: Print("Общая ошибка. Прекратить все попытки торговых операций до выяснения обстоятельств.");return(0); case 3: Print("В торговую функцию переданы неправильные параметры.");return(1); case 4: Print("Торговый сервер занят.Пробуем ещё раз..");Sleep(3000);return(1); case 5: Print("Старая версия клиентского терминала.");return(0); case 6: Print("Нет связи с торговым сервером.");return(1); case 7: Print("Недостаточно прав.");return(1); case 8: Print("Слишком частые запросы.");return(1); case 9: Print("Недопустимая операция нарушающая функционирование сервера.");return(1); case 64: Print("Счет заблокирован. Необходимо прекратить все попытки торговых операций.");return(0); case 65: Print("Неправильный номер счета.");return(1); case 128: Print("Истек срок ожидания совершения сделки.");return(1); case 129: Print("Неправильная цена bid или ask, возможно, ненормализованная цена.");return(1); case 130: Print("Слишком близкие стопы или неправильно рассчитанные или ненормализованные цены в стопах (или в цене открытия отложенного ордера).");return(1); case 131: Print("Неправильный объем, ошибка в грануляции объема.");return(1); case 132: Print("Рынок закрыт.");return(1); case 133: Print("Торговля запрещена.");return(0); case 134: Print("Недостаточно денег для совершения операции.");return(0); case 135: Print("Цена изменилась. Пробуем ещё раз..");RefreshRates();return(1); case 136: Print("Нет цен. Ждём новый тик.."); while(RefreshRates()==false) // До нового тика Sleep(1); return(1); case 137: Print("Брокер занят.Пробуем ещё раз..");Sleep(3000);return(1); case 138: Print("Запрошенная цена устарела, либо перепутаны bid и ask.");return(1); case 139: Print("Ордер заблокирован и уже обрабатывается.");return(1); case 140: Print("Разрешена только покупка. Повторять операцию SELL нельзя.");return(1); case 141: Print("Слишком много запросов.");return(1); case 142: Print("Ордер поставлен в очередь.");return(1); case 143: Print("Ордер принят дилером к исполнению.");return(1); case 144: Print("Ордер аннулирован самим клиентом при ручном подтверждении сделки.");return(1); case 145: Print("Модификация запрещена, так как ордер слишком близок к рынку и заблокирован из-за возможного скорого исполнения.");return(1); case 146: Print("Подсистема торговли занята.Пробуем ещё..");Sleep(500);return(1); case 147: Print("Использование даты истечения ордера запрещено брокером.");return(1); case 148: Print("Количество открытых и отложенных ордеров достигло предела, установленного брокером.");return(1); case 149: Print("Попытка открыть противоположную позицию к уже существующей в случае, если хеджирование запрещено.");return(1); case 4000: return (0); case 4001: Print("Неправильный указатель функции.");return(1); case 4002: Print("Индекс массива - вне диапазона.");return(1); case 4003: Print("Нет памяти для стека функций.");return(1); case 4004: Print("Переполнение стека после рекурсивного вызова.");return(1); case 4005: Print("На стеке нет памяти для передачи параметров.");return(1); case 4006: Print("Нет памяти для строкового параметра.");return(1); case 4007: Print("Нет памяти для временной строки.");return(1); case 4008: Print("Неинициализированная строка.");return(1); case 4009: Print("Неинициализированная строка в массиве.");return(1); case 4010: Print("Нет памяти для строкового массива.");return(1); case 4011: Print("Слишком длинная строка.");return(1); case 4012: Print("Остаток от деления на ноль.");return(1); case 4013: Print("Деление на ноль.");return(1); case 4014: Print("Неизвестная команда.");return(1); case 4015: Print("Неправильный переход.");return(1); case 4016: Print("Неинициализированный массив.");return(1); case 4017: Print("Вызовы DLL не разрешены.");return(1); case 4018: Print("Невозможно загрузить библиотеку.");return(1); case 4019: Print("Невозможно вызвать функцию.");return(1); case 4020: Print("Вызовы внешних библиотечных функций не разрешены.");return(1); case 4021: Print("Недостаточно памяти для строки, возвращаемой из функции.");return(1); case 4022: Print("Система занята.");return(1); case 4050: Print("Неправильное количество параметров функции.");return(1); case 4051: Print("Недопустимое значение параметра функции.");return(1); case 4052: Print("Внутренняя ошибка строковой функции.");return(1); case 4053: Print("Ошибка массива.");return(1); case 4054: Print("Неправильное использование массива-таймсерии.");return(1); case 4055: Print("Ошибка пользовательского индикатора.");return(1); case 4056: Print("Массивы несовместимы.");return(1); case 4057: Print("Ошибка обработки глобальныех переменных.");return(1); case 4058: Print("Глобальная переменная не обнаружена.");return(1); case 4059: Print("Функция не разрешена в тестовом режиме.");return(1); case 4060: Print("Функция не подтверждена.");return(1); case 4061: Print("Ошибка отправки почты.");return(1); case 4062: Print("Ожидается параметр типа string.");return(1); case 4063: Print("Ожидается параметр типа integer.");return(1); case 4064: Print("Ожидается параметр типа double.");return(1); case 4065: Print("В качестве параметра ожидается массив.");return(1); case 4066: Print("Запрошенные исторические данные в состоянии обновления.");return(1); case 4067: Print("Ошибка при выполнении торговой операции.");return(1); case 4099: Print("Конец файла.");return(1); case 4100: Print("Ошибка при работе с файлом.");return(1); case 4101: Print("Неправильное имя файла.");return(1); case 4102: Print("Слишком много открытых файлов.");return(1); case 4103: Print("Невозможно открыть файл.");return(1); case 4104: Print("Несовместимый режим доступа к файлу.");return(1); case 4105: Print("Ни один ордер не выбран.");return(1); case 4106: Print("Неизвестный символ.");return(1); case 4107: Print("Неправильный параметр цены для торговой функции.");return(1); case 4108: Print("Неверный номер тикета.");return(1); case 4109: Print("Торговля не разрешена. Необходимо включить опцию Разрешить советнику торговать в свойствах эксперта.");return(1); case 4110: Print("Длинные позиции не разрешены. Необходимо проверить свойства эксперта.");return(1); case 4111: Print("Короткие позиции не разрешены. Необходимо проверить свойства эксперта.");return(1); case 4200: Print("Объект уже существует.");return(1); case 4201: Print("Запрошено неизвестное свойство объекта.");return(1); case 4202: Print("Объект не существует.");return(1); case 4203: Print("Неизвестный тип объекта.");return(1); case 4204: Print("Нет имени объекта.");return(1); case 4205: Print("Ошибка координат объекта.");return(1); case 4206: Print("Не найдено указанное подокно.");return(1); case 4207: Print("Ошибка при работе с объектом.");return(1); return(0); } return(0); } Ссылка на сообщение Поделиться на другие сайты More sharing options...
Дмитрий_2008 Опубликовано 24 октября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 октября, 2016 Спойлер Спасибо конечно за бесплатный урок, но учитель из вас не важный, так и не понял зачем мне кнопка если мне нужна линия?Неужели фраза о том что я хочу вывести на экран Машку настолько не понятна? Уважаемый, SNZHikari, вам здесь никто не должен. Вы явно грубите, и, в какой-то степени, уменьшаете желание опытных программистов отвечать вообще. Будьте благодарны, что на вас потратили драгоценное время. Если полученная информация вас не удовлетворила, можно попытаться еще раз донести суть вашей ПРОСЬБЫ!!! Ссылка на сообщение Поделиться на другие сайты More sharing options...
dimokn Опубликовано 24 октября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 октября, 2016 Всем привет. Встречал ли кто нибудь такой расчет сети, чтоб можно было ввести стоимость пунктов, шаг, количество и объем ордеров, чтоб программа расчитала полный лок сети стоповых ордеров, т.е какой убыток будет у сети если все ордеры сработали? Ссылка на сообщение Поделиться на другие сайты More sharing options...
pavlus777 Опубликовано 25 октября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 октября, 2016 Новый урок на сайте!Как написать робота для Бинарных опционов 4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
vitek01 Опубликовано 26 октября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 октября, 2016 Глубоко уважаемые программистя и вновь я нуждаюсь в вашей помощи, помогите советоми или правильно написанным кодом с пояснениями(что будет лучше)Написал советник знаю много строк кода, и вроде всё правильно но вылазит одна ошибка на компиляции и если убрать слешами она исчезает но появляется во время работы советника SendOrder error 4501Стратегия советникаот максимума за 10 дней прошло 50 пунктов вниз то открываются ордера селлесли от минимума прошло 50 пунктов верх то открываются ордера байпо причине того что советник начал сливать я перевернул основные ордера и поставил их лот на автоматическое вычилсления переменная А задаёт на какое число будет делиться депозит для определения автоматически лота для основного ордераПроблема возникла при вставке функции определения какая ошибка и выставление соответствующего основного ордера //+------------------------------------------------------------------+//| МА_50-20.mq4 |//| Copyright 2016, https://vk.com/id266344775 |//| https://vk.com/id266344775 |//+------------------------------------------------------------------+#property copyright "Copyright 2016, https://vk.com/id266344775"#property link "https://vk.com/id266344775"#property version "1.00"#property strict//+------------------------------------------------------------------+extern string text = "Работает только на Дневном графикех";extern int Magic = 12345;extern int Moy = 5;extern int Slippage = 4;extern int A = 15000;extern int TakeProfit = 20;extern int StopLoss = 20;extern double multipler = 1.5;extern int day = 10;//+------------------------------------------------------------------+extern bool type;double Lots,Lots_sell,Lots_buy,cLots,SL,TP,p,maxp,minp;int ticket;//+------------------------------------------------------------------+int OnInit() {double multiplier; if(Digits == 2 || Digits == 4) multiplier = 1; if(Digits == 3 || Digits == 5) multiplier = 10; if(Digits == 6) multiplier = 100; TakeProfit*= multiplier; StopLoss *= multiplier; Slippage *= multiplier; return(INIT_SUCCEEDED); }//+------------------------------------------------------------------+void OnDeinit(const int reason){}//+------------------------------------------------------------------+void OnTick()//int start(){Comment( "-----------------------------------------------------------", "\n"," Account: - №: ",AccountNumber(), "\n"," TimeCurrent: - : ",TimeCurrent(), "\n"," AccountCompany ",AccountCompany(), "\n"," AccountLeverage 1 : ",AccountLeverage(), "\n","-----------------------------------------------------------", "\n"," AccountBalance ",NormalizeDouble(AccountBalance(),2), "\n"," AccountMargin ",NormalizeDouble(AccountMargin(),2), "\n"," AccountEquity ",NormalizeDouble(AccountEquity(),2), "\n"," Lots ",cLots, "\n","-----------------------------------------------------------");//+------------------------------------------------------------------GetLots();Lots=cLots;if (isCloseLastPosByStop(Symbol(),OP_SELL,-1)){NormalizeDouble(Lots_sell=GetLotLastPos(Symbol(),OP_SELL,Magic)*multipler,2);}else{Lots_sell=Lots;}if (isCloseLastPosByStop(Symbol(),OP_BUY, -1)){NormalizeDouble(Lots_buy =GetLotLastPos(Symbol(), OP_BUY,Magic)*multipler,2);}else{Lots_buy=Lots;}//+------------------------------------------------------------------//Open orders//+------------------------------------------------------------------+MaxPrice();MinPrice();if(maxp-.005>Ask) {type=true;}if(minp+.005 {type=false ;}// Fun_Error(); if(CountBuy()==0) if(type==false) {Print ("сигнал buy"); SL=NormalizeDouble(Ask-StopLoss*0.0001,4); TP=NormalizeDouble(Ask+TakeProfit*0.0001,4); ticket=OrderSend(Symbol(),OP_BUY, 0.01, NormalizeDouble(Ask,4),Slippage,SL,TP,"МА_50-20",Magic,0,Blue); if(ticket Print("Не удалось открыть ордер на покупку"); SL=NormalizeDouble(Bid+TakeProfit*0.0001+.0002,4); TP=NormalizeDouble(Bid-StopLoss*0.0001+.0002,4); ticket=OrderSend(Symbol(),OP_SELL,Lots_sell, NormalizeDouble(Bid,4),Slippage,SL,TP,"МА_50-20",Moy,0,Red); if(ticket Print("Не удалось открыть основной ордер на продажу"); } if(CountSell()==0) if(type==true) {Print ("сигнал sell"); SL=NormalizeDouble(Bid+StopLoss*0.0001,4); TP=NormalizeDouble(Bid-TakeProfit*0.0001,4); ticket=OrderSend(Symbol(),OP_SELL,0.01, NormalizeDouble(Bid,4),Slippage,SL,TP,"МА_50-20",Magic,0,Red); if(ticket Print("Не удалось открыть ордер на продажу"); SL=NormalizeDouble(Ask-TakeProfit*0.0001-.0002,4); TP=NormalizeDouble(Ask+StopLoss*0.0001-.0002,4); ticket=OrderSend(Symbol(),OP_BUY, Lots_buy, NormalizeDouble(Ask,4),Slippage,SL,TP,"МА_50-20",Moy,0,Blue); if(ticket Print("Не удалось открыть основной ордер на покупку"); }//+------------------------------------------------------------------+}//+------------------------------------------------------------------+void MaxPrice(){ for(int i = 0; i { p=iHigh(Symbol(),PERIOD_D1,i); if(p>maxp) {maxp=p; } }return; }void MinPrice(){ for(int i = 0; i { p=iLow(Symbol(),PERIOD_D1,i); if(p {minp=p; } }return;}double GetLots(){ cLots = AccountBalance()/A; cLots = MathMax(cLots, MarketInfo(Symbol(),MODE_MINLOT)); cLots = MathMin(cLots, MarketInfo(Symbol(),MODE_MAXLOT)); cLots = NormalizeDouble(cLots,2); return(cLots);}int CountSell(){ int count=0; for(int i=OrdersTotal()-1; i>=0; i--) {if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)==true && OrderMagicNumber()==Magic&& OrderType()==OP_SELL) {count++; } } return(count);}int CountBuy(){ int count=0; for(int i=OrdersTotal()-1; i>=0; i--) {if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)==true && OrderMagicNumber()==Magic&& OrderType()==OP_BUY) {count++; } } return(count);}bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) { datetime t=0; double ocp, osl; int dg, i, j=-1, k=OrdersHistoryTotal(); if (sy=="0") sy=Symbol(); for (i=0; i if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op if (mn if (t t=OrderCloseTime(); j=i; } } } } } } } if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) { dg=MarketInfo(sy, MODE_DIGITS); if (dg==0) if (StringFind(OrderSymbol(), "JPY") ocp=NormalizeDouble(OrderClosePrice(), dg); osl=NormalizeDouble(OrderStopLoss(), dg); if (ocp==osl) return(True); } return(False);}double GetLotLastPos(string sy="", int op=-1, int mn=-1) { datetime o=0; double l=-1; int i, k=OrdersHistoryTotal(); if (sy=="0") sy=Symbol(); for (i=0; i if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op if (mn if (o o=OrderCloseTime(); l=OrderLots(); } } } } } } } return(l);}int Fun_Error(int Error) { switch(Error) { // Преодолимые ошибки case 0: return (0); case 1: Print("Попытка изменить уже установленные значения такими же значениями.");return(1); case 2: Print("Общая ошибка. Прекратить все попытки торговых операций до выяснения обстоятельств.");return(0); case 3: Print("В торговую функцию переданы неправильные параметры.");return(1); case 4: Print("Торговый сервер занят.Пробуем ещё раз..");Sleep(3000);return(1); case 5: Print("Старая версия клиентского терминала.");return(0); case 6: Print("Нет связи с торговым сервером.");return(1); case 7: Print("Недостаточно прав.");return(1); case 8: Print("Слишком частые запросы.");return(1); case 9: Print("Недопустимая операция нарушающая функционирование сервера.");return(1); case 64: Print("Счет заблокирован. Необходимо прекратить все попытки торговых операций.");return(0); case 65: Print("Неправильный номер счета.");return(1); case 128: Print("Истек срок ожидания совершения сделки.");return(1); case 129: Print("Неправильная цена bid или ask, возможно, ненормализованная цена.");return(1); case 130: Print("Слишком близкие стопы или неправильно рассчитанные или ненормализованные цены в стопах (или в цене открытия отложенного ордера).");return(1); case 131: Print("Неправильный объем, ошибка в грануляции объема.");return(1); case 132: Print("Рынок закрыт.");return(1); case 133: Print("Торговля запрещена.");return(0); case 134: Print("Недостаточно денег для совершения операции.");return(0); case 135: Print("Цена изменилась. Пробуем ещё раз..");RefreshRates();return(1); case 136: Print("Нет цен. Ждём новый тик.."); while(RefreshRates()==false) // До нового тика Sleep(1); return(1); case 137: Print("Брокер занят.Пробуем ещё раз..");Sleep(3000);return(1); case 138: Print("Запрошенная цена устарела, либо перепутаны bid и ask.");return(1); case 139: Print("Ордер заблокирован и уже обрабатывается.");return(1); case 140: Print("Разрешена только покупка. Повторять операцию SELL нельзя.");return(1); case 141: Print("Слишком много запросов.");return(1); case 142: Print("Ордер поставлен в очередь.");return(1); case 143: Print("Ордер принят дилером к исполнению.");return(1); case 144: Print("Ордер аннулирован самим клиентом при ручном подтверждении сделки.");return(1); case 145: Print("Модификация запрещена, так как ордер слишком близок к рынку и заблокирован из-за возможного скорого исполнения.");return(1); case 146: Print("Подсистема торговли занята.Пробуем ещё..");Sleep(500);return(1); case 147: Print("Использование даты истечения ордера запрещено брокером.");return(1); case 148: Print("Количество открытых и отложенных ордеров достигло предела, установленного брокером.");return(1); case 149: Print("Попытка открыть противоположную позицию к уже существующей в случае, если хеджирование запрещено.");return(1); case 4000: return (0); case 4001: Print("Неправильный указатель функции.");return(1); case 4002: Print("Индекс массива - вне диапазона.");return(1); case 4003: Print("Нет памяти для стека функций.");return(1); case 4004: Print("Переполнение стека после рекурсивного вызова.");return(1); case 4005: Print("На стеке нет памяти для передачи параметров.");return(1); case 4006: Print("Нет памяти для строкового параметра.");return(1); case 4007: Print("Нет памяти для временной строки.");return(1); case 4008: Print("Неинициализированная строка.");return(1); case 4009: Print("Неинициализированная строка в массиве.");return(1); case 4010: Print("Нет памяти для строкового массива.");return(1); case 4011: Print("Слишком длинная строка.");return(1); case 4012: Print("Остаток от деления на ноль.");return(1); case 4013: Print("Деление на ноль.");return(1); case 4014: Print("Неизвестная команда.");return(1); case 4015: Print("Неправильный переход.");return(1); case 4016: Print("Неинициализированный массив.");return(1); case 4017: Print("Вызовы DLL не разрешены.");return(1); case 4018: Print("Невозможно загрузить библиотеку.");return(1); case 4019: Print("Невозможно вызвать функцию.");return(1); case 4020: Print("Вызовы внешних библиотечных функций не разрешены.");return(1); case 4021: Print("Недостаточно памяти для строки, возвращаемой из функции.");return(1); case 4022: Print("Система занята.");return(1); case 4050: Print("Неправильное количество параметров функции.");return(1); case 4051: Print("Недопустимое значение параметра функции.");return(1); case 4052: Print("Внутренняя ошибка строковой функции.");return(1); case 4053: Print("Ошибка массива.");return(1); case 4054: Print("Неправильное использование массива-таймсерии.");return(1); case 4055: Print("Ошибка пользовательского индикатора.");return(1); case 4056: Print("Массивы несовместимы.");return(1); case 4057: Print("Ошибка обработки глобальныех переменных.");return(1); case 4058: Print("Глобальная переменная не обнаружена.");return(1); case 4059: Print("Функция не разрешена в тестовом режиме.");return(1); case 4060: Print("Функция не подтверждена.");return(1); case 4061: Print("Ошибка отправки почты.");return(1); case 4062: Print("Ожидается параметр типа string.");return(1); case 4063: Print("Ожидается параметр типа integer.");return(1); case 4064: Print("Ожидается параметр типа double.");return(1); case 4065: Print("В качестве параметра ожидается массив.");return(1); case 4066: Print("Запрошенные исторические данные в состоянии обновления.");return(1); case 4067: Print("Ошибка при выполнении торговой операции.");return(1); case 4099: Print("Конец файла.");return(1); case 4100: Print("Ошибка при работе с файлом.");return(1); case 4101: Print("Неправильное имя файла.");return(1); case 4102: Print("Слишком много открытых файлов.");return(1); case 4103: Print("Невозможно открыть файл.");return(1); case 4104: Print("Несовместимый режим доступа к файлу.");return(1); case 4105: Print("Ни один ордер не выбран.");return(1); case 4106: Print("Неизвестный символ.");return(1); case 4107: Print("Неправильный параметр цены для торговой функции.");return(1); case 4108: Print("Неверный номер тикета.");return(1); case 4109: Print("Торговля не разрешена. Необходимо включить опцию Разрешить советнику торговать в свойствах эксперта.");return(1); case 4110: Print("Длинные позиции не разрешены. Необходимо проверить свойства эксперта.");return(1); case 4111: Print("Короткие позиции не разрешены. Необходимо проверить свойства эксперта.");return(1); case 4200: Print("Объект уже существует.");return(1); case 4201: Print("Запрошено неизвестное свойство объекта.");return(1); case 4202: Print("Объект не существует.");return(1); case 4203: Print("Неизвестный тип объекта.");return(1); case 4204: Print("Нет имени объекта.");return(1); case 4205: Print("Ошибка координат объекта.");return(1); case 4206: Print("Не найдено указанное подокно.");return(1); case 4207: Print("Ошибка при работе с объектом.");return(1); return(0); } return(0); } 2016.10.26 09:56:00.707 2009.01.12 02:40 Ex EURUSD,Daily: invalid lots amount for OrderSend functionтам с лотом ошибка наверное, попробовал нормализовать 2 после запятой, все равно ошибка. Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 26 октября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 октября, 2016 попробуй принтом вывести в лог значение лота перед открытием ордера. будет понятно хотя бы чему равна эта переменная(0 или > максимально допустимого брокером лота) и откуда ноги растут у этой ошибки. Ссылка на сообщение Поделиться на другие сайты More sharing options...
LLIaMaHKO_o Опубликовано 26 октября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 октября, 2016 Уважаемые господа програмеры. Такая ситуация, нужно заглянуть в ex4 нового билда. На сколько я понимаю, MetaQuots что-то там намудрили с защитой и это стало проблематично. НО. Умельцы всегда найдутся что-то вскрыть))) Если кто располагает информацией как заглянуть в исходник из под ex4 буду благодарен за помощь)) Ссылка на сообщение Поделиться на другие сайты More sharing options...
nixxer Опубликовано 26 октября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 октября, 2016 Я располагаю 3 Ссылка на сообщение Поделиться на другие сайты More sharing options...
vitek01 Опубликовано 27 октября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 октября, 2016 индикатор подправленный для алекс профит. Indicators.ex4Indicators.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Daletar Опубликовано 27 октября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 октября, 2016 Есть заготовка индикатора, нужно довести его до нормального состояния.Сейчас он вот так отображает всё. Сплошная линия - один вариант, штриховая - другой.Нужно нормально написать, чтобы он не "задумывался" надолго eurusd-h1-oanda-division1.png Изменено 30 октября, 2016 пользователем Daletar Ссылка на сообщение Поделиться на другие сайты More sharing options...
Alex_Profit Опубликовано 27 октября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 октября, 2016 Можно вас попросить немножко доработать индикатор. Самую малость. Я писал сообщение что именно нужно сделать.Но не знаю получили вы его или нет.Спасибо за отзывчивость. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Pulse Опубликовано 28 октября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 октября, 2016 Нет ли совы для открытия позиций бинарных опционов в заданное время и определённую сторону? Если нет , подскажите пожалуйста как написать. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Volkodrak Опубликовано 28 октября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 октября, 2016 Доброго времени суток, господа программисты!Прошу не судить строго, я еще не спец в программировании. Только учусь. Написал индюка. Но проблема в том, что он не обновляется. То есть новые свечи появляются, а индюк их не обрабатывает. Надо сменить таймфрейм или переключиться между инструментами, тогда индикатор дорисуется. Подскажите, в чем может быть проблема? И еще одна непонятка. Если хочу поменять местами инструменты или перевернуть индикатор (например использую Inst_1_1 = 1/Inst_1_1), то на некоторых таймфреймах перестает отрисовываться средняя на индикаторе (везде отрисовывается, а на H4 и D1 - нет). Может кто то подскажет что это может быть? :/ Вроде ерунда, две строчки кода эта средняя, но никак не могу понять что с ней не так :/Вот код:int OnCalculate (const int rates_total, const int prev_calculated, const datetime& time[], const double& open[], const double& high[], const double& low[], const double& close[], const long& tick_volume[], const long& volume[], const int& spread[]) { int i,limit; limit = rates_total - prev_calculated; if(prev_calculated > 0) limit++; for(i = 0; i { double Inst_1_1 = iClose(Instrument_1_1, 0, i); if(Inst_Per_1_1 == true) Inst_1_1 = 1/Inst_1_1; double Inst_1_2 = iClose(Instrument_1_2, 0, i); if(Inst_Per_1_2 == true) Inst_1_2 = 1/Inst_1_2; Korel_Buffer[ i ]=Inst_1_1 / Inst_1_2; if(Buffers == 2) { double Inst_2_1 = iClose(Instrument_2_1, 0, i); if(Inst_Per_2_1 == true) Inst_2_1 = 1/Inst_2_1; double Inst_2_2 = iClose(Instrument_2_2, 0, i); if(Inst_Per_2_2 == true) Inst_2_2 = 1/Inst_2_2; Korel_Buffer2[ i ]=(Inst_2_1 / Inst_2_2) + Podnyat_Graf; } } if(Ris_Srednyaya == true) { for(i = 0; i { int j = 0; double Summa = 0; for(j = 0; j { Summa = Summa + Korel_Buffer[i+j]; } Srednyaya[ i ] = Summa/j; } } return(rates_total); } Изменено 29 октября, 2016 пользователем Volkodrak Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sergey Forex Опубликовано 29 октября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 октября, 2016 Уважаемые программисты! Как вытянуть числовые значения силы валют (как на скрине) из индикатора CurrencyPowerMeter 2?Пробовал через iCustom, не получается. Индикатор во вложении. Заранее благодарю. CurrencyPowerMeter_2.mq42016-10-29_145406.jpg Ссылка на сообщение Поделиться на другие сайты More sharing options...
Playbo$$ Опубликовано 31 октября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 октября, 2016 Павел, а можно попросить вас с Сергеем сделать полный курс по ООП в MQL4. Пусть даже он будет платным, зато Сергей рассказывает все просто и понятно!!! Очень интересная тема, совсем по другому начал смотреть на программирование. По моему еще рано списывать MQL4. Хотя, потихоньку, по вашим урокам изучаем MQL5. Большое спасибо вам Павел, Сергею и всей команде за ваш труд!!! Ссылка на сообщение Поделиться на другие сайты More sharing options...
pavlus777 Опубликовано 31 октября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 октября, 2016 Павел, а можно попросить вас с Сергеем сделать полный курс по ООП в MQL4. Пусть даже он будет платным, зато Сергей рассказывает все просто и понятно!!! Очень интересная тема, совсем по другому начал смотреть на прогриммироание. По моему еще рано списывать MQL4. Хотя, потихоньку, по вашим урокам изучаем MQL5. Большое спасибо вам Павел, Сергею и всей команде за ваш труд!!! А можно конкретнее, что бы вам хотелось узнать ? 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Playbo$$ Опубликовано 31 октября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 октября, 2016 Мне понравилось как строится сама структура программы, ее проще потом читать. Очень хочу сделать хороший советник на индикаторе Ишимоку, по всем правилам стратегии, а там как раз много данных используется, условия торговли в облаке. Интересует модификация ордеров, подтягивание их за ценой, различные трейлинг-стопы, главное - закрытие убыточных ордеров прибыльными (встречными) именно программой. Также, многие сейчас пытаются писать советники по Price Action, как в программе сделать сравнение свечей, групп свечей, как научить искать паттерны?!Возможно Сергей еще что-то знает интересное в ООП, что мы новички еще даже не догадываемся!!! Изменено 2 ноября, 2016 пользователем Playbo$$ Ссылка на сообщение Поделиться на другие сайты More sharing options...
SilverKZ Опубликовано 1 ноября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 ноября, 2016 Уважаемые программисты! Как вытянуть числовые значения силы валют (как на скрине) из индикатора CurrencyPowerMeter 2?Пробовал через iCustom, не получается. Индикатор во вложении. Заранее благодарю. Добрый день!Индикатор CurrencyPowerMeter 2 подправил, пример получения данных в советнике Simple.Удачных торгов!EURUSDM1.pngCurrencyPowerMeter_2.mq4Simple.mq4 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Дмитрий_2008 Опубликовано 2 ноября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 ноября, 2016 Добрый день. Пытался скомпоновать индикатор для показа свечей определенной величины, но не сложилось. Будьте добры, подправьте. Спасибо! Спойлер //+------------------------------------------------------------------+ //| | //| | //+------------------------------------------------------------------+ #property copyright "" #property version "1.0" #property strict #property indicator_chart_window input int TextSize = 8; //размер шрифта input color TextColor = clrBlueViolet; //цвет текста input int TextAngle = 90; //угол поворота текста input int MaxBar = 100; //количество баров, начиная с 0, для которых вычисляется размер свечей extern int Candle_size = 5;double HL;//+------------------------------------------------------------------+ int OnInit() { return(INIT_SUCCEEDED); } int OnCalculate (const int rates_total, // размер входных таймсерий const int prev_calculated, // обработано баров на предыдущем вызове const datetime &time[], // Time const double &open[], // Open const double &high[], // High const double &low[], // Low const double &close[], // Close const long &tick_volume[], // Tick Volume const long &volume[], // Real Volume const int &spread[]) // Spread { int i; for ( i = 0; i HL = MathAbs(High-Low); //1//фильтр по величине свечи if ( HL>=Candle_size) //2// !!!! если эти две строки убрать то индикатор работает { if ( ObjectFind ("candlesize"+ IntegerToString(i)) >=0 ) { ObjectDelete("candlesize"+ IntegerToString(i)); } ObjectCreate ("candlesize"+ IntegerToString(i), OBJ_TEXT, 0, time, high+StepPer()*Point); ObjectSet ( "candlesize"+IntegerToString(i), OBJPROP_ANGLE, TextAngle ); ObjectSetText ( "candlesize"+IntegerToString(i), DoubleToStr(NormalizeDouble((High-Low+Point)/Point, 0), 0), TextSize, NULL, TextColor ); } return(rates_total); } int StepPer () { int i = 0; switch (Period()) { case PERIOD_M1: i = 5; break; case PERIOD_M5: i = 15; break; case PERIOD_M15: i = 25; break; case PERIOD_M30: i = 40; break; case PERIOD_H1: i = 60; break; case PERIOD_H4: i = 90; break; case PERIOD_D1: i = 220; break; case PERIOD_W1: i = 500; break; case PERIOD_MN1: i = 2000; break; default: break; } return (i); } //+------------------------------------------------------------------+ Добавлено: 02-11-2016 09:57:38по какой-то причине, под спойлером, величины High Low оказались без квадратных скобочек, но в оригинале они присутствуютCanSize_4.mq4 Изменено 2 ноября, 2016 пользователем Дмитрий_2008 Ссылка на сообщение Поделиться на другие сайты More sharing options...
afert Опубликовано 3 ноября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 ноября, 2016 Уважаемые программисты не мог бы кто помочь, есть код с таким условием (hb-начало торговли, he-конец торговли): if (h == false || (h == true && Hour() >= hb && Hour() = hb || Hour() he)) , мне бы хотелось ввести минуты я попробовал вот так: if (h == false || (h == true && Hour() >= hb && Hour() = hb || Hour() he) || (Hour() == hb && Minute() >= mb && Hour() hb) || (Hour() == hb && Hour() == he && Minute() >= mb && Minute() но что то не получается. Ссылка на сообщение Поделиться на другие сайты More sharing options...
dermitay Опубликовано 3 ноября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 ноября, 2016 Уважаемые программисты не мог бы кто помочь, есть код с таким условием (hb-начало торговли, he-конец торговли): if (h == false || (h == true && Hour() >= hb && Hour() = hb || Hour() he)) , мне бы хотелось ввести минуты я попробовал вот так: if (h == false || (h == true && Hour() >= hb && Hour() = hb || Hour() he) || (Hour() == hb && Minute() >= mb && Hour() hb) || (Hour() == hb && Hour() == he && Minute() >= mb && Minute() но что то не получается. есть решение проще. представь часы+минуты как дабловое число, где целая часть = часы, дробная часть = минуты.например:// время началаdouble timeBegin = tmBegin;//текущее времяdouble timeNow = (double)Hour()+(double)Minute()/100;// время концаdouble timeEnd= tmEnd;где tmBegin и tmEnd - внешние дабловые перменные(например 6.00, что означает начало торгов в 6 часов 00 минут, или 20.30, что означает 20 часов 30 минут). ну их и сравниваешь с timeNow.для красоты можно внешние вводить стороковыми, а затем парсить их вычленяя час и минуты. Изменено 3 ноября, 2016 пользователем dermitay Ссылка на сообщение Поделиться на другие сайты More sharing options...
35aleks Опубликовано 3 ноября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 ноября, 2016 Здрасти!Может кто подсказать как прописать при пересечение машек запомнить бар и потом при повторном сигнале найти макс и мин в этом интервале вроде как дожно быть так но самневаюсь//...static datetime timeWork; //.../...timeWork = TimeCurrent();//...//...double PriceMin, PriceMax;int BarLast = iBarShift(Symbol(),0, timeWork); //определяем бар из истории от текущего момента до момента ппоследней обработки данныхif (BarLast>0) //-- Если с момента последней обработки прошло 1 бар и более { PriceMin = Low[ArrayMinimum(Low,BarLast)]; //нахождение минимума PriceMax = High[ArrayMaximum(High,BarLast)]; //нахождение максимума}else //-- Если с момента последней обработки мы все еще находимся на текущем баре { PriceMin = Low[0]; //минимум - минимум текущего бара PriceMax = High[0]; //максимум - максимум текущего бара} Ссылка на сообщение Поделиться на другие сайты More sharing options...
AV-008 Опубликовано 4 ноября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 ноября, 2016 Здравствуйте. Подскажите, пожалуйста, возможно ли написать советник, чтобы он открывал и закрывал ордера (вел торговлю) по командам с со стороннего сервера? И если да, то как это реализовать? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Александр_F Опубликовано 4 ноября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 ноября, 2016 Здравствуйте уважаемые трейдеры. У меня вопрос по 19 уроку MQL "Как написать сеточный советник для Metatrader 4" (обновленный урок 16.04.16). Я по данному уроку написал сеточный советник, однако он работает не полностью, а лишь открывает сделки на продажу. Отлижки на покупку в журнале отсутствуют. Скажите в чем ошибка моего советника? Буду благодарен за любую помощь! _.mq4_.ex4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
SilverKZ Опубликовано 5 ноября, 2016 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 ноября, 2016 Здравствуйте. Подскажите, пожалуйста, возможно ли написать советник, чтобы он открывал и закрывал ордера (вел торговлю) по командам с со стороннего сервера? И если да, то как это реализовать? Добрый день!Я попробую сделать такой советник, о результатах сообщу.Добавлено: 05-11-2016 06:55:25Здравствуйте уважаемые трейдеры. У меня вопрос по 19 уроку MQL "Как написать сеточный советник для Metatrader 4" (обновленный урок 16.04.16). Я по данному уроку написал сеточный советник, однако он работает не полностью, а лишь открывает сделки на продажу. Отлижки на покупку в журнале отсутствуют. Скажите в чем ошибка моего советника? Буду благодарен за любую помощь! Поправил код, граали на уроках тихонько делаете :))3.mq433333.png Изменено 5 ноября, 2016 пользователем SilverKZ 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти