Neuronales Netz in Form eines Skripts - Seite 4

 
rip:
YuraZ:

Es ist nicht immer notwendig, zu normalisieren. Wer sagt, dass das Raster nur mit 0 und 1 arbeiten DARF und MUSS?


Ich kann ein einfaches Raster mit einem Beispiel anhängen (leider habe ich im Moment keine Materialien zur Hand) - ich werde es später tun

wo ein einfaches NN dieses Problem ohne Datenaufbereitung mit Normalisierung löst

leider ist dies nicht die Quelle


Das Beispiel, das ich gegeben habe! Es ist, als ob es bereits normalisiert wäre.

die Bedingung hat zwei Bereiche


1 0-100

2 10-30


müssen Sie nur das Verhältnis der Position in einem Bereich ermitteln, das bekanntlich zu

Das ist im Wesentlichen eine Skalierung.

Eine Normalisierung ist fast immer erforderlich. Die Daten müssen innerhalb des Definitionsbereichs der Aktivierungsfunktion liegen.

Im Skript ist das Sigmoid [-1;+1]. Ersetzt man ihn beispielsweise durch einen Exponentialwert ... oder Quadratwurzel.


http://www.statsoft.ru/home/portal/applications/NeuralNetworksAdvisor/Adv-new/ActivationFunctions.htm








http://www.statsoft.ru/statportal/tabID__32/MId__141/ModeID__0/PageID__354/DesktopDefault.aspx


Hier ist ein Beispiel für die Erstellung eines Netzwerks ... Eingang ist LOW, d.h. keine Normalisierung

 
YuraZ:

http://www.statsoft.ru/statportal/tabID__32/MId__141/ModeID__0/PageID__354/DesktopDefault.aspx


Hier ist ein Beispiel für die Erstellung eines Netzwerks ... Der Eingang ist LOW, d.h. keine Normalisierung


Die Verwendung nicht-normalisierter Daten ist manchmal sehr nützlich. Sie verlieren nicht die Informativität, die bei Transformationen verloren gehen kann.

Und es gibt keinen formalisierten Mechanismus zur Bestimmung der Informativität der Ausbildungsstichprobe...


Übrigens geht aus dem Artikel nirgends hervor, welche Aktivierungsfunktion verwendet wird. Offenbar etwas mit dem Definitionsbereich [-inf;+inf] oder [0;+inf] ...

 

das Programm ein wenig geändert!

das Ausgabeformat leicht geändert


SCRIPT sieht es nun als seine Aufgabe an, die Ausgabedaten mit hoher Genauigkeit zu berechnen

Das Programm ist natürlich nicht universell, sondern auf die Anzahl der Eingänge und Ausgänge spezialisiert.

aber die Größe der versteckten Schicht! wird im Lernprozess angepasst



die nächste Version - ich werde versuchen, die Anzahl der Ein- und Ausgänge flexibel zu gestalten

und bei Erfolg werde ich einen genetischen Algorithmus hinzufügen

deren Ziel es sein wird, NEURONS mit einer großen Anzahl von Fehlern zu töten

und reproduzieren Neuronen mit wenigen Fehlern!

d.h. im Wesentlichen die Neuronen im Array suchen, die die geringste Anzahl von Fehlern aufweisen, und aus diesen Neuronen züchten, um sie zu ersetzen

die Neuronen, die sich schlecht verhalten haben...


1 Die Lernquote ist derzeit niedrig

2 Änderung - die Anzahl der versteckten Neuronen der 1. Ebene ist zufällig ohne Logik

3 Stoppt den Lernprozess, wenn er eine hohe Genauigkeit bei den Eingabe- und Ausgabe-Beispieldaten erreicht


Dateien:
 

Wie verwende ich das? Setzen Sie ein Skript auf das Diagramm, Stapel von Zahlen begannen sich umzuschreiben... Was sagen diese Zahlen aus?

 
Blast:

Wie verwende ich das? Setzen Sie ein Skript auf das Diagramm, Stapel von Zahlen begannen sich umzuschreiben... Was sagen diese Zahlen aus?

Wozu brauchen Sie sie? Ich habe meinen eigenen GA-Algorithmus, aber ich habe den Code kaum verstanden - ich brauche Zeit, um herauszufinden, wo ich Inputs einsetze, wie ich sie herausnehme und wann ich sie kaufe und abrechne, wenn überhaupt? Oder sind Sie auf der Suche nach dem Gral?

 
Loknar:
Explosion:

Wie verwende ich das? Setzen Sie ein Skript auf das Diagramm, Stapel von Zahlen begann zu schreiben ... Was sagen diese Zahlen aus?

Wozu brauchen Sie sie? Ich habe meinen eigenen GA-Algorithmus, aber ich habe den Code kaum verstanden - ich brauche Zeit, um herauszufinden, wo ich Inputs einsetze, wie ich sie herausnehme und wann ich sie kaufe und abrechne, wenn überhaupt? Oder sind Sie hier vielleicht auf der Suche nach dem Gral?

Blast , suchen Sie nicht nach einem Expert Advisor oder Indikator - das liegt in weiter Ferne.


es geht eher darum, die Prinzipien eines neuronalen Netzes in MQL4 zu lernen

---

Im Allgemeinen ist es sinnvoll, sie in C++ in Form einer DLL oder einer anderen schnellen Sprache zu schreiben.


Loknar - es ist nur eine Änderung des Skripts von Anfang an, um eine genauere Ausgabe zu erhalten

--

durch die Art und Weise versucht, eine Ebene hinzuzufügen :-), nicht zu erwähnen, Ausgänge Eingänge ... der Algorithmus zum Erlernen des Rohrs stirbt einfach ab...


---

Sie möchten etwas wie
ausprobieren.

3 Ausgänge

die Ausgabe ist nicht einfach 0 oder 1 oder -1 0 +1, sondern ein Bereich

x 0 0 - kaufen halten

0 x 0 - flat (exit buy or sell)

0 0 x verkaufen - halten verkaufen

wobei x nicht 0 oder 1 ist, sondern eine Abweichung in einem bestimmten Bereich aufweist, z. B. -1,000 0,000 +1,000

d.h. kann einen Wert von z.B. 0,1122 oder -0,012 annehmen


die Kombination der drei Ausgänge wird auf Grenzüberschreitung analysiert


Eingänge 9 in jedem Zeitrahmen - zum Beispiel M1 M5 M15 M30 H1 H4 54 Einträge insgesamt

wir die Differenz zwischen den Durchschnittswerten 3 5 8 13 21 34 55 89 144 233 für jeden Verkehr

insgesamt 3-5 5-8 8-13 13-21 21-34 34-55 55-89 89-144 144-233 insgesamt 9 pro Zeitraum

erhalten wir eine Art VERIABLE der Durchschnittswerte in der Gitteransicht... :-) in der Matrix

wenn wir etwas wie das Muster 2 3 4 5 6 7 8 9 10 11 haben, ist der Ventilator vollständig nach oben geöffnet und wird als "Sell

wenn wir -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 Muster haben, ist das Muster vollständig nach unten offen - BAY

Die Zahlen sind willkürlich und manchmal ein Muster -1 -3 -7 -10 -15 -20 -30 -40 -80 in einem größeren Zeitrahmen



---

eine Ausbildungsprobe von z.B.


1 2 1 0 -3 2 3 0 4 M1

-1 2 -1 0 1 2 3 0 -4 M5

...

........................ H4

 

Daten für die Ausbildung vorbereiten





#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"
 
static int hWR;
 
static double    ma[9][233] ;
static datetime  SaveTime[9];
static int       indx[8]={3,5,8,13,21,34,55,89,144};
static  int iFW = 0;
 
int init()
  {
   hWR = FileOpen( "MA.CSV", FILE_BIN|FILE_WRITE) ; 
   string strPut="DATETIM            |"+
   "m100035|m010058|m010813|m011321|m012134|m013455|m015589|"+
   "m500035|m050058|m050813|m051321|m052134|m053455|m055589|"+
   "m150035|m150058|m150813|m151321|m152134|m153455|m155589|"+
   "m300035|m300058|m300813|m301321|m302134|m303455|m305589|"+
   "h010035|h010058|h010813|h011321|h012134|h013455|h015589|";
 
 
 
// "-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|
   FileWrite(hWR, strPut);
   return(0);
  }
int deinit()
  {
  FileClose(hWR);
  }
 
int start()
{
  iFW = 0;
  getMA( PERIOD_M1 ,1);
  getMA( PERIOD_M5 ,2);
  getMA( PERIOD_M15,3);
  getMA( PERIOD_M30,4);
  getMA( PERIOD_H1 ,5);
  getMA( PERIOD_H4 ,6);
   if ( iFW == 1 )
   {
      PutFile( );
   }
   return(0);
}
void getMA(int TF,int iTF)
{
 if ( SaveTime[iTF] != iTime(Symbol(),TF,0) )
 {
 SaveTime[iTF] = iTime(Symbol(),TF,0);
 ma[iTF][89] =  iMA(Symbol(),TF,89,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][55] =  iMA(Symbol(),TF,55,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][34] =  iMA(Symbol(),TF,34,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][21] =  iMA(Symbol(),TF,21,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][13] =  iMA(Symbol(),TF,13,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][ 8] =  iMA(Symbol(),TF, 8,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][ 5] =  iMA(Symbol(),TF, 5,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][ 3] =  iMA(Symbol(),TF, 3,0,MODE_EMA,PRICE_CLOSE,0);
 iFW = 1;
 }
}
void  PutFile( )
{
 string strPut;
 strPut = TimeToStr( SaveTime[1] , TIME_DATE|TIME_MINUTES|TIME_SECONDS) ;
 for ( int iiTF = 1; iiTF <= 6; iiTF++)
 {
   for ( int jM = 0; jM <= 6; jM++)
   {
      int nMA = indx[jM];
      int nMA_N = indx[jM+1];
      double nn = NormalizeDouble( (ma[iiTF][ nMA] - ma[iiTF][ nMA_N])/Point,0) ;
      string sss = DoubleToStr( nn , 0);
      if ( nn >= 0 )
         sss =" "+sss;
      if (MathAbs(nn)  <= 9)
         sss =" "+sss;
       
         
      // strPut = strPut+DoubleToStr( ma[iiTF][ nMA] , 4)+"|";
      strPut = strPut+"|"+sss;
   }
 }
 FileWrite(hWR, strPut);
}
 
Loknar:
Explosion:

Wie verwende ich das? Setzen Sie ein Skript auf das Diagramm, Stapel von Zahlen begann zu schreiben ... Was sagen diese Zahlen aus?

Wozu brauchen Sie sie? Ich habe meinen eigenen GA-Algorithmus, aber ich habe den Code kaum verstanden - ich brauche Zeit, um herauszufinden, wo ich Inputs einsetze, wie ich sie herausnehme und wann ich sie kaufe und abrechne, wenn überhaupt? Oder haben Sie den Gral schon gefunden?

Zunächst gefällt mir die Idee der neuronalen Netze. Alles, was ich darüber weiß, ist, dass bei 1000 Punkten das Netz irgendwie zu einem Punkt konvergiert... und dass das Autotrading mit einem auf dem Netzwerkalgorithmus basierenden EA gewonnen wurde. Ich habe vor, meine eigene Version eines solchen Netzes zu erstellen, aber in diesem Stadium verstehe ich weder etwas von mql4 noch von neuronalen Netzen.

Daher werde ich zunächst meine Strategie in Expert Advisor setzen, um mql4 zu lernen. Und dann werde ich anfangen, über Netzwerke nachzudenken.

Ich habe Ihre Version heruntergeladen, nur so aus Interesse. Es ist das erste Mal, dass ich auf solche Dinge gestoßen bin. Ich verstehe die Funktionsweise solcher Netze nicht. Ich habe keine Ahnung, wie solche Netze funktionieren, deshalb habe ich solche Fragen.

Ich freue mich über jeden Hinweis auf ähnliche Themen, die Ihrer Meinung nach Beachtung verdienen!

 

DIESES NETZWERK

YuraZ:

die Software ein wenig geändert!

das Format der Anzeige von

ein wenig geändert

SCRIPT sieht es nun als seine Aufgabe an, die Ausgabedaten mit hoher Genauigkeit zu berechnen

das Programm ist nicht universell, sondern auf die Anzahl der Eingänge und Ausgänge spezialisiert

aber die Größe der versteckten Schicht! wird im Lernprozess angepasst



die nächste Version - ich werde versuchen, die Anzahl der Ein- und Ausgänge flexibel zu gestalten

und bei Erfolg werde ich einen genetischen Algorithmus hinzufügen

deren Ziel es sein wird, NEURONS mit einer großen Anzahl von Fehlern zu töten

und reproduzieren Neuronen mit wenigen Fehlern!

d.h. Suche nach den Neuronen im Array, die die geringste Anzahl von Fehlern aufweisen, und Züchtung aus diesen Neuronen, um sie zu ersetzen

die Neuronen, die sich schlecht verhalten haben...


1 Die Lernquote ist derzeit niedrig

2 Changing - die Anzahl der versteckten Neuronen der 1. Ebene ist zufällig ohne Logik

3 Beenden Sie das Lernen, wenn Sie eine hohe Genauigkeit bei den Eingabe- und Ausgabedaten erreichen.


DAS GLEICHE NETZWERK, aber geschrieben in Microsoft Visual C++ 6.0

Die Geschwindigkeit ist um Größenordnungen höher als in MQL4

der Algorithmus ist unverändert, der Transfer von MQL4 nach C++ ist so einfach wie möglich, ohne Klassenobjekte zu verwenden

Dateien:
yzpnn.zip  63 kb
 

Eine weitere Option, aber auf MQL


nur versuchen, auf M1 zu arbeiten zeigt die aktuelle Trendrichtung

Ausgang am 3., theoretisch kann man beim Start nicht unterrichten - aber sofort fertige Gewichte nehmen - im Voraus unterrichten


---

9 Eingänge, denen die normalisierte Differenz von muwings zugeführt wird

---

out-1 out-2 out-3 Ausgang

0,9 0,01 0,01 Trend nach oben

0,01 0,9 0,01 flet

0,01 0,01 0,9 Trend nach unten



---

Ich plane, 3-4 Zeitrahmen hinzuzufügen und sie alle auf einmal zu zählen!

PNN, wenn bereits gewogen, arbeitet sehr schnell

---


Experimenteller Testcode - bitte treten Sie mich nicht.






Dateien: