← К каталогу
Исходный код · ID 2389

cnewsfilter.mqh

Похожие материалы по тегам

#3 news panel (black) bgp.mq5MQL5 / MetaTrader 5 · 1 общих теговea robofibo source v.11.2.mq4MQL4 / MetaTrader 4 · 1 общих теговindicator marketmind for tradingview.pineTradingView · 1 общих теговmarket crusher ea guidlines.txtMQL · 1 общих теговsovetnikov_v5.mq4MQL4 / MetaTrader 4 · 1 общих теговunlocker manual.mq4MQL4 / MetaTrader 4 · 1 общих тегов
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

CNewsFilter — это библиотека на языке MQL для платформы MetaTrader, предназначенная для фильтрации торговых операций в зависимости от экономических новостей. Она скачивает данные календаря событий из XML-источника, анализирует их и позволяет определить, следует ли ограничивать торговлю в ближайшее время.

Библиотека содержит два класса. CNewsEvent хранит информацию о конкретном новостном событии — название, страну, время и уровень влияния. CNewsFilter управляет загрузкой и обработкой новостных данных, а также предоставляет интерфейс для проверки текущей торговой ситуации.

Основные параметры настройки включают временные окна до и после новостей, фильтрацию по уровням влияния, смещение часового пояса GMT и опцию закрытия прибыльных позиций перед новостями. Функция GetNews возвращает информацию о ближайшем событии и флаг, разрешающий или запрещающий торговлю.

Настройки программы

НастройкаОписание
__news__ Идентификатор фильтра новостей — Текстовый идентификатор, используемый для обозначения фильтра новостей в глобальных переменных.
UseNewsFilter Использовать фильтр новостей — Включает или отключает фильтрацию торговых операций по новостному календарю.
MinsBeforeNews Минуты до новости — Количество минут до выхода новости, в течение которых торговля ограничивается.
MinsAfterNews Минуты после новости — Количество минут после выхода новости, в течение которых торговля ограничивается.
IncludeHigh Включать высокое влияние — Включает учёт новостей с высоким уровнем влияния на рынок.
IncludeMedium Включать среднее влияние — Включает учёт новостей со средним уровнем влияния на рынок.
IncludeLow Включать низкое влияние — Включает учёт новостей с низким уровнем влияния на рынок.
OffsetHoursGMT Смещение часового пояса GMT — Смещение часового пояса относительно GMT для корректного сопоставления времени событий.
CloseProfitableTradesBeforeNews Закрытие прибыльных позиций перед новостями — Включает или отключает автоматическое закрытие прибыльных позиций перед выходом новостей.

Состав библиотеки

Классов: 2 · методов: 5 · конструкторов: 1 · деструкторов: 1 · отдельных функций: 0

Классы
Класс class CNewsEvent

Класс, представляющий новостное событие с названием, страной, временем и уровнем влияния.

Класс class CNewsFilter

Основной класс библиотеки для управления загрузкой и фильтрацией новостных данных.

Методы и конструкторы
Метод · CNewsEvent string GetImpact()

Возвращает текстовое представление уровня влияния новостного события.

Конструктор · CNewsFilter CNewsFilter()

Конструктор класса CNewsFilter, инициализирующий хранилище событий.

Деструктор · CNewsFilter ~CNewsFilter()

Деструктор класса CNewsFilter, освобождающий память событий.

Метод · CNewsFilter void DownloadNews()

Скачивает новостной календарь из XML-источника при наличии интернет-соединения.

Метод · CNewsFilter void Parse(string news)

Обрабатывает загруженные XML-данные и формирует список новостных событий.

Метод · CNewsFilter void Check()

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

Метод · CNewsFilter bool GetNews(string symbol, string& news, NEWS_IMPACT& newsImpact)

Возвращает информацию о ближайшем новостном событии и статус возможности торговли.

Получить полный код

Поиск по коду файла

#property strict

#include <CDownloadFile.mqh>;

extern string     __news__                         = "--- FFCal News Filter --- ";
extern bool       UseNewsFilter                    =  true; 
extern int        MinsBeforeNews                   =  30;   
extern int        MinsAfterNews                    =  30;   
extern bool 	   IncludeHigh 		               = true;
extern bool 	   IncludeMedium 		               = true;
extern bool 	   IncludeLow 			               = false;
extern int		   OffsetHoursGMT                   = 0; 
extern bool       CloseProfitableTradesBeforeNews  = false;   

enum NEWS_IMPACT
{
   IMPACT_NONE   = 0,
   IMPACT_HIGH   = 1,
   IMPACT_MEDIUM = 2,
   IMPACT_LOW    = 3
};

class CNewsEvent
{
public:
   string      Title;
   string      Country;
   datetime    DateTime;
   NEWS_IMPACT Impact;

   string GetImpact()
   {
      if (Impact == IMPACT_HIGH) return "High ";
      if (Impact == IMPACT_MEDIUM) return "Medium ";
      if (Impact == IMPACT_LOW) return "Low ";
      return "";
   }
};

class CNewsFilter
{
private:
   CNewsEvent* _newsEvents[];
   int         _maxEvents;
   datetime    _lastDownloaded;
   datetime    _lastDownloadRetry;

   string MakeDateTime(string strDate, string strTime)
   {

   	int n1stDash = StringFind(strDate, "-");
   	int n2ndDash = StringFind(strDate, "-", n1stDash+1);

   	string strMonth = StringSubstr(strDate, 0, 2);
   	string strDay = StringSubstr(strDate, 3, 2);
   	string strYear = StringSubstr(strDate, 6, 4); 

   	int nTimeColonPos = StringFind(strTime, ":");
   	string strHour = StringSubstr(strTime, 0, nTimeColonPos);
   	string strMinute = StringSubstr(strTime, nTimeColonPos+1, 2);
   	string strAM_PM = StringSubstr(strTime, StringLen(strTime)-2);

   	int nHour24 = StrToInteger(strHour);
   	if ((strAM_PM == "pm" || strAM_PM == "PM") && nHour24 != 12)
   	{
   		nHour24 += 12;
   	}
   	if ((strAM_PM == "am" || strAM_PM == "AM") && nHour24 == 12)
   	{
   		nHour24 = 0;
   	}
    	string strHourPad = "";
   	if (nHour24 < 10) 
   		strHourPad = "0";

   	return(StringConcatenate(strYear, ".", strMonth, ".", strDay, " ", strHourPad, nHour24, ":", strMinute));

   }

   datetime TimeGMTFIX() 
   {
      return(TimeGMT()+(OffsetHoursGMT * 3600));
   }

public: 

   CNewsFilter()
   {
      _maxEvents      = 0;
      _lastDownloaded = 0;
      _lastDownloadRetry =0;
      ArrayResize(_newsEvents, 500);
   }

   ~CNewsFilter()
   {  
      for (int i=0; i < _maxEvents;++i)
         delete _newsEvents[i];
      _maxEvents=0;
   }

   void DownloadNews()
   {
   	if (!IsConnected())
   	{

   	   return;
   	}

   	double timeSpanMins = (double)(TimeCurrent() - _lastDownloaded);
   	timeSpanMins /= 60.0;   	
   	if (_maxEvents == 0 || timeSpanMins >= (60*24) )
		{

		   timeSpanMins = (double)(TimeCurrent() - _lastDownloadRetry);
   	   timeSpanMins /= 60.0;
   	   if (timeSpanMins < 5) 
   	   {
   	      return;
   	   }
   	   _lastDownloadRetry = TimeCurrent();

		   string url= "";
		   string news="";

		   CDownloadFile* downloader = new CDownloadFile();
			bool result = downloader.GrabWeb(url, news);
			delete downloader;

			int end = StringFind(news, "</weeklyevents>", 0);
			if (end <= 0)
			{
				Print("-- unable to download news --");
				return ;
			}
			else
			{

				_lastDownloaded = TimeCurrent();
				Parse(news);
			}
		}
   }

   void Parse(string news)
   {

      for (int i=0; i < _maxEvents;++i)
         delete _newsEvents[i];
      _maxEvents=0;

   	int      BoEvent = 0;
    int      end=0;
    string 	sTags[7] = { "<title>", "<country>", "<date>", "<time>", "<impact>", "<forecast>", "<previous>" };
    string 	eTags[7] = { "</title>", "</country>", "</date>", "</time>", "</impact>", "</forecast>", "</previous>" };
   	while (true)
   	{
   		BoEvent = StringFind(news, "<event>", BoEvent);
   		if (BoEvent == -1) break;

   		BoEvent += 7;	
   		int next = StringFind(news

Показано первые 50% кода (символов: 4908)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
490,80₽ ≈ $6.00