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

 
elibrarius #:

Offenbar haben sie Wörter für die neuen Typen reserviert.

Nicht nur reserviert, einige Dinge funktionieren bereits.

void OnStart()
{
  vector v(3);
  v[0] = 1.0;
  v[1] = 2.0;
  v[2] = 3.0;
  matrix m(3, 3);
  m.Random();
  Print("m = ", m);
  Print("m^-1 = ", m.Inverse());
  Print("Det(m) = ", m.Det());
  Print("m * v = ", m * v);
}
 
Aleksey Nikolayev #:

Nicht nur reserviert, etwas funktioniert bereits.

Die Suche in der Hilfe führt zu keinem Ergebnis.
Und die Matrizen werden sich als nützlich erweisen.
Die Einstellung einer Größe über Variablen funktioniert

int m1=2; int m2=2;
matrix m(m1, m2);

Früher musste man sich mit dynamischen Arrays herumschlagen.

 
elibrarius #:

Die Hilfesuche gibt nichts her.

Ich habe nur Informationen von hier.

elibrarius #:

Und die Matrizen werden sich als nützlich erweisen.
Mit Variablen arbeiten, um die Größe festzulegen

int m1=2; int m2=2;
matrix m(m1, m2);

Vorher mussten Sie dynamische Arrays verwenden.

In der Tat versprach Renat maschinelles Lernen in MQL5, wie ONNX-Unterstützung. Wir werden sehen)

 
Vladimir Baskakov #:
Niemand hat jemals die Kreuzung der beiden Mash-Ups übertroffen

... und der Rückstand kann durch ein NS-Präfix verringert werden))

 
elibrarius #:
Wenn jemand SanSanych's Paket https://www.mql5.com/ru/code/17468 benutzt, um sich mit R zu verbinden, dann:

In der Datei R.mqh führten die Namen von Vektor- und Matrixvariablen beim Kompilieren zu einem Fehler. Benennen Sie sie in andere Namen um, und alles wird funktionieren. Ich habe Vectr und Matr verwendet.

Der Editor hebt diese Wörter in blau als Datentyp wie int, double hervor. Offensichtlich reservierte Wörter für neue Typen.

Hmm, ich wusste nichts über diese Bibliothek. Wie ist es zu benutzen, was ist seine Funktionalität?

 
iwelimorn #:

Kurzum, alles umsonst, mit MO kann der Markt nicht getäuscht werden.

Sie haben die Merkmale und das Ziel gefunden, deren Klassenverteilung in der ersten Abbildung dargestellt ist.

Die Genauigkeit der mit diesem Datensatz trainierten Test- und Trainings-Katbust-Modelle betrug 93 %.

Die zweite Abbildung zeigt das Diagramm für den Saldo und das Eigenkapital des Zielgeschäfts:

Die dritte Abbildung zeigt das Gleichgewichts- und Eigenkapitaldiagramm des Handels mit den Signalen des trainierten katbusta-Modells:

Also, meine Damen und Herren, gehen Sie auseinander.

Was ist das Ziel, wie haben Sie es gefunden?

Haben Sie versucht, einen Trall hinzuzufügen?

Wenn Sie nur die Fehlerbilanz betrachten (+1 richtig -1 falsch für Klasse 1), ist das Ergebnis dann viel anders?

 
Aleksey Vyazmikin #:

Hmm, ich wusste nichts über diese Bibliothek. Wie wird es verwendet, was ist seine Funktionalität?


Übertragung von Variablen und Feldern in beide Richtungen zwischen MT und R. Es gibt Anführungszeichen, Rückergebnisse und Befehle.
Funktionsbeschreibung:
/**
* Rückgabe der DLL-Version. Die oberen 16 Bit des Rückgabewerts
* sind die Hauptversion und die unteren 16 Bit die Nebenversion. Diese
* wird in RInit() verwendet, um sicherzustellen, dass diese Header-Datei und
* zztdie DLL zusammenpassen.
*/
int RGetDllVersion();

/**
* Dies ist nicht dafür gedacht, direkt aufgerufen zu werden, es wird
* von RInit() nach der erfolgreichen Versionsprüfung aufgerufen.
* Sie sollten RInit() aufrufen, um eine neue R-Sitzung zu starten.
*/
long RInit_(string commandline,int debuglevel);

/**
* Teminate the R session. Rufen Sie dies in Ihrer Funktion deinit() auf.
* Danach ist der Griff nicht mehr gültig.
*/
void RDeinit(long rhandle);

/**
* return true if the R session belonging to this handle is
* still running. R bricht bei jedem schwerwiegenden Fehler im
* Code ab, den Sie ihm senden. Sie sollten dies am Anfang
* Ihrer Startfunktion überprüfen und alle Aktionen stoppen. Der letzte
* Befehl vor dem Absturz ist im Protokoll zu finden.
* Wenn R nicht mehr läuft, gibt diese Bibliothek keine
* Logmeldungen mehr aus und ignoriert alle Befehle stillschweigend.
*/
bool RIsRunning(long rhandle);

/**
* return true if R is still executing a command (resulting
* from a call to RExecuteAsync())
*/
bool RIsBusy(long rhandle);

/**
* execute code and do not wait. Jeder nachfolgende Aufruf
* wird jedoch warten, da zu einem bestimmten Zeitpunkt nur ein Thread
* ausgeführt werden kann. Verwenden Sie RIsBusy(), um zu prüfen, ob es beendet ist
*/
void RExecuteAsync(long rhandle,string code);

/**
* Code ausführen und warten, bis er beendet ist. Dies wird nichts
* zurückgeben. Sie können im Grunde dasselbe mit
* den RGet*()-Funktionen erreichen, die Auswertung des Ausdrucks ist auch
* nur die Ausführung von Code, der einzige Unterschied ist, dass diese
* RGet*()-Funktionen zusätzlich versuchen,
* die Ausgabe zu analysieren und zurückzugeben, während RExecute() nur ausführt, wartet und
* alle Ausgaben ignoriert.
*/
void RExecute(long rhandle,string code);

/**
* Weisen Sie dem Variablennamen ein bool zu. In R wird dieser Typ "logisch" genannt
*/
void RAssignBool(long rhandle,string variable,bool value);

/**
* weisen dem Variablennamen eine ganze Zahl zu.
*/
void RAssignInteger(long rhandle,string variable,int value);

/**
* dem Variablennamen ein Double zuweisen.
*/
void RAssignDouble(long rhandle,string variable,double value);

/**
* weisen Sie der Variablen namd einen String zu. In R wird dieser Typ "Zeichen" genannt
*/
void RAssignString(long rhandle,string variable,string value);

/**
* weisen dem Variablennamen einen Vektor zu. Wenn die Größe nicht mit
* der tatsächlichen Array-Größe übereinstimmt, kann es zu Problemen kommen.
*/
void RAssignVector(long rhandle,string variable,double &vectr[],int size);

/**
* einen Vektor von Zeichen (ein Array von Strings) der Variablen zuweisen. Wenn Sie
* einen Faktor benötigen, sollten Sie nach diesem Befehl einen Code zur Konvertierung ausführen. In
* neueren Versionen von R benötigt ein Vektor von Zeichenketten nicht mehr Speicher als
* ein Faktor und es ist einfacher, neue Elemente an ihn anzuhängen.
*/
void RAssignStringVector(long rhandle,string variable,string &vectr[],int size);

/**
* weisen dem Variablennamen eine Matrix zu. Die Matrix muss die Zeilennummer als
* erste Dimension haben (byrow=TRUE wird für die Rohdaten verwendet). Diese Funktion ist viel
* schneller als der Aufbau einer riesigen Matrix (Hunderte von Zeilen) von Grund auf, indem
* neue Zeilen am Ende mit RRowBindVector() für jede Zeile angehängt werden. Diese Funktion ist optimiert
* für großen Durchsatz mit einem einzigen Funktionsaufruf durch die Verwendung von file-IO mit den
* rohen Binärdaten. Für sehr kleine Matrizen und Vektoren mit nur einer Handvoll Elementen
* könnte dies zu viel Overhead sein und die anderen Funktionen sind schneller. Sobald Sie
* die Matrix mit möglicherweise Tausenden von Zeilen nach R übertragen haben, sollten Sie
* nur noch RRowBindVector() verwenden, um die Matrix bei der Ankunft einzelner neuer
* Datenvektoren langsam weiter wachsen zu lassen, anstatt immer eine neue Kopie der gesamten Matrix zu senden.
*/
void RAssignMatrix(long rhandle,string variable,double &matr[],int rows,int cols);

/**
* eine Zeile an eine Matrix oder einen Datenrahmen anhängen. Dies führt zu
* variable <- rbind(variable, vector)
* Wenn die Größe nicht mit der tatsächlichen Array-Größe übereinstimmt, kann es zu Problemen kommen.
*/
void RAppendMatrixRow(long rhandle,string variable,double &vectr[],int size);

/**
* return true if the variable exists, false otherwise.
*/
bool RExists(long rhandle,string variable);

/**
* Ausdruck auswerten und ein bool zurückgeben. Der Ausdruck kann ein beliebiger R-Code
* sein, der als logisch ausgewertet wird. Wenn es sich um einen logischen Vektor handelt, wird nur
* das erste Element zurückgegeben.
*/
bool RGetBool(long rhandle,string expression);

/**
* Ausdruck auswerten und eine Ganzzahl zurückgeben. Ein Ausdruck kann ein beliebiger R-Code
* sein, der zu einer ganzen Zahl ausgewertet wird. Wenn es sich um eine Fließkommazahl handelt, wird
* gerundet, wenn es sich um einen Vektor handelt, wird nur das erste Element zurückgegeben.
*/
int RGetInteger(long rhandle,string expression);

/**
* Ausdruck auswerten und einen Double zurückgeben. Der Ausdruck kann ein beliebiger R-Code
* sein, der zu einer Fließkommazahl ausgewertet wird. Wenn es sich um einen Vektor handelt, wird
* nur das erste Element zurückgegeben.
*/
double RGetDouble(long rhandle,string expression);

/**
* Ausdruck auswerten und einen Vektor von Doubles zurückgeben. Ausdruck kann
* alles sein, was als Vektor von Gleitkommazahlen ausgewertet werden kann.
* Rückgabewert ist die Anzahl der Elemente, die in das Array
* kopiert werden konnten. Sie wird nie größer als die Größe sein, kann aber kleiner sein.
* Auf Debuglevel 1 werden Warnungen ausgegeben, wenn die Größen nicht übereinstimmen.
>>> Begrenzt auf 100000 Elemente
*/
int RGetVector(long rhandle,string expression,double &vectr[],int size);

/**
* für Debugging-Zwecke ein print(expression) durchführen. Die Ausgabe wird
* an den Debug-Monitor auf Debuglevel 0 gesendet.
*/

void RPrint(long rhandle,string expression);

 
elibrarius #:

Übertragung von Variablen und Arrays in beide Richtungen zwischen MT und R. Dort finden Sie Anführungszeichen, Rückmeldungen und Befehle.
Danke für die Information, ich werde diese Möglichkeit in Betracht ziehen. Wie groß ist die Verspätung bei der Hin- und Rückfahrt überhaupt?
 
Aleksey Vyazmikin #:
Danke für die Information, ich werde diese Möglichkeit in Betracht ziehen. Wie groß ist die Verspätung bei der Hin- und Rückfahrt?
Sehr schnell. Über Gedächtnisaustausch. Keine Dateien oder Pips.
 
Vladimir Baskakov #:
Niemand hat jemals den Schnittpunkt der beiden Wellenformen überboten.
Sie werden es nicht glauben.
Bei Mittelwertbildung ist das Ergebnis identisch mit dem der Abstriche, und die Signalübergangszeit ist bis auf wenige Sekunden identisch.
---
Ich war selbst schockiert ;)
Grund der Beschwerde: