Neue MetaTrader 5 Plattform Build 3210: Überarbeiteter Sharpe-Ratio-Berechnungsalgorithmus, neue Matrix-Methoden und Kontrolle über Indikator-Minimum/Maximum-Werte

 

Das MetaTrader 5 Plattform-Update wird am Freitag, den 11. Februar 2022, veröffentlicht.

Das Update bietet einen überarbeiteten Sharpe-Ratio-Berechnungsalgorithmus, der auf einer traditionellen Formel basiert, neue Matrix-Methoden, einen optimierten Speicherverbrauch und einen verbesserten Netzwerksystembetrieb für eine bessere Datenübertragung.

Außerdem haben wir zwei neue Eigenschaften, INDICATOR_FIXED_MINIMUM und INDICATOR_FIXED_MAXIMUM, in die Enumeration ENUM_CUSTOMIND_PROPERTY_INTEGER aufgenommen, mit denen Mindest- und Höchstwerte von Indikatoren mithilfe der Funktion IndicatorSetDouble fixiert bzw. aufgehoben werden können.


Darüber hinaus haben wir einige Fehler in der mathematischen Bibliothek Math\Stat\Math.mqh behoben und die Funktionsweise der Funktionen CopyTicks und CopyTicksRange korrigiert, die beim Überschreiten von Mitternacht veraltete Daten zurückgeben konnten.

Diese Änderungen sowie weitere neue Funktionen der aktualisierten MetaTrader 5-Plattformversion werden im Folgenden ausführlich beschrieben:


  1. MQL5: Min, Max, ArgMin, ArgMax und Summenfunktionen für Vektoren und Matrizen hinzugefügt. Verwenden Sie die Funktionen, um die minimalen und maximalen Werte, relevante Indizes und die Summe zu ermitteln.
  2. MQL5: Unterstützung für Flat-Methoden für die Matrix wurde hinzugefügt. Mit diesen Methoden kann ein Matrizenelement über einen Index anstelle von zwei Indizes angesprochen werden.
    double matrix::Flat(ulong index) const;      // getter
    void matrix::Flat(ulong index,double value); // setter

    Pseudocode zur Berechnung der Adresse eines Matrixelements:

    ulong row=index / mat.Cols();
    ulong col=index % mat.Cols();
    
    mat[row,col]

    Für die "Matrix mat(3,3)" zum Beispiel kann der Zugriff auf die Elemente wie folgt geschrieben werden:

      lesen:        'x=mat.Flat(4)', das 'x=mat[1][1]' entspricht
      schreiben: 'mat.Flat(5, 42)', das 'mat[1][2]=42' entspricht

    Wenn die Funktion mit einem ungültigen Matrixindex aufgerufen wird, wird der kritische Ausführungsfehler OutOfRange ausgeworfen.

  3. MQL5: Verbesserte Formatierung von Fließkommazahlen in den Eingabeparametern von MQL5-Programmen. Beim Lesen einiger reeller Zahlen wurden Zahlen mit vielen Nullen in den Eingabeparametern ersetzt, z.B. wurde 0.4 als 0.400000000002 dargestellt.
  4. MQL5: Es wurden Fehler in der Math-Bibliothek Math.mqh behoben. Die Funktion MathSample aus dieser Bibliothek wurde überarbeitet, um dem traditionellen Verhalten ähnlicher mathematischer Bibliotheken beim Sampling mit Backtracking zu entsprechen.
  5. MQL5: Der CopyTicks/CopyTicksRange-Fehler wurde behoben, der dazu führen konnte, dass beim Überschreiten von Mitternacht veraltete Daten zurückgegeben wurden, wenn keine Ticks für das Finanzinstrument bereitgestellt wurden.
  6. MQL5: Es wurden die neuen Werte INDICATOR_FIXED_MINIMUM und INDICATOR_FIXED_MAXIMUM in die Enumeration ENUM_CUSTOMIND_PROPERTY_INTEGER aufgenommen.
    Mit Hilfe dieser Eigenschaften können Sie die minimalen und maximalen Indikatorwerte mit der Funktion IndicatorSetInteger fixieren oder wieder aufheben. Beim Aufruf von IndicatorSetInteger(INDICATOR_FIXED_MINIMUM/INDICATOR_FIXED_MAXIMUM, true) wird der aktuelle Minimal- oder Maximalwert verwendet.





  7. Tester: Überarbeiteter Algorithmus zur Berechnung der Sharpe Ratio, um der traditionellen Formel zu entsprechen, bei der der Wert einem Einjahresintervall entspricht. Der vorherige Algorithmus basierte auf der Variabilität der erzielten PnL und ignorierte Kapitalschwankungen gegenüber offenen Positionen. Jetzt werden die Kapitalschwankungen in die Berechnung einbezogen, während die Sharpe Ratio auf klassische Weise interpretiert wird:
    • Sharpe Ratio < 0              Die Strategie ist unrentabel und nicht geeignet. Schlecht.
    • 0 < Sharpe Ratio  < 1,0   Das Risiko zahlt sich nicht aus. Solche Strategien können in Betracht gezogen werden, wenn es keine Alternativen gibt. Unbestimmt.
    • Sharpe Ratio ≥ 1,0          Wenn die Sharpe Ratio größer als eins ist. Dies kann bedeuten, dass sich das Risiko auszahlt und dass das Portfolio/die Strategie Ergebnisse vorweisen kann. Gut.
    • Sharpe Ratio ≥ 3,0          Ein hoher Wert bedeutet, dass die Wahrscheinlichkeit, bei jedem einzelnen Geschäft einen Verlust zu erleiden, sehr gering ist. Sehr gut.

  8. Terminal: Optimierter Speicherverbrauch des Terminals.
  9. Terminal: Verbesserter Plattformbetrieb mit einem Netzwerk-Subsystem, um die Leistung zu steigern und Netzwerkverzögerungen zu reduzieren.
  10. Terminal: Die Anzeige der Nullebene des Gitters in den Indikatoren wurde entfernt, wenn das Raster-Rendering deaktiviert ist.


Die Aktualisierung wird über das Live-Update-System verfügbar sein.

 
Warum steht denn da nun überall "15 Minute delayed", war in der Beta 3192 schon?!
 
Axel M. #:
Warum steht denn da nun überall "15 Minute delayed", war in der Beta 3192 schon?!
Meiner bescheidene Meinung nach hat wahrscheinlich hat der, der MQ (und uns kostenlos) die Kurse  liefert, sich das ausbedungen, aber genau weiß ich das nicht.
 
Axel M. #:
Warum steht denn da nun überall "15 Minute delayed", war in der Beta 3192 schon?!

Ist bei einem demo konto auch egal

 
MQL5: Der CopyTicks/CopyTicksRange-Fehler wurde behoben, der dazu führen konnte, dass beim Überschreiten von Mitternacht veraltete Daten zurückgegeben wurden, wenn keine Ticks für das Finanzinstrument bereitgestellt wurden.

Es ist ja schonmal löblich das es Informationen zu Updates gibt.

Nur was nützen mir diese Infos wenn die immer nur schwammig sind.

Was ist so schwer daran ein Beispiel zu zeigen das einen Fehler provoziert ?

Es hilft sogar gegen diese blöden Übersetzungsfehler .

Wie kann eine Funktion Mitternacht überschreiten ? Geisterhaftes Eigenleben ?

 

Fast vergessen, lasst den Quatsch und baut in eine Tradingsoftware DatenTypen wie Matrix ein.

Braucht kein Mensch, und der sie nutzt wird immer ein "doofes" Neuronales Netz haben.

Alle großen AI-Frameworks lassen sich über Python oder Dll nutzen. GPU-Beschleunigung ist auch schon dabei.


Wer bitte setzt sich hin und programmiert das in MQL5 nach ?

Falls es mutige mit viel Zeit gibt , ihr werden immer nur ein nutzloses Neuronales Netz haben .

Chaotische Zeitreihen ,was Börsenkurse nunmal sind, stellen für ein NN das schwierigste Problem dar.

Da kommt man  nicht mit 10 oder 20 Neuronen und einem Layer weiter.

 
Christian #:

Da kommt man  nicht mit 10 oder 20 Neuronen und einem Layer weiter.

Würde gerne verstehen wo Du die Zahl hernimmst...
 
pennyhunter #:
Würde gerne verstehen wo Du die Zahl hernimmst...

Erfahrungen ab wann ein Netz anfängt sinnvoll die Eingansdaten zu bewerten.

20 Neuronen in einem Layer sind auch nur 20 "Schaltpunkte" intern.

Man kann es auch so schreiben (ohne Log funktionen) 2 inputs 1 Output 5 Neuronen

Trainiertes Netz vereinfacht : E = Eingang N = Neuron A= Ausgang

If ( E1 > N1 & E2 < N1 &

     E1 > N2 & E2 < N2 &

     E1 > N3 & E2 < N3 &

     E1 > N4 & E2 < N4 &

    E1 > N5 & E2 < N5  )

   {   
     A = 3.4
   }

Das soll verdeutlichen wie uniuntelligent ein Netz mit bsp 20 Neuronen ist.

Und das ist dann noch nicht mal ein LSTM Netz was speziell für Zeitreihen wichtig ist.

Für eine CPU ist das schon viel. Die Beschleunigung mit GPU muss dann ja auch noch programmiert werden.

Ich hoffe ich hab deine Frage verstanden.

 
Christian #:

Übriegens hat der Schmiedhuber im Jahre 1999 die LSTM Zelle schon erfunden.

Warum erst der Boom vor 5 Jahren ? Rechenleistung .....

GPU's sind der Treiber der Entwicklung. Nicht CPU's :-)

 
Christian #:

Erfahrungen ab wann ein Netz anfängt sinnvoll die Eingansdaten zu bewerten.

20 Neuronen in einem Layer sind auch nur 20 "Schaltpunkte" intern.

Man kann es auch so schreiben (ohne Log funktionen) 2 inputs 1 Output 5 Neuronen

Trainiertes Netz vereinfacht : E = Eingang N = Neuron A= Ausgang


Das soll verdeutlichen wie uniuntelligent ein Netz mit bsp 20 Neuronen ist.

Und das ist dann noch nicht mal ein LSTM Netz was speziell für Zeitreihen wichtig ist.

Für eine CPU ist das schon viel. Die Beschleunigung mit GPU muss dann ja auch noch programmiert werden.

Ich hoffe ich hab deine Frage verstanden.

Naja das ging etwas am Thema vorbei... Aber ich muss die Frage auch präzisieren: Eigentlich wollte ich wissen wie Du drauf kommst, dass man durch MQL gezwungen ist, sich mit zwanzig Neuronen zufrieden zu geben... Die Argumentation ist so nicht nachvollziehbar. War wohl auch überspitzt... nur irgendwie hat das ja auch einen Grund, dass Du das so darstellst, ob nun bewusst oder unbewusst.

Manche Machinelearning-Algorithmen sind an der Börse in etwa so nützlich wie ein Moving Average, da der Datensatz nichtstationär und nichtsaisonal ist. Das ist dann eine doofe Blackbox mit einer riesigen Cloud-Power. Nicht doof ist nur wenn man versteht, warum man was tut. Und das dauert, ob mit Python oder MQL.

Du musst außerdem zugeben, dass diese Sachen immer erst im Kleinen zum Laufen gebracht werden um sie dann mit Klassen skalierbar zu machen. Das trifft genauso für die Python Umgebungen zu, über die Du schreibst.

Wir entgleisen glaub ich gerade den Thread.

 
pennyhunter #:

Wir entgleisen glaub ich gerade den Thread.

Ach , es geht immernoch um Vektoren. So eng muss man es nicht sehen 😁

Zum Wissenstand von mir. Ich arbeite seit 5 Jahren an dem Thema. Über die Jahre hat sich eben eines herauskristalisert.

Die Fehlerrate sinkt mit steigender Größe des Netzes.Das festzustellen war recht einfach. Matlab/R ist da das Tool der Wahl :-)

Die Definition des Netzes habe ich dynamisch erstellt(LayerTyp,LayerAnz,Neuronen/Layer,AktivierungsFunktionen,..)

Dann kommt eine Art Optimizer dazu und als Ergebniss ist eben größer = besser. Dann kann es schon sein das die 8GB VRAM einer GPU nicht reichen.


Wenn man das jetzt in MQL gießen will , ist das ungefähr so als wenn du ein Haus baust und ALLE Maße sind nicht in Norm. Du muss dann deine Fenster ,Türen ,Steine alle selbst herstellen inkl der Maschinen

inkl der Baufehler.Überspitzt dargestellt.

Klein  angefangen habe ich auch mit dem Unterschied das ich gleich auf fertige Lösungen gegriffen habe.

Un mit einem selbstgeschrieben TradingSimulator in Matlab wurde das Testen so richtig komfortabel. Ein einfacher TradeSim braucht nur  den Preis/Zeit beim öffnen und schließen der Positon . Eine kleine Positionsverwaltung fertig. Für ein PoC völlig ausreichend.

Ich behaupte das ein Netz mit 20 oder meinetwegen 50 Neuronen nur eines lernt. Ein Trend setzt sich fort.Es hat gar keine Möglichkeit die Feinheiten des Kursen zu erfassen die dann dir den Vorteil geben. Das können wir aber selber. Ähnlich der KI die Pferdebilder erkennt . Das Bild war fast egal ,Hauptsache auf dem Bild stand der Pferdenamen 😉

Grund der Beschwerde: