Python API fehlerhafte Resultate copy_rates_range

Einloggen oder registrieren, um einen Kommentar zu schreiben
Christian
3202
Christian  

Die Funktion copy_rates_range

https://www.mql5.com/de/docs/integration/python_metatrader5/mt5copyratesrange_py

liefert in meiner Config immer nur ein ndarray mit der Größe 1

Egal welches datetime ich übergebe.

Kann das jemand mal prüfen

eurcad_rates und eurusd_rates sind betroffen.


Python 3.82

MT5 2361





from datetime import datetime
import matplotlib.pyplot as plt
import pandas as pd
from pandas.plotting import register_matplotlib_converters

register_matplotlib_converters()
import MetaTrader5 as mt5

# mit MetaTrader 5 verbinden
if not mt5.initialize():
    print("initialize() failed")
    mt5.shutdown()

# Abfrage des Status und der Parameter der Verbindung
print(mt5.terminal_info())
# Abrufen der Version des MetaTrader 5
print(mt5.version())

# Abrufen von 1000 Ticks von EURAUD
euraud_ticks = mt5.copy_ticks_from("EURAUD", datetime(2020, 1, 28, 13), 50000, mt5.COPY_TICKS_ALL)
# Abrufen von Ticks von AUDUSD zwischen 2019.04.01 13:00 - 2019.04.02 13:00
audusd_ticks = mt5.copy_ticks_range("AUDUSD", datetime(2020, 1, 1, 1), datetime(2020, 5, 1, 1), mt5.COPY_TICKS_ALL)

# Abrufen der Bars eines anderen Symbols auf verschiedenen Wegen
eurusd_rates = mt5.copy_rates_from("EURUSD", mt5.TIMEFRAME_M1, datetime(2020, 1, 28, 13), 50000)
eurgbp_rates = mt5.copy_rates_from_pos("EURGBP", mt5.TIMEFRAME_M1, 0, 50000)
eurcad_rates_temp = mt5.copy_rates_from_pos("EURCAD", mt5.TIMEFRAME_M1, 0, 50000)
eurcad_rates = mt5.copy_rates_range("EURCAD", mt5.TIMEFRAME_M1, datetime(2020, 1, 10, 13), datetime(2020, 1, 28, 13))

# Schließen der Verbindung zum MetaTrader 5
mt5.shutdown()

# Daten
print('euraud_ticks(', len(euraud_ticks), ')')
for val in euraud_ticks[:10]: print(val)

print('audusd_ticks(', len(audusd_ticks), ')')
for val in audusd_ticks[:10]: print(val)

print('eurusd_rates(', len(eurusd_rates), ')')
for val in eurusd_rates[:10]: print(val)

print('eurgbp_rates(', len(eurgbp_rates), ')')
for val in eurgbp_rates[:10]: print(val)

print('eurcad_rates(', len(eurcad_rates), ')')
for val in eurcad_rates[:10]: print(val)

# ANZEIGEN
# Erstellen von DataFrame aus den erhaltenen Daten
ticks_frame = pd.DataFrame(euraud_ticks)
# Konvertieren der Zeit in Sekunden im Datumsformat
ticks_frame['time'] = pd.to_datetime(ticks_frame['time'], unit='s')
# Ticks anzeigen auf dem Chart
plt.plot(ticks_frame['time'], ticks_frame['ask'], 'r-', label='ask')
plt.plot(ticks_frame['time'], ticks_frame['bid'], 'b-', label='bid')

# Anzeigen der Legende
plt.legend(loc='upper left')

# Hinzufügen des Headers
plt.title('EURAUD ticks')

# Anzeigen des Charts
plt.show()



Dokumentation zu MQL5: Integration / MetaTrader für Python / copy_rates_range
Dokumentation zu MQL5: Integration / MetaTrader für Python / copy_rates_range
  • www.mql5.com
# Importieren des Moduls 'panda' für eine Darstellung der erhaltenen Daten in Tabellenform # Erstellen des Objekts 'datetime' in der UTC-Zeitzone, um eine Verwendung der lokalen Zeitzone zu vermeiden # Abrufen der Bars von USDJPY M5 des Zeitintervalls 2020.01.10 00:00 - 2020.01.11 13:00 in UTC-Zeit...
Otto Pauser
2168
Otto Pauser  
Ich kann dir da leider nicht weiter helfen.
Was ist in Python besser machbar als in MQL5?
Und ich kann mir nicht vorstellen, daß die Schnittstelle zu Python keine Geschwindigkeitsverluste bringt.
Alain Verleyen
40443
Alain Verleyen  
Otto Pauser :
Ich kann dir da leider nicht weiter helfen.
Was ist in Python besser machbar als in MQL5?
Und ich kann mir nicht vorstellen, daß die Schnittstelle zu Python keine Geschwindigkeitsverluste bringt.
Der Vorteil besteht darin, die zahlreichen vorhandenen Bibliotheken zu verwenden, die mit Python verfügbar sind. Nichts anderes.
Christian
3202
Christian  

Scheint als ob sich der MT5 am TimeFrame verschluckt.


Bei M1 kopiert er immer nur einen Balken

Alle anderen M5...M30 kopieren richtig.


from datetime import datetime
import matplotlib.pyplot as plt
import pandas as pd
from pandas.plotting import register_matplotlib_converters
import pytz

register_matplotlib_converters()
import MetaTrader5 as mt5


if not mt5.initialize():
    print("initialize() failed")
    mt5.shutdown()


print(mt5.terminal_info())
print(mt5.version())

timezone = pytz.timezone("Etc/UTC")
utc_from = datetime(2020, 1, 10, tzinfo=timezone)


eurusd_rates_m1 = mt5.copy_rates_from("EURUSD", mt5.TIMEFRAME_M1, utc_from, 1000)
print('M1 eurusd_rates(', len(eurusd_rates_m1), ')')

eurusd_rates_m5 = mt5.copy_rates_from("EURUSD", mt5.TIMEFRAME_M5, utc_from, 1000)
print('M5 eurusd_rates(', len(eurusd_rates_m5), ')')

eurusd_rates_m10 = mt5.copy_rates_from("EURUSD", mt5.TIMEFRAME_M10, utc_from, 1000)
print('M10 eurusd_rates(', len(eurusd_rates_m10), ')')

eurusd_rates_m15 = mt5.copy_rates_from("EURUSD", mt5.TIMEFRAME_M15, utc_from, 1000)
print('M15 eurusd_rates(', len(eurusd_rates_m15), ')')

eurusd_rates_m30 = mt5.copy_rates_from("EURUSD", mt5.TIMEFRAME_M30, utc_from, 1000)
print('M30 eurusd_rates(', len(eurusd_rates_m30), ')')


mt5.shutdown()

Sehe nicht warum er das nicht akzeptiert. Für ein Bug ist es wohl zu trivial.

https://www.mql5.com/ru/forum/306688/page65#comment_16485377
MetaTrader 5 Python User Group - как использовать Python в Метатрейдере
MetaTrader 5 Python User Group - как использовать Python в Метатрейдере
  • 2020.05.19
  • www.mql5.com
Мы готовим модуль MetaTrader 5 для Python...
Christian
3202
Christian  
Otto Pauser:
Ich kann dir da leider nicht weiter helfen.
Was ist in Python besser machbar als in MQL5?
Und ich kann mir nicht vorstellen, daß die Schnittstelle zu Python keine Geschwindigkeitsverluste bringt.

Ausgereifte aktuelle Frameworks zu ML.

Sowie eine riesige Menge an Code frei verfügbar.

Es ist eben der bessere Kompromiss, wenn man ML im MT5 nutzen möchte.

Christian
3202
Christian  

Es ist ein Bug. Gefühlt hatte ich es schon.

Eines ist klar, wenn der MT5 5M Bars liefert muss er ja auch die 1M Bars liefern.

Denn die werden ja aus den 1M Bars generiert.

Nicholi shen beweist das mit einem ausgearbeiteten Skript.

https://www.mql5.com/ru/forum/306688/page66#comment_16504003

Rashid  Umarov wiegelt in gewohnter MQ Manier ab und verweist auf die Dokumentation.

MetaTrader 5 Python User Group - как использовать Python в Метатрейдере
MetaTrader 5 Python User Group - как использовать Python в Метатрейдере
  • 2020.05.22
  • www.mql5.com
Мы готовим модуль MetaTrader 5 для Python...
Christian
3202
Christian  

Bin mir nicht mehr sicher, ob es ein Bug ist so wie nicholi shen sagt.

Rashid Umarov hat wohl recht gehabt mit deinem Verweis auf die Dokumentation. :-) Kleines Sorry, falls du mit liest.


Wenn die MaxBars Option auf unlimited steht kommen die Daten richtig.

Dann ist aber auf jeden Fall der Error den last_error ausgibt "RES_S_OK" nicht richtig.

Aber wir wollen mal nicht so hart sein. Die API ist ja im Aufbau.


Einloggen oder registrieren, um einen Kommentar zu schreiben