Python kernel dies all the time

 

Hallo,

egal, ob in VScode oder in einem Jupyter-Notebook, in beiden Py3.8, stürzt der Kernel ständig ab. Ab & an bekomme ich die Verbindung hin und bekomme Daten; daher ist der Code ok, aber ich kann nicht arbeiten, weil beim zweiten Run der Kernel bereits tot ist.
Hat hier jemand Erfahrung und Abhilfe?

Dank & Gruß

 
Christian Linden:

Hallo,

egal, ob in VScode oder in einem Jupyter-Notebook, in beiden Py3.8, stürzt der Kernel ständig ab. Ab & an bekomme ich die Verbindung hin und bekomme Daten; daher ist der Code ok, aber ich kann nicht arbeiten, weil beim zweiten Run der Kernel bereits tot ist.
Hat hier jemand Erfahrung und Abhilfe?

Dank & Gruß

Poste mal den Code, der problematisch ist.


Hab hier von 3.6 bis 3.9 alle zur Verfügung. Dann teste ich mal.

Selber nutzte ich Python mit MT5 selten.

 
Christian #:

Poste mal den Code, der problematisch ist.


Hab hier von 3.6 bis 3.9 alle zur Verfügung. Dann teste ich mal.

Selber nutzte ich Python mit MT5 selten.

Ich finde Pandas halt unschlagbar, wenn Du analysieren willst; egal welche Bars in welchem Timeframe; alles fix gemacht via dataframes, das ist schon perfekt.
Machst das nicht? Oder wie machst Du das? Aus mql5 in Files schreiben und dann drin herumoperieren? 
Hier ein simples Beispiel: https://youtu.be/nO3AjmO36cc

Ebenso um den MT5-Report zu customizen perfekt. Man kann ihn ja nicht in Punkten ausgeben lassen, also baust einfach eine Spalte in den dataframe ein wie unten im Code.

Gerade läuft es erstaunlich stabil an, nach 10min noch keinen Crash, aber das ist äußerst selten, die letzten Tage ging gar nichts, da habe ich via vim in der GitBash gearbeitet und das in einem Anaconda-Prompt ausgeführt, wobei ich mich Frage, wo da der Unterschied ist; ich habe ja ein Anaconda-environment mit PyKernel 3.8 und wenn das env geladen ist, nimmt ein Yupiter Notebook den gleichen Kernel wie das Prompt.
Aber ich muss den Code öfter 10+x starten, bis die Authentifizierung klappt, das nervt auch nicht zu knapp. Vielleicht hat das ypnb ja das gleich Problem und sagt es nur nicht? Aber im Prompt stürzt nichts ab. 

Hast Du eine Idee, wie ich mich 1x beim Broker authentifizieren kann und diese Verbindung dann offen lasse, dass ich nicht mit jeder CodeAusführung einen mt5.login und mt5.shutdown durchführen muss? Ich habe versucht, in einem .py nur die Verbindung aufzubauen, aber das funkioniert nicht.

Also der Code, 90% von der Doku:

import MetaTrader5 as mt5
import pandas as pd
import pytz
from datetime import datetime

pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', 50)
pd.set_option('display.width', 1000)

# establish connection to MetaTrader 5 terminal
if not mt5.initialize():
    print("initialize() failed, error code =",mt5.last_error())
    quit()

account = 1234567
authorized = mt5.login(account, password="TopSecret666", server="BrokerServer")

if authorized:
    account_info_dict = mt5.account_info()._asdict()
    for prop in account_info_dict:
        print("   {}={}".format(prop, account_info_dict[prop]))
else:
    print("failed to connect at account #{}, error code: {}".format(account, mt5.last_error()))

# get the number of deals in history
from_date=datetime(2023,1,1)
to_date=datetime.now()

# get deals for symbols whose names contain neither "EUR" nor "GBP"
deals = mt5.history_deals_get(from_date, to_date, group="*,!*EUR*,!*GBP*")
if deals == None:
    print("No deals, error code={}".format(mt5.last_error()))
elif len(deals) > 0:
    print("history_deals_get(from_date, to_date, group=\"*,!*EUR*,!*GBP*\") =", len(deals))
    # display all obtained deals 'as is'
    for deal in deals:
        print("  ",deal)
    print()
    # display these deals as a table using pandas.DataFrame
    df=pd.DataFrame(list(deals),columns=deals[0]._asdict().keys())
    df['time'] = pd.to_datetime(df['time'], unit='s')
    print(df)
print("")

# define new df with price in and price out
#df_points = pd.DataFrame(columns=('time-in','volume','price-in','time-out','price-out','profit','symbol'))
# calc point: if win: profit * vol * digits; bsp: 0,5 * 0,1 * 100 = 5P (5P * 10ct = 50ct)
df_points = pd.DataFrame(columns=('time','volume','price','profit','points','symbol'))
for pos, d in df.iterrows():
    points = d.profit * d.volume * 100
    df_points.loc[pos] = [d.time,d.volume,d.price,d.profit,points,d.symbol]
print(df_points)
print("")
df_points['cumulative_points'] = df_points['points'].cumsum().round(2)
print(df_points)
print("")
mt5.shutdown()

Vielen Dank!

The 50/50 Chance Trading Game
The 50/50 Chance Trading Game
  • 2022.11.18
  • www.youtube.com
Statistics about 100.000 of weekly, daily, hourly and M15, M5 and M1 bars that prove that it's a 50 to 50 chance that a bar closes above or below it's openin...
 
Christian Linden #:

Ich finde Pandas halt unschlagbar, wenn Du analysieren willst; egal welche Bars in welchem Timeframe; alles fix gemacht via dataframes, das ist schon perfekt.
Machst das nicht? Oder wie machst Du das? Aus mql5 in Files schreiben und dann drin herumoperieren? 
Hier ein simples Beispiel: https://youtu.be/nO3AjmO36cc

Ebenso um den MT5-Report zu customizen perfekt. Man kann ihn ja nicht in Punkten ausgeben lassen, also baust einfach eine Spalte in den dataframe ein wie unten im Code.

Gerade läuft es erstaunlich stabil an, nach 10min noch keinen Crash, aber das ist äußerst selten, die letzten Tage ging gar nichts, da habe ich via vim in der GitBash gearbeitet und das in einem Anaconda-Prompt ausgeführt, wobei ich mich Frage, wo da der Unterschied ist; ich habe ja ein Anaconda-environment mit PyKernel 3.8 und wenn das env geladen ist, nimmt ein Yupiter Notebook den gleichen Kernel wie das Prompt.
Aber ich muss den Code öfter 10+x starten, bis die Authentifizierung klappt, das nervt auch nicht zu knapp. Vielleicht hat das ypnb ja das gleich Problem und sagt es nur nicht? Aber im Prompt stürzt nichts ab. 

Hast Du eine Idee, wie ich mich 1x beim Broker authentifizieren kann und diese Verbindung dann offen lasse, dass ich nicht mit jeder CodeAusführung einen mt5.login und mt5.shutdown durchführen muss? Ich habe versucht, in einem .py nur die Verbindung aufzubauen, aber das funkioniert nicht.

Also der Code, 90% von der Doku:

Vielen Dank!

Na ich mache viel in Matlab. Daten bekomme ich über eine .Net Brücke ganz ohne Python.

Liebäugle aber immer mehr mit py :-)

Ist wie mit pandas nur noch eine schicke UI darüber mit Charts gleich. 

Dafür eben nicht kostenlos.

Ich teste mal morgen etwas.

 
Christian #:

Na ich mache viel in Matlab. Daten bekomme ich über eine .Net Brücke ganz ohne Python.

Liebäugle aber immer mehr mit py :-)

Ist wie mit pandas nur noch eine schicke UI darüber mit Charts gleich. 

Dafür eben nicht kostenlos.

Ich teste mal morgen etwas.

.Net ist Microsoftkram, oder? Ich bin seit >20 Jahren Linux-Admin, bash-Scripte usw.. da lag dann Py nahe =)
Ich wusste nie, wofür all meine IT-Skills gut sein sollten, bis ich auf Finanzmärkte und mql5 kam.
Ich bin nicht scharf auf UIs.. Konsole reicht vollends;  in den JupyterNotebooks kannst ja auch easy mit plotly und IPython malen, wenn man es braucht. 
So wie TraderPy hier: https://www.youtube.com/watch?v=00ejyn7eiw0

Bin gespannt auf Deine Kerneltests.

Code a Buy-Hold Trading Strategy for Stock Indices in Python
Code a Buy-Hold Trading Strategy for Stock Indices in Python
  • 2021.11.16
  • www.youtube.com
In this video, we code a Buy-Hold Strategy for Stock Indices with Python for algorithmic trading.Chapters00:00 Intro and Strategy Explanation3:15 Libraries a...
 
Christian Linden #:

.Net ist Microsoftkram, oder? Ich bin seit >20 Jahren Linux-Admin, bash-Scripte usw.. da lag dann Py nahe =)
Ich wusste nie, wofür all meine IT-Skills gut sein sollten, bis ich auf Finanzmärkte und mql5 kam.
Ich bin nicht scharf auf UIs.. Konsole reicht vollends;  in den JupyterNotebooks kannst ja auch easy mit plotly und IPython malen, wenn man es braucht. 
So wie TraderPy hier: https://www.youtube.com/watch?v=00ejyn7eiw0

Bin gespannt auf Deine Kerneltests.

So Testreihe durch .


Mindestens 20 mal jede Version getestet , keine Probleme auf allen Kernels !

Die Python API ist ja eine PIPE Verbindung im Netzwerk. Eventuell dein Virenscanner/Firewall die da was blockiert ?

Die Verbindung offenhalten wird nicht klappen. Du beendest ja mit jedem python programm die Pipe wieder.


Schau mal nach ob da irgendwas im log, ist (Firewall/Scanner)

Testest du eigentlich auf Windows? Sonst machen meine Tests ja keinen Sinn :-)


Ja, Python reicht eigentlich aus um Daten von MT5 zu holen und anzuschauen. Ich habe aber vor dem Einführen der Python-API schon mit Matlab gearbeitet und damals gab es keine andere Möglichkeit komfortabel zu arbeiten.

Da der Code enorm über die Jahre angewachsen ist tue ich mich schwer nun auf Python komplett umzuschwenken.




 
Christian #:

So Testreihe durch .


Mindestens 20 mal jede Version getestet , keine Probleme auf allen Kernels !

Die Python API ist ja eine PIPE Verbindung im Netzwerk. Eventuell dein Virenscanner/Firewall die da was blockiert ?

Die Verbindung offenhalten wird nicht klappen. Du beendest ja mit jedem python programm die Pipe wieder.


Schau mal nach ob da irgendwas im log, ist (Firewall/Scanner)

Testest du eigentlich auf Windows? Sonst machen meine Tests ja keinen Sinn :-)


Ja, Python reicht eigentlich aus um Daten von MT5 zu holen und anzuschauen. Ich habe aber vor dem Einführen der Python-API schon mit Matlab gearbeitet und damals gab es keine andere Möglichkeit komfortabel zu arbeiten.

Da der Code enorm über die Jahre angewachsen ist tue ich mich schwer nun auf Python komplett umzuschwenken.




Vielen Dank, das ist echt guter Service und hilft mir sehr; da muss ich mal schauen, was bei mir lokal blockieren mag. 
Auch sehr hilfreich zu wissen, dass all die Kernel funktionieren und keine spezielle Version brauche.

Ja, ich bin auch auf Windows, weil die Mac- und LinuxVersionen leider so schwere Macken haben, mit denen man nicht arbeiten kann; obwohl ich Linux lange nicht mehr versucht habe. Aber auf dem Mac kann ich selten was im MetaEditor tippen, die Tastatur kommt da meist nicht an.

Klar, wenn Du Dir alles mit Matlab aufgebaut hast, ist es ein enormer Aufwand, auf was anderes zu wechseln; ich bin dann auch eher der, der bis wirklich ein Schuh zu feste drückt, beim alten bleibt. Ich bin auf der bash ziemlich fit, meinst da zieh' ich mir die ksh oder csh rein? =) Nee.. 

 
Christian #:

So Testreihe durch .


Mindestens 20 mal jede Version getestet , keine Probleme auf allen Kernels !

Die Python API ist ja eine PIPE Verbindung im Netzwerk. Eventuell dein Virenscanner/Firewall die da was blockiert ?

Die Verbindung offenhalten wird nicht klappen. Du beendest ja mit jedem python programm die Pipe wieder.


Schau mal nach ob da irgendwas im log, ist (Firewall/Scanner)

Testest du eigentlich auf Windows? Sonst machen meine Tests ja keinen Sinn :-)


Ja, Python reicht eigentlich aus um Daten von MT5 zu holen und anzuschauen. Ich habe aber vor dem Einführen der Python-API schon mit Matlab gearbeitet und damals gab es keine andere Möglichkeit komfortabel zu arbeiten.

Da der Code enorm über die Jahre angewachsen ist tue ich mich schwer nun auf Python komplett umzuschwenken.




Guck Dir den Quatsch auf dem Screenshot an.. im Code ist ein anderes Konto, mit dem ich mich verbinden will; dann habe ich mich manuell im Terminal mit dem anderen verbunden weil da wieder nichts kam und das ypnb zeigt die Kontoinfo eines anderen Kontos. Ich glaube, da gibt es Konflikte zwischen dem Code im ypnb, dem vscode und den Logins auf diversen Terminals. 

 
Christian Linden #:

Guck Dir den Quatsch auf dem Screenshot an.. im Code ist ein anderes Konto, mit dem ich mich verbinden will; dann habe ich mich manuell im Terminal mit dem anderen verbunden weil da wieder nichts kam und das ypnb zeigt die Kontoinfo eines anderen Kontos. Ich glaube, da gibt es Konflikte zwischen dem Code im ypnb, dem vscode und den Logins auf diversen Terminals. 

Vielleicht sind es ja die Terminals, die den Kernel überstrapazieren, aber was hat der mit denen am Hut? Eigentlich gar nichts.

 
Christian Linden #:

Vielleicht sind es ja die Terminals, die den Kernel überstrapazieren, aber was hat der mit denen am Hut? Eigentlich gar nichts.

Lass doch erst mal jypter weg.

Da scheint doch das Problem zu sein.

Übrigens kannst du dir pandas frames oder plots auch in vscode anzeigen lassen. Wenn du nicht ohne kannst.

 
Christian #:

Lass doch erst mal jypter weg.

Da scheint doch das Problem zu sein.

Übrigens kannst du dir pandas frames oder plots auch in vscode anzeigen lassen. Wenn du nicht ohne kannst.

Das war es ja, dass der Kernel in vscode genauso abgestürzt ist; heute überhaupt nicht, alles perfekt in vscode, schon 20x was laufen lassen. Ich habe aber auch kein zweites Terminal auf; das scheint mir daran zu liegen; oben das ist ja der Gipfel, dass der den Login eines anderen Kontos bei der Ausführung im ypnb loggt. 

Grund der Beschwerde: