smart-lab.ru | Софт / Программирование

Индикатор ОИ с СМЕ для МТ4

8 января 2018  Источник / https://smart-lab.ru/blog/443582.php

В свое время мне надоело каждый день лазить на всем известный сайт и щелкать даты, просматривая ОИ в отчетах. Я задался целью найти нормальный индикатор, который собирал бы информацию о них сразу в терминал, и обнаружилось… ничего :D Несколько абсолютно неработающих решений в свободном доступе и несколько продуктов на mql5.com, которые, во-первых, платные, а во-вторых, предлагают скачивать отчеты вручную каждый день (что??) для своей работы. Хотя данные, казалось бы, вот они, и задача вполне тривиальна. И я решил исправить это недоразумение (да-да, уже вангую, что сейчас появится как минимум один человек, который скажет, что такой индюк давно есть и вот он он, но мой поиск по гуглу, мкл5 и СЛ не дал вообще никакого результата, вполне возможно что плохо искал).

Выкладываю в открытом доступе мой индикатор. Данный архив следует распаковать в папку C:\Program Files\MT4\MQL4\.

Он состоит из двух частей. Первая — советник OIcme_updater, его нужно повесить на график (собственно, без разницы на какой) и оставить там:

Индикатор ОИ с СМЕ для МТ4


При запуске в него нужно вбить название интересующего вас фьюча в параметре InstrFromCSV так, как это прописано в файлах истории, расположенных здесь. Скачивать их не придется, потому что они все уже были мной скачаны, конвертированы в CSV и положены в папку с советником, которая после распаковки окажется по адресу \MT4\MQL4\Files\OIdata. Можете открыть любой из них и посмотреть, как называется нужный вам фьюч:



В параметре InstrFromXLS вбивается в точности то название, которое указано на этой странице. Просто переводить переменные в апперкейс нельзя, потому что некоторые названия разные. AssetClass нужен для запроса к СМЕ, для металлов это 8, для энергетики 7. Чтобы узнать ассеткласс актива, наведите мышкой на кнопку получения репорта и посмотрите, какая цифра будет в ссылке, которая появится внизу (или сохраните эту ссылку и скопируйте в адресную строку, если ваш браузер не показывает):



Days устанавливает глубину истории в днях. Архивы СМЕ, расположенные в разделе daily_volumes, начинаются с 2014 года, соответственно глубже взять будет неоткуда. Еще там есть архив за 2013, но я не смотрел в каком он формате. Если вы знаете более старые источники данных по ОИ, я буду благодарен, если вы дадите на них ссылку.

При запуске советник создаст файл с историей «OI hist GOLD FUTURES.csv» (по адресу \MT4\MQL4\Files\OIdata), в который сначала положит всю доступную историю из архива на нужную глубину, а затем вернется в начало и дополнит это данным из XLS отчетов с сервера. Отчеты хранятся приблизительно за последний месяц, поэтому актуальность архива из CSV файлов на момент первого запуска должна быть не старее месяца, иначе в данных будет разрыв. Я скачал архивы до первых чисел января 18го, если вы запускаете индикатор сильно позднее, вам надо будет зайти в папку сервера daily_volume, скачать недостающие XLS-файлы, поместить их по адресу C:\daily_volume и запустить макрос для Open Office Calc, написанный мной специально для этой цели (он тоже в архиве с индюком, папка Library1). Для этого в OpenOffice Calc открываете Сервис--Макросы--Управление макросами--OpenOffice Basic--Управление--Библиотеки--Добавить, и выбираете папку Library1, где бы она ни находилась. Затем Сервис--Макросы--Выполнить макрос--Мои макросы--Library1--Module1--convert:



У вас спросят, сколько файлов из папки C:\daily_volume сконвертировать. Указываете количество и отправляетесь гулять, если их больше 30: процесс небыстрый :)) Полученные CSV файлы затем следует перенести в архив индюка \MT4\MQL4\Files\OIdata.

Впрочем, если с последнего CSV-файла прошло не более месяца, все это не нужно. Теперь советник будет при каждом запуске терминала смотреть текущее время, оценивать, где кончается история, и, если есть новые репорты, самостоятельно скачивать их с сайта биржи и добавлять в файл истории. Сделать это через индикатор нельзя, потому что в индюках запрещены запросы на сервер. Никаких торговых функций у советника нет, можете сами убедиться в этом, посмотрев исходный код: методы OrderSend отсутствуют. Теперь вешаем на нужный график сам индикатор OIcme. В параметре Instrument забиваем имя фьюча так же, как написано в архиве (и как называется файл с историей), т.е. в нашем случае GOLD FUTURES. Параметр UTC можете изменить, если вы далеко от часового пояса +3: индикатор рисует каждое значение ОИ на середину сессии, чтобы было показано его изменение от одной сессии к другой. Вот что у нас выходит:



Индикатор будет самостоятельно апдейтиться, как только файл с историей OI hist GOLD FUTURES.csv изменится (т.е. когда советник его дополнит), о чем напишет в логах (там же можно прочесть и послания от эксперта: не удивляйтесь, что он отчитывается о невозможности загрузить данные в дни праздников). Советник проверяет актуальность данных только при запуске терминала: очевидно, что нет смысла ставить секундный таймер для отчетов, приходящих раз в день. Данные из отчетов Preliminary не меняются после выхода Final. Для серебра и нефти проверял — все работает. Если только формат отчетов в СМЕ не изменится, должно работать и дальше. Вот вроде и все. Пользуйтесь!

UPD: исправлена ошибка при чтении большого числа файлов CSV. Плюс в файл истории ОИ золота записана теперь почти вся история. Ссылка на архив обновлена.
При копировании ссылка обязательна http://elitetrader.ru/index.php?newsid=376609
ETHEREUM ПРОДОЛЖАЕТ ТРИУМФАЛЬНЫЙ РОСТ

Догонит ли Ethereum цены на Bitcoin? Зарегистрируйтесь в UFX и узнайте