Maschinelles Lernen im Handel: Theorie, Modelle, Praxis und Algo-Trading - Seite 3273

 
СанСаныч Фоменко #:

Quantile sind Wahrscheinlichkeiten. Wir entfernen/ersetzen also Daten, deren Wahrscheinlichkeit in den Bereich von weniger als 1%/mehr als 99% oder andere Größen fällt. Wir können keine Mengen abschneiden - wir haben schiefe und schwanzförmige Verteilungen.

Sie schreiben, dass der Ersatzwert am besten als eine Vorhersage dieser Menge durch den MOE angesehen wird. Aber das scheint mir ein wenig übertrieben zu sein.

Der Punkt ist nur, dass es oft schwierig ist, die Verteilung am Automaten zu bestimmen.

Oft ist sie angeblich lognormal, aber das ist nur wegen der Ausreißer so - es gibt keine Logik dafür, dass es so ist.

Und wenn man ein Quantil nimmt, bedeutet das, dass man über den gesamten Bereich schneidet, was nicht ausreicht, um Ausreißer zu entfernen.


Bei der zweiten Stichprobe erhielt ich ein sehr merkwürdiges Ergebnis - es wurde einfach zügig gelernt, ohne irgendwelche Manipulationen, aber nachdem ich die Zeilen mit Ausreißern entfernt hatte, wurde der Effekt des Lernens fast gleich Null.

Jetzt habe ich die langsame Lernrate eingeschaltet - ich werde sie über Nacht einschalten - mal sehen, ob das etwas bringt.

Ansonsten stellt sich heraus, dass der gesamte Lernprozess auf dem Einprägen von Ausreißern beruht, zumindest bei den öffentlichen Prädiktoren, die ich im Experiment verwende.

 
Aleksey Vyazmikin #:

Der Punkt ist, dass es oft schwierig ist, die Verteilung bei einer Automatik zu bestimmen.

Oft ist sie angeblich lognormal, aber das liegt nur an den Emissionen - es gibt keine Logik dafür, dass sie so ist.

Und wenn Sie ein Quantil nehmen, bedeutet das, dass Sie über den gesamten Bereich schneiden, was nicht ausreicht, um Ausreißer zu entfernen.


Bei der zweiten Stichprobe habe ich ein sehr merkwürdiges Ergebnis erhalten - es wurde einfach zügig gelernt, ohne irgendwelche Manipulationen, aber nachdem ich die Zeilen mit Ausreißern entfernt hatte, wurde der Effekt des Lernens fast gleich Null.

Jetzt habe ich die langsame Lernrate eingeschaltet - ich werde sie über Nacht einschalten - mal sehen, ob das etwas bringt.

Ansonsten stellt sich heraus, dass der gesamte Lernprozess auf dem Einprägen von Ausreißern beruht, zumindest bei den öffentlichen Prädiktoren, die ich im Experiment verwende.

Ich habe das Modell im Winter bis zu EA laufen lassen (die Ergebnisse habe ich in diesem Thread gepostet) und hatte das gegenteilige Ergebnis: Klassifizierungsfehler, und die lagen unter 20 %, wurden von Ausreißern abgefangen. Infolgedessen wurden 80 % der richtigen Vorhersagen durch diese Fehler zunichte gemacht.

Eines ist für mich klar: Ausreißer sollten beseitigt werden. Und das echte Ergebnis des Modells ist ohne Ausreißer.

 
СанСаныч Фоменко #:

Ich habe das Modell im Winter an EA angeglichen (die Ergebnisse habe ich in diesem Thread gepostet) und hatte das gegenteilige Ergebnis: Klassifizierungsfehler, und die lagen unter 20 %, wurden von Ausreißern aufgefangen. Infolgedessen wurden 80 % der richtigen Vorhersagen durch diese Fehler zunichte gemacht.

Eines ist für mich klar: Ausreißer sollten beseitigt werden. Und das echte Ergebnis des Modells ist ohne Ausreißer.

An den Rändern gibt es eindeutig eine Verschiebung der Wahrscheinlichkeit zu einer bestimmten Klasse - und das ist an sich nicht schlimm, schlimm ist nur, dass diese Beobachtungen nicht ausreichen, um statistisch signifikante Schlüsse zu ziehen.

Es ist also normal, dass ein Ausreißer mehr Nullen und ein anderer mehr Einsen hat - das hängt von der Menge der Prädiktoren ab.

Es kommt auch vor, dass, wenn ein Ausreißer von zwei Seiten beobachtet wird, die eine Seite näher an Nullen und die andere an Einsen liegt.

 
Aleksey Vyazmikin #:

Wo kann ich den endgültigen Code sehen?

Ich habe alles in diesem Thread gepostet.

 
Rorschach #:

Die Quellen sind offen, Sie können einen Blick darauf werfen. Funktion zur Berechnung der Korrelation, auf der rechten Seite befindet sich eine Aufschrift [Quelle], nach einem Klick darauf gelangen Sie zum Code. Wir sind an den Zeilen 2885-2907 interessiert. In Zeile 2889 wird die Kovarianz verwendet, nach Klick auf cov erscheinen rechts alle Erwähnungen von cov im Code, nach Klick auf die Zeile mit def cov... wird zur Kovarianzfunktion gesprungen, und so weiter. MQL C-ähnliche Sprache, alle C-ähnlichen Sprachen sind ~90% ähnlich, Sie können C#, Java, Python, JavaScript ohne große Probleme verstehen.

Ich danke Ihnen. Ich habe mich bei der Algorithmisierung etwas abgekühlt, ich werde es mir ansehen, wenn der Enthusiasmus wieder da ist.

 
fxsaber #:

Ich glaube, ich habe alles in diesem Thread gepostet.

Ich habe natürlich gelesen, aber der Chronologie nach hat Forester einen Fehler gefunden, du hast ihm zugestimmt, dann wurde ein Teil des Codes korrigiert.

Und am Ende habe ich hier nicht die vollständige Version des endgültigen Codes gesehen. Ich meine nicht, dass Sie verpflichtet sind, den Code zu veröffentlichen, ich habe nur gefragt...

 
Aleksey Vyazmikin #:

Ich habe ihn natürlich gelesen, aber der Chronologie nach hat Forester einen Fehler gefunden, Sie haben ihm zugestimmt, und dann wurde ein Teil des Codes korrigiert.

Und am Ende habe ich die vollständige Version des endgültigen Codes hier nicht gesehen. Ich meine nicht, dass Sie verpflichtet sind, den Code zu veröffentlichen, ich habe nur gefragt...

Schnell und Zeile für Zeile (korrigiert).

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien.

Maschinelles Lernen im Handel: Theorie, Modelle, Praxis und Algo-Trading

fxsaber, 2023.10.01 09:38

#include <Math\Alglib\statistics.mqh> // https://www.mql5.com/ru/code/11077

const matrix<double> CorrMatrix( const matrix<double> &Matrix )
{
  matrix<double> Res = {};
  
  const CMatrixDouble MatrixIn(Matrix);
  CMatrixDouble MatrixOut;  

  if (CBaseStat::PearsonCorrM(MatrixIn, MatrixIn.Rows(), MatrixIn.Cols(), MatrixOut)) // https://www.mql5.com/ru/code/11077
    Res = MatrixOut.ToMatrix();
  
  return(Res);
}

const matrix<double> CorrMatrix2( const matrix<double> &Matrix )
{
  matrix<double> Res = {};
  Res.Init(Matrix.Cols(), Matrix.Cols());
  
  const CMatrixDouble MatrixIn(Matrix);
  CMatrixDouble Vector(Matrix);
  CMatrixDouble Corr;

  for (int i = 0; i < (int)Matrix.Cols(); i++)
  {
    if (i)
      Vector.SwapCols(0, i);
    
    CBaseStat::PearsonCorrM2(Vector, MatrixIn, MatrixIn.Rows(), 1, MatrixIn.Cols(), Corr);
      
    Res.Col(Corr.Row(0), i);
  }
  
  return(Res);
}
 
fxsaber #:

Schnell und zeilenweise (korrigiert).

Ich danke Ihnen!

 
Maxim Dmitrievsky #:

Ich habe es vorerst beiseite gelegt, die Ergebnisse sind nicht besser als MO, obwohl MO auch in Bezug auf die Ausgewogenheit lahm ist.

5 Minuten, halbes Training


ist nichts weiter als eine Analogie des 4-Rosh-Grals mit einem kurzen Stopp.

 
Renat Akhtyamov #:

ist nichts anderes als eine Analogie zwischen einem 4-Rohr-Gral und einem kurzen Stopp.

die Analogie zu Ihrem Hedgefonds mit einem negativen Saldo.

Grund der Beschwerde: