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

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


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

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


Парни, такая проблема... А возможно получить данные с другого периода при тестировании 99.9 в Тикстори? У меня например, при тестировании советника на м15, обычная функция iClose(Symbol(), PERIOD_M1, 1) отдает нули, т.е. с м1 данные не подгружает. Сами понимаете, при тестировании индикаторов и функций с значениями периодов отличными от текущего будут косяки.



Может слишком поздно реагирую, но очень часто встречаю такие стереотипы.
В ТЕСТЕРЕ Все прекрасно работает

и iOpen
и iClose
и iHigh
и iLow
и iTime
и iVolume

В моем примере есть fxt только для М5, а все iOpen.... тянут с М1 и все показывают и 0 баре и на 1 баре.
Источником данных скорее всего являются hst файлы вот они должны быть для всех ТФ.

Hst файлы автоматом должны все делаться, главное галочку в тикстори поставить
Generate HST files - одна галка для всех ТФ сразу.

А вот когда речь идет не о ТЕСТЕРЕ, а о РЕАЛЕ, то тут сбойная iClose..... может дать результат, а может и не дать. И каждый вызов iClose..... надо контролировать на успешность выполнения GetLastError. Вот здесь начинается гемор.

Пример

iOpenW1_0 = iOpen(NULL, PERIOD_W1, 0);

Err_GetLast = GetLastError();

if(iOpenW1_0 == 0 || Err_GetLast != 0)
{
if(Err_GetLast != 4059) //
{
Print(Symbol(), " !!! NEWBAR iOpenW1_0 Err= ", Err_GetLast);

Print(" }

if(!IsTesting() && !IsOptimization() ) return;
}

Постоянным обращением к серверу функция iOpen со временем заставит подкачать нужные данные, но надо ждать и постоянно обращаться.

iClose....png
Folder.png
0_Comment.mq4

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

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

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

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

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

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

Перейти

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

Перейти

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

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


На MQL4 , вроде бы, возможно ООП. А как создать свою библиотеку классов, чтобы их можно было потом использовать в своих программах?



Примеры реализации классов на ОПП есть в папке ...MQL4\Include

очень много простых наглядных классов в папке
... MQL4\Include\ChartObjects
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Здравствуйте! Проделал по видео урок по "Классам". Уже несколько раз проверил, ошибок нет, в editore компилит без ошибок и предупреждений, а в тестере стратегий (в журнале выдаёт): invalid pointer access in 'Lesson_Class.mq4' (126,32). Ругается на ES.SignalOpen() и аналогичные в условиях if, в функции void OnTick(). Никто с таким не сталкивался?! Код прилагаю, может кто посмотрит и подскажет:)
Так же, хочу обратиться конкретно к Сергею и предложить рассмотреть тему, следующего характера. Допустим, пишем советник по индикатору, который у нас есть с открытым кодом. Задача: наш советник должен состоять из одного файла, без вспомогательных файлов (файла индикатора). Вопрос: можно ли вписать код индикатора в код советника, чтобы все обращения были внутри одного файла. Спасибо.

Lesson_Class.mq4

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
serpent989, посмотрите. Может, найдете что-то более свежее.
http://articles.mql4.com/ru/309
Ссылка на сообщение
Поделиться на другие сайты

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


Здравствуйте! Проделал по видео урок по "Классам". Уже несколько раз проверил, ошибок нет, в editore компилит без ошибок и предупреждений, а в тестере стратегий (в журнале выдаёт): invalid pointer access in 'Lesson_Class.mq4' (126,32). Ругается на ES.SignalOpen() и аналогичные в условиях if, в функции void OnTick(). Никто с таким не сталкивался?! Код прилагаю, может кто посмотрит и подскажет:)
Так же, хочу обратиться конкретно к Сергею и предложить рассмотреть тему, следующего характера. Допустим, пишем советник по индикатору, который у нас есть с открытым кодом. Задача: наш советник должен состоять из одного файла, без вспомогательных файлов (файла индикатора). Вопрос: можно ли вписать код индикатора в код советника, чтобы все обращения были внутри одного файла. Спасибо.



А может вам надо это-

