Обсуждение статьи "Соединение MetaTrader 5 и Python: получение и отправка данных"

 

Опубликована статья Соединение MetaTrader 5 и Python: получение и отправка данных:

Работа с данными в наше время требует обширного инструментария и, зачастую, не ограничивается "песочницей" какого-то отдельного приложения. Существуют специализированные общепризнанные языки программирования для обработки и анализа данных, статистики и машинного обучения. Лидером в этой области является язык Python. В статье описан пример связи MetaTrader5 и Python при помощи сокетов, а также получение котировок через API терминала.

Мы напишем простую программу, которая будет создавать сокет сервер и принимать необходимую информацию от клиента (MQL5 программы), обрабатывать ее, после чего отправлять полученный результат обратно. Такое взаимодействие видится наиболее востребованным. Допустим, нам необходимо воспользоваться какой-нибудь библиотекой машинного обучения, например, scikit learn, которая будет рассчитывать линейную регрессию от цен, а затем возвращать координаты линии, по которым ее можно отобразить в терминале MetaTrader 5. Возьмем этот пример за базовый, но подобное взаимодействие может быть также использовано для обучения нейронной сети, передачи в нее данных из терминала (котировок), обучения и возвращения результата в терминал.

Теперь мы можем отключиться от терминала, после чего привести цены валютных пар к процентным изменениям, посчитав корреляционную матрицу и выведя ее на экран:

# Deinitializing MT5 connection
MT5Shutdown()

# Compute Percentage Change
rets = d.pct_change()

# Compute Correlation
corr = rets.corr()

# Plot correlation matrix
plt.figure(figsize=(10, 10))
plt.imshow(corr, cmap='RdYlGn', interpolation='none', aspect='auto')
plt.colorbar()
plt.xticks(range(len(corr)), corr.columns, rotation='vertical')
plt.yticks(range(len(corr)), corr.columns);
plt.suptitle('FOREX Correlations Heat Map', fontsize=15, fontweight='bold')
plt.show()

Видно, что валютные пары GBPUSD и GBPJPY хорошо коррелируют.


Автор: Maxim Dmitrievsky

 
Спасибо. Жаль, без кастинга.
 
fxsaber:
Спасибо. Жаль, без кастинга.

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

Также, если сокеты получат свое развитие в тестере, тогда это будет очень актуально.

 
Полезно. Как раз питонить начал)
 

Для истории, есть большая стандартная математическая библиотеку на MQL5 в исходниках прямо в терминале:

 

С удовольствием всегда читаю статьи @Maxim Dmitrievsky , нравится мне его подход к написанию статей - сжато описана сама реализация идеи, не люблю в последнее время "километровые портянки" кода и разжевывание каждой строчки до "а теперь мы назовем переменную XY, где сохраним ..."

Спасибо!

 
Igor Makanu:

С удовольствием всегда читаю статьи @Maxim Dmitrievsky , нравится мне его подход к написанию статей - сжато описана сама реализация идеи, не люблю в последнее время "километровые портянки" кода и разжевывание каждой строчки до "а теперь мы назовем переменную XY, где сохраним ..."

Спасибо!

Так читатель то разный бывает как искушенный, так и новичок. 
 
Alexander Fedosov:
Так читатель то разный бывает как искушенный, так и новичок. 

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

Если не ошибаюсь, то человек может усваивать новый материал лишь первые 15 минут, затем внимание снижается и эффект от новых знаний будет нулевой - как говорится  "лучше меньше да лучше" 

Возможно конечно растянуть чтение большой статьи, как чтение журнала или книги на несколько дней, но это не мой вариант

 

socketclientEA (Si-6.19,M15) Connection localhost:9090 error 4014

https://www.mql5.com/ru/docs/network/socketconnect

При вызове из индикатора GetLastError() вернет ошибку 4014 – "Системная функция не разрешена для вызова".

Решение:

Адрес для подключения должен быть добавлен в список разрешенных на стороне клиентского терминала (раздел Сервис \ Настройки \ Советники).

Разрешить Webrequest для следующих url:

http://localhost

 
Как побороть сообщение "IPC call failed", появляющееся при запуске ...= MT5CopyTicksRange(...)
 
slukin:

socketclientEA (Si-6.19,M15) Connection localhost:9090 error 4014

https://www.mql5.com/ru/docs/network/socketconnect

При вызове из индикатора GetLastError() вернет ошибку 4014 – "Системная функция не разрешена для вызова".

Решение:

Адрес для подключения должен быть добавлен в список разрешенных на стороне клиентского терминала (раздел Сервис \ Настройки \ Советники).

Разрешить Webrequest для следующих url:

http://localhost

Спасибо, это было весьма не самоочевидно сначала, разработчики злые гении просто!

Причина обращения: