Перейти к содержанию

Обучение языку MQL4 под MetaTrader 4


Рекомендуемые сообщения

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Так а 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
Ссылка на сообщение
Поделиться на другие сайты

  • Ответов 6,8k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Смотрим видео-уроки, изучаем MQL:       Скачать видеокурс «MQL программирование. Как самому написать форекс советник/ индикатор/ скрипт»   P.S. Тема про Обучение MQ

Перейти

Циклы цикл for Иногда необходимо повторять одно и то же действие несколько раз подряд. Для этого используют циклы. К примеру, мы хотим проанализировать последние 10 баров и выяснить наименьшую цен

Перейти

Речь идет о том, что не будет значимых нововведений. А только баги периодически будут править. А вот все новое мол - в МТ5. Когда они вживую сказали то же самое на конференции в Москве, я уточнил: "То

Перейти
Обучение языку MQL4 под MetaTrader 4 Опубликовано


Пришлось решать проблему чисто математически: цену 1,12355 делим на 0.00250 получаем 449,42, вот тут уже округляем до целого 449, умножаем на 0,00250 получаем 1,12250 и т.д. 1,12000, 1,12500

level000 = NormalizeDouble(Bid,2);
level100 = NormalizeDouble(Bid,2) + 0.01;
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Добрый день уважаемые программисты, возникла проблема...суть: хочу чтобы сов выводил через коммент минимальное значение осциллятора на конкретном временном промежутке...с 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);

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

хочу чтобы сов выводил через коммент минимальное значение осциллятора на конкретном временном промежутке...с 6 до 9 часов...

У Вас сова и индюк на одном ТФ или разных?
- если на одном ТФ, то начиная с старат_тайм по барам анализировать индюк выбирать миним. значение до енд_тайм.
- если на разных, то лучше по енд_тайм сделать цикл по барам другого ТФ и выбрать мин. значение индюка.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


хочу чтобы сов выводил через коммент минимальное значение осциллятора на конкретном временном промежутке...с 6 до 9 часов...

У Вас сова и индюк на одном ТФ или разных?
- если на одном ТФ, то начиная с старат_тайм по барам анализировать индюк выбирать миним. значение до енд_тайм.
- если на разных, то лучше по енд_тайм сделать цикл по барам другого ТФ и выбрать мин. значение индюка.

у меня индюк и сова на однов ТФ(М5). только я не понял, т е мне надо делать 36 записей iCustom??Я Вас не понял...
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


у меня индюк и сова на однов ТФ(М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
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

прошу прощения за назойливость, но где Вы выкладывали данную функцию...страниц 10-15 назад отматал...не нашел..

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

bool IsNewBar()
{
static datetime new_Bar;
if (new_Bar == Time[0]) return(false); //Если бар не закрыт - выход
new_Bar = Time[0]; return(true);
}

  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

в итоге кодик выглядит вот так....но ничего не происходит...коммент не отображается, и как я понял минимальное значение тоже не находится... помогите пожалуйста Oll

void 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);
}

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Должно работать. Ставьте Принты и отслеживайте ход выполнения программы по логу.

  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Должно работать. Ставьте Принты и отслеживайте ход выполнения программы по логу.


Увы но не работает....в журнале пишет ВВмин = 0...и больше ничего...ни ошибок, ни минимального значения...ничего
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано



Должно работать. Ставьте Принты и отслеживайте ход выполнения программы по логу.


Увы но не работает....в журнале пишет ВВмин = 0...и больше ничего...ни ошибок, ни минимального значения...ничего
Принты вставляли? где?
Поясню перед IsNewBar() поставьте Print("Прошли тайм-фильтр");, после вставьте Print("Новый бар");, после вызова индюка вставьте Print("Значение ВВ = ", bb);, и т.д. Потом в "Экспертах" смотрите как отрабатывает, может Индюк не возвращает ничего...
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

В общем проставил везде принты, какая-то лажа получается:
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);
}

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
kempo выложи журнал, а то не понятно ничего. индюк выдаёт что-то или нет?
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Здравствуйте, может у меня простой вопрос, но
Как описать определение цвета индикатора HMA color? (Для меня там слишком много буферов)

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


kempo выложи журнал, а то не понятно ничего. индюк выдаёт что-то или нет?


2015.09.05 11:42:24 2015.02.02 09:41 dfgdf EURUSD,M5: Min BB = 0
2015.09.05 11:42:24 2015.02.02 09:41 dfgdf EURUSD,M5: Min BB = 0
2015.09.05 11:42:24 2015.02.02 09:41 dfgdf EURUSD,M5: Min BB = 0
2015.09.05 11:42:24 2015.02.02 09:41 dfgdf EURUSD,M5: Min BB = 0
выдает только это...меняется только время
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


2015.09.05 11:42:24 2015.02.02 09:41 dfgdf EURUSD,M5: Min BB = 0
выдает только это...меняется только время

Это Ваш последний принт, зачем он там? - на каждом тике спамит, потом в журнале найти ничего нельзя.
1. Надо определить работает-ли индюк. (принтом) если что - вытащить его из тайм-фильтра и проверить.
2. работа тайм-фильтра.
3. нахождение минимума в последнюю очередь.
Всё это делай последовательно, исключай ошибки по-шагово.


Как описать определение цвета индикатора HMA color? (Для меня там слишком много буферов)

Слишком много буферов не бывает - только 8. Посмотрите в МТ какой цвет Вам нужен и найдите номер буфера по цвету в шапке индюка. или сюда выкладывайте индюк.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

для HMA color
Там два буфера красным, два зеленым цветом. Как написать что-то типа такого:
if (зелёный)
{
что-то сделать
}

if (красный)
{
что-то сделать
}

HMA_Color.mq4

Изменено пользователем nik171978
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
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
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


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-баре по значению индюка, потом смотришь на истории - сделки не могло быть, но это не так - сова не обманет...



Спасибо) Буду пробовать.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Я дико извеняюсь, но просмотрел 1 урок 5 раз. Ни нащёл где описана команда которая в " зависимости от заданной во внешних параметрах переменной X "( Это из дз) Полсмотрел курс 1.5 там сказано что команду Count мы с вами проходили. Полностью запутался.

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Домашнее задание из урока 1 : "Напишите программу (советник), который в зависимости от заданной во внешних
параметрах переменной X, выведет информацию в виде сообщения " . В первом уроке нет описания как обратиться к внешней переменной. Например x = (Что то там) . А в советнике я выбираю чему равен х 1 или 2. Или я что то не так понял. Может курс урезанный т.к. скачивал со старонних источников с сайта не даёт ссылку.

Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • Рекомендуемые брокеры

  • ×
    ×
    • Создать...