Neuronale Netze, wie beherrscht man sie, wo fängt man an? - Seite 5

 
meta-trader2007 >> :

Ich meine ein einfaches lineares Perseptron, wie das von Reschetow verwendete. Rosenblatt schuf sein Perseptron als Modell der Gehirnfunktion), ein sehr primitives Modell...

Das von Herrn Reshetov verwendete einfache lineare Perseptron ist seit mehr als 40 Jahren überholt.

Die eigentliche Geschichte der neuronalen Netze begann mit dem Rosenblatt-Perseptron und seiner Aktivierungsfunktion.

 
TheXpert >> :

Das von Herrn Reshetov verwendete einfache lineare Perseptron ist seit mehr als 40 Jahren überholt.

Die eigentliche Geschichte der neuronalen Netze begann mit dem Rosenblatt-Perseptron und seiner Aktivierungsfunktion.

Aber auch sein Perseptron ist nicht perfekt. Und es ist nicht gut darin, die Kursrichtung vorherzusagen.

In Rosenblatts zweischichtigen Perseptrons (er hat sie zuerst entwickelt) spielte die erste versteckte Schicht also die Rolle einer Aktivierungsfunktion?

 
meta-trader2007 >> :

Aber auch sein Perseptron ist nicht perfekt. Und sie ist nicht geeignet, um die Richtung des Kurses vorherzusagen.

D.h. in Rosenblatts zweischichtigen Perseptrons (er hat sie zuerst entwickelt) spielte die erste versteckte Schicht die Rolle einer Aktivierungsfunktion?

Ich verfolge das Thema, aber Sie sprechen von höheren Dingen. Wir sollten wenigstens verstehen, wie man etwas Einfaches macht...


Hier ist ein Algorithmus für einen einfachen Expert Advisor:

Nehmen wir zum Beispiel einen einfachen Algorithmus, der auf der Grundlage des letzten Fraktals Einstiegspunkte mit Stop-Loss und Gewinnmitnahme angibt:

Wenn wir ein Fraktal nach oben haben, platzieren wir eine Buy Stop-Order für einen Fraktal-Durchbruch mit einem Stop Loss unterhalb des Mindestpreises zwischen den Bars von Null bis zu dem Bar, bei dem das Fraktal gebildet wurde. Der Take-Profit entspricht dem Stop-Loss.


Hier ist der Code dieses Expert Advisors:

extern double    Lot=0.1;
extern int       Slippage=3; // Проскальзывание
extern int       Magic=1;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
 int i;
 
// Фрактал вверх 
 int iUpFr;   // Номер бара на котором образовался последний фрактал вверх
 double UpFr; // Значение последнего фрактала вверх 

for ( i=3; i<Bars; i++){
UpFr=iFractals(NULL,0,MODE_UPPER, i);
  if ( UpFr>0){
  iUpFr= i;
  //Print ("UpFr = ", UpFr, ", ", " iUpFr = ", iUpFr);
  break;
  }
}   
// Проверяем прорван-ли найденый фрактал, если он прорван, то по нему не имеет смысла выставлять ордер
bool OkUpFr; // Если false, то прорван, если true, то не прорван
if( UpFr>=High[iHighest(NULL,0,MODE_HIGH, iUpFr,0)]){ OkUpFr=true;}

double SellSl=High[iHighest(NULL,0,MODE_HIGH, iUpFr+1,0)]; // Минимальное значение цены от нулевого бара до номера на котором сформировался последний фрактал вверх


// Фрактал вниз
 int iDnFr;   // Номер бара на котором образовался последний фрактал вниз
 double DnFr; // Значение последнего фрактала вниз
 
for ( i=3; i<Bars; i++){
DnFr=iFractals(NULL,0,MODE_LOWER, i);
  if ( DnFr>0){
  iDnFr= i;
  //Print ("DnFr = ", DnFr, ", ", " iDnFr = ", iDnFr);
  break;
  }
} 
// Проверяем прорван-ли найденый фрактал, если он прорван, то по нему не имеет смысла выставлять ордер
bool OkDnFr; // Если false, то прорван, если true, то не прорван
if( DnFr<=Low[iLowest(NULL,0,MODE_LOW, iDnFr,0)]){ OkDnFr=true;}

