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

 
Maxim Dmitrievsky:

Weil Modelle immer noch mit großen Fehlern behaftet sind ^), brauchen wir Modelle, die länger funktionieren

zum Beispiel 2 Monate lernen und 1 Woche handeln

Sie mögen Recht haben, aber ich glaube nicht, dass solche Modelle jemals von RDF entdeckt werden, die auch nur einen ganzen Tag lang funktionieren, bis wir unbegrenzte Zufallskerzensimulationen ähnlich dem "ALPHA ZERO" Algo durchführen können.

Denn die Märkte ändern sich fast stündlich, und ein Modell wird furchtbar versagen, wenn plötzlich ein neues Ereignis eintritt oder der Markt sein Verhalten aus irgendeinem Grund ändert. Aber wenn wir Millionen von Kerzen-Simulationen durchgeführt haben, dann kann sich das System wahrscheinlich mit minimalem Verlust bei einer Marktänderung erholen und den Verlust danach schnell wieder aufholen. Das scheint möglich zu sein.

Ich werde sowohl Ihre Methode der Modellauswahl als auch meine Methode der Kerzensimulation ausprobieren, um zu sehen, wie alles läuft:))

Übrigens, ich habe es mit 1 Tag Training, 5 Tagen Training usw. versucht und es hat am nächsten Tag nicht geklappt:))))))))))))))))

Es kann also sein, dass ein Modell nicht funktioniert... obwohl ich vielleicht falsch liege...

 

Außerdem habe ich noch eine Bitte Maxim...

Wenn Sie Ihren Artikel veröffentlichen, versuchen Sie bitte, den Code so weit wie möglich zu kommentieren, damit er für andere schnell und einfach zu verstehen ist und wir schneller vorankommen können...

Wenn ich sonst viel Zeit brauche, um den Code zu verstehen, dann dauert es noch länger, ihn zu ändern.

Ich bitte Sie daher, so viele Kommentare und Erklärungen zum Code wie möglich hinzuzufügen. Ich werde erst einmal versuchen, es schnell zu verstehen und Sie fragen, wenn ich etwas nicht verstehe:))

 
FxTrader562:

Außerdem habe ich noch eine Bitte Maxim...

Wenn Sie Ihren Artikel veröffentlichen, versuchen Sie bitte, den Code so weit wie möglich zu kommentieren, damit er für andere schnell und einfach zu verstehen ist und wir schneller vorankommen können...

Wenn ich sonst zu lange brauche, um den Code zu verstehen, dann dauert es noch länger, ihn zu ändern.

Ich bitte Sie daher, so viele Kommentare und Erklärungen zum Code wie möglich hinzuzufügen. Ich werde erst einmal versuchen, es schnell zu verstehen und Sie fragen, wenn ich etwas nicht verstehe:))

Ok, jetzt ändere ich halt ständig viele Dinge und es macht keinen Sinn, das zu kommentieren

Sie können auch darüber nachdenken, wie Sie die Ausgaben ändern können... vielleicht Zickzack mit verschiedenen Einstellungen anstelle der Belohnungsfunktion oder etwas anderes verwenden
 
Maxim Dmitrievsky:

Ok, jetzt ändere ich halt ständig viele Dinge und es macht keinen Sinn, das zu kommentieren

Sie können auch darüber nachdenken, wie Sie die Ausgaben ändern können... vielleicht Zickzack mit verschiedenen Einstellungen anstelle der Belohnungsfunktion oder etwas anderes verwenden

Ich habe mir nur einen kurzen Überblick über den Code verschafft. Aber bis jetzt habe ich nicht herausgefunden, wo genau die Indikatoren sind oder wie sie die Handelseinträge bestimmen. Ich bin mir also nicht sicher, was ich mit der Ausgabe machen soll. Sie meinen die Ausgabe mit GDMH?

Ich habe gerade den Test mit verschiedenen Einstellungen durchgeführt, aber es scheint völlig zufällige Trades zu platzieren.

Außerdem werden in der Testphase die "Mtrees"-Textdateien nicht erstellt, richtig?

Ich meine, der Code, den Sie zur Verfügung gestellt haben, ist nicht vollständig, oder? Oder ist es in der Lage, Trades zu platzieren, wenn es ohne Optimierung direkt mit dem Chart verbunden ist.

 
FxTrader562:

Ich habe mir nur einen kurzen Überblick über den Code verschafft. Aber bis jetzt habe ich nicht herausgefunden, wo genau die Indikatoren sind oder wie sie die Handelseinträge bestimmen. Ich bin mir also nicht sicher, was ich mit der Ausgabe machen soll.

Ich habe gerade den Test mit verschiedenen Einstellungen durchgeführt, aber es scheint völlig zufällige Trades zu platzieren, da es einige seltsame Verhaltensweisen zeigte und daher habe ich gerade meinen Server neu gestartet. Hat das irgendetwas mit dem echten Kernel des VPS zu tun?

Außerdem werden in der Testphase keine "Mtrees"-Textdateien erstellt, richtig?

Bei der ersten Ausführung im Testgerät wählen Sie "true".

Er wird nach dem Zufallsprinzip handeln und dann lernen und die Modelle retten.

2. Lauf wählen Sie falsch. Das war's. Und er lädt Modelle hoch und wird sie eintauschen +.

Als nächstes können Sie in EA Agenten hinzufügen, jetzt haben Sie 5 Agenten, 100 Merkmale für jeden Agenten, 50 Bäume

CRLAgents *ag1=new CRLAgents("RlExp1iter",5,100,50,regularize,learn);

In dieser Funktion fügen wir für jeden Agenten 100 Schlusskurse hinzu (100 Prädiktoren). Und dann die Daten normalisieren. Sie können verschiedene Indikatoren hinzufügen, z. B. die ersten 50 Merkmale - Schlusskurse, die nächsten 25 rsi, die nächsten 25 adx, oder die Anzahl der Prädiktoren ändern, wenn Sie den Agenten erklären

void calcSignal()
  {
   sig1=0;
       
   for(int i=0;i<ArraySize(ag1.agent);i++) - the agents are stored in "ag1.agent" array. We have 5 agents, so array size is 5
     {   
      CopyClose(_Symbol,0,0,100,ag1.agent[i].inpVector); - for each agent from array (now we have 5 agents) fill predictors (100 close prices). For each feature we fill a single value
      normalizeArrays(ag1.agent[i].inpVector);
     }
   sig1=ag1.getTradeSignal(); this function return averaged signal for all agents
  }

Nach jedem Geschäft aktualisiert er die Richtlinien, wenn das Geschäft abgeschlossen ist - aktualisiert er die Belohnung (TD, zeitliche Differenz RL)

void placeOrders()
  {
   if(countOrders(0)!=0 || countOrders(1)!=0)
     {
      for(int b=OrdersTotal()-1; b>=0; b--)
         if(OrderSelect(b,SELECT_BY_POS)==true)
            switch(OrderType())
              {
               case OP_BUY:
                  if(sig1>0.5)
                  if(OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Red))
                     ag1.updateRewards();

                  break;

               case OP_SELL:
                  if(sig1<0.5)
                  if(OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),0,Red))
                     ag1.updateRewards();

                  break;
              }
      return;
     }

   if(sig1<0.5 && (OrderSend(Symbol(),OP_BUY,lotsOptimized(),SymbolInfoDouble(_Symbol,SYMBOL_ASK),0,0,0,NULL,OrderMagic,INT_MIN)>0))
     {
      ag1.updatePolicies(sig1);
     }

   else if(sig1>0.5 && (OrderSend(Symbol(),OP_SELL,lotsOptimized(),SymbolInfoDouble(_Symbol,SYMBOL_BID),0,0,0,NULL,OrderMagic,INT_MIN)>0))
     {
      ag1.updatePolicies(sig1);
     }

Wirklich einfache Bibliotheksnutzung

Im Zugmodus zeigt er Ihnen Protokolle mit Fehlern für jede Iteration

2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 40 passed with errors: 0.2422178988326848  0.5097276264591439
2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 41 passed with errors: 0.2295719844357977  0.4824902723735409
2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 42 passed with errors: 0.2558365758754864  0.4961089494163424
2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 43 passed with errors: 0.2422178988326848  0.4863813229571984
2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 44 passed with errors: 0.2422178988326848  0.4766536964980545
2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 45 passed with errors: 0.245136186770428  0.5379377431906615
2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 46 passed with errors: 0.2587548638132296  0.4912451361867704
2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 47 passed with errors: 0.2480544747081712  0.4776264591439689
2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 48 passed with errors: 0.2636186770428016  0.5009727626459144
2018.09.16 01:33:27.319 2018.09.13 23:59:59   Agent 5 Model 49 passed with errors: 0.2616731517509728  0.490272373540856

Im Handelsmodus des Testers werden für jeden Agenten die endgültigen Fehler in der Zug- und Testuntergruppe angezeigt.

2018.09.16 01:34:18.107 2018.09.13 23:59:59   RlExp1iter TRAIN LOGLOSS
2018.09.16 01:34:18.107 2018.09.13 23:59:59   0.23249 0.22763 0.24222 0.24125 0.24416
2018.09.16 01:34:18.107 2018.09.13 23:59:59   RlExp1iter OOB LOGLOSS
2018.09.16 01:34:18.107 2018.09.13 23:59:59   0.46790 0.46887 0.46498 0.46790 0.47471

Ergebnis für 100 Schlusskurse:


 
Maxim Dmitrievsky:

Bei der ersten Ausführung im Testgerät wählen Sie "true".

Er wird nach dem Zufallsprinzip handeln und dann lernen und die Modelle retten.

Der 2. Lauf wählt falsch. Das war's. Und er lädt Modelle hoch und wird sie eintauschen +

Als nächstes können Sie in EA Agenten hinzufügen, jetzt haben Sie 5 Agenten, 100 Merkmale für jeden Agenten, 50 Bäume

In dieser Funktion fügen wir für jeden Agenten 100 Schlusskurse hinzu (100 Prädiktoren). Und dann die Daten normalisieren. Sie können verschiedene Indikatoren hinzufügen, z. B. die ersten 50 Merkmale - Schlusskurse, die nächsten 25 rsi, die nächsten 25 adx, oder die Anzahl der Prädiktoren ändern, wenn Sie den Agenten erklären

Nach jedem Geschäft aktualisiert er die Richtlinien, wenn das Geschäft abgeschlossen ist - aktualisiert er die Belohnung (TD, zeitliche Differenz RL)

Wirklich einfache Nutzung der Bibliothek

Ja, das scheint sehr einfach und gleichzeitig robust zu sein...lass uns experimentieren und sehen...Toller Job!!!!!

Wo liegt also der Nutzen der GDMH?

Ich habe daran gedacht, meinen GDMH-Code zu schreiben. Sie können mir einfach den Code zeigen, in dem die RDF-Eingabe und -Ausgabe stattfindet oder wo genau Sie versuchen, GDMH zu implementieren, damit ich versuche, meinen Code zu schreiben, und dann können wir die Ergebnisse Ihres und meines Codes vergleichen und auswerten.

 
FxTrader562:

Ja, das scheint sehr einfach und gleichzeitig robust zu sein...lasst uns experimentieren und sehen...Toller Job!!!!!

Wo liegt also der Nutzen der GDMH?

Ich habe daran gedacht, meinen GDMH-Code zu schreiben. Sie können mir einfach den Code zeigen, in dem die RDF-Eingabe und -Ausgabe stattfindet oder wo genau Sie versuchen, GDMH zu implementieren, damit ich versuchen kann, meinen Code zu schreiben, und dann können wir die Ergebnisse Ihres und meines Codes vergleichen und auswerten.

Hier verwende ich den einfachen Kernel CRLAgent::kernelizedMatrix(void) (in der Bibliothek), daher muss diese Funktion für gdmh geändert werden

 
Maxim Dmitrievsky:

Hier verwende ich den einfachen Kernel CRLAgent::kernelizedMatrix(void) (in der Bibliothek), daher muss diese Funktion für gdmh geändert werden

Ok, mal sehen, ob ich meinen eigenen Code schreiben kann....

Wenn es nur um die GDMH-Logik geht, dann kann ich leicht übersetzen oder konvertieren die GDMH algo in MQL5-Code, aber wenn es mit einigen anderen Kernel-Funktionen oder Bibliotheken zu tun hat, dann brauche ich Zeit zu studieren und konvertieren...

 
FxTrader562:

Ein weiteres Merkmal: Sie können jeden Agenten im Ausschuss konfigurieren

CRLAgents *ag1=new CRLAgents("RlExp1iter",5,100,50,regularize,learn);
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   ag1.setAgentSettings(0,100,50,0.1); for each agent you can set number of features, number of trees and r setting, individually
   ag1.setAgentSettings(1,50,50,0.2);
   ag1.setAgentSettings(2,30,50,0.05);
   ag1.setAgentSettings(3,20,50,0.1);
   ag1.setAgentSettings(4,10,50,0.05);
//---
   return(INIT_SUCCEEDED);
  }

Beim Ausfüllen der Prädiktoren ändern sich die Werte einfach hier:

void calcSignal()
  {
   sig1=0;
       
   for(int i=0;i<ArraySize(ag1.agent);i++)
     {   
      CopyClose(_Symbol,0,0,ArraySize(ag1.agent[i].inpVector),ag1.agent[i].inpVector);
      Print(ArraySize(ag1.agent[i].inpVector));
      normalizeArrays(ag1.agent[i].inpVector);
     }
   sig1=ag1.getTradeSignal();
  }

Sie können auch verschiedene Gruppen von Agenten hinzufügen

CRLAgents *ag1=new CRLAgents("RlExp1iter1",5,100,50,regularize,learn);
CRLAgents *ag2=new CRLAgents("RlExp1iter2",1,20,50,regularize,learn);
CRLAgents *ag3=new CRLAgents("RlExp1iter3",18,5,50,regularize,learn);

 
FxTrader562:

Ok, mal sehen, ob ich meinen eigenen Code schreiben kann....

wenn es nur um die GDMH-Logik geht, dann kann ich leicht übersetzen oder konvertieren die GDMH Algo in MQL5-Code, aber wenn es mit einigen anderen Kernel-Funktionen oder Bibliotheken zu tun hat, dann brauche ich Zeit zu studieren und konvertieren ...

Wenn Sie nur gmdh Logik konvertieren können - es wird sehr hilfreich sein, dann kann ich es für meine Bibliothek ändern