Machine Learning auf einen EA setzen - Seite 4

 
pennyhunter #:
Ah funktioniert das mit dem initialise() bei Dir? Ich hatte gestern da ein Problem. Also konnte ich überhaupt keine Zeitreihen von Metatrader in Jupyter Python laden...
Es war aber auf der Website die ich gefunden habe anders dargestellt. Werde es bei nächster Gelegenheit mal so probieren wie Du.
Falls es gar nicht geht werde ich csvs schreiben, ob mit SQL oder mit Files mal sehen. Die kann man dann in Jupyter importieren.

Dann sehe ich wieder Einiges an Grundlagen auf mich zukommen und habe da aber einen guten YouTube Kanal gefunden: Code mit Flow.
Falls es Dich interessiert, mach auf dem Kanal mal die Playlistansicht rein, er hat ältere Playlists wo er numpy, matplotlib und pandas von der Pike auf erklärt, nebst Matrizen und Vektoren.

Gruß

initialize() funzt, aber der Login nicht, habe alles versucht, mit account & server und ohne (dann soll ja angeblich der (gespeicherte) Login aus dem Terminal genommen werden), aber:

C:\Users\User\python>python python2.py
account:  5641673
server:  ActivTrades-Server
I am here
Failed to connect at account #5641673, error code: (-10004, 'No IPC connection')
utc_from: 2020-04-01 00:00:00+00:00
Display obtained data 'as is'
Traceback (most recent call last):
  File "C:\Users\User\python\python2.py", line 57, in <module>
    for rate in rates:
TypeError: 'NoneType' object is not iterable

TypeError ist ja klar, der bekommt nichts und kann dann da nicht drüber, ist nur der Folgefehler. 


VG

 
Christian Linden #:

initialize() funzt, aber der Login nicht, habe alles versucht, mit account & server und ohne (dann soll ja angeblich der (gespeicherte) Login aus dem Terminal genommen werden), aber:

TypeError ist ja klar, der bekommt nichts und kann dann da nicht drüber, ist nur der Folgefehler. 


VG

Das ist wohl ein Python Problem, also mal Tante Google fragen:

  1. Antwort: I had the same issue and I found the following solution: My terminal was downloaded from the broker site and probably had some modifications that block ipc connections. I downloaded original software from https://www.metatrader5.com/en/download and copied "Config" folder from broker's version. Now python script works.
  2. Antwort: I have a computer with a Windows 10 64-bit installation where everything would work without a hitch. I also have another machine with a Windows 10 32-bit installation, which would always complain about an invalid IPC connection. Not the official MetaTrader 5 version, nor my broker's customized version would work out of the box. I eventually fixed it by specifying the path to my broker's exe in the initialize function like below (check for your own path, and mind the use of / instead of \): mt5.initialize("C:/Program Files (x86)/GT247/terminal.exe")
  3. Link: https://www.conorjohanlon.com/getting-data-from-mt5-to-python/
 
Carl Schreiber #:

Das ist wohl ein Python Problem, also mal Tante Google fragen:

  1. Antwort: I had the same issue and I found the following solution: My terminal was downloaded from the broker site and probably had some modifications that block ipc connections. I downloaded original software from https://www.metatrader5.com/en/download and copied "Config" folder from broker's version. Now python script works.
  2. Antwort: I have a computer with a Windows 10 64-bit installation where everything would work without a hitch. I also have another machine with a Windows 10 32-bit installation, which would always complain about an invalid IPC connection. Not the official MetaTrader 5 version, nor my broker's customized version would work out of the box. I eventually fixed it by specifying the path to my broker's exe in the initialize function like below (check for your own path, and mind the use of / instead of \): mt5.initialize("C:/Program Files (x86)/GT247/terminal.exe")
  3. Link: https://www.conorjohanlon.com/getting-data-from-mt5-to-python/

Hab ich gefragt und auch
1. gefunden und direkt mit der OriginalVersion versucht -> same issue.
2. gefunden und alles ausprobiert mit dem Path, zu beiden installierten Versionen, vermutlich klappt es damit nicht, aber ich habe keine solo Winkiste mehr übrig, um das zu testen. 
Beim Path ist's latte, wierum man den Slash tippt, auch ob einen oder zwei, das biegt der sich:

if not mt5.initialize("C:/Program Files/MetaTrader 5 - ActiveTrades/terminal64.exe"):
    print("initialize() failed, error code =", mt5.last_error())
    quit()

wird quittiert:

C:\Users\User\python>python python2.py
account:  12345678
server:  ActivTrades-Server
initialize() failed, error code = (-10003, "IPC initialize failed, Process create failed 'C:\\Program Files\\MetaTrader 5 - ActiveTrades\terminal64.exe'")


C:\Users\User\python>python python2.py
account:  12345678
server:  ActivTrades-Server
initialize() failed, error code = (-10003, "IPC initialize failed, Process create failed 'C:/Program Files/MetaTrader 5 - ActiveTrades/terminal64.exe'")

C:\Users\User\python>

Also Python nicht zu gebrauchen, muss ich irgendwie aus dem MT5.log meine Daten ziehen.. oder direkt umleiten, mal schauen, das wäre via Python sicherlich eleganter.

3. Jaja, die easy Anleitungen.. alles ganz easy...

..wobei ja das initilisieren ohne Path funktioniert, dann hängt's am Login mit:

error code: (-2, 'Terminal: Invalid params')


Duplicate: https://www.mql5.com/en/forum/378717


Das hilft weiter: https://stackoverflow.com/questions/69050199/metatrader-5-login-broken-after-update
in der Form: authorized=mt5.login(account,server="ActivTrades-Server")


Ich habe meine Daten, das war mal wieder eine Geburt, der ein oder die andere werden sich freuen, das hier mal zu finden =P

 
Christian Linden #:

gelößt....https://www.mql5.com/de/forum/387405#comment_27393647

sorry hab den letzten post hier nur überflogen :-)

 
Christian Linden #:


Du solltest noch prüfen ob copyrates einen Fehler hat.

Hier ein Test Code. Etwas älter dient nur der Darstellung

def main():
    maxbars = mt5.terminal_info().maxbars
    for i, count in enumerate(range(1000, maxbars), 1):
        for retry in range(5):
            r = mt5.copy_rates_from_pos('EURUSD', mt5.TIMEFRAME_M1, 0, count)
            errno, strerr = mt5.last_error()
            if errno != mt5.RES_S_OK:
                print(strerr)
                print('Reinitialing connection')
                mt5.shutdown()
                time.sleep(1)
                print('Reinitialing connection =', mt5.initialize())
            else:
                print(f"{i} -> {len(r)}")
                break
        else:
            print('maxium retry exceed')
            mt5.shutdown()
            quit()


Dazu ein Testcode der ein DataFrame Darstellt. Getestet !

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), 1000, 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, 27, 13), datetime(2020, 1, 28, 13), 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), 1000)
eurgbp_rates = mt5.copy_rates_from_pos("EURGBP", mt5.TIMEFRAME_M1, 0, 1000)
eurcad_rates = mt5.copy_rates_range("EURCAD", mt5.TIMEFRAME_M1, datetime(2020, 1, 27, 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()

Sollte dann das ausgeben