double BuySl=Low[iLowest(NULL,0,MODE_LOW, iDnFr+1,0)]; // Максимальное значение цены от нулевого бара до номера на котором сформировался последний фрактал вниз
 
 // Параметры ордеров
  double Tick=MarketInfo(Symbol(),MODE_TICKSIZE);
  double spread=MarketInfo(Symbol(),MODE_SPREAD)* Tick;

  double B;
  double Bsl;
  double S;
  double Ssl;    
  double Btp; 
  double Stp; 
  B=NormalizeDouble( UpFr+1* Tick+ spread,Digits);      // Цена для покупки
  Bsl=NormalizeDouble( BuySl-1* Tick,Digits);          // Стоп лосс для ордера на покупку
  Btp=NormalizeDouble( B+( B- Bsl),Digits);             // Тейк профит для ордера на покупку
  S=NormalizeDouble( DnFr-1* Tick,Digits);             // Цена для продажи
  Ssl=NormalizeDouble( SellSl+ spread+1* Tick,Digits);  // Стоп лосс для ордера на продажу
  Stp=NormalizeDouble( S-( Ssl- S),Digits);             // Тейк профит для ордера на продажу
  
bool Buy; // если Buy==true, значит появились условия для Buy stop
bool Sell;// если Sell==true, значит появились условия для Sell stop

if( OkUpFr==true){ Buy=true;}
if( OkDnFr==true){ Sell=true;}
 
// Проверка открытых ордеров и выставленых ордеров
int total = OrdersTotal(); // Общее кол-во открытых и отложеных ордеров.
int Ticket = OrderTicket( ); // Возвращает номер тикета для текущего выбранного ордера. 
bool PendingOrderBuy=false;  
bool PendingOrderSell=false;   
bool MarketOrderBuy=false;
bool MarketOrderSell=false;
if( total>0){  
  for( i=0; i<= total; i++){
     if (OrderSelect( i, SELECT_BY_POS)==true){
        if (OrderSymbol()==Symbol() && OrderMagicNumber()== Magic){
         double OpenPrice=NormalizeDouble(OrderOpenPrice(),Digits);
         double StopLoss=NormalizeDouble(OrderStopLoss(),Digits);
         double TakeProfit=NormalizeDouble(OrderTakeProfit(),Digits);
         Ticket = OrderTicket( );
           if (OrderType( )==OP_BUY){
           MarketOrderBuy = true;
           }
           if (OrderType( )==OP_SELL){
           MarketOrderSell = true;
           }
           if (OrderType( )==OP_BUYSTOP){
           PendingOrderBuy = true;
           if( OpenPrice!= B) {OrderDelete( Ticket,CLR_NONE);} 
           if( StopLoss!= Bsl){OrderDelete( Ticket,CLR_NONE);}       
           }
           if (OrderType( )==OP_SELLSTOP){
           PendingOrderSell = true;
           if( OpenPrice!= S) {OrderDelete( Ticket,CLR_NONE);} 
           if( StopLoss!= Ssl){OrderDelete( Ticket,CLR_NONE);}    
           }  
        }
     }
  }
} 
// Выставление отложеных ордеров
if( Buy==true && PendingOrderBuy==false && MarketOrderBuy==false){
         Ticket=OrderSend (Symbol(),OP_BUYSTOP, Lot, B, Slippage, Bsl, Btp,NULL, Magic,0,CLR_NONE);
         if( Ticket<0)
         {
         Print("OrderSend failed with error #",GetLastError());
         return(0);
         }
}
if( Sell==true && PendingOrderSell==false && MarketOrderSell==false){
         Ticket=OrderSend (Symbol(),OP_SELLSTOP, Lot, S, Slippage, Ssl, Stp,NULL, Magic,0,CLR_NONE);
         if( Ticket<0)
         {
         Print("OrderSend failed with error #",GetLastError());
         return(0);
         }
}     
//----
   return(0);
  }

Bei diesem Algorithmus können Sie mehrere Ankerpunkte auswählen, anhand derer das fraktale Modell gemessen wird:


Parameter, die als Gewichte verwendet werden können:

Zum Kauf:
iUpFr
iUpFr-iSellSl
UpFr-SellSl
(UpFr-SellSl)/(iUpFr-iSellSl)
(UpFr-SellSl)/(iUpFr)

Zum Verkauf:
iDnFr
iDnFr-iBuySl
BuySl-DnFr
(BuySl-DnFr)/(iDnFr-iBuySl)
(BuySl-DnFr)/(iDnFr)


Verstehe ich das richtig, dass der nächste Schritt bei der Erstellung des neuronalen Netzes die Einführung von Variablen sein wird, die mit diesen Eigenschaften verglichen werden?

Und der Vergleich findet während der Optimierung statt?

Wenn ich falsch liege, welche weiteren praktischen Schritte muss ich unternehmen, um diesen EA, ein einfaches neuronales Netz, anzuschrauben?



 

Die Mathematik der neuronalen Netze ist nicht besonders kompliziert. Viel wichtiger für den Erfolg der Netzvorhersage ist die Wahl der Eingabeparameter. Hier stellt sich die Frage: Welche Indikatoren und ihre Parameter beschreiben den aktuellen Zustand des Marktes und seine Geschichte vollständig? Die Kenntnis einiger weniger vergangener Preise einer Währung reicht bei weitem nicht aus, um den künftigen Preis vorherzusagen, egal wie viele Schichten das Netz enthält. Aus diesem Grund müssen Sie entweder viele vergangene Preise oder Indikatoren aus verschiedenen Zeiträumen auswählen. Die überwiegende Mehrheit verwendet Indikatoren, da sie eine effizientere Art und Weise ermöglichen, die Position des letzten Preises zu vergangenen Preisen zu beschreiben. Vielleicht sollten wir die Diskussion auf die Auswahl der Eingabeparameter verlagern. Ich denke, dass die Korrelation der jüngsten Werte von Muves aus verschiedenen Zeiträumen ein guter Input für das Netzwerk sein kann. Wer hat eine andere Meinung? Können verschiedene Arten von Indikatoren, z. B. MACD, RSI, AC, Stoch usw., am Eingang desselben Netzes gemischt werden?

 
gpwr >> :

Können verschiedene Arten von Indikatoren, z. B. MACD, RSI, AC, Stoch usw., am Eingang desselben Netzes gemischt werden?

Ich denke, das kann man, solange die Indikatoren gute Markteinträge liefern. Danach stellt sich eine weitere schwierige Frage: Was sollen wir der Nettoleistung während des Trainings zuführen? Was wollen wir? Um ein Muster zu erkennen? Die Farbe der nächsten Kerze vorhersagen? Oder vielleicht nicht eine, sondern mehrere? Oder wollen wir vielleicht das Ausmaß der Bewegung vorhersagen? )))

Ich würde gerne die Antworten auf diese Fragen finden.

Vielleicht können mir die Praktiker sagen, worauf sie ihre Netze ausrichten? :))

 

Liebe Forumsmitglieder, das Thema dieses Threads sind Neuronale Netze, wie kann man sie beherrschen, wo soll man anfangen?

Nähern wir uns dem Thema....

 

Leute, es geht nicht um neuronale Netze - es geht um die Art und Weise, wie sie angewendet werden......

 
Andrey4-min писал(а) >>

Liebe Forumsmitglieder, das Thema dieses Threads sind Neuronale Netze, wie kann man sie beherrschen und wo soll man anfangen?

Nähern wir uns dem Thema....

Hier ist eine kurze Beschreibung von Vorwärtsnetzwerken, die ich manchmal zitiere, wenn ein ähnliches Thema auftaucht. Lassen Sie uns also ein einfaches Vorwärtsnetzwerk erstellen.

Schritt 1: Auswahl der Eingabedaten. Zum Beispiel,

x1 = WPR pro1

x2 = WPR Per2

x3 = WPR pro3

Schritt 2: Wählen Sie die Anzahl der Neuronen in der versteckten Schicht, zum Beispiel zwei Neuronen, y1 und y2. Wählen Sie die Anzahl der Neuronen in der Ausgabeschicht, zum Beispiel zwei Neuronen, z1 und z2. Wir haben also ein 3-2-2-Netz geschaffen. z1 und z2 sind unsere Ausgaben.

Schritt 3: Entscheidungslogik festlegen. Zum Beispiel z1>=u kaufen, z1<=-u verkaufen, z2<=-v schließen kaufen, z2>=v schließen verkaufen, wobei |u|<=1 und |v|<=1.

Schritt 4: Beschreiben Sie die versteckten Neuronen y1=F(x1,x2,x3) und y2=F(x1,x2,x3):

y1 = F(a0+a1*x1+a2*x2+a3*x3)

y2 = F(b0+b1*x1+b2*x2+b3*x3)

wobei F() eine nichtlineare Funktion ist. Zum Beispiel: F(x)=tanh(x)=(exp(x)-exp(-x))/(exp(x)+exp(-x)). Ich bevorzuge eine einfachere Funktion, um Fehler bei der Berechnung von exp() zu vermeiden:

F(x) = -1 wenn x<=-1, x wenn -1<x<1, 1 wenn x>=1.

Schritt 5: Beschreiben Sie die Ausgangsneuronen z1=F(y1,y2) und z2=F(y1,y2):

z1 = F(c0+c1*y1+c2*y2)

z2 = F(d0+d1*y1+d2*y2)

wobei F() die gleiche Neuronenaktivierungsfunktion ist.

Das Netz wurde also erstellt und beschrieben. Geben Sie die Perioden Per1, Per2 und Per3 für Williamps-Percent-Range (WPR) an und optimieren Sie über Metadrae-Teig a0, a1, a2, a3, b0, b1, b2, b3, c0, c1, c2, d0, d1, d2, -1<=u<=+1, -1<=v<=+1. Sie können auch Per1, Per2 und Per3 optimieren. Sie können mit verschiedenen Eingaben herumspielen. Versuchen Sie zum Beispiel anstelle des WPR den MACD oder einen anderen Indikator. Sie können es auf ein Ausgangsneuron für Eröffnungspositionen beschränken: z(y1,y2)>=u kaufen, z(y1,y2)<=-u verkaufen. Und schließen Sie mit Stop Loss, Trailing Stop oder Take Profit.

Sie können auch ein komplexeres Netz erstellen, bei dem jede Handelsentscheidung mit einem entsprechenden Ausgangsneuron verbunden ist. Mit denselben Eingabedaten und versteckten Neuronen erstellen wir beispielsweise 4 Ausgangsneuronen

z1(y1,y2)>u1 - offen lang

z2(y1,y2)>u2 - offen kurz

z3(y1,y2)>u3 - Schließen lang

z4(y1,y2)>u4 - kurz schließen

In diesem Fall erhöht sich die Anzahl der optimierten Koeffizienten erheblich. Normalerweise ist u1=u2=u3=u4=0,9.

Wenn Sie einen leistungsfähigen Computer haben, können Sie die Anzahl der versteckten Schichten und der Neuronen darin erhöhen.

 
Andrey4-min писал(а) >>

Liebe Forumsmitglieder, das Thema dieses Threads sind Neuronale Netze, wie kann man sie beherrschen und wo soll man anfangen?

Nähern wir uns dem Thema....

Sie müssen sich nicht die Mühe machen, neuronale Netze selbst zu programmieren, es gibt fertige Programme. Das einzige Programm, das ein Buch auf Russisch hat - Statistica Neural Networks, und dieses Buch vermittelt den Eindruck, dass es wirklich von Experten für neuronale Netze geschrieben wurde, und bietet eine ziemlich gute Einführung und Übersicht über neuronale Netzwerktechniken und bestehende Arten von neuronalen Netzen. Das Programm erlaubt es, trainierte Netze als dll zu exportieren, die in MT Expert Advisors verwendet werden können (habe es selbst noch nicht ausprobiert, tut mir leid, wenn ich falsch liege). Die spezialisierten Händlerprogramme mit Nicht-Netzen sind nicht so leicht an MT anzubinden, und wenn es möglich ist, sind sie krumm oder sehr teuer. Es gibt Broker-Terminals, die Daten in Metadateien exportieren, aber es ist nicht so einfach, spezielle Software für die Arbeit mit nicht wachsenden Netzen zu implementieren. Eh! Warum bieten die MT-Entwickler nicht die Möglichkeit, Daten zu exportieren, um andere Programme zur Finanzanalyse ohne unnötige Änderungen verwenden zu können?

 

Für den Anfang ist das beste Programm imho NeuroShell -2, es gibt eine russische Hotline und Beispiele auf Russisch. Außerdem können die neuronalen Netze von NS 2 problemlos mit den Expertenberatern und Indikatoren in MT4 verbunden werden.

Sie können hier lesen: http://www.fxreal.ru/forums/forums.php?forum=3

Grund der Beschwerde: