MT4ForexParser
Ссылка на проект: https://github.com/Tim55667757/MT4ForexParser
У всех трейдеров периодически возникает необходимость получить исторические данные по валютам Forex (или по акциям) для дальнейшего анализа цен и построения графиков. Чаще всего эти данные поставляются на платной основе, либо вам приходится тратить много времени на ручную выгрузку данных на специальных сайтах.
Однако большинство Forex брокеров работают с торговой платформой MetaTrader 4 и загружают туда данные в специальном бинарном .hst-формате для MetaTrader 4 (не в .csv). Этим можно воспользоваться и получить исторические свечи подключившись к серверу брокера в демо-режиме, который есть почти у всех брокеров. При этом сжатый бинарный .hst-файл будет скачан локально в рабочий каталог MetaTrader 4.
Далее можно запустить python-модуль mt4forexparser, который умеет читать файлы формата .hst и сохранять их как текстовый .csv-файл или pandas dataframe. Вы получите таблицу, которая содержит колонки данных в следующей последовательности: "date", "time", "open", "high", "low", "close", "volume". Одна строка — это набор данных для построения одной "японской свечи" (candlestick).
Как установить
Проще всего использовать установку через PyPI:
pip install mt4forexparser
После этого можно проверить установку командой:
pip show mt4forexparser
Примеры использования
Из командной строки
Внутренняя справка по ключам:
mt4forexparser --help
Вывод:
Запуск: python MT4ForexParser.py [параметры] [одна или несколько команд]
Парсер бинарных файлов истории Metatrader 4. Умеет читать и сохранять историю цен в виде .csv-файла
или Pandas dataframe, а также отображать цены в виде интерактивного графика.
Смотрите примеры: https://tim55667757.github.io/MT4ForexParser
Возможные параметры командной строки:
-h, --help Показать эту подсказку и выйти
--mt4-history MT4_HISTORY
Параметр (обязательный): полный путь до файла истории цен
в формате Metatrader 4.
--output OUTPUT Параметр: полный путь до выходного .csvфайла. По умолчанию
None, при этом возвращается только Pandas dataframe.
--debug-level DEBUG_LEVEL
Параметр: уровень логирования для STDOUT,
например, 10 = DEBUG, 20 = INFO, 30 = WARNING,
40 = ERROR, 50 = CRITICAL.
--parse Команда: прочитать, распарсить и сохранить историю цен как
Pandas dataframe или .csv-файл (если задан ключ --output).
--render Команда: использовать библиотеку PriceGenerator для отрисовки
интерактивного графика цен после парсинга истории. Этот ключ
можно использовать только с ключом --parse.
Поддерживаются две версии форматов файлов .hst: 400 и 401, они определяются автоматически. Попробуйте проверить работу парсера через командную строку на двух приложенных файлах различного формата: ./tests/EURUSD240_old_format_400.hst и ./tests/EURUSD240_new_format_401.hst.
Команда запуска может быть такая:
mt4forexparser --mt4-history ./tests/EURUSD240_old_format_400.hst --output ./tests/EURUSD240_old_format_400.csv --debug-level 10 --parse
В случае успеха вы должны получить вывод логов примерно следующего содержания:
MT4ForexParser.py L:118 DEBUG [2020-07-21 20:47:00,134] MT4 parser started: 2020-07-21 20:47:00
MT4ForexParser.py L:38 DEBUG [2020-07-21 20:47:00,134] MT4 history file: [./tests/EURUSD240_old_format_400.hst]
MT4ForexParser.py L:42 DEBUG [2020-07-21 20:47:00,171] MT4 history file format version: [400]
MT4ForexParser.py L:63 INFO [2020-07-21 20:47:00,334] It was read 5909 rows from file [./tests/EURUSD240_old_format_400.hst]
MT4ForexParser.py L:64 INFO [2020-07-21 20:47:00,334] Showing last 3 rows:
MT4ForexParser.py L:69 INFO [2020-07-21 20:47:00,339] date time open high low close volume
MT4ForexParser.py L:69 INFO [2020-07-21 20:47:00,339] 5906 2013.10.18 12:00 1.36918 1.37036 1.36690 1.36780 8193
MT4ForexParser.py L:69 INFO [2020-07-21 20:47:00,340] 5907 2013.10.18 16:00 1.36779 1.36993 1.36773 1.36795 6639
MT4ForexParser.py L:69 INFO [2020-07-21 20:47:00,340] 5908 2013.10.18 20:00 1.36793 1.36849 1.36765 1.36839 1955
MT4ForexParser.py L:73 INFO [2020-07-21 20:47:00,383] Forex history saved to .csv-formatted file [./tests/EURUSD240_old_format_400.csv]
MT4ForexParser.py L:148 DEBUG [2020-07-21 20:47:00,384] All MT4 parser operations are finished success (summary code is 0).
MT4ForexParser.py L:153 DEBUG [2020-07-21 20:47:00,384] MT4 parser work duration: 0:00:00.249747
MT4ForexParser.py L:154 DEBUG [2020-07-21 20:47:00,384] MT4 parser work finished: 2020-07-21 20:47:00
При этом вы получите .csv-файл ./tests/EURUSD240_old_format_400.csv следующего содержания (всего 5909 строк):
2009.12.21,00:00,1.4311,1.4347,1.4311,1.4342,5504
2009.12.21,04:00,1.4342,1.4357,1.4327,1.4334,5234
2009.12.21,08:00,1.4334,1.4342,1.428,1.4337,8366
...
2013.10.18,12:00,1.36918,1.37036,1.3669,1.3678,8193
2013.10.18,16:00,1.36779,1.36993,1.36773,1.36795,6639
2013.10.18,20:00,1.36793,1.36849,1.36765,1.36839,1955
Аналогично для парсинга файла нового формата:
mt4forexparser --mt4-history ./tests/EURUSD240_new_format_401.hst --output ./tests/EURUSD240_new_format_401.csv --debug-level 10 --parse
В случае успеха вы получите примерно такой вывод логов:
MT4ForexParser.py L:118 DEBUG [2020-07-21 20:55:42,594] MT4 parser started: 2020-07-21 20:55:42
MT4ForexParser.py L:38 DEBUG [2020-07-21 20:55:42,595] MT4 history file: [./tests/EURUSD240_new_format_401.hst]
MT4ForexParser.py L:42 DEBUG [2020-07-21 20:55:42,675] MT4 history file format version: [401]
MT4ForexParser.py L:63 INFO [2020-07-21 20:55:43,098] It was read 12969 rows from file [./tests/EURUSD240_new_format_401.hst]
MT4ForexParser.py L:64 INFO [2020-07-21 20:55:43,099] Showing last 3 rows:
MT4ForexParser.py L:69 INFO [2020-07-21 20:55:43,103] date time open high low close volume
MT4ForexParser.py L:69 INFO [2020-07-21 20:55:43,104] 12966 2019.07.08 08:00 1.12305 1.12339 1.12190 1.12310 8894
MT4ForexParser.py L:69 INFO [2020-07-21 20:55:43,104] 12967 2019.07.08 12:00 1.12309 1.12322 1.12123 1.12228 9257
MT4ForexParser.py L:69 INFO [2020-07-21 20:55:43,104] 12968 2019.07.08 16:00 1.12228 1.12240 1.12091 1.12153 7381
MT4ForexParser.py L:73 INFO [2020-07-21 20:55:43,187] Forex history saved to .csv-formatted file [./tests/EURUSD240_new_format_401.csv]
MT4ForexParser.py L:148 DEBUG [2020-07-21 20:55:43,188] All MT4 parser operations are finished success (summary code is 0).
MT4ForexParser.py L:153 DEBUG [2020-07-21 20:55:43,188] MT4 parser work duration: 0:00:00.594304
MT4ForexParser.py L:154 DEBUG [2020-07-21 20:55:43,189] MT4 parser work finished: 2020-07-21 20:55:43
Файл ./tests/EURUSD240_new_format_401.csv будет полностью аналогичный и включать те же самые столбцы "date", "time", "open", "high", "low", "close", "volume" (всего 12969 строк):
2009.12.21,00:00,1.4311,1.4347,1.4311,1.4342,5504
2009.12.21,04:00,1.4342,1.4357,1.4327,1.4334,5234
2009.12.21,08:00,1.4334,1.4342,1.428,1.4337,8366
...
2019.07.08,08:00,1.12305,1.12339,1.1219,1.1231,8894
2019.07.08,12:00,1.12309,1.12322,1.12123,1.12228,9257
2019.07.08,16:00,1.12228,1.1224,1.12091,1.12153,7381
Кроме того, вы можете построить интерактивный график цен (используя библиотеку PriceGenerator). Для этого укажите ключ --render
после ключа --parse
:
mt4forexparser --mt4-history ./tests/EURUSD240_new_format_401.hst --output test.csv --parse --render
После выполнения команды выше вы получите три файла:
test.csv
— файл в формате .csv, который содержит цены (пример: ./media/test.csv);index.html
— график цен и статистику, отрисованные при помощи библиотеки Bokeh и сохранённые в .html-файл (пример: ./media/index.html);index.html.md
— статистика в текстовом виде, сохранённая в маркдаун-формате (пример: ./media/index.html.md).
Через импорт модуля
Рассмотрим на примере парсинга файла истории нового формата (версии 401 для MetaTrader 4) ./tests/EURUSD240_new_format_401.hst:
from mt4forexparser.MT4ForexParser import MT4ParseToPD as Parser
# Распарсим исторические свечи и сохраним данные в переменную типа pandas dataframe.
# Для сохранения свечей в файл можно указать переменную outputFile="./tests/EURUSD240_new_format_401.csv"
# Если переменная outputFile не будет указана, модуль вернёт только данные в формате pandas dataframe.
df = Parser(historyFile="./tests/EURUSD240_new_format_401.hst")
print(df) # выведем данные по свечам в формате pandas dataframe
При запуске получим полностью аналогичный вывод:
...
>>> print(df)
date time open high low close volume
0 2009.12.21 00:00 1.43110 1.43470 1.43110 1.43420 5504
1 2009.12.21 04:00 1.43420 1.43570 1.43270 1.43340 5234
2 2009.12.21 08:00 1.43340 1.43420 1.42800 1.43370 8366
3 2009.12.21 12:00 1.43370 1.43710 1.43300 1.43330 8456
4 2009.12.21 16:00 1.43320 1.43350 1.42860 1.42940 8488
... ... ... ... ... ... ... ...
12964 2019.07.08 00:00 1.12230 1.12293 1.12192 1.12204 3455
12965 2019.07.08 04:00 1.12205 1.12307 1.12203 1.12307 4173
12966 2019.07.08 08:00 1.12305 1.12339 1.12190 1.12310 8894
12967 2019.07.08 12:00 1.12309 1.12322 1.12123 1.12228 9257
12968 2019.07.08 16:00 1.12228 1.12240 1.12091 1.12153 7381
Успехов вам в автоматизации биржевой торговли! ;-)