- Установка Python и пакета MetaTrader5
- Обзор функций пакета MetaTrader5 для Python
- Подключение скрипта Python к терминалу и счету
- Проверка ошибок: last_error
- Получение информации о торговом счете
- Получение информации о терминале
- Получение информации о финансовых инструментах
- Подписка на стакан цен
- Чтение котировок
- Чтение истории тиков
- Вычисление маржинальных требований и оценка прибыли
- Проверка и отправка торгового приказа
- Получение количества и списка действующих ордеров
- Получение количества и списка открытых позиций
- Чтение истории ордеров и сделок
Чтение котировок
Python API позволяет получить массивы цен (баров) с помощью 3 функций, отличающихся способом указания диапазона запрашиваемых данных: по номерам баров или по времени. Все функции аналогичны различным формам CopyRates.
У всех функций два первых параметра служат для указания имени символа и таймфрейма. Для таймфреймов в mt5 определено перечисление TIMEFRAME, аналогичное перечислению ENUM_TIMEFRAMES в MQL5.
Обратите внимание: по каким-то причинам в Python элементы этого перечисления имеют префикс TIMEFRAME_, в то время как элементы аналогичного перечисления в MQL5 имеют префиксы PERIOD_.
Идентификатор |
Описание |
---|---|
TIMEFRAME_M1 |
1 минута |
TIMEFRAME_M2 |
2 минуты |
TIMEFRAME_M3 |
3 минуты |
TIMEFRAME_M4 |
4 минуты |
TIMEFRAME_M5 |
5 минут |
TIMEFRAME_M6 |
6 минут |
TIMEFRAME_M10 |
10 минут |
TIMEFRAME_M12 |
12 минут |
TIMEFRAME_M12 |
15 минут |
TIMEFRAME_M20 |
20 минут |
TIMEFRAME_M30 |
30 минут |
TIMEFRAME_H1 |
1 час |
TIMEFRAME_H2 |
2 часа |
TIMEFRAME_H3 |
3 часа |
TIMEFRAME_H4 |
4 часа |
TIMEFRAME_H6 |
6 часов |
TIMEFRAME_H8 |
8 часов |
TIMEFRAME_H12 |
12 часов |
TIMEFRAME_D1 |
1 день |
TIMEFRAME_W1 |
1 неделя |
TIMEFRAME_MN1 |
1 месяц |
Все 3 функции возвращают бары в виде массива пакета numpy с именованными столбцами time, open, high, low, close, tick_volume, spread и real_volume. Массив numpy.ndarray является более эффективным аналогом именованных кортежей. Для доступа к колонкам используйте нотацию с квадратными скобками, array['column'].
В случае ошибки возвращается None.
Все параметры функций являются обязательными, неименованными.
numpy.ndarray copy_rates_from(symbol, timeframe, date_from, count)
Функция copy_rates_from запрашивает бары, начиная с указанной даты (date_from) в количестве count баров. Дату можно задавать объектом datetime или в виде количества секунд, прошедших с 1970.01.01.
При создании объекта datetime Python использует локальный часовой пояс, в то время как терминал MetaTrader 5 хранит время тиков и открытия баров в UTC (GMT, без смещения). Поэтому, для выполнения функций, использующих время, необходимо создавать переменные datetime в UTC-времени. Для настройки таймзон можно использовать пакет pytz. Например (см. MQL5/Scripts/MQL5Book/Python/eurusdrates.py),
from datetime import datetime
|
Образец полученных данных:
(1641567600, 1.12975, 1.13226, 1.12922, 1.13017, 8325, 0, 0)
|
numpy.ndarray copy_rates_from_pos(symbol, timeframe, start, count)
Функция copy_rates_from_pos запрашивает бары, начиная с указанного индекса start, в количестве count.
Терминал MetaTrader 5 отдает бары только в пределах истории, доступной пользователю на графиках. Количество баров, которые доступны пользователю, задается в настройках параметром "Макс. баров в окне".
Следующий пример (MQL5/Scripts/MQL5Book/Python/ratescorr.py) демонстрирует графическое представление корреляционной матрицы нескольких валют на основе котировок.
import MetaTrader5 as mt5
|
Файл с изображением ratescorr.png формируется в "песочнице" текущей рабочей копии MetaTrader 5. Интерактивный показ изображения в отдельном окне с помощью вызова plt.show() может не сработать, если ваша установка Python не включает дополнительную опцию (Optional Features) — "tcl/tk and IDLE" или если не добавить пакет pip install tk.
Корреляционная матрица валют Forex
numpy.ndarray copy_rates_range(symbol, timeframe, date_from, date_to)
Функция copy_rates_range позволяет получить бары в указанном диапазоне даты и времени, между date_from и date_to: оба значения задаются как количество секунд с начала 1970-го года, в часовом поясе UTC (поскольку Python использует в переменных datetime локальную таймзону, выполняйте конвертацию с помощью модуля pytz). В результат попадают бары с временем открытия time >= date_from и time <= date_to.
В следующем скрипте запросим бары в конкретном временном диапазоне.
from datetime import datetime
|
Пример результата:
time open high low close tick_volume spread real_volume 0 2020-01-10 00:00:00 109.513 109.527 109.505 109.521 43 2 0 1 2020-01-10 00:05:00 109.521 109.549 109.518 109.543 215 8 0 2 2020-01-10 00:10:00 109.543 109.543 109.466 109.505 98 10 0 3 2020-01-10 00:15:00 109.504 109.534 109.502 109.517 155 8 0 4 2020-01-10 00:20:00 109.517 109.539 109.513 109.527 71 4 0 5 2020-01-10 00:25:00 109.526 109.537 109.484 109.520 106 9 0 6 2020-01-10 00:30:00 109.520 109.524 109.508 109.510 205 7 0
|