среда, 1 февраля 2012 г.

Передача данных из MetaTrader 4 (MT4) в Microsoft Excel через DDE

Передо мной встал вопрос, а как можно передать биржевые котировки из торгового терминала MetaTrader 4 в Excel? Проблема решается так...

Шаг 0. Скачать и установить терминала не составляет труда. Это можно сделать как с официального сайта, так и с сайтов брокеров. Запускаем терминал.

Шаг 1. В терминале включаем механизм обмена данными.
Меню "Сервис" > "Настройки" и на вкладке "Сервер" ставим галочку "Разрешить DDE сервер":


Шаг 2. Запускаем Excel и в нужную ячейку вводим формулу с запросом данных. Формул не так и много, поэтому я приведу все варианты запросов:
='MT4'|BID!EURUSD
='MT4'|ASK!EURUSD
='MT4'|HIGH!EURUSD
='MT4'|LOW!EURUSD
='MT4'|TIME!EURUSD
='MT4'|QUOTE!EURUSD

Внимание! Возможно "подвисание" Excel. Решение этой проблемы описано тут.

Как видно, формат команды - простой:
='MT4'|ПАРАМЕТР!ИНСТРУМЕНТ

В интернете можно найти, якобы работают команды
='MT4'|LAST!EURUSD
='MT4'|STATUS!ACCOUNT
='MT4'|STATUS!BALANCE
='MT4'|STATUS!CONNECT
но это не так. Они относятся к старой версии MetaTrader и более не поддерживаются.

Параметры BID и ASK показывают последние цены продажи и покупки, HIGH и LOW- наибольшую и наименьшие цены за текущие сутки, TIME - время обновления параметров BID и ASK, QUOTE все сведения в виде одной строки:


Другие команды или данные за другой период (например, вчера) недоступны.

Также мне пока не удалось сформировать команду динамически, когда значение пары находится в отдельной ячейке. Например:
='MT4'|BID!$A$1
Пока не работает...

Внимание! Иногда получаемые данные содержат некорректные значения:


Правда, они через секунду-другую начинаются отображаться корректно, но почему так я не знаю.

Внимание! Данные передаются с десятичной точкой, а по умолчанию в русской локализации Excel в качестве такого разделителя используется символ запятой ",". Некоторые предлагают сменить символ разделителя в региональных настройках операционной системы. Мне кажется, это чересчур радикально! Такое решение может повлечь некорректную работу других программ.

Правильное решение состоит в том, чтобы заменять символ точки "." на символ запятой ",". Например так:
=ПОДСТАВИТЬ('MT4'|BID!EURUSD;".";",")
Теперь данные воспринимаются, как числа.

Внимание! В некоторых источниках (и, в частности, в примере программы) используется команды, где MT4 стоит без кавычек:
=MT4|BID!EURUSD
вместо
='MT4'|BID!EURUSD

Это приводит к тому, что если вы добавляете такую команду, то Excel воспринимает MT4 как координаты ячейки. Неуклюжий вариант решения проблемы состоит в том, чтобы включить другую нумерацию ячеек:


Более простой и правильный - использовать кавычки вокруг MT4 (как и показано выше).

Внимание! Некоторые источники предлагают выставить параметр "Игнорировать DDE-запросы от других приложений".


Я бы не рекомендовал это делать, поскольку может нарушится работа других программ (в частности, проводника).

Шаг 3 (гипотетический). Далее нужно организовать работу с этими данным. Например, сохранять в столбец и строить графики. Но это уже другой вопрос.

7 комментариев:

  1. Спасибо, очень полезная информация. Интересно, на данный момент, существует возможность экспорта в Excel истории котировок?

    ОтветитьУдалить
  2. Если речь идёт о терминале MetaTrader 4, то да. Меню "Сервис" > "Архив котировок" > выбираем нужную > Кнопка "Загрузить" и затем "Экпорт". Сохранённый файл открыть Excel'ем и обработать.

    В принципе, можно попытаться найти онлайн базы котировок. Но мне кажется, это менее удобно.

    Ну и конечно, можно воспользоваться другими программами для получения и экспорта котировок.

    ОтветитьУдалить
  3. esli cena naprimer 1.2830 to vydayut ne korrektno.
    a 1.28333 to korrektno pokazyvayut. est* kakoi nibud* nastroiki na 4x znachnyh?(1.2830)

    ОтветитьУдалить
  4. С EURUSD все получается,но мне нужно miniS&P500( в МТ пишется как miniSP ).Получаю N/A.В чем ошибка?

    ОтветитьУдалить
  5. Этот комментарий был удален автором.

    ОтветитьУдалить
  6. Здравствуйте.Очень интересно.
    подскажите. какую команду нужно прописать в Excel для того чтобы отображалась история сделки за день, за неделю, за месяц...за ранее спасибо

    ОтветитьУдалить
  7. спасибо автору за статью,у меня вопром как обработать экспотрнтные данные в экселе чтобы каждая колонка например времени была отдельно хай отдельно итд спасибо!

    ОтветитьУдалить