English 中文 Español Deutsch 日本語 Português
Работа с файлами. Пример визуализация важных рыночных событий

Работа с файлами. Пример визуализация важных рыночных событий

MetaTrader 4Примеры | 31 мая 2006, 16:12
6 395 17
Andrey Opeyda
Andrey Opeyda


Каждый трейдер знает, что открывать позицию, применяя только лишь технический анализ (ТА), слегка рискованно. Правильней бы было открывать позицию, исходя как из фундаментального, так и технического анализа. Чаще всего трейдеры, работающие по ТА, используют календарь событий, чтобы учесть возможную волатильость рынка и не подвергать свою позицию неоправданному риску. Было бы очень удобно, если бы на ценовом графике отображались все ключевые события торгового дня. Например:


15.05.2006;9:00; Заказы пром. предприятий M.M ;Япония;Март;3.40%;1.00%;
15.05.2006;16:30; Индекс ФРБ Нью-Йорка ;США;Май;15.8;15;
15.05.2006;17:00; Нетто-приток иностр. капитала ;США;Март;86.9млрд.;80.0млрд.;
16.05.2006;12:30; HICP Y.Y ;Британия;Апрель;1.80%;2.00%;
16.05.2006;13:00; Индекс экон. настроений ZEW ;Германия;Май;62.7;65;
16.05.2006;16:00; Отчёт Wal-Mart Stores ;США;1кв.;-0.61;-;
16.05.2006;16:30; PPI M.M ;США;Апрель;0.50%;0.70%;
16.05.2006;16:30; PPI без прод. и энерг. M.M;США;Апрель;0.10%;0.20%;
16.05.2006;16:30; Новое строительство ;США;Апрель;1.960млн.;1.960млн.;
16.05.2006;16:30; Разрешения на строительство ;США;Апрель;2.094млн.;2.050млн.;
16.05.2006;17:15; Промышленное производство M.M;США;Апрель;0.60%;0.40%;
16.05.2006;17:15; Загрузка произв. мощностей ;США;Апрель;81.30%;81.50%;
17.05.2006;8:30;  Пром. производство (уточн.) M.M ;Япония;Март;0.20%;0.20%;
17.05.2006;12:30; Число безработных M.M ;Британия;Апрель;+12,600;+5,000;
17.05.2006;12:30; Протокол заседания BoE 4.05 ;Британия;-;-;-;
17.05.2006;13:00; Промышленное производство M.M;ЕС;Март;0.00%;-0.20%;
17.05.2006;13:00; Промышленное производство Y.Y ;ЕС;Март;3.20%;2.80%;
17.05.2006;13:00; HICP (уточн.) Y.Y ;ЕС;Апрель;2.40%;2.40%;
17.05.2006;16:30; CPI M.M;США;Апрель;0.40%;0.50%;
17.05.2006;16:30; CPI без прод. и энерг. M.M ;США;Апрель;0.30%;0.20%;
18.05.2006;12:30; Розничные продажи M.M ;Британия;Апрель;0.70%;0.20%;
18.05.2006;12:30;  Розничные продажи Y.Y;Британия;Апрель;2.60%;2.60%;
18.05.2006;16:30; Первичные обращения ;США;8-14.05;324,000;320,000;
18.05.2006;17:30; Выступление Б. Бернанке ;США;-;-;-;
18.05.2006;8:00; Опережающие индикаторы M.M ;США;Апрель;-0.10%;0.10%;
18.05.2006;20:00;  Индекс ФРБ Филадельфии ;США;Май;13.2;12;
19.05.2006;1:30; Выступление А. Гринспена;США;-;-;-;
19.05.2006;3:50; ВВП (предварит.) Q.Q ;Япония;1кв.;1.30%;0.20%;
19.05.2006;8:00; Заседание центробанка ;Япония;-;-;-;
19.05.2006;13:00;  Торговый баланс ;ЕС;Март;-4.5млрд.;-3.0млрд.;
     

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

int FileOpen( string filename, int mode, int delimiter=';')

параметрами которого являются: имя файла, тип (бинарный FILE_BIN или строковой с разделителями FILE_CSV), способ доступа (запись FILE_READ или чтение FILE_WRITE), и символ разделитель между строковыми данными. В случае удачного открытия файла, идентификатору присваивается уникальное значение, в противном случае, идентификатору файла присваивается значение -1. Для детализации информации об ошибке можно воспользоваться функцией GetLastError(). Переменная FileName вынесена в заголовок скрипта.

#property show_inputs
extern string FileName = "week.txt";
 
…
 
   int handle;
   handle=FileOpen(FileName,FILE_CSV|FILE_READ,';');
   if(handle<1)
    {
     Print("Файл не найден: ", GetLastError());
     return(false);
    }

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

  while(!FileIsEnding(handle))
   {
    string sDate=FileReadString(handle); // Date
    string sTime=FileReadString(handle); // Time
    string sCountry=FileReadString(handle); // Country
    string sPeriod=FileReadString(handle); // Period
    string sDescription=FileReadString(handle); // Description
    string sPrev=FileReadString(handle); // Prev    
    string sForecast=FileReadString(handle); // Expected        
    string sCurrent=FileReadString(handle); // Current value
    
    FileReadString(handle); // null
    
    
    Print(
      sDate+" "
      ,sTime+" "
      ,sCountry+" "
      ,sPeriod+" "
      ,sDescription+" "
      ,sForecast+" "
      ,sCurrent+" ");
      
    i++;
    datetime dt = StrToTime(sDate+" "+sTime);
    
         color c = Red;
 
         if (sCountry == "Япония") c = Yellow;            
         if (sCountry == "США") c = Brown;         
         if (sCountry == "Германия") c = Green;
         if (sCountry == "Еврозона") c = Blue;            
         if (sCountry == "Великобритания") c = Orange;
         if (sCountry == "Канада") c = Gray;
         if (sCountry == "Австралия") c = DarkViolet;
         if (sCountry == "Швеция") c = FireBrick;
         if (sCountry == "ЮАР") c = DodgerBlue;
         if (sCountry == "Дания") c = RosyBrown;
         if (sCountry == "Норвегия") c = HotPink;
         
 
 
         if ((sCountry == "Япония") && (!Japan)) continue;            
         if ((sCountry == "США") && (!USA)) continue;            
         if ((sCountry == "Германия") && (!Germany)) continue;            
         if ((sCountry == "Еврозона") && (!ES)) continue;            
         if ((sCountry == "Великобритания") && (!GB)) continue;                      
         if ((sCountry == "Канада") && (!Canada)) continue;                     
         if ((sCountry == "Австралия") && (!Australia)) continue;      
         if ((sCountry == "Швеция") && (!Shweden)) continue;      
         if ((sCountry == "ЮАР")&& (!UAR)) continue;      
         if ((sCountry == "Дания") && (!Dania)) continue;      
         if ((sCountry == "Норвегия") && (!Norvegia)) continue;
         
 
            
            
          if (DisplayText)
          {
          ObjectCreate("x"+i, OBJ_TEXT, 0, dt, Close[0]);
          ObjectSet("x"+i, OBJPROP_COLOR, c);          
          ObjectSetText("x"+i, 
            sDescription + " "
            + sCountry + " "
            + sPeriod + " "
            + sCurrent + " "
            + sForecast,
            8);          
          ObjectSet("x"+i, OBJPROP_ANGLE, 90);          
          }
          
                   
          ObjectCreate(sCountry+" "+i, OBJ_VLINE, 0, dt, Close[0]);
          ObjectSet(sCountry+" "+i, OBJPROP_COLOR, c);                    
          ObjectSet(sCountry+" "+i, OBJPROP_STYLE, STYLE_DOT);                    
          ObjectSet(sCountry+" "+i, OBJPROP_BACK, true);          
          ObjectSetText(sCountry+" "+i, 
            sDescription + " · "
            + sPeriod + " · "
            + sCurrent + " · "
            + sForecast,
            8);          
 
   }

Теперь вы всегда можете визуально видеть предстоящие события, и их влияние на рынок. Готовый код скрипта и файлы с данными прикреплены к статье. Не забудьте, что скрипты находятся в директории Experts/Scripts  а файлы данных должны находится в Experts/Files. Также следует не забывать о формате даты. YYYY.MM.DD HH:MM, и о символах разделителях. Иллюстрации работы скрипта ниже.









Работа с файлами в MQL4 предоставляет пользователю широкий выбор возможностей, это как связь терминала с внешними источниками данных, так и упрощения или оптимизация работы с торговым терминалом. Примерами есть как ведение логов, так и возможность отображения уровней поддержки/сопротивления, получая данные прямо с World Wide Web. Т.е не следует забывать, что пользователь неограничен в выборе методов работы с файлом. А автоматизация процессов происходящих в торговле для открытия и управления позициями должна способствовать меньшей психологической нагрузке на трейдера, и в свою очередь дать возможность анализировать большее количество факторов влияющих на торговлю. В принципе язык MQL4 предназначен именно для этого.

Все функции MQL4 для работы с файлом. Подробная информация в документации MQL4.

FileClose
FileDelete
FileFlush
FileIsEnding
FileIsLineEnding
FileOpen
FileOpenHistory
FileReadArray
FileReadDouble
FileReadInteger
FileReadNumber
FileReadString
FileSeek
FileSize
FileTell
FileWrite
FileWriteArray
FileWriteDouble
FileWriteInteger
FileWriteString

Прикрепленные файлы |
ReadFromFile.mq4 (3.12 KB)
week.txt (2.26 KB)
week1.txt (1.95 KB)
Последние комментарии | Перейти к обсуждению на форуме трейдеров (17)
[Удален] | 1 февр. 2007 в 13:05
RickD:
5 баллов!
Еще бы сделать автоматическую подкачку новостей...

5 баллов!
Еще бы сделать автоматическую подкачку новостей... из будущего 8)
[Удален] | 16 мая 2007 в 00:56
идеально получается если брать календарь тут http://www.forextimes.ru/calendar/
импортировать напрямую из Excel, при импорте выбрать только нужную таблицу
при сохранении не забыть добавить ещё один пустой столбец с право (чтобы были завершающие ;)


не помешает небольшая модификация, чтобы лучше определялись страны и не было лишних пробелов

    string sDate=FileReadString(handle); // Date
    string sTime=FileReadString(handle); // Time
    string sDescription=StringTrimLeft(StringTrimRight(FileReadString(handle))); // Description
    string sCountry=StringTrimLeft(StringTrimRight(FileReadString(handle))); // Country
    string sPeriod=StringTrimLeft(StringTrimRight(FileReadString(handle))); // Period
    string sCurrent=StringTrimLeft(StringTrimRight(FileReadString(handle))); // Current value
    string sForecast=StringTrimLeft(StringTrimRight(FileReadString(handle))); // Expected
    FileReadString(handle); // null
[Удален] | 27 мая 2007 в 09:59
Столкнулся с нестабильностью считывания из файла, связываю с последними бильдами митника, может кто знает уже этот полтергейст? Модификация по nikn не помогла, автоочистка не цепляется, видимо, из-за этой нестабильности.
Denis
Denis | 3 июн. 2007 в 01:24

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

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

[Удален] | 31 мар. 2009 в 23:53
njel:
Совсем не глупость. Новости порпобовать отсюда http://www.alpari-idc.ru/ брать. На неделю вперёд. Вот конвертировать придётся ручками, или тулзу писать... Можно и в архиве новостей порытся. А ты наверное хочешь НС научить на данных новостных за год?

Здравствуйте Уважаемый! Пишет Вам новичок который более года только и делает что читает книжки по форексу! Сам по професии военный,обратил внимание на вашу дискусию по поводу создания системы на базе фундаментальных новостей датируемую аж за 2006 год. Не подскажете данная тема так и осталась в 2006 году? Заранее благодарен! Удачи.Александр.

Графический эксперт AutoGraf Графический эксперт AutoGraf
Рассматриваются возможности использования графических средств для создания удобного интерфейса управления торговлей.
Самостоятельная оценка результатов тестирования эксперта Самостоятельная оценка результатов тестирования эксперта
В статье представлены формулы и порядок расчета данных, отображаемых в отчете тестера.
Учёт ордеров в большой программе Учёт ордеров в большой программе
Рассматриваются общие принципы построения учёта ордеров в сложной программе.
События в МetaТrader 4 События в МetaТrader 4
Статья посвящена программному отслеживанию событий в терминале МetaТrader 4, таких как открытие, закрытие и модификация ордеров, и рассчитана на пользователя, обладающего базовыми навыками работы с терминалом и программирования на MQL 4.