Robin Hood Опубликовано 3 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 сентября, 2015 Так а NormalizeDouble чем не годится? Есть ли такая функция которая позволяет не округлять а отбрасывать часть знаков после запятой? Или есть способ это как то реализовать?Правильно сделать так, как написал JR, но можно и так:double x = 123,456;int y = (int)x; // результат: y = 123Меня наверно не правильно поняли. Суть проблемы была найти ближайшие к цене круглые уровни. А для этого от цены допустим 1,12355 отбросить последние 3 цифры чтобы осталось 1,12000 Пришлось решать проблему чисто математически: цену 1,12355 делим на 0.00250 получаем 449,42, вот тут уже округляем до целого 449, умножаем на 0,00250 получаем 1,12250 и т.д. 1,12000, 1,12500 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 3 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 сентября, 2015 Пришлось решать проблему чисто математически: цену 1,12355 делим на 0.00250 получаем 449,42, вот тут уже округляем до целого 449, умножаем на 0,00250 получаем 1,12250 и т.д. 1,12000, 1,12500level000 = NormalizeDouble(Bid,2);level100 = NormalizeDouble(Bid,2) + 0.01; 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
kempo Опубликовано 4 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 сентября, 2015 Добрый день уважаемые программисты, возникла проблема...суть: хочу чтобы сов выводил через коммент минимальное значение осциллятора на конкретном временном промежутке...с 6 до 9 часов...попытался сам сделать ...не получилось....прошу помощи...кусок кода: int curtime = curhour * 60 + curmin; int trade_start = OpenHour * 60 + OpenMin; int trade_close = CloseHour * 60 + CloseMin; if(curtime >= Start_calculation * 60 && curtime { for(int i = 0; i { bollinger = iCustom(Symbol(), PERIOD_M5, "Bollinger BandWidth", BBPeriod, StdDeviation, 0, 1); } if(curtime == Finish_calc * 60) { double fgh = bollinger[ArrayMinimum(bollinger, 36, 0)]; } } Comment("минимальное значение = " + fgh); Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 4 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 сентября, 2015 хочу чтобы сов выводил через коммент минимальное значение осциллятора на конкретном временном промежутке...с 6 до 9 часов...У Вас сова и индюк на одном ТФ или разных?- если на одном ТФ, то начиная с старат_тайм по барам анализировать индюк выбирать миним. значение до енд_тайм.- если на разных, то лучше по енд_тайм сделать цикл по барам другого ТФ и выбрать мин. значение индюка. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
kempo Опубликовано 4 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 сентября, 2015 хочу чтобы сов выводил через коммент минимальное значение осциллятора на конкретном временном промежутке...с 6 до 9 часов...У Вас сова и индюк на одном ТФ или разных?- если на одном ТФ, то начиная с старат_тайм по барам анализировать индюк выбирать миним. значение до енд_тайм.- если на разных, то лучше по енд_тайм сделать цикл по барам другого ТФ и выбрать мин. значение индюка. у меня индюк и сова на однов ТФ(М5). только я не понял, т е мне надо делать 36 записей iCustom??Я Вас не понял... Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 4 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 сентября, 2015 у меня индюк и сова на однов ТФ(М5). только я не понял, т е мне надо делать 36 записей iCustom??Я Вас не понял...Нет.в сову приходят котировки и запускается процедура ОнТик()Чтоб не вызывать индюк на каждом тике (может сильно подвесить сову) нужно отслеживать закрытие бара. Ранее выкладывал функцию IsNewBar(). Итак алгоритм:static minBB = 0;if ( Hour() > StartHour && Hour() {if ( IsNewBar() ){ double bb = iCustom(NULL, 0, "Bollinger BandWidth", BBPeriod, StdDeviation, 0, 1); if ( bb }}else { if ( minBB > 0 ) Comment("Min BB =", NormalizeDouble(minBB,_Digits) ); minBB = 0;}Как-то так... 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
kempo Опубликовано 4 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 сентября, 2015 прошу прощения за назойливость, но где Вы выкладывали данную функцию...страниц 10-15 назад отматал...не нашел.. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 4 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 сентября, 2015 bool IsNewBar(){ static datetime new_Bar; if (new_Bar == Time[0]) return(false); //Если бар не закрыт - выход new_Bar = Time[0]; return(true);} 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
kempo Опубликовано 4 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 сентября, 2015 в итоге кодик выглядит вот так....но ничего не происходит...коммент не отображается, и как я понял минимальное значение тоже не находится... помогите пожалуйста Ollvoid OnTick() { int curhour = Hour(); int curmin = Minute(); int curtime = curhour * 60 + curmin; static double minBB = 0; if (curtime > Start_calculation * 60 && curtime { if (IsNewBar()) { double bb = iCustom(NULL, 0, "Bollinger BandWidth", BBPeriod, StdDeviation, 0, 1); if ( bb } } else { if ( minBB > 0 ) { Comment("Min BB = " + minBB); minBB = 0; } }}//+------------------------------------------------------------------+bool IsNewBar(){ static datetime new_Bar; if (new_Bar == Time[0]) return(false); //Если бар не закрыт - выход new_Bar = Time[0]; return(true);} Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 4 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 сентября, 2015 kempo чему равно Start_calculation и Finish_calc ? 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
kempo Опубликовано 4 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 сентября, 2015 kempo чему равно Start_calculation и Finish_calc ? Start_calculation = 6;Finish_calc = 9; Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 4 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 сентября, 2015 Должно работать. Ставьте Принты и отслеживайте ход выполнения программы по логу. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
kempo Опубликовано 4 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 сентября, 2015 Должно работать. Ставьте Принты и отслеживайте ход выполнения программы по логу. Увы но не работает....в журнале пишет ВВмин = 0...и больше ничего...ни ошибок, ни минимального значения...ничего Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 4 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 сентября, 2015 Должно работать. Ставьте Принты и отслеживайте ход выполнения программы по логу. Увы но не работает....в журнале пишет ВВмин = 0...и больше ничего...ни ошибок, ни минимального значения...ничегоПринты вставляли? где?Поясню перед IsNewBar() поставьте Print("Прошли тайм-фильтр");, после вставьте Print("Новый бар");, после вызова индюка вставьте Print("Значение ВВ = ", bb);, и т.д. Потом в "Экспертах" смотрите как отрабатывает, может Индюк не возвращает ничего... 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
kempo Опубликовано 5 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 сентября, 2015 В общем проставил везде принты, какая-то лажа получается:1. время вообще не учитывается, в журнале действия происходят не по времени2. он и должен каждый тик проверять???по идее он должен ведь однократно по закрытию свечи искать минимум3. нашел ошибку с постановкой скобки4. коммент он так и не выводитvoid OnTick() { int curhour = Hour(); int curmin = Minute(); int curtime = curhour * 60 + curmin; static double minBB = 0; if (Hour() > Start_calculation && Hour() { Print("время прошло"); if (IsNewBar()) { Print("Новый бар"); double bb = iCustom(Symbol(), 0, "Bollinger BandWidth", BBPeriod, StdDeviation, 0, 1); Print("bb = " + bb); if ( bb minBB = bb; } else { if ( minBB > 0 ) { Comment("Min BB = " + minBB); minBB = 0; } } } Print("Min BB = " + minBB);} Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 5 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 сентября, 2015 kempo выложи журнал, а то не понятно ничего. индюк выдаёт что-то или нет? Ссылка на сообщение Поделиться на другие сайты More sharing options...
nik171978 Опубликовано 5 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 сентября, 2015 Здравствуйте, может у меня простой вопрос, но Как описать определение цвета индикатора HMA color? (Для меня там слишком много буферов) Ссылка на сообщение Поделиться на другие сайты More sharing options...
kempo Опубликовано 5 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 сентября, 2015 kempo выложи журнал, а то не понятно ничего. индюк выдаёт что-то или нет? 2015.09.05 11:42:24 2015.02.02 09:41 dfgdf EURUSD,M5: Min BB = 02015.09.05 11:42:24 2015.02.02 09:41 dfgdf EURUSD,M5: Min BB = 02015.09.05 11:42:24 2015.02.02 09:41 dfgdf EURUSD,M5: Min BB = 02015.09.05 11:42:24 2015.02.02 09:41 dfgdf EURUSD,M5: Min BB = 0 выдает только это...меняется только время Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 5 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 сентября, 2015 2015.09.05 11:42:24 2015.02.02 09:41 dfgdf EURUSD,M5: Min BB = 0 выдает только это...меняется только времяЭто Ваш последний принт, зачем он там? - на каждом тике спамит, потом в журнале найти ничего нельзя.1. Надо определить работает-ли индюк. (принтом) если что - вытащить его из тайм-фильтра и проверить.2. работа тайм-фильтра.3. нахождение минимума в последнюю очередь.Всё это делай последовательно, исключай ошибки по-шагово.Как описать определение цвета индикатора HMA color? (Для меня там слишком много буферов) Слишком много буферов не бывает - только 8. Посмотрите в МТ какой цвет Вам нужен и найдите номер буфера по цвету в шапке индюка. или сюда выкладывайте индюк. Ссылка на сообщение Поделиться на другие сайты More sharing options...
nik171978 Опубликовано 5 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 сентября, 2015 для HMA colorТам два буфера красным, два зеленым цветом. Как написать что-то типа такого:if (зелёный){что-то сделать}if (красный){что-то сделать} HMA_Color.mq4 Изменено 5 сентября, 2015 пользователем nik171978 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 5 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 сентября, 2015 nik171978Когда Вы видите цветную линию(точку) значит в каком-то буфере есть значение = уровню цены в данной точке (для конкретного бара)Значит будет выглядеть так:1. double buf1 = iCustom(NULL, 0, "HMA Color", 20, 0, 3, TRUE, 2, 0, /*№буфера-*/ 1, /*№бара-*/ 1);2. if ( buf1 > 0 ) { /*появилось значение (точка на экране) - выполняем команды*/ }3. №буферов для зелёного 1 и 2, для красного - 3 и 4. жёлтый - 0. Какой буфер использовать - не знаю, пробуй.ПС: имей в виду некоторые индюки рисуют - т.е. изменяют значения буферов на не 0-баре. В сове это выглядит так: открываешь сделку на 1-баре по значению индюка, потом смотришь на истории - сделки не могло быть, но это не так - сова не обманет... 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
nik171978 Опубликовано 5 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 сентября, 2015 nik171978Когда Вы видите цветную линию(точку) значит в каком-то буфере есть значение = уровню цены в данной точке (для конкретного бара)Значит будет выглядеть так:1. double buf1 = iCustom(NULL, 0, "HMA Color", 20, 0, 3, TRUE, 2, 0, /*№буфера-*/ 1, /*№бара-*/ 1);2. if ( buf1 > 0 ) { /*появилось значение (точка на экране) - выполняем команды*/ }3. №буферов для зелёного 1 и 2, для красного - 3 и 4. жёлтый - 0. Какой буфер использовать - не знаю, пробуй.ПС: имей в виду некоторые индюки рисуют - т.е. изменяют значения буферов на не 0-баре. В сове это выглядит так: открываешь сделку на 1-баре по значению индюка, потом смотришь на истории - сделки не могло быть, но это не так - сова не обманет... Спасибо) Буду пробовать. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Сахалинец Опубликовано 6 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 сентября, 2015 Я дико извеняюсь, но просмотрел 1 урок 5 раз. Ни нащёл где описана команда которая в " зависимости от заданной во внешних параметрах переменной X "( Это из дз) Полсмотрел курс 1.5 там сказано что команду Count мы с вами проходили. Полностью запутался. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 6 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 сентября, 2015 Сахалинец в чём вопрос? то, что запутались это мы поняли... 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Сахалинец Опубликовано 6 сентября, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 сентября, 2015 Домашнее задание из урока 1 : "Напишите программу (советник), который в зависимости от заданной во внешних параметрах переменной X, выведет информацию в виде сообщения " . В первом уроке нет описания как обратиться к внешней переменной. Например x = (Что то там) . А в советнике я выбираю чему равен х 1 или 2. Или я что то не так понял. Может курс урезанный т.к. скачивал со старонних источников с сайта не даёт ссылку. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти