MetaTrader 5 Python User Group - Comment utiliser Python dans Metatrader

 

Nous préparons le module MetaTrader 5 pour Python.

Comme pour le paquet R, nous testons pour l'instant des fonctions simples pour extraire des données d'une copie courante du terminal.

Comment vous pouvez tester l'opération :

  1. Installer Python 3.7.6 x64 à partir de https://www.python.org/downloads/windows/ avec le chemin %PATH% inclus

  2. Fournir le paquetage matplotlib pour le support des graphiques
    pip install matplotlib
  3. Exécuter l'installation du paquet MetaTrader5
    pip install MetaTrader5
    
  4. Vous devez avoir installé MetaTrader 5 build 2007 ou plus sur votre PC.

  5. Exécuter le script de test
    python metatrader5-test.py
  6. Le terminal MetaTrader 5 fonctionnera en arrière-plan, les données seront extraites, affichées dans la console et un graphique sera dessiné.



Code de test :

from datetime import datetime
from MetaTrader5 import *

MT5Initialize()
MT5WaitForTerminal()

print(MT5TerminalInfo())
print(MT5Version())

ticks1 = MT5CopyTicksFrom("EURAUD", datetime(2019,1,28,13), 10000, MT5_COPY_TICKS_ALL)
ticks2 = MT5CopyTicksRange("AUDUSD", datetime(2019,1,27,13), datetime(2019,1,28,13,1), MT5_COPY_TICKS_ALL)

rates1 = MT5CopyRatesFrom("EURUSD", MT5_TIMEFRAME_M1, datetime(2019,1,28,13), 1000)
rates2 = MT5CopyRatesFromPos("EURGBP", MT5_TIMEFRAME_M1, 0, 1000)
rates3 = MT5CopyRatesRange("EURCAD", MT5_TIMEFRAME_M1, datetime(2019,1,27,13), datetime(2019,1,28,13))

MT5Shutdown()

#DATA
print('ticks1(', len(ticks1), ')')
for val in ticks1[:10]: print(val)
print('ticks2(', len(ticks2), ')')
for val in ticks2[:10]: print(val)
print('rates1(', len(rates1), ')')
for val in rates1[:10]: print(val)
print('rates2(', len(rates2), ')')
for val in rates2[:10]: print(val)
print('rates3(', len(rates3), ')')
for val in rates3[:10]: print(val)

#PLOTTING
x_time = [x.time for x in rates2]
y_open = [y.open for y in rates2]
y_close = [y.close for y in rates2]

import matplotlib.pyplot as plt

plt.plot(x_time, y_open, 'g-')
plt.plot(x_time, y_close, 'r-')

plt.show()


Nous ajouterons d'autres fonctionnalités ultérieurement et placerons le paquet dans un dépôt public de paquets Python, afin qu'il puisse être installé immédiatement.

Python Releases for Windows
Python Releases for Windows
  • www.python.org
The official home of the Python Programming Language
Dossiers :
 

Un exemple de dessin rapide d'une matrice de corrélation :

from MetaTrader5 import *
from datetime import date
import pandas as pd 
import matplotlib.pyplot as plt 

# Initializing MT5 connection 
MT5Initialize()
MT5WaitForTerminal()

print(MT5TerminalInfo())
print(MT5Version())

# Create currency watchlist for which correlation matrix is to be plotted
sym = ['EURUSD','GBPUSD','USDJPY','USDCHF','AUDUSD','GBPJPY']

# Copying data to dataframe
d = pd.DataFrame()
for i in sym:
     rates = MT5CopyRatesFromPos(i, MT5_TIMEFRAME_M1, 0, 1000)
     d[i] = [y.close for y in rates]

# 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()


Dossiers :
 

Lorsqu'une demande d'historique provient de Python, les hst et tkc correspondants sont-ils générés dans le Terminal ?


J'aimerais comprendre comment il est possible de travailler avec un millier de symboles simultanément(AMPGlobalUSA-Demo), pour chacun desquels une centaine de mégaoctets de ticks sont chargés.

 
Si quelqu'un le sait, montrez-moi comment créer rapidement un graphique MT5 similaire à partir de données historiques en Python. C'est-à-dire interactif, et non une image statique.
 
fxsaber:
Si quelqu'un le sait, montrez-moi comment créer rapidement un semblant de graphique MT5 à partir de données historiques en Python. C'est-à-dire interactif, et non une image statique.

https://plot.ly/~pari/67/stock-chart-for-netflix-inc/#///

https://plot.ly/python/candlestick-charts/

plot.ly en général

 
Maxim Dmitrievsky:

https://plot.ly/~pari/67/stock-chart-for-netflix-inc/#///

https://plot.ly/python/candlestick-charts/

plot.ly en général.

Je suis un zéro complet en Python. J'aimerais obtenir un coup de pouce motivant, qui montre la simplicité et la facilité d'utilisation de MT5-Python. Il y aura un exemple d'une telle connexion, veuillez partager le code.

Il a l'air très cool. J'aimerais voir un code fonctionnel pour MT5.
 
fxsaber:

Je suis un zéro complet en Python. J'aimerais avoir un coup de pouce motivant pour voir la simplicité et la facilité d'utilisation de MT5-Python. Il y aura un exemple d'une telle connexion, veuillez partager le code.

Je suis plutôt pour le mode opératoire, je ne visualise presque jamais rien. Il n'est pas réaliste de réécrire naturellement les éléments du MO moderne, il faut utiliser des éléments prêts à l'emploi. La motivation évidente pour moi est la suivante.

 
fxsaber:

Il a l'air très cool. J'aimerais voir un code fonctionnel pour MT5.

peut être codé plus tard... en fait, il y a des exemples prêts dans les liens

 
Parfois, j'ai besoin de visualiser rapidement les ticks sous une forme plus ou moins pratique, pour cela j'utilise l'indicateur ZoomPrice. Mais la visualisation est beaucoup plus cool sur les liens. S'il est très facile de passer de MT5 à Python et d'obtenir un joli graphique en ticks, ce n'est pas une mauvaise motivation pour beaucoup de gens.
 
fxsaber:
Parfois, j'ai besoin de visualiser rapidement les ticks sous une forme plus ou moins pratique, j'utilise l'indicateur ZoomPrice pour cela. Mais la visualisation est bien meilleure sur les liens. S'il est très simple de passer de MT5 à Python et d'obtenir un joli graphique de ticks, ce n'est pas une mauvaise motivation pour beaucoup de gens.

Pour l'instant, toute information (autre que les guillemets) peut être envoyée/renvoyée via des sockets en temps réel. La seule limite est qu'ils ne fonctionnent pas encore dans le testeur.

 
Maxim Dmitrievsky:

Pour l'instant, toute information (autre que les guillemets) peut être envoyée/renvoyée via des sockets en temps réel. La seule limite est qu'il ne fonctionne pas encore dans le testeur.

Malheureusement, sans les codes sources, cette fonctionnalité n'est que des mots pour moi. Je ne sais pas grand-chose, et le début de l'auto-apprentissage devrait probablement être quelque chose de pratique pour commencer, qui peut être filé tout de suite.