"New Neural" ist ein Open-Source-Projekt für neuronale Netzwerke für die MetaTrader 5-Plattform. - Seite 46

 
maxfade:

fällt mir sofort ein Witz über Bärte ein

Ich bezweifle, dass es zum Zeitpunkt der Geburt "Nullen" gibt, außerdem denke ich, dass es immer wieder zu Irrtümern und Ablenkungen kommt.
Übrigens, ja, das Baby wird mit mindestens einem Greif- und Schluckreflex geboren, und auch das ist Gehirnarbeit. Er hat also kein Null-Gehirn, zumal sein Lernen schon lange vor seiner Geburt beginnt. Es ist eine Frage der Evolution und nicht des Lernens, die Waage eines Neugeborenen zu belasten.
 

Ich habe es so umgestaltet, dass bei der Erstellung eines Objekts über einen Konstruktor mit Parametern eine neue Sequenz am Ende der Sequenz initialisiert wird.

Es wird zwar etwas langsamer gehen, aber die Reihenfolge wird immer eindeutig sein.

Wenn Sie ein Objekt mit dem Standardkonstruktor erstellen, müssen Sie Srand() aufrufen, und die Sequenz wird die gleiche sein, die sich im Kreis dreht.

  uint st=GetTickCount();
  CRandm *rnd=new CRandm((uint)TimeLocal(),10000);// длинна последовательности
  for(int i=0;i<1000000;i++)// количество вызовов
    {
     rnd.Rand();
    } 
  delete rnd;   
  Print("time=",GetTickCount()-st);
Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
  • www.mql5.com
Основы языка / Операторы / Оператор создания объекта new - Документация по MQL5
Dateien:
Randm.mqh  5 kb
 

Ich schlage vor, eine virtuelle Auftragsbibel in Betracht zu ziehen (emuliert das Öffnen/Schließen auf dem Markt. die Befehle sind fast die gleichen wie für echte Aufträge).

Diese Funktion ist sehr nützlich, wenn Sie ein Modell mit historischen Daten (außerhalb des Strategietesters) ausführen müssen.

Was haben Sie vergessen? Was können wir verbessern, hinzufügen, ändern, modifizieren? - Die Bibliothek ist sehr einfach.

Bisher wurden nur Operationen der Typen buy-0 und sell-1 implementiert.

Dateien:
C_Orders.mqh  15 kb
 

Vortrag 1 hier https://www.mql5.com/ru/forum/4956/page23

Vortrag 2 hier https://www.mql5.com/ru/forum/4956/page34

Vortrag 3 hier https://www.mql5.com/ru/forum/4956/page36

Vorlesung 4. Anwendung der Organisation des visuellen Kortex auf die Transformation von Zeitreihen

Unsere Aufgabe besteht also darin, ein neuronales Netz zur Klassifizierung von Preismustern nach dem Prinzip des Gehirns aufzubauen. Dieses Netz kann in zwei Module unterteilt werden: ein Modul für die Umwandlung der Eingangsinformationen (Preise) und ein Klassifizierungsmodul, das nach jedem bekannten Prinzip aufgebaut werden kann (z. B. Support Vector Machine):

In meinem letzten Vortrag habe ich das HMAX-Modell des visuellen Kortex als Beispiel für eine biologische Informationstransformation beschrieben. Der große Nachteil dieses Modells besteht darin, dass die Werte der Gewichte (rezeptive Felder) darin nicht trainiert werden, sondern einfach aus biologischen Messungen von Gehirnneuronen übernommen werden. Zum Beispiel werden die rezeptiven Felder einfacher Neuronen in V1 (S1) gemessen, wie im Video hier https://www.youtube.com/watch?v=Cw5PKV9Rj3o gezeigt (die Klicks, die Sie hören, sind Neuronenimpulse). In unserem Fall von Zeitreihen sind die "rezeptiven Felder" der Neuronen, die die Informationen umwandeln, vorher unbekannt. Wir werden sie also selbst finden müssen. Die erste Schicht der Preistransformation (S1-Schicht) kann beispielsweise wie folgt aufgebaut sein, in Analogie zur S1-Schicht des visuellen Kortex:

In diesem Beispiel hat unsere Schicht S1 6 Unterschichten, die mit 0-5 nummeriert sind. Neuronen (Kreise) derselben Teilschicht haben die gleichen Eingangsgewichte (rezeptive Felder), die üblicherweise in den Rechtecken auf der linken Seite dargestellt sind. Jede Unterschicht von Neuronen hat ihr eigenes rezeptives Feld. Wir wissen im Voraus, dass, wenn es eine Teilschicht mit dem rezeptiven Feld w_0,k gibt, wobei k=0...5 (Richtung "oben"), dann muss es eine Teilschicht mit dem rezeptiven Feld -w_0,k (Richtung "unten") geben. Die Schichten mit positivem Feld werden mit geraden Zahlen (0, 2, 4) und ihre negativen Gegenstücke mit unscharfen Zahlen (1, 3, 5) nummeriert. Darüber hinaus wissen wir, dass die S1-Teilschichten unterschiedlich große rezeptive Felder haben müssen. Lassen Sie die Feldgröße von der Teilschicht 0 (und ihrem negativen Gegenstück 1) bis zur Teilschicht 4 (und ihrem negativen Gegenstück 5) ansteigen. Die Eingänge aller Neuronen derselben Spalte werden mit denselben Preisen gefüttert (zum Beispiel werden die Neuronen der ersten Spalte mit den Preisen x_0...x_5 gefüttert). Die Eingänge der Neuronen in der nächsten Spalte werden mit um 1 Bar verschobenen Preisen gespeist (x_1...x_6) usw. Unsere S1-Schicht besteht also aus Neuronen mit rezeptiven Feldern unterschiedlicher Richtung (aufwärts, abwärts), Größe und Zeitposition.

Das Lernen der Eingangsgewichte der Neuronen der S1-Schicht wird nur für eine Spalte von Neuronen aus verschiedenen Teilschichten durchgeführt, und es spielt keine Rolle, welche. Dann werden alle Gewichte für die verbleibenden Neuronen in jeder Teilschicht kopiert. Das Lernen erfolgt ohne einen Lehrer, indem verschiedene Preismuster in die Eingänge der S1-Schicht eingespeist werden und die Gewichte nach einer bestimmten Regel geändert werden. Es gibt viele Regeln für das Selbstlernen der Neuronengewichte, die hier gut beschrieben sind:

Miller, K. D., und MacKay, D. J. C. (1994). Die Rolle von Beschränkungen beim Hebbschen Lernen, Neural Computat, 6, 100-126.

Die erste Regel des neuronalen Selbstlernens wurde 1949 von Hebb postuliert(https://en.wikipedia.org/wiki/Hebbian_theory). Diese Regel lautet: "Wenn ein Neuron Input von einem anderen Neuron erhält und beide hoch aktiv sind, muss das Gewicht zwischen den Neuronen erhöht werden". Mathematisch lässt sich dies wie folgt ausdrücken

dw_i = mu*x_i*y,

wobei dw_i das Inkrement des Gewichts w_i, x_i der Wert am i-ten Eingang, y der Ausgang eines Neurons und mu die Lernrate ist. Wir werden die Oja-Regel (https://en.wikipedia.org/wiki/Oja's_rule) verwenden, die zur Klasse der kompetitiven Lernregeln gehört:

dw_i = mu*y*(x_i - y*w_i/a),

wobei dw_i die inkrementelle Gewichtung w_i ist, x_i der Preis am i-ten Eingang ist, y die Ausgabe des Neurons ist, berechnet als y = SUM(w_i*x_i, i=0..m-1), mu die Lernrate ist, a ein Parameter ist (die Summe der Quadrate der Gewichte SUM(w_i^2,i=0..m-1) tendiert zu a). Der Vorteil dieser Regel ist, dass sie automatisch Gewichte als Haupteigenvektoren der Kursnotierungen findet. Mit anderen Worten: Ogis Regel reproduziert den Hauptkomponentenansatz (PCA). Dies deckt sich mit der biologischen Annahme, dass die rezeptiven Felder der S1-Schicht des visuellen Kortex die wichtigsten Eigenvektoren der visuellen Information darstellen. Der beigefügte C++-Code trainiert automatisch Gewichte von 32 S1-Sublayern mit EURUSD M5-Kursen als Eingabe, mu=1, a=1. Diese Gewichte als Funktionen des Inputs sind unten dargestellt

Die Gewichte der ersten beiden Teilschichten (0 und 1) sind in rot dargestellt. Sie haben nur zwei Werte, die nicht Null sind: -0,707 und +0,707. Die Gewichte der Teilschichten 2 und 3 sind in orange dargestellt. Sie haben 4 Werte, die nicht Null sind. Etc.

Um den beigefügten Code verwenden zu können, müssen Sie die Boost- und CImg-Bibliotheken installieren http://cimg.sourceforge.net/. Zu den höheren Ebenen (C1, S2, C2) bin ich noch nicht gekommen und werde es wahrscheinlich auch nicht mehr lange tun. Diejenigen, die meine vorherigen Lektionen gelesen haben, sollten verstehen, wie alle HMAX-Ebenen funktionieren und das Modul zur Umrechnung von Preisangaben vervollständigen. In der nächsten (letzten) Vorlesung werde ich über SparseNets sprechen.

Dateien:
BrainPower.zip  907 kb
 

Ich schlage vor, eine virtuelle Auftragsbibel in Betracht zu ziehen (emuliert das Öffnen/Schließen auf dem Markt. die Befehle sind fast die gleichen wie für echte Aufträge).

Diese Funktion ist sehr nützlich, wenn Sie ein Modell mit historischen Daten (außerhalb des Strategietesters) ausführen müssen.

Was haben Sie vergessen? Was können wir verbessern, hinzufügen, ändern, modifizieren? - Die Bibliothek ist sehr einfach.

Bislang wurden nur die Operationen buy-0 und sell-1 durchgeführt.

Vielen Dank für die Bibliothek. Kann ich eine kurze Anleitung erhalten, wie man es benutzt?
 
Graff:
Danke für die Bibliothek. Kann ich eine kurze Anleitung zur Verwendung des Programms erhalten?

Eigentlich gibt es nicht viel zu erzählen.

Um die Auftragshistorie zu löschen, rufen Sie vor jedem Verlaufslauf

void Initialise(int MaxPossibleCountOrd, double Spread, double Point_);

und rufen Sie dann je nach Ihrer Handelsstrategie die erforderlichen Befehle auf:

int    OrderOpen        (int Type, double Volume, int Time,double Price,double SL, double TP);
void   Possible_SL_or_TP(int Time, double PriceHigh,double PriceLow);
void   OrderClose       (int Ticket, int Time,double Price);
void   OrderCloseAll    (int Time, double   Price);
int    ProfitTradeCount ();
int    TotalPipsProfit  ();
int    LossSeriesCount  ();
int    ProfitSeriesCount();

Spread ist fest, er wird bei der Initialisierung eingestellt. Für eine gleitende Spanne müssen wir die entsprechende Funktionalität hinzufügen. Meiner Meinung nach ist dies nicht erforderlich - stellen Sie einfach die maximal mögliche Spanne für ein Instrument ein, und das war's.

 
joo:

Da gibt es nicht wirklich viel zu erzählen.

Um die Auftragshistorie zu löschen, müssen Sie vor jedem Lauf die folgenden Befehle aufrufen:

und rufen dann, je nach Handelsstrategie, die erforderlichen Befehle auf:

Spread ist fest, er wird bei der Initialisierung eingestellt. Für eine gleitende Spanne müssen wir die entsprechende Funktionalität hinzufügen. Für mich ist das überhaupt nicht notwendig - ich stelle einfach die maximal mögliche Spanne für ein Instrument ein und das war's.

Danke, ich werde es heute Abend ausprobieren. Das Analogon für MT4https://www.mql5.com/ru/forum/124013 könnte eine Hilfe sein.
Простая идея мультивалютного тестера с примером реализации - MQL4 форум
  • www.mql5.com
Простая идея мультивалютного тестера с примером реализации - MQL4 форум
 

Es tut mir leid, aber ich scheine mich verrechnet zu haben. Im Moment habe ich praktisch keine Möglichkeit, mich an dem Projekt zu beteiligen.

Obwohl der Wunsch, daran teilzunehmen, sehr groß ist, fehlt es mir an Zeit und Energie, was sehr schade ist.

Ich werde nach den Prüfungen (Mitte Dezember) einsteigen können. Übrigens steht einer der Kurse in direktem Zusammenhang mit neuronalen Netzen.

 

Im Übrigen. Es gibt zwei Zielfunktionen. Für logistische Regression und einfache Regression.

Die Klassifizierung ist ein Fall der logistischen Regression.

Die Zielfunktion ist für die logistische Regression bestimmt:

Und für die gewöhnliche Regression:

obwohl ihre Ableitungen ähnlich sind. Vielleicht ist das der Grund, warum die Unterscheidung in der Regel verschwiegen wird.

Die erste wird bei Klassifizierungsproblemen auf der sigmoidalen Ausgangsschicht verwendet.

Die zweite wird für die lineare Ausgabe bei Vorhersageproblemen verwendet.

 
TheXpert:

Es tut mir leid, aber ich scheine mich verrechnet zu haben. Im Moment habe ich praktisch keine Möglichkeit, mich an dem Projekt zu beteiligen.

Obwohl der Wunsch, daran teilzunehmen, sehr groß ist, fehlt es mir an Zeit und Energie, was sehr schade ist.

Ich werde nach den Prüfungen (Mitte Dezember) einsteigen können. Übrigens steht einer der Kurse in direktem Zusammenhang mit neuronalen Netzen.

Ihr seid in den Ecken verstreut, Kameraden. Niemals.
Grund der Beschwerde: