Название скрипта: history_downloader.py
Текущая версия: 1.1 (9.10.2016)
Название индикатора: TimeZoneAndNews
Описание:
Думаю все знают как важно учитывать новости при торговле. Было бы хорошо учитывать их также при тестировании советников на истории или
в советниках, торгующих на новостях.
Я нашел скрипт который качает и парсит новосные данные с сайта Forexfactory. Есть возможность на данный момент получить данные с 01.01.2007. На более ранние периоды сайт возвращает невалидные данные.
Я дописал этот скрипт немного (поправил разные мелочи и баги) и хочу поделиться им. Также принимаются идеи и предложения по его доработке.
Также я добавил индикатор для отображения данных из файла на графике. Индикатор не качает данные. Это только для теста содержимого файла.
Все необходимые файлы в аттаче к посту.
Параметры индикатора:
GMTOffset - Для Альпари = 3, для Oanda = 2.
FileName - имя файла с данными. Файл дожен лежать в папке MQL4/Files
CurrencyName1 - валюта по которой показывать новости (по умолчанию берется первая валюта из названия инструмента)
CurrencyName2 - вторая валюта по которой показывать новости (по умолчанию берется вторая валюта из названия инструмента)
ProcessBars = 10000 - колчество баров которые обрабатываются индикатором
Индикатор показывает новости только на барах, которые совпадают по времени с временем новости. Поэтому используйте его на периоде M15, а лучше на М1.
Я это поправлю в будущем
Пример работы индикатора:
http://fxpics.ru/image/GWT1
Описание формата:
Дата Время; Валюта; Важность(L,M,H); Название; Actual; Forecast; Previous; ALL-DAY или пустая строка
Пример вывода скрипта:
29.09.2016 01:50;JPY;L;Retail Sales y/y;-2.1%;-1.7%;-0.2%;
29.09.2016 02:00;USD;M;FOMC Member George Speaks;;;;
29.09.2016 00:00;EUR;M;German Prelim CPI m/m;0.1%;0.0%;0.0%;ALL-DAY
29.09.2016 08:35;JPY;H;BOJ Gov Kuroda Speaks;;;;
29.09.2016 09:00;EUR;M;Spanish Flash CPI y/y;0.3%;0.1%;-0.1%;
29.09.2016 09:55;EUR;M;German Unemployment Change;1K;-5K;-6K;
29.09.2016 10:30;GBP;M;Net Lending to Individuals m/m;4.5B;4.0B;3.8B;
29.09.2016 10:30;GBP;L;M4 Money Supply m/m;;0.8%;1.2%;
Тут кроме обычных событий есть события ALL-DAY (весь день). У этого события нет конкретного времени.
По этому у себя в советниках вы должны обрабатывать его отдельно (учитывать его или игнорировать).
Как парсить файл в MQL4:
int ReadNewsFile(string fileName)
{
int handle = FileOpen(fileName,FILE_READ);
if(handle == -1)
{
return -1;
}
if(FileSize(handle)==0)
{
FileClose(handle);
return -2;
}
while(!FileIsEnding(handle))
{
datetime time = FileReadDatetime(handle);
string currName = FileReadString(handle);
string severity = FileReadString(handle);
string newsName = FileReadString(handle);
double actual = FileReadNumber(handle);
double forecast = FileReadNumber(handle);
double previous = FileReadNumber(handle);
string comment = FileReadString(handle);
time = time + GMTOffset*3600;
int sevInt = 0;
if(severity == "L")
sevInt = 1;
if(severity == "M")
sevInt = 2;
if(severity == "H")
sevInt = 3;
//you code here
}
FileClose(handle);
return 0;
}
Как запускать скрипт:
Проверял только в Windows 10 но должно работать и на остальных системах.
Нужно устанавить Python 2.7 (не 3.2), библиотеки mechanize ( mechanize-0.2.5 ) и lxml (lxml-3.4.0.win32-py2.7.exe) для Python 2.7
Затем запускаете скрипт командой в консоли. Два параметра указывают начальный и конечные год. Пример:
python history_downloader.py 2007 2016
В атаче также файл с историей всех новостей с 2007 по 2016 год (до 08.10.2016). Время по гринвичу.
Имейте в виду что бывает что сайт закрывает соединение с ошибкой. Тогда загрузка обрывается.
Я пока не реализовал обработку этой ситуации в скрипте.
В этой теме я также могу выкладывать свежие файлы с историей.
TimeZoneAndNews.mq4
history_downloader.zip
events2007-2016.zip
