MetaTrader 4 – API

API - это открытый интерфейс, реализующий доступ ко всем функциям информационно-торговой платформы MetaTrader. Мы предоставляем программистам очень широкие возможности для написания своих собственных версий клиентских терминалов.Интерфейс клиентского терминала (MetaTrader API) 
MetaTrader API (MSVC++ 6.0, с примером использования, ZIP)
MetaTrader API (Delphi, с примером использования, ZIP)

Клиентский API состоит из 29 функций, реализованных в mtapi.dll. Доступ к функциям API осуществляется так, как это показано в исходном файле MetaTraderAPI.cpp. Описания функций, а также необходимых структур данных, находятся в файле MetaTraderAPI.h. Для статической линковки имеются файлы mtapi.lib и mtapi.h.

int MtGetVersion( void );

Возвращает номер версии MTAPI в виде составного числа, первые 3 цифры которого представляют собой номер версии клиентского терминала, совместимого с API. Младшие 3 цифры представляют собой версию API.

int MtSetWorkingDirectory(const char * path);

Назначение рабочего каталога, в котором будут храниться log-файлы, приходящие от сервера письма, а также некоторые другие рабочие файлы. В качестве параметра необходимо указать существующий каталог. Если в качестве параметра указать NULL, то рабочим каталогом будет назначен тот, из которого запущен exe-файл клиента (по умолчанию рабочим каталогом считается каталог, содержащий mtapi.dll). Коды возврата описаны в файле MetaTraderAPI.h.

int MtCreate(void);

Создание объекта сокета для связи с сервером MetaTrader. Возвращает хэндл открытого сокета (внутренний номер сокета) в случае успеха. Либо -1 в случае ошибки. Имеется ограничение на количество одновременно существующих объектов сокетов.

int MtDelete(const int handle);

Удаление ранее созданного объекта сокета. В качестве параметра передается хэндл, ранее полученный функцией создания объекта сокета.

int MtConnect(const int handle,const char *server,const int port);

Установление связи с сервером. Параметры:

  • handle - хэндл сокета, через который необходимо установить связь;
  • server - адрес сервера (IP-address или domain name);
  • port - номер порта (обычно 1950 для демо-счетов и 1952 - для реальных).
int MtDisconnect(const int handle);

Разрыв ранее установленной связи с сервером. В качестве параметра передается хэндл сокета.

int MtLogin( const int handle, const int login, const char *password );

Запрос серверу на подключение в качестве авторизованного клиента.

  • handle - хэндл сокета, через который уже установлена связь с сервером;
  • login - номер клиента (фактически номер счета, которым управляет данный клиент);
  • password - пароль для входа в систему.
int MtOpenDemoAccount( const int handle, DemoAccountInfo *info );

Запрос серверу на открытие тренировочного (демонстрационного) счета и получение права на управление этим счетом.

  • handle - хэндл сокета, через который уже установлена связь с сервером;
  • info - адрес переменной типа структуры DemoAccountInfo, в которой заполнены необходимые для регистрации на сервере поля.

В случае успешного выполнения функции номер счета и пароль для входа в систему будут записаны в поля login и password структуры DemoAccountInfo по адресу info. После открытия счета соединение через данный сокет необходимо будет закрыть функциейMtDisconnect и затем заново открыть функцией MtConnect.

int MtChangePassword( const int handle, const char *newpass );

Запрос серверу на смену текущего пароля.

  • handle - хэндл сокета, через который уже установлена связь с сервером и произведен вход в систему в качестве авторизованного клиента;
  • newpass - новый пароль для следующего входа в систему.
RateInfo* MtGetRates( const int handle, const char *symbol, const int period, const time_t lasttime, int *counter );

Запрос серверу на получение истории котировок.

  • handle - хэндл сокета;
  • symbol - наименование инструмента, по которому необходимо получить котировки;
  • period - период котировок (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1);
  • lasttime - время (в секундах с 1 января 1970 г), начиная с которого интересуют котировки;
  • counter - адрес переменной типа int, куда будет записано количество возвращаемых котировок.

Возвращает массив структур RateInfo с котировками размером *counter, либо NULL в случае неудачи. Массив котировок должен быть освобожден при помощи функции HeapFree (GetProcessHeap(), 0, pRates).

int MtGetTrades( const int handle );

Запрос серверу на получение списка открытых позиций.

  • handle - хэндл сокета.

Список открытых позиций, полученный от сервера, запоминается в объекте сокета и может быть получен при помощи функции MtGetTradeRecords.

TradeRecord* MtGetTradeRecords( const int handle, BriefUserInfo *bui, int *items );

Получение списка открытых позиций.

  • handle - хэндл сокета;
  • bui - адрес переменной типа структуры BriefUserInfo, куда будет записана информация о клиенте;
  • items - адрес переменной типа int, куда будет записано количество открытых позиций.

Возвращает массив структур TradeRecord, содержащий список открытых позиций. Массив открытых позиций должен быть освобожден при помощи функции HeapFree.

TradeRecord* MtGetTradeHistory( const int handle, const time_t from, const time_t to, int *items );

Запрос серверу на получение истории торговых операций.

  • handle - хэндл сокета;
  • fromto - диапазон времени (в секундах с 1 января 1970 г), в пределах которого интересуют проведенные торговые операции по данному счету;
  • items - адрес переменной типа int, куда будет записано количество торговых операций.

Возвращает массив структур TradeRecord, содержащий историю торговых операций или NULL в случае неудачи.
Массив торговых операций должен быть освобожден при помощи функции HeapFree.

char* MtGetNewsBody( const int handle, const int key );

Запрос серверу на получение новости по ее номеру.

  • handle - хэндл сокета;
  • key - номер новости.

Возвращает символьную строку, содержащую новость, либо NULL в случае неудачи. Строка, содержащая новость должна быть освобождена при помощи функции HeapFree.

int MtGetPrices( const int handle, const char *symbol, const int lots, double *bid, double *ask );

Запрос серверу на получение цен по указанному инструменту.

  • handle - хэндл сокета;
  • symbol - наименование инструмента, по которому необходимо получить цены;
  • lots - количество лотов;
  • bid - адрес переменной типа double, в которую будет записана цена bid;
  • ask - адрес переменной типа double, в которую будет записана цена ask;

Необходимое замечание Если инструмент, по которому запрашиваются цены, находится в режиме Instant Execution, то необходимо просто брать последние котировки по запрашиваемому инструменту. Как определить инструмент, который находится в режиме Instant Execution. В массиве структур ConSecurity, который может быть получен функцией MtGetSecurities, соответствующий инструмент имеет в поле exemode значение EXE_MARKET.

int MtSendOrder( const int handle, const SendOrderInfo *soi );

Запрос серверу на открытие позиции либо на выставление <отложенного> ордера.

  • handle - хэндл сокета;
  • soi - адрес переменной типа структуры SendOrderInfo, в которой клиент должен заполнить необходимые поля.

Список ордеров может быть получен при помощи вызова MtGetTrades и MtGetTradeRecords. Если же сокет был переведен в режим подкачки данных, то список ордеров обновится автоматически и получить его можно при помощи MtGetTradeRecords (без предварительного вызова MtGetTrades).

int MtDeleteOrder( const int handle, const int order );

Запрос серверу на удаление <отложенного> ордера.

  • handle - хэндл сокета;
  • order - номер отложенного ордера.
int MtModifyOrder(const int handle, const int order, const double price, const double sl, const double tp );

Запрос серверу на изменение характеристик ордера.

  • handle - хэндл сокета;
  • order - номер ордера;
  • price - новое значение цены;
  • sl - новое значение Stop Loss;
  • tp - новое значение Take Profit.
int MtCloseOrder( const int handle, const int order, const double price, const int volume );

Запрос серверу на закрытие позиции.

  • handle - хэндл сокета;
  • order - номер ордера;
  • price - цена;
  • volume - размер закрываемой позиции (возможно частичное закрытие позиции - появится новый ордер с остаточным объемом).
int MtCloseByOrder( const int handle, const int order, const int byorder );

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

  • handle - хэндл сокета;
  • order - номер закрываемого ордера;
  • byorder - номер закрывающего ордера.
int MtRefreshSecurities( const int handle );

Запрос серверу на обновление списка доступных инструментов. Данная функция работает с файлом securities.dat, создающемся в рабочем директории. Наличие этого файла с актуальным списком инструментов позволяет значительно снизить трафик в процессе обновления списка. Полученный список доступных инструментов записывается в файл, а также хранится в объекте сокета и может быть запрошен функцией MtGetSecurities.

  • handle - хэндл сокета, через который уже произведен вход в систему в качестве авторизованного клиента.
ConSecurity* MtGetSecurities( const int handle, int *items );

Получение списка доступных инструментов.

  • handle - хэндл сокета;
  • items - адрес переменной типа int, куда будет записано количество доступных инструментов.

Возвращает массив структур ConSecurity, содержащий список доступных инструментов. Массив доступных инструментов должен быть освобожден при помощи функции HeapFree.

int MtAddSymbol( const int handle, const char * symbol );

Добавить инструмент в список выбранных инструментов для получения котировок в режиме подкачки данных. Список выбранных инструментов хранится в объекте сокета.

  • handle - хэндл сокета;
  • symbol - наименование добавляемого инструмента.
int MtHideSymbol( const int handle, const char * symbol );

Удалить инструмент из списка выбранных инструментов для получения котировок в режиме подкачки данных.

  • handle - хэндл сокета;
  • symbol - наименование удаляемого инструмента.
int MtSetPumpingMode( const int handle, const HWND destwnd, const UINT eventmsg );

Запрос серверу на перевод клиента в режим подкачки данных (пассивный режим). Этот режим предполагает уменьшение трафика, так как сервер без дополнительного запроса клиента будет посылать новые данные, относящиеся к клиенту. Этот режим предполагает более оперативное получение данных - котировок, новостей, изменения состояния открытых позиций, изменения состояния счета.

Важно! После перевода объекта сокета в режим подкачки данных недопустимо обращаться к серверу через данный сокет с запросами, кроме запроса на разрыв связи MtDisconnect. Можно вызывать следующие функции: MtGetTradeRecordsMtGetSecuritiesMtAddSymbol,MtHideSymbolMtGetUpdatedTickInfoMtGetLastNewsMtGetLastMail.

  • handle - хэндл сокета;
  • destwnd - хэндл окна, которому будут приходить сообщения о поступлении новых данных от сервера;
  • eventmsg - идентификатор сообщения, которое будет посылаться окну. В качестве параметра WPARAM может быть передано одно из значений: UPDATE_BIDASK, UPDATE_NEWS, UPDATE_TRADES, UPDATE_MAIL или END_PUMPING.

В качестве параметра LPARAM передается хэндл объекта сокета, пославшего сообщение.

TickInfo* MtGetUpdatedTickInfo( const int handle, int *items );

Получение списка последних котировок. Обычно вызывается после поступления события UPDATE_BIDASK. Так как котировки приходят в процессе подкачки данных, то и запрашивать список измененных котировок следует у того объекта сокета, который находится в режиме подкачки данных, и послал соответствующее сообщение.

  • handle - хэндл сокета;
  • items - адрес переменной типа int, куда будет записано количество котировок.

Возвращает массив структур TickInfo, содержащий список котировок. Массив котировок должен быть освобожден при помощи функции HeapFree.

NewsTopic* MtGetLastNews( const int handle, int *items );

Получение списка последних новостей. Вызывается после поступления события UPDATE_NEWS. Список последних новостей следует запрашивать у того объекта сокета, который находится в режиме подкачки данных, и послал соответствующее сообщение.

  • handle - хэндл сокета;
  • items - адрес переменной типа int, куда будет записано количество заголовков новостей.

Возвращает массив структур NewsTopic, содержащий список новостей. Массив новостей должен быть освобожден при помощи функции HeapFree.

int MtGetLastMail( const int handle, char * path, int *lenofpath );

Получения имени файла, в который было записано пришедшее с сервера письмо.

  • handle - хэндл сокета, переведенного в режим подкачки данных и пославшего сообщениеUPDATE_MAIL;
  • path - строка символов для приема имени файла;
  • lenofpath - адрес переменной типа int, в которой записана длина приемной строки.

Если имя файла (включая завершающий ноль) больше, чем приемная строка, то в приемную строку записывается строка нулевой длины, а в переменную по адресу lenofpath записывается длина строки, необходимая для приема имени файла.

TradeRecord* MtGetTradeRecords( const int handle, BriefUserInfo *bui, int *items );

Эта функция уже описана выше. Необходимое дополнение для объекта сокета, переведенного в режим подкачки данных: список открытых позиций необходимо запрашивать у того объекта сокета, который послал сообщение UPDATE_TRADES.

const char* MtGetErrorDescription( const int errorcode );

Возвращает символьное описание ошибки. В качестве параметра используется код возврата от какой-либо вышеописанной функции.

Both comments and pings are currently closed.

Comments are closed.

Форекс рейтинг