"Работа с пользовательскими индикаторами, подключенными в качестве ресурсов
Для работы mql4-программ может потребоваться один или несколько пользовательских индикаторов, все они могут быть включены в код исполняемой mql4-программы. Включение индикаторов в качестве ресурсов позволяет упростить распространение программ."

тогда сюда
_http://docs.mql4.com/ru/runtime/resources
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

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

Объясните пожалуйста как тут работает флаг, а точнее обновление котировок происходит с каждым циклом или нет и почему? Я считаю, что обновление происходит на каждом новом цикле, пока if(IsTradeContextBusy())==true

if(IsTradeContextBusy()) // True, если поток для выполнения торговых операций занят
{
Print("Торговый поток занят. Ждем 3 сек...");
Sleep(3000);
Delay=True; // Устанавливаем флаг - в работе цикла была задержка и необходимо обновление котировок
// Значит if(Delay) обновляет котировки
continue; // Уходим на начало цикла
}

if(Delay)// Если во время выполнения цикла была задержка
{
RefreshRates();//Обновляем котировки доступные советнику
Delay=False;//И сбрасываем флаг наличия задержки
}

И верхний код равнозначен этому:

if(IsTradeContextBusy()) // True, если поток для выполнения торговых операций занят
{
Print("Торговый поток занят. Ждем 3 сек...");
Sleep(3000);
RefreshRates();//Обновляем котировки доступные советнику
continue; // Уходим на начало цикла
}

Или я полный ОЛЕНЬ!

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

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

Играюсь с графическими элементами на графике. К примеру, от экстремумов отложить 200пп и нарисовать прямоугольник. Прикольная штука, чтобы облегчить себе жизнь и не использовать фибо сеткой или трендовой линией как линейкой.

Но, столкнулся с одной проблемой. Хочу отложить значение ATR от хая/лоя. Как узнать значение ATR на том баре, от которого и нужно отложить на расстоянии ATR прямоугольник?

Как определить экстремум среди небольшой "кучи" свечей - это сделано. Но с ATR гемор, т.к. он постоянно меняется.

Я думал iShiftBar и iBars использовать. Но как, хз. В самой iATR есть параметр shift. Вот туда и нужно, я так думаю, задавать смещение, которое и должно указывать на тот самый бар.

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

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


Или я полный ОЛЕНЬ!

:d
Где код цикла? или Вы имели ввиду OnTick()?
функция Sleep(3000); - вешает терминал, т.е. пока не пройдёт 3 сек исполнение кода не будет...

Обычно определяют количество попыток коннекта, потом в цикле по количеству попыток отправляют запросы серверу и в зависимости от ошибки или Слип+новая попытка или выход.
Ссылка на сообщение
Поделиться на другие сайты

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



Или я полный ОЛЕНЬ!

:d
Где код цикла? или Вы имели ввиду OnTick()?
функция Sleep(3000); - вешает терминал, т.е. пока не пройдёт 3 сек исполнение кода не будет...

Обычно определяют количество попыток коннекта, потом в цикле по количеству попыток отправляют запросы серверу и в зависимости от ошибки или Слип+новая попытка или выход.


Я просто не весь код отобразил! Да уже разобрались с хозяином этого кода! Спасибо!
Ссылка на сообщение
Поделиться на другие сайты

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

Прошу совета у знающих. Такая ситуация: Пишу советник. Стоит на М30. При пересечении быстрой и медленной машек на текущем баре - сигнал на открытие позиции. Открыли ордер.
И если ордер закрылся на этом же текущем баре, то, т.к. условия на вход еще актуальны, он снова открывает позицию, а цена уже не выгодная.
Как запретить советнику открывать повторный ордер на том же баре?

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

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

Делать проверку на новый бар. Тут в теме была функция от Oll, не так давно, поищите.

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

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

Коллеги, подскажите, пожалуйста, почему для советника компилятор выдает предупреждение "no OnStart function defined in the script"?

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Sergey Forex введите переменную дататайм и присваивайте ей время открытия бара на котором открыли сделку, а потом сравнивайте при следующей попытке открытия. примерно так:

static datetime dt_open = 0;
if ( signal_open() && Time[0] != dt_open )
{
dt_open = Time[0];
SendOrder(...);
}

Arius777 компилятору кажется, что Вы делаете скрипт... Внимательнее посмотрите заголовки.
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

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


Коллеги, подскажите, пожалуйста, почему для советника компилятор выдает предупреждение "no OnStart function defined in the script"?



Наверно Вы используете функцию Start() (которая используется обычно в скриптах) вместо OnTick().
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Это было бы слишком легко, если так. )))
На будущее для новичков - у меня в заголовках стояла директива - #property show inputs, которая работает только для скриптов, поэтому компилятор ищет дальше, где же этот OnStart...
Прошу прощения за такой поспешный вопрос - новичкам это свойственно...))

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

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

Добрый день! Помогите написать сову простую, суть оной в том, чтобы блокировать любые операции над ордерами (открытие, закрытие, модификация) в течении трех минут, потом одна секунда на эти операции, потом снова блокировка.

Теперь расскажу подробно. Есть у меня советник, купил его за 150 бакинских. Торгует так себе ни в плюс ни в минус, но для адекватной торговли ему надо сделать такие перерывы - три минуты ждет, потом закрыл ордер, открыл новый и снова ждет. Так как разработчик отказался сам добавить такую функцию, думаю как самому это сделать. Думаю вторым советником на втором графике. Только вот не могу найти функции на блокировку выполнений операций и обработку ожидания.

Помогите добить эту тему, уж очень жаль если деньги просто так отдал((

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

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

Блокировать операции другой совы нельзя.
Но можно повесить терминал на 3 сек. после появления нового ордера с помощью Sleep(3000);

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

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

по-моему, это невозможно.

как ты "займешь" торговый поток чтобы на сервер брокера не посылалась ни одна команда OrderSend/Modify/Close/Delete не вмешиваясь в код самого mt4?

Oll, разве Sleep не вешает основной исполняемый код данного советника? причем здесь код другой совы, работающей вобще параллельно?

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Kiman, если бот в mq4, выкладывайте - один хрен реально использовать не можете.
А если программисты отшаманят бота, то может и деньги отобьёте.
Жаться уже смысла нет...
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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


Kiman, если бот в mq4, выкладывайте - один хрен реально использовать не можете.
А если программисты отшаманят бота, то может и деньги отобьёте.
Жаться уже смысла нет...



В том то и дело, что не в mq4, иначе я бы не стал делать все через вторую сову.

Добавлено: 09-01-2016 20:08:20


по-моему, это невозможно.

как ты "займешь" торговый поток чтобы на сервер брокера не посылалась ни одна команда OrderSend/Modify/Close/Delete не вмешиваясь в код самого mt4?

Oll, разве Sleep не вешает основной исполняемый код данного советника? причем здесь код другой совы, работающей вобще параллельно?



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

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

Есть тема. Нужно сделать машку со смещением по оси У в процентном отношении и в ту и в другую сторону, должно получиться три машки в виде болинджера...
Есть вот такая хрень, но он по оси У плавает как болинджер, то дальше от средней, то ближе, а надо чтобы не плавал...

Спойлер

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

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

Оборвать соединение можно, но геморрой. все совы в МТ4 работают в одном потоке, когда одна сова спит - спят все.

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

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


Оборвать соединение можно, но геморрой. все совы в МТ работают в одном потоке, когда одна сова спит - спят все.



то есть если у меня запущено 3 совы в одном терминале и если в одной из них пропишу Sleep(овердохренацифр) то все 3 совы этого терминала будут "спать"? :-o @-) :-o

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

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


Оборвать соединение можно, но геморрой. все совы в МТ работают в одном потоке, когда одна сова спит - спят все.


понял, жаль.

Спасибо всем, кто подсказал.

Добавлено: 09-01-2016 20:41:01


Оборвать соединение можно, но геморрой. все совы в МТ работают в одном потоке, когда одна сова спит - спят все.



Стапэ! Т.е. если я в сове напишу через каждую секунду спать 3 минуты, то первая сова ничего не сможет сделать? Так то что надо же :)

Попробую. Если кому интересно, что за советник, то в лс пишите, а то ведь интеллектуальная собственность, еще покарают за выкладывание. Изменено пользователем Kiman
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Войти

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

Войти

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


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

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