Rigal Опубликовано 4 января, 2020 Поделиться [Библиотека] Работа с новостями Опубликовано 4 января, 2020 (изменено) Намедни занялся я подключением новостного индикатора к одному из советников. Выбрал urdala_news, зарекомендовавший себя в Генерике. Задача сама по себе нехитрая, но после запуска советника в тестере я заметил, что он регулярно сообщает мне о попытках загрузить новости. И возвращает он одно значение: новости в интервале, или нет. А если мне чуть более интересную логику хочется, с закрытием в один интервал, запретом открытия в другой - это к нему нужно несколько раз обратиться. Заглянул я в код и ужаснулся - на вызов основной функции индикатора он что только не делает. А потом еще, чтобы поделиться этим советником, нужно поделиться индикатором... В общем, написал я подключаемый модуль, который делает все то же самое, но эффективно - и можно позвать его напрямую из советника и получить структуру вида struct NewsCheckStatus { int minutesSinceLastNews; int minutesToNextNews; }; Соответственно, объект этот можно получать не чаще раза в минуту и повсеместно переиспользовать. Технические детали: Для использования библиотеки нужно ее подключить и создать экземпляр класса NewsLoader: NewsLoader(int _serverGMTOffset, string _currencies = "", bool _high = true, bool _medium = true, bool _low = true, bool _drawLines = true, bool _onlyDrawFutureNews = false, color _colorHigh = clrRed, color _colorMedium = clrLime, color _colorLow = clrBlue, int _refreshPeriodSeconds = 86400) Параметры конструктора: serverGMTOffset - сдвиг брокера от GMT. Этот параметр может меняться за время жизни советника из-за DST, ниже я объясню, как с этим бороться currencies - строка с набором валют через запятую. Определяет, по каким валютам вы хотите фильтровать новости. Если строка пустая, используются две валюты текущего символа high, medium, low - фильтрация по волатильности новости: если вы не хотите учитывать малозначимые новости, например, поставьте low в false drawLines - рисовать ли вертикальные линии на чарте onlyDrawFutureLines - рисовать только линии в будущем colorHigh, colorMedium, colorLow - цвета соответствующих линий refreshPeriodSeconds - как часто перекачивать новости с сервера. Не злоупотребляйте, эта операция занимает несколько секунд и будет выполнена на одном из обращений из основной программы, запросто может притормозить торговый процесс в важный момент Как я уже упомянул, в определенный момент за счет перехода на летнее время GMT сдвиг меняется. Новости же поставляются по времени GMT, поэтому, если ничего не делать, они будут отображаться и обсчитываться неправильно - со сдвигом в час. Если ваша программа умеет обрабатывать DST (например, вы используете мою библиотеку для работы с планировщиком), то достаточно оповестить NewsLoader о новом GMT: void SetGMTOffset(int _offset) Он все пересчитает и перерисует (только грядущие новости). Операция незатратная, можно просто отсылать оффсет на каждом тике, например, так: NewsCheckStatus newsCheckStatus; tradeTimeStatus = tradeTimeManager.GetTradeTimeStatus(); if (UseNewsFilter) { newsLoader.SetGMTOffset(tradeTimeManager.GetLiveGMTOffset()); newsLoader.CheckNewsStatus(newsCheckStatus); } Опросить библиотеку можно двумя способами: void CheckNewsStatus(NewsCheckStatus &newsCheckStatus) Эта функция вернет вышеупомянутую структуру, которую можно использовать, например, так: if (newsCheckStatus.minutesSinceLastNews >= TimeAfterNews && newsCheckStatus.minutesToNextNews > TimeBeforeNews) isOrderOpened = CheckOpen(); Или так: if (UseNewsFilter && CloseTimeBeforeNews != 0 && newsCheckStatus.minutesToNextNews <= CloseTimeBeforeNews) //фильтр новостей CloseAll(IntegerToString(CloseTimeBeforeNews) + " minutes before news"); А можно просто спросить, нет ли новостей в интервале: bool IsNews(int _minutesBefore, int _minutesAfter) Подключение новостей в тестере: Скачиваем скрипт с маркета: https://www.mql5.com/ru/market/product/23961 Запускаем его с выбранными датами. Когда закончит, заходим в папочку MQL4/files и копируем файл Calendar.txt в папочку tester/files Все, новости работают на истории (не забываем выставить правильный GMT offset) Всем профитов! UrdalaNewsLoader.mqh Изменено 19 июля, 2020 пользователем Rigal добавил как подключить новости в тестере 11 2 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
x25bg Опубликовано 17 июля, 2020 Поделиться [Библиотека] Работа с новостями Опубликовано 17 июля, 2020 (изменено) to @Rigal Ошибки нет? Это не старая версия? В тестере не работает, файлик Calendar.txt есть, в mqh его никто не пытается открыть. 3 17:34:40.064 TestGenerator: symbol EURUSD period 5 model 0 from 2015.01.01 to 2020.07.02 2 17:34:40.084 2015.01.01 00:00:00 SandboxTime inputs: BrokerGMTOffsetWinter=2; BrokerDstMode=1; TargetGMTOffsetWinter=-5; TargetDSTMode=2; OpenOrdersInRollover=1; CloseOrdersInRollover=1; FreezeMinutesBeforeRollover=5; FreezeMinutesAfterRollover=15; ... 0 17:34:40.150 2015.01.01 22:00:01 SandboxTime EURUSD,M5: Новости загружены, всего: 69, вычищаем старые... ... 0 17:34:40.150 2015.01.01 22:00:01 SandboxTime EURUSD,M5: Курсор установлен в позицию 0, ближайшая новость выходит в 2020.07.13 09:30:00 по GMT, 2020.07.13 11:30:00 по брокеру bash-3.2$ grep 2015.01 Calendar.txt |grep "USD;H;" |head -n3 2015.01.02 15:00;USD;H;ISM Manufacturing PMI 2015.01.06 15:00;USD;H;ISM Non-Manufacturing PMI 2015.01.07 13:15;USD;H;ADP Non-Farm Employment Change bash-3.2$ grep -c Calendar UrdalaNewsLoader.mqh UrdalaNewsLoader.mqh:0 bash-3.2$ grep -c txt UrdalaNewsLoader.mqh UrdalaNewsLoader.mqh:0 Изменено 17 июля, 2020 пользователем x25bg 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rigal Опубликовано 19 июля, 2020 Автор Поделиться [Библиотека] Работа с новостями Опубликовано 19 июля, 2020 В 17.07.2020 в 22:45, x25bg сказал: to @Rigal Ошибки нет? Это не старая версия? В тестере не работает, файлик Calendar.txt есть, в mqh его никто не пытается открыть. 3 17:34:40.064 TestGenerator: symbol EURUSD period 5 model 0 from 2015.01.01 to 2020.07.02 2 17:34:40.084 2015.01.01 00:00:00 SandboxTime inputs: BrokerGMTOffsetWinter=2; BrokerDstMode=1; TargetGMTOffsetWinter=-5; TargetDSTMode=2; OpenOrdersInRollover=1; CloseOrdersInRollover=1; FreezeMinutesBeforeRollover=5; FreezeMinutesAfterRollover=15; ... 0 17:34:40.150 2015.01.01 22:00:01 SandboxTime EURUSD,M5: Новости загружены, всего: 69, вычищаем старые... ... 0 17:34:40.150 2015.01.01 22:00:01 SandboxTime EURUSD,M5: Курсор установлен в позицию 0, ближайшая новость выходит в 2020.07.13 09:30:00 по GMT, 2020.07.13 11:30:00 по брокеру bash-3.2$ grep 2015.01 Calendar.txt |grep "USD;H;" |head -n3 2015.01.02 15:00;USD;H;ISM Manufacturing PMI 2015.01.06 15:00;USD;H;ISM Non-Manufacturing PMI 2015.01.07 13:15;USD;H;ADP Non-Farm Employment Change bash-3.2$ grep -c Calendar UrdalaNewsLoader.mqh UrdalaNewsLoader.mqh:0 bash-3.2$ grep -c txt UrdalaNewsLoader.mqh UrdalaNewsLoader.mqh:0 Я, откровенно говоря, не очень внимательно следил за состоянием библиотеки vs заявленный функционал - и очевидно, версия была старовата. Перезалил, в том числе чтение Calendar.txt 3 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
x25bg Опубликовано 20 июля, 2020 Поделиться [Библиотека] Работа с новостями Опубликовано 20 июля, 2020 to @Rigal Спасибо! Стало сильно лучше, работает, но... 2020.07.20 21:17:08.784 EURUSD,M5: 162784120 tick events (411383 bars, 162784120 bar states) processed in 0:20:28.829 (total time 0:20:28.829) 2020.07.20 21:17:08.784 2020.07.02 23:59:59 SandboxTime EURUSD,M5: 221424 bytes of leaked memory 2020.07.20 21:17:08.784 2020.07.02 23:59:59 SandboxTime EURUSD,M5: 6634 leaked strings left 2020.07.20 21:17:08.784 2020.07.02 23:59:59 SandboxTime EURUSD,M5: 2211 objects of type NewsEntry left 2020.07.20 21:17:08.784 2020.07.02 23:59:59 SandboxTime EURUSD,M5: 1 object of type CArrayObj left 2020.07.20 21:17:08.784 2020.07.02 23:59:59 SandboxTime EURUSD,M5: 1 object of type NewsLoader left 2020.07.20 21:17:08.784 2020.07.02 23:59:59 SandboxTime EURUSD,M5: 2213 undeleted objects left Может подчистим, доведем до ума? Честно признаюсь, библиотека выше моего уровня программирования, сам исправить не могу, как минимум, быстро. SandboxTime.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rigal Опубликовано 2 февраля, 2021 Автор Поделиться [Библиотека] Работа с новостями Опубликовано 2 февраля, 2021 В 21.07.2020 в 03:16, x25bg сказал: to @Rigal Спасибо! Стало сильно лучше, работает, но... 2020.07.20 21:17:08.784 EURUSD,M5: 162784120 tick events (411383 bars, 162784120 bar states) processed in 0:20:28.829 (total time 0:20:28.829) 2020.07.20 21:17:08.784 2020.07.02 23:59:59 SandboxTime EURUSD,M5: 221424 bytes of leaked memory 2020.07.20 21:17:08.784 2020.07.02 23:59:59 SandboxTime EURUSD,M5: 6634 leaked strings left 2020.07.20 21:17:08.784 2020.07.02 23:59:59 SandboxTime EURUSD,M5: 2211 objects of type NewsEntry left 2020.07.20 21:17:08.784 2020.07.02 23:59:59 SandboxTime EURUSD,M5: 1 object of type CArrayObj left 2020.07.20 21:17:08.784 2020.07.02 23:59:59 SandboxTime EURUSD,M5: 1 object of type NewsLoader left 2020.07.20 21:17:08.784 2020.07.02 23:59:59 SandboxTime EURUSD,M5: 2213 undeleted objects left Может подчистим, доведем до ума? Честно признаюсь, библиотека выше моего уровня программирования, сам исправить не могу, как минимум, быстро. SandboxTime.mq4 3 \u043a\u0411 · 3 загрузки А я что-то все пропустил В сэндбоксе просто не удалялись объекты. А нужно 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Mikhail321 Опубликовано 1 августа, 2022 Поделиться [Библиотека] Работа с новостями Опубликовано 1 августа, 2022 В 04.01.2020 в 21:37, Rigal сказал: Подключение новостей в тестере: Скачиваем скрипт с маркета: https://www.mql5.com/ru/market/product/23961 Файл остался у кого-нибудь? по ссылке уже нет( Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rigal Опубликовано 5 августа, 2022 Автор Поделиться [Библиотека] Работа с новостями Опубликовано 5 августа, 2022 В 01.08.2022 в 23:17, Mikhail321 сказал: Файл остался у кого-нибудь? по ссылке уже нет( https://www.mql5.com/ru/search#!keyword=Pro download news 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Mikhail321 Опубликовано 6 августа, 2022 Поделиться [Библиотека] Работа с новостями Опубликовано 6 августа, 2022 21 час назад, Rigal сказал: https://www.mql5.com/ru/search#!keyword=Pro download news Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rigal Опубликовано 6 августа, 2022 Автор Поделиться [Библиотека] Работа с новостями Опубликовано 6 августа, 2022 11 часов назад, Mikhail321 сказал: Прекрасный скриншот, спасибо, очень познавательно. а на мою ссылку не пробовали кликнуть? Это функция «поиск», много интересного можно обнаружить 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Mikhail321 Опубликовано 6 августа, 2022 Поделиться [Библиотека] Работа с новостями Опубликовано 6 августа, 2022 (изменено) 6 часов назад, Rigal сказал: Прекрасный скриншот, спасибо, очень познавательно. а на мою ссылку не пробовали кликнуть? Это функция «поиск», много интересного можно обнаружить Очень странное у нас с Вами недопонимание. Свой скриншот я сделал последовав по вашей ссылки - по той ,что Вы обвели в последнем скриншоте. Похоже,к сожалению, Вы не удосужились даже перейти сами по ссылке которую мне присылаете в очередной раз. Изменено 6 августа, 2022 пользователем Mikhail321 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Rigal Опубликовано 7 августа, 2022 Автор Поделиться [Библиотека] Работа с новостями Опубликовано 7 августа, 2022 1 час назад, Mikhail321 сказал: Очень странное у нас с Вами недопонимание. Свой скриншот я сделал последовав по вашей ссылки - по той ,что Вы обвели в последнем скриншоте. Похоже,к сожалению, Вы не удосужились даже перейти сами по ссылке которую мне присылаете в очередной раз. действительно, забавный казус. У меня продукт нашелся и поставился. И файлы загрузились. Вот они: Calendar.rar Возможно, потому, что я им уже пользовался? Я не знаю. PS. и да, я воспроизвел в браузере, отсутствует продукт 1 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти