MetaTrader 5 Python User Group - wie man Python in Metatrader verwendet

 

Wir bereiten ein MetaTrader 5 Modul für Python vor.

Wie beim R-Paket testen wir vorerst einfache Funktionen, um Daten aus einer laufenden Kopie des Terminals zu extrahieren.

Wie Sie den Vorgang testen können:

  1. Installieren Sie Python 3.7.6 x64 von https://www.python.org/downloads/windows/ unter Einbeziehung des %PATH%-Pfades

  2. Bereitstellung des matplotlib-Pakets zur Unterstützung von Grafiken
    pip install matplotlib
  3. Starten Sie die Installation des MetaTrader5-Pakets
    pip install MetaTrader5
    
  4. Sie müssen MetaTrader 5 Build 2007 oder höher auf Ihrem PC installiert haben.

  5. Führen Sie das Testskript
    aus.
    python metatrader5-test.py
  6. Das MetaTrader 5-Terminal läuft im Hintergrund, die Daten werden extrahiert, in der Konsole angezeigt und ein Chart wird gezeichnet



Test-Code:

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


Wir werden später weitere Funktionen hinzufügen und das Paket in ein öffentliches Python-Paket-Repository stellen, damit es sofort installiert werden kann.

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

Ein Beispiel für eine schnelle Zeichnung einer Korrelationsmatrix:

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


Dateien:
 

Wenn eine History-Anfrage von Python kommt, werden dann die entsprechenden hst und tkc in Terminal erzeugt?


Ich würde gerne verstehen, wie es möglich ist, mit tausend Symbolen gleichzeitig zu arbeiten(AMPGlobalUSA-Demo), für die jeweils hundert Megabyte an Ticks geladen werden.

 
Wenn jemand weiß, zeigen Sie mir, wie man schnell ein ähnliches MT5-Diagramm aus historischen Daten in Python erstellen. D.h. interaktiv, kein statisches Bild.
 
fxsaber:
Wenn jemand weiß, zeigen Sie mir, wie ich schnell eine Art MT5-Chart aus historischen Daten in Python erstellen kann. D.h. interaktiv, kein statisches Bild.

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

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

plot.ly im Allgemeinen

 
Maxim Dmitrievsky:

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

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

plot.ly im Allgemeinen.

Ich bin eine absolute Null in Python. Ich würde gerne einen Motivationsschub bekommen, der die Einfachheit und Benutzerfreundlichkeit von MT5-Python zeigt. Es wird ein Beispiel für eine solche Verbindung geben, bitte teilen Sie den Code.

Das sieht sehr cool aus. Ich würde gerne einen funktionierenden Code für MT5 sehen.
 
fxsaber:

Ich bin eine absolute Null in Python. Möchte einen Motivationsschub bekommen, der die Einfachheit und Benutzerfreundlichkeit von MT5-Python sieht. Es wird ein Beispiel für eine solche Verbindung geben, bitte teilen Sie den Code.

Ich bin meistens für MO, visualisiere fast nie etwas. Modernes MO-Zeug ist unrealistisch, um es natürlich umzuschreiben, verwenden Sie nur vorgefertigte. D.h. die offensichtliche Motivation für mich ist diese.

 
fxsaber:

Das sieht sehr cool aus. Ich würde gerne einen funktionierenden Code für MT5 sehen.

kann später kodiert werden... in der Tat gibt es fertige Beispiele in den Links

 
Manchmal brauche ich einen schnellen Überblick über die Ticks in einer mehr oder weniger praktischen Form, dafür verwende ich den ZoomPrice-Indikator. Aber die Visualisierung ist auf den Links viel cooler. Wenn es sehr einfach ist, von MT5 auf Python umzusteigen und einen coolen Tick-Chart zu bekommen, ist das für viele Leute keine schlechte Motivation.
 
fxsaber:
Manchmal muss ich die Ticks schnell in mehr oder weniger handlicher Form sehen, dafür verwende ich den ZoomPrice Indikator. Aber die Visualisierung ist bei Links viel besser. Wenn es sehr einfach ist, von MT5 auf Python umzusteigen und einen coolen Tick-Chart zu erhalten, ist das für viele Leute keine schlechte Motivation.

Zurzeit können alle Informationen (außer Anführungszeichen) über Echtzeit-Sockets gesendet/zurückgegeben werden. Die einzige Einschränkung ist, dass sie in der Testversion noch nicht funktionieren.

 
Maxim Dmitrievsky:

Zurzeit können alle Informationen (außer Anführungszeichen) über Echtzeit-Sockets gesendet/zurückgegeben werden. Die einzige Einschränkung ist, dass es im Testprogramm noch nicht funktioniert.

Ohne Quellcode ist diese Funktion für mich leider nur ein Wort. Sehr viel weiß ich nicht, und der Beginn des Selbststudiums sollte wahrscheinlich etwas Praktisches sein, mit dem man gleich loslegen kann.

Grund der Beschwerde: