0ll Опубликовано 23 сентября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 сентября, 2014 SergeyNT в Вашем релизе индюка буферы выключены (совсем) - т.е. в них нули...Подправил индюшку: теперь вместе с отрисовкой стрелочки заполняются буфера 0-бычий, 1-медвежий.4X_Bheurekso_Pattern_indikatorforeks.ru.mq4 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
SergeyNT Опубликовано 23 сентября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 сентября, 2014 Вау, заработалоupper=iCustom(Symbol(),Period(),"4X Bheurekso Pattern indikator New",lines,step,Dell,0,1);Благодарю.А в какой строке сделали изменения? Хочу посмотреть как это делается. Изменено 23 сентября, 2014 пользователем SergeyNT Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 23 сентября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 сентября, 2014 Индюшка странная (или у меня что-то не так) - значений в буферах оказывается больше чем стрелочек на графике. Т.е. видимо стрелочки удаляются где-то (т.е. индюк рисует), а значения в буферах остаётся (имхо)Изменения простые (последний вариант): найдите и раскомментируйте строки "ExtMapBuffer1[shift] = " 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
SergeyNT Опубликовано 23 сентября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 сентября, 2014 Понятно. Видел ранее, но не придал этому значение. Ссылка на сообщение Поделиться на другие сайты More sharing options...
oleguitar Опубликовано 23 сентября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 сентября, 2014 А подскажите как сделать, чтобы какой-либо ценовой уровень, скажем, лоу предыдущего дня, отображался в виде линии и с надписью? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 24 сентября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 сентября, 2014 А подскажите как сделать, чтобы какой-либо ценовой уровень, скажем, лоу предыдущего дня, отображался в виде линии и с надписью?Я так делал: ObjName= "Name_"; txt = "Описание"; ObjectCreate (ObjName, OBJ_TREND, 0, StartX, StartY, EndX, EndY); //Х = время, Y=Y = лоу дня ObjectSet (ObjName, OBJPROP_RAY, 0); ObjectSet (ObjName, OBJPROP_WIDTH, 2); //толщина линии ObjectSet (ObjName, OBJPROP_COLOR, DodgerBlue); //цвет ObjectSet (ObjName, OBJPROP_BACK, true); //рисовать под барами ObjectSetString(0, ObjName, OBJPROP_TEXT, txt); //здесь описание ObjectSetString(0, ObjName, OBJPROP_TOOLTIP, txt); //здесь всплывающая подсказка Ссылка на сообщение Поделиться на другие сайты More sharing options...
mid Опубликовано 25 сентября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 сентября, 2014 Добрый день.Я недавно скачал видео уроки , стал изучать делать домашнее задание , а таи изменения.Вопрос где прочитать про эти изменения.Спасибо . Ссылка на сообщение Поделиться на другие сайты More sharing options...
oleguitar Опубликовано 25 сентября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 сентября, 2014 Хочу попробовать заключить в советник самодельный индикатор пивотов просто, линии было бы интересно увидеть при визуальном тестированииОшибок в editor-e нет, но линию не чертит...С объектами впервые работаю, не соображу никак в чем дело... :-? Спойлер extern string BlockSettings2 = " Area "; // Пока не используетсяextern int Area = 2; // Пока не используетсяdouble C, H, L, P, S1, S2, S3, R1, R2, R3;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() { if (Digits == 3 || Digits == 5) { Area *=10; } return(INIT_SUCCEEDED); }void OnDeinit(const int reason) { }//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+void OnTick() { datetime StartTime = iTime(Symbol(), PERIOD_D1, 0); datetime EndTime = TimeCurrent(); H = iHigh(Symbol(),PERIOD_D1,1); C = iClose(Symbol(),PERIOD_D1,1); L = iLow(Symbol(),PERIOD_D1,1); P = (H+L+C)/3; S1 = P-(H-P); S2 = P-(H-L); S3 = L-2*(H-P); R1 = P+(P-L); R2 = P+(H-L); R3 = H+2*(P-L); long current_chart_id=ChartID(); string obj_name = "Line_P"; string txt = "P"; ObjectCreate (current_chart_id, obj_name, OBJ_HLINE, 0, StartTime, P, EndTime, P); ObjectSet (obj_name, OBJPROP_RAY, 0); ObjectSet (obj_name, OBJPROP_WIDTH, 20); ObjectSet (obj_name, OBJPROP_COLOR, Blue); ObjectSetString (0, obj_name, OBJPROP_TEXT, txt); Print("StartTime = " + StartTime + " EndTime = " + EndTime + " P = " + P); } Print сделал для того, чтобы проверить, правильно ли дата берется и нет ли ошибки в подсчете переменной РОшибок, судя по записям в журнале, нет2014.09.25 22:35:16.693 2014.09.24 09:28 Resistance v 0.2 GBPUSD,M15: StartTime = 2014.09.24 00:00:00 EndTime = 2014.09.24 09:28:09 P = 1.63687 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 25 сентября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 сентября, 2014 Ошибок в editor-e нет, но линию не чертит...Я-ж вроде написал пример... Проверьте ObjectCreate . Ссылка на сообщение Поделиться на другие сайты More sharing options...
oleguitar Опубликовано 25 сентября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 25 сентября, 2014 Ошибок в editor-e нет, но линию не чертит...Я-ж вроде написал пример... Проверьте ObjectCreate . Ага, я просто в справочнике такое нашел...Только я думал, что линия будет перерисовываться каждый новый день, но она так и остается на местеИсправил вот таким образом) if (Hour() == 00 && Minute() == 01) { ObjectDelete(obj_name);}Добавлено: 25-09-2014 20:37:02Правда журнал выдает ошибки вот такого характераTestGenerator: unmatched data error (volume limit 1274 at 2014.09.18 13:45 exceeded)TestGenerator: unmatched data error (high value 1.63399 at 2014.09.18 13:58 and price 1.63404 mismatched)TestGenerator: unmatched data error (volume limit 816 at 2014.09.18 13:15 exceeded)Именно в 13:15 и 13:45 для данного дня, для других дней было 8:15 и 8:45, напримерНа всякий даже привел переменную P вот к такому видуP = NormalizeDouble(((H+L+C)/3),5);Но дело не в этом оказалосьПопробовал закомментировать объект, ничего не изменилось, значит дело не в нем...Судя по всему, все это не влияет на подсчеты уровней, но просто не понятно, что это значит Изменено 25 сентября, 2014 пользователем oleguitar Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 26 сентября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 сентября, 2014 Судя по всему, все это не влияет на подсчеты уровней, но просто не понятно, что это значитЭто котиры дырявые (имхо) Ссылка на сообщение Поделиться на другие сайты More sharing options...
oleguitar Опубликовано 26 сентября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 сентября, 2014 Цитата Это котиры дырявые (имхо) Возможно кстати...Еще вопросик: а как узнать результат последней сделки в истории для конкретного советника? (прибыль/убыток)Только не от общего баланса, имеется ввиду, что на счету могут совершаться и другие операции, помимо операций советника. Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 26 сентября, 2014 Автор Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 26 сентября, 2014 Добрый день.Я недавно скачал видео уроки , стал изучать делать домашнее задание , а таи изменения.Вопрос где прочитать про эти изменения.Спасибо . Приветствую!На самом деле практически все старые варианты уроков работают в новых версиях.Нужно только понимать некоторые вещи типа:если в старом варианте была функция start(), где мы размещали основной код, то в новой версии эта функция называется OnTick(), точней это уже событие, а не функция, но это не столь важно.Старая функция init(), теперь как событие OnInit().Остальное всё по аналогии. Удачи в изучении MQL! 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
oleguitar Опубликовано 27 сентября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 27 сентября, 2014 А как узнать результат последней сделки в истории? (прибыль/убыток)Только не от общего баланса, имеется ввиду, что на счету могут совершаться и другие операции, помимо операций советника. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 28 сентября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 сентября, 2014 А как узнать результат последней сделки в истории? (прибыль/убыток)Только не от общего баланса, имеется ввиду, что на счету могут совершаться и другие операции, помимо операций советника.В цикле перебираете закрытые ордера (по истории), фильтруете по магику, ищите самый большой тикет или время закрытия, смотрите прибыль. Примеров полно. Единственная хитрость: перебирать надо ордера с конца и ограничивать количество (или дату открытия) иначе терминал будет подвисать на тестировании на большой истории. Ссылка на сообщение Поделиться на другие сайты More sharing options...
sadradik Опубликовано 28 сентября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 сентября, 2014 пытаюсь учить язык программированиявот что написалint start(){ Comment("Привет");return(0);}в тестере стратегий ничего не отображается...в чем причина? Ссылка на сообщение Поделиться на другие сайты More sharing options...
xbms Опубликовано 28 сентября, 2014 Автор Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 сентября, 2014 пытаюсь учить язык программированиявот что написалint start(){ Comment("Привет");return(0);}в тестере стратегий ничего не отображается...в чем причина? Дружище, в таком виде операция Comment будет видна только в визуальном режиме тестера стратегий, т.е. на экране. Для того, чтобы это увидеть нужно установить галку "Визуализация" и тогда всё будет видно. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
makcforx Опубликовано 29 сентября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 сентября, 2014 Добрый день.Скажите правильное ли решения задачи 1 в 1.5 уроке?А то негде на форуме я не нашел не разбора, не решения этой задачи. 15.jpg Ссылка на сообщение Поделиться на другие сайты More sharing options...
sadradik Опубликовано 29 сентября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 сентября, 2014 ставлю визуализацию. и по прежнему ничего нет Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 29 сентября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 сентября, 2014 ставлю визуализацию. и по прежнему ничего нетКроме Comment() есть Alert() и Print(). Попробуй всех троих (можно одновременно). Ссылка на сообщение Поделиться на другие сайты More sharing options...
sadradik Опубликовано 30 сентября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 сентября, 2014 удалил все что было сверху. оставил толькоint start(){ Comment("Привет");return(0);}и все заработало Ссылка на сообщение Поделиться на другие сайты More sharing options...
oleguitar Опубликовано 1 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 октября, 2014 Попробовал вот так сделать Спойлер double Profit; int TotalOrders=OrdersHistoryTotal(); for(int pos=0; pos { if(OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY) == true) { if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magic) { Profit = OrderCommission()+OrderSwap()+OrderProfit(); } } else Print("Ошибка ", GetLastError()); } if (Profit Сначала лот нормальный идет, но после первого же убытка он приобретает вот такое значение:2014.10.01 13:38:17.606 2014.01.24 03:24 Resistance v 1.0 EURUSD,M15: Lot = 1.#INF2014.10.01 13:38:17.606 2014.01.24 03:24 Resistance v 1.0 EURUSD,M15: Lot = 1.#INFНе понимаю в чем дело... Изменено 1 октября, 2014 пользователем oleguitar Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 1 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 октября, 2014 Сначала лот нормальный идет, но после первого же убытка он приобретает вот такое значение:2014.10.01 13:38:17.606 2014.01.24 03:24 Resistance v 1.0 EURUSD,M15: Lot = 1.#INF2014.10.01 13:38:17.606 2014.01.24 03:24 Resistance v 1.0 EURUSD,M15: Lot = 1.#INFНе понимаю в чем дело...1. Что-б разобраться сделайте: Print("Lot = " + DoubleToStr(Lot,2));2. У Вас есть сброс лота в начальный после профита? - если нет - ошибка.я советую начальный лот и расчётный разнести в разные переменные например РабочийЛот = НачЛот * Мульт;3. Используйте новые возможности MQL: workLot = (Profit 4. Имейте в виду: в Вашем цикле в переменной Profit - профит последнего (в истории) ордера, но Вы перебираете ВСЮ историю (она может быть большая - я писал), поэтому начните с конца! и после Profit = OrderCommission()+OrderSwap()+OrderProfit(); //добавьте:break; 5. Имейте в виду: если сова открыла 1 ордер, потом 2-й, закрыла 2, а потом 1-ый - какой ордер будет последним в истории? Ссылка на сообщение Поделиться на другие сайты More sharing options...
oleguitar Опубликовано 1 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 октября, 2014 Цитата 5. Имейте в виду: если сова открыла 1 ордер, потом 2-й, закрыла 2, а потом 1-ый - какой ордер будет последним в истории? 1-й, как я понимаюПеределал, разбил переменные, добавил функцию FindLastLots Спойлер WLot = Lot;WLotHis = FindLastLots();double Profit; for (int pos = OrdersHistoryTotal()-1; pos>=0; pos--) { if(OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY) == true) { if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magic) { Profit = OrderCommission()+OrderSwap()+OrderProfit(); break; } } else Print("Ошибка ", GetLastError()); } if (Profit { WLot = NormalizeDouble(WLotHis*Multiplier,2); Print("WLot = " + DoubleToStr(WLot,2)); }//+------------------------------------------------------------------+double FindLastLots() { double oldlots; int oldticket; ticket = 0; for (int i = OrdersHistoryTotal()-1; i >=0; i--) { if (OrderSelect( i, SELECT_BY_POS, MODE_HISTORY)== true) { if( OrderSymbol() == Symbol() && OrderMagicNumber() == Magic ) { oldticket = OrderTicket(); if( oldticket > ticket) { oldlots = OrderLots(); ticket = oldticket; } } } } return(oldlots); } Теперь все работает как надо)А правильно ли я понимаю, что если в цикле поставить перебор не от OrdersHistoryTotal()-1, а от OrdersHistoryTotal()-2, то в переменной Profit будет результат предпоследнего ордера? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 1 октября, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 октября, 2014 1-й, как я понимаю2. Сортируется по тикету, поэтому я делаю всё проще - когда ордер открыт - сохраняю его параметры, а после закрытия применяю Цитата А правильно ли я понимаю, что если в цикле поставить перебор не от OrdersHistoryTotal()-1, а от OrdersHistoryTotal()-2, то в переменной Profit будет результат предпоследнего ордера? А если у Вас работает ещё один советник на счёте? и два последних ордера чужие? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти