Работа с файлами. Пример визуализация важных рыночных событий
Andrey Opeyda | 31 мая, 2006
Каждый трейдер знает, что открывать позицию, применяя только лишь технический анализ (ТА), слегка рискованно. Правильней бы было открывать позицию, исходя как из фундаментального, так и технического анализа. Чаще всего трейдеры, работающие по ТА, используют календарь событий, чтобы учесть возможную волатильость рынка и не подвергать свою позицию неоправданному риску. Было бы очень удобно, если бы на ценовом графике отображались все ключевые события торгового дня. Например:
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