MetaTrader 5 Python User Group - Comment utiliser Python dans Metatrader - page 78

 
Maxim Dmitrievsky:

Renate, y a-t-il des nouvelles du support ONNX ?

Non.

Il n'y a pas encore de demande ni de public préparé.

 

De nombreux changements ont été effectués au cours de l'année écoulée, les anciens scripts ne fonctionnent plus.

Il existe un terminal MT5 build 2361, 32bit sur Windows 7. Le terminal lui-même fonctionne, mais la connexion des scripts python a cessé de fonctionner (alors qu'elle fonctionnait au début de l'année).

Évidemment, en raison des mises à jour du terminal, rien d'autre n'a changé. Pour le test, exécutez un script simple

import MetaTrader5 as mt5
from time import sleep

mt5.initialize()
print('start')
print(mt5.terminal_info())
sleep(10) 

mt5.shutdown()
print('end')

Question : quelle version de MetaTrader5 python dois-je installer pour que cela fonctionne à nouveau ? (Ou comment annuler les mises à jour du terminal ?)

J'ai essayé différentes versions du module - toutes ont des erreurs. Ceux qui sont plus récents affichent -10003, 'IPC initialize failed, MetaTrader 5 x64 not found',

Certains passent l'initialisation, lancent le terminal, mais lorsque je demande quelque chose, ils renvoient RuntimeError : IPC recv failed in 'py_test.py'.

La plus ancienne version 5.0.10 comporte d'autres commandes, mais elles ne fonctionnent pas non plus.

Le terminal ne peut pas mettre à jour les nouvelles versions, il y avait une version fonctionnelle du module python, mais je ne la trouve pas maintenant.

La version 64 bits du terminal nécessite des mises à jour du système d'exploitation et beaucoup d'autres mises à jour, de plus le système d'exploitation 64 bits consomme beaucoup plus de mémoire et d'espace disque, mauvais choix. En général, la politique de mise à jour automatique de tout est mauvaise. S'il fonctionne, ne le touchez pas.

En général, vous devriez disposer d'un tableau dans la documentation indiquant quelles versions sont compatibles avec lesquelles, si vous ne prenez pas en charge la compatibilité avec les anciennes versions et que les mises à jour sont forcées.

Автоматическое обновление - Для продвинутых пользователей - Справка по MetaTrader 5
Автоматическое обновление - Для продвинутых пользователей - Справка по MetaTrader 5
  • www.metatrader5.com
В платформу встроена система автоматического обновления. Она позволяет своевременно получать и устанавливать новые версии программы. Эту систему отключить нельзя. Порядок обновления При подключении к торговому серверу происходит проверка наличия обновлений платформы. Если найдено обновление какого-либо из компонентов торговой платформы...
 
Lyuk:


La prise en charge du système d'exploitation 32 bits a été désactivée il y a de nombreuses constructions. Le terminal a beaucoup changé depuis. D'où la solution probable à votre problème : vous DEVEZ utiliser Windows 10 64 bits.

 

Mais il existe une version compatible du terminal et du module, vous pouvez simplement les installer, sans aucune nouvelle fonctionnalité.

Et exiger Windows 10 64 bit est trop pour un programme comme le terminal. Il est trop lourd, trop gourmand, trop peu fiable pour faire fonctionner quoi que ce soit qui nécessite un fonctionnement à long terme. Il y a aussi des problèmes avec les mises à jour automatiques. C'est dommage que MT soit lié à ce système.

 
Vladimir Karputov:

Vous DEVEZ utiliser Windows 10 64 bits.

Quel est le problème avec Windows 7 x64 ? J'ai raté une autre mise à jour ? ??

 
Aleksey Vyazmikin:

Quel est le problème avec Windows 7 x64 ? J'ai raté une autre nouvelle ? ??

Il me semble que 7 est mieux que 10. Pas d'orientation sur les systèmes mobiles.

 
Valeriy Yastremskiy:

Pour moi, 7 est mieux que 10. Pas d'orientation vers les systèmes mobiles.

Je suis d'accord, j'ai travaillé sur 10 pendant presque un an et je suis rentré heureux avec 7 !

 
Renat Fatkhullin:

Non.

Tant qu'il n'y a pas de demande et pas de public préparé.

4 personnes ont exprimé une demande jusqu'à présent, dans le sujet de l'apprentissage automatique :) il me semble que s'il y a une opportunité et quelques articles sur le sujet, les pythonistes commenceront à porter des modèles. Surtout les anglophones.
 
2020.11.09 09:43:31.509 Terminal        MetaTrader 5 x64 build 2670 started for MetaQuotes Software Corp.
2020.11.09 09:43:31.510 Terminal        Windows 10 build 19042, Intel Core i7-9750 H  @ 2.60 GHz, 23 / 31 Gb memory, 1665 / 1861 Gb disk, IE 11, UAC, GMT+2
2020.11.09 09:43:31.510 Terminal        C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075


Je l'exécute à la fois comme un script dans MetaEditor et dans jupyter notebook.

Python version:  sys.version_info(major=3, minor=7, micro=6, releaselevel='final', serial=0)
Scikit-Learn version:  0.23.1


Je n'arrive pas à imprimer les cinq premières lignes de l'objet DataFrame.

Je prends le script du dossier de données 'Scripts' et ajoute les lignes:

from datetime import datetime
import MetaTrader5 as mt5
# выведем данные о пакете MetaTrader5
print("MetaTrader5 package author: ",mt5.__author__)
print("MetaTrader5 package version: ",mt5.__version__)

# импортируем модуль pandas для вывода полученных данных в табличной форме
import pandas as pd
pd.set_option('display.max_columns', 500) # сколько столбцов показываем
pd.set_option('display.width', 1500)      # макс. ширина таблицы для показа
# импортируем модуль pytz для работы с таймзоной
import pytz

# установим подключение к терминалу MetaTrader 5
if not mt5.initialize():
    print("initialize() failed")
    mt5.shutdown()

# установим таймзону в UTC
timezone = pytz.timezone("Etc/UTC")
# создадим объект datetime в таймзоне UTC, чтобы не применялось смещение локальной таймзоны
utc_from = datetime(2020, 1, 10, tzinfo=timezone)
# получим 10 баров с EURUSD H4 начиная с 01.10.2020 в таймзоне UTC
rates = mt5.copy_rates_from("EURUSD", mt5.TIMEFRAME_H4, utc_from, 10)

# завершим подключение к терминалу MetaTrader 5
mt5.shutdown()
# выведем каждый элемент полученных данных на новой строке
print("Выведем полученные данные как есть")
for rate in rates:
    print(rate)

# создадим из полученных данных DataFrame
rates_frame = pd.DataFrame(rates)

# выведем пять первых строк (метод 'head' pandas)
print("\nВыведем пять первых строк")
rates_frame.head()

rates_frame['time']=pd.to_datetime(rates_frame['time'], unit='s')

# выведем данные
print("\nВыведем датафрейм с данными")
print(rates_frame)

rates_frame['time']=pd.to_datetime(rates_frame['time'], unit='s')

# выведем данные
print("\nВыведем датафрейм с данными")
print(rates_frame)

et la méthode ne produit rien :

(1578614400, 1.11051, 1.11093, 1.11017, 1.11041, 2448, 1, 0)

Выведем пять первых строк

Выведем датафрейм с данными



Pourquoi la méthode 'head()' n'a pas fonctionné, mais cette manoeuvre:

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Nouvelle version de MetaTrader 5 build 2650 : Chargement des graphiques en arrière-plan et améliorations dans MQL5 Profiler

Rashid Umarov, 2020.11.10 14:03

Essayez-le.

# выведем пять первых строк (метод 'head' pandas)
print("\nВыведем пять первых строк")
print( rates_frame.head())

Résultat

Выведем пять первых строк
         time     open     high      low    close  tick_volume  spread  real_volume
0  1578484800  1.11384  1.11386  1.11110  1.11200        12101       0            0
1  1578499200  1.11200  1.11308  1.11087  1.11180        13243       0            0
2  1578513600  1.11180  1.11180  1.11018  1.11041         5709       0            0
3  1578528000  1.11053  1.11194  1.11033  1.11174         4409       0            0
4  1578542400  1.11174  1.11190  1.11126  1.11183         2964       0            0



a travaillé ?

 
Vladimir Karputov:

Pourquoi la méthode 'head()' n'a pas fonctionné, mais cette manoeuvre:


a travaillé ?

Parce que la méthode head()(https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.head.html) renvoie un objet, et non une sortie vers le journal. Pour voir le contenu, vous devez envoyer explicitement l'objet à print()

Par commodité, cet anaconda produit les objets comme si print() avait été appelé.