Auf der Suche nach dem heiligen "Gral"...

 

Guten Tag... oder Nacht, allerseits. Ich arbeite hier an einem wahnsinnigen EA. Ich werde es noch nicht veröffentlichen, es ist einfach noch nicht fertig, aber ich werde es sicher veröffentlichen...kostenlos. Ich brauche einfach Hilfe. Frage nemba van - wie man Auto-Optimierung zu machen ... sagen 8-16 napametrov? Artikel über die Auto-Optimierung, die groß auf der Website looms ... nicht, dass nicht funktioniert ... es bis 4 Parameter können auf die optimale gesetzt werden, und wie zweifelhaft alles funktioniert. Im Allgemeinen, vielleicht wird jemand aufgefordert, Chago von ihren eigenen Entwicklungen? MEIN LIEBER KIM, ES LOHNT SICH, SICH SPEZIELL AN SIE ZU WENDEN. Wenn ich eine gute Idee habe, werde ich vielleicht versuchen, einige von ihnen auf dem Markt zu zeichnen, aber ich habe keine guten Ideen. Manchmal überzeichnet sie, manchmal verlangsamt sie sich, manchmal zeigt sie nichts Sinnvolles. Ich sage nicht: "Gebt mir einen Subomega-Indikator und ich werde die Welt verändern". Die Essenz meiner Strategie im Expert Advisor ist das prozentuale Verhältnis eines Gruppensignals von 8 Indikatoren und eines wenig gefilterten. Ich habe also Indikatoren für die Standardsammlung und möchte mit individuellen Indikatoren experimentieren. Im Allgemeinen wird vielleicht der kollektive Verstand gewinnen.

 
Lassen Sie uns konkret werden. Was, wie man sagt, Genosse cherchez la (oder le, oder zumindest les) ? Indikatoren? Welche Art von Indikatoren - es gibt viele davon. Dies gilt umso mehr, als ihre Natur sehr vielfältig ist.
 
Lassen Sie uns konkret werden. Zu Beginn habe ich Stochastic genommen - es ist das schnellste, dann habe ich es mit einem Filter von Osma verdünnt... und dann hatte ich HyLow, Aligator, Mashki, CCI. Das ist es, was ich aus ihnen herausbekommen habe... Aber wenn man alle Signale in Prozentsätze umrechnet, werden einige ignoriert. Es ist klar, dass man die Prioritäten auf der Grundlage der Optimierung setzen muss. Wir können aber auch einen anderen Weg einschlagen, indem wir zu den vorhandenen Indikatoren mit 0- und 1-Signalausgang einen mehr oder weniger geeigneten Indikator (oder mehrere) hinzufügen. In diesem Stadium habe ich einen Drawdown von ein paar Prozenten mit 1,85 erwarteten Auszahlung und 50 Positionen pro Tag. Meiner Meinung nach ziemlich gut. Aber hier ist das Problem - es gibt einen Moment oder, um genauer zu sein, in der Regel diese zwei Momente pro Tag (darüber hinaus, jeden Tag in der Geschichte), wenn der Expert Advisor ist schwer falsch. Deshalb wollte ich diese Momente so gut wie möglich filtern. Vielleicht habe ich einen Zig-Zag, der nicht überzeichnet und schneller arbeiten würde. Ich glaube, das ist etwas, das ich einmal irgendwo gesehen habe ... aber leider habe ich damals keinen Wert darauf gelegt, und jetzt kann ich es nicht finden. Oder hier ist eine andere - Extrapolator...wäre toll...aber dieses Ding zeichnet neu...wie mache ich das?
 
     StH11v=iStochastic(NULL, TF1, stK, stP, stD,MODE_SMA,0,MODE_MAIN,0);   StH1pr1v=iStochastic(NULL, TF1, stK, stP, stD,MODE_SMA,0,MODE_SIGNAL,0);
     StH41v=iStochastic(NULL, TF2, stK, stP, stD,MODE_SMA,0,MODE_MAIN,0);   StH4pr1v=iStochastic(NULL, TF2, stK, stP, stD,MODE_SMA,0,MODE_SIGNAL,0);
     StD11v=iStochastic(NULL, TF3, stK, stP, stD,MODE_SMA,0,MODE_MAIN,0);   StD1pr1v=iStochastic(NULL, TF3, stK, stP, stD,MODE_SMA,0,MODE_SIGNAL,0);
     
     if ( StH11v<25 && StH1pr1v<25 && StH11v> StH1pr1v){ Stx1TF1x= S; Stx1TF1y=0;}
     if ( StH11v>75 && StH1pr1v>75 && StH11v< StH1pr1v){ Stx1TF1y= S; Stx1TF1x=0;}
     if ( StH41v<25 && StH4pr1v<25 && StH41v> StH4pr1v){ Stx1TF2x= S; Stx1TF2y=0;}
     if ( StH41v>75 && StH4pr1v>75 && StH41v< StH4pr1v){ Stx1TF2y= S; Stx1TF2x=0;}
     if ( StD11v<25 && StD1pr1v<25 && StD11v> StD1pr1v){ Stx1TF3x= S; Stx1TF3y=0;}
     if ( StD11v>75 && StD1pr1v>75 && StD11v< StD1pr1v){ Stx1TF3y= S; Stx1TF3x=0;}
                                                                             
     if ( StH11v>25 && StH1pr1v>25 && StH11v> StH1pr1v){ Stx1TF1x=0; Stx1TF1y=0;}
     if ( StH11v<75 && StH1pr1v<75 && StH11v< StH1pr1v){ Stx1TF1y=0; Stx1TF1x=0;}
     if ( StH41v>25 && StH4pr1v>25 && StH41v> StH4pr1v){ Stx1TF2x=0; Stx1TF2y=0;}
     if ( StH41v<75 && StH4pr1v<75 && StH41v< StH4pr1v){ Stx1TF2y=0; Stx1TF2x=0;}
     if ( StD11v>25 && StD1pr1v>25 && StD11v> StD1pr1v){ Stx1TF3x=0; Stx1TF3y=0;}
     if ( StD11v<75 && StD1pr1v<75 && StD11v< StD1pr1v){ Stx1TF3y=0; Stx1TF3x=0;}
 
     OSH1=iOsMA(NULL, TF1, W, H, C,PRICE_CLOSE,0);
     OSH4=iOsMA(NULL, TF2, W, H, C,PRICE_CLOSE,0);
     OSD1=iOsMA(NULL, TF3, W, H, C,PRICE_CLOSE,0);
          
     if ( OSH1<- OS){ OSTF1x= O; OSTF1y=0;}
     if ( OSH1> OS) { OSTF1x=0; OSTF1y= O;}
     if ( OSH4<- OS){ OSTF2x= O; OSTF2y=0;}
     if ( OSH4> OS) { OSTF2x=0; OSTF2y= O;}
     if ( OSD1<- OS){ OSTF3x= O; OSTF3y=0;}
     if ( OSD1> OS) { OSTF3x=0; OSTF3y= O;}
 
   double sigyH1=iLowest (NULL, TF1,MODE_CLOSE,3,0);
   double sigyH4=iLowest (NULL, TF2,MODE_CLOSE,3,0);
   double sigyD1=iLowest (NULL, TF2,MODE_CLOSE,3,0);
   double sigxH1=iHighest(NULL, TF1,MODE_CLOSE,3,0);
   double sigxH4=iHighest(NULL, TF2,MODE_CLOSE,3,0);
   double sigxD1=iHighest(NULL, TF3,MODE_CLOSE,3,0);

   if ( sigyH1==1){ SigYTF1= I; SigXTF1=0;}
   if ( sigyH4==1){ SigYTF2= I; SigXTF2=0;}
   if ( sigyD1==1){ SigYTF3= I; SigXTF3=0;}
   if ( sigxH1==1){ SigYTF1=0; SigXTF1= I;}
   if ( sigxH4==1){ SigYTF2=0; SigXTF2= I;}
   if ( sigxD1==1){ SigYTF3=0; SigXTF3= I;}
 
   double Gator1H1=iAlligator(NULL, TF1,13,8,8,5,5,3,MODE_SMMA,PRICE_WEIGHTED, MODE_GATORJAW,0);
   double Gator1H4=iAlligator(NULL, TF2,13,8,8,5,5,3,MODE_SMMA,PRICE_WEIGHTED, MODE_GATORJAW,0);
   double Gator1D1=iAlligator(NULL, TF3,13,8,8,5,5,3,MODE_SMMA,PRICE_WEIGHTED, MODE_GATORJAW,0);
   
   double Gator2H1=iAlligator(NULL, TF1,13,8,8,5,5,3,MODE_SMMA,PRICE_WEIGHTED, MODE_GATORTEETH,0);
   double Gator2H4=iAlligator(NULL, TF2,13,8,8,5,5,3,MODE_SMMA,PRICE_WEIGHTED, MODE_GATORTEETH,0);
   double Gator2D1=iAlligator(NULL, TF3,13,8,8,5,5,3,MODE_SMMA,PRICE_WEIGHTED, MODE_GATORTEETH,0);
   
   double Gator3H1=iAlligator(NULL, TF1,13,8,8,5,5,3,MODE_SMMA,PRICE_WEIGHTED, MODE_GATORLIPS,0);
   double Gator3H4=iAlligator(NULL, TF2,13,8,8,5,5,3,MODE_SMMA,PRICE_WEIGHTED, MODE_GATORLIPS,0);
   double Gator3D1=iAlligator(NULL, TF3,13,8,8,5,5,3,MODE_SMMA,PRICE_WEIGHTED, MODE_GATORLIPS,0);
    
     if ( Gator3H1> Gator1H1+ shirina){ GatorX1= G; GatorY1=0;}                
     if ( Gator3H4> Gator1H4+ shirina){ GatorX2= G; GatorY2=0;}
     if ( Gator3D1> Gator1D1+ shirina){ GatorX3= G; GatorY3=0;}
         
     if ( Gator1H1> Gator3H1+ shirina){ GatorX1=0; GatorY1= G;} 
     if ( Gator1H4> Gator3H4+ shirina){ GatorX2=0; GatorY2= G;}
     if ( Gator1D1> Gator3D1+ shirina){ GatorX3=0; GatorY3= G;} 
 
   double MACD1H1=iMACD(NULL, TF1, F_EMA, S_EMA, SMA,PRICE_WEIGHTED,MODE_MAIN,0);
   double MACD1H4=iMACD(NULL, TF2, F_EMA, S_EMA, SMA,PRICE_WEIGHTED,MODE_MAIN,0);
   double MACD1D1=iMACD(NULL, TF3, F_EMA, S_EMA, SMA,PRICE_WEIGHTED,MODE_MAIN,0);
  
   double MACD2H1=iMACD(NULL, TF1, F_EMA, S_EMA, SMA,PRICE_WEIGHTED,MODE_SIGNAL,0);
   double MACD2H4=iMACD(NULL, TF2, F_EMA, S_EMA, SMA,PRICE_WEIGHTED,MODE_SIGNAL,0);
   double MACD2D1=iMACD(NULL, TF3, F_EMA, S_EMA, SMA,PRICE_WEIGHTED,MODE_SIGNAL,0);
  
   double MACD3H1=iMACD(NULL, TF1, S_EMA*2, F_EMA*2, SMA*2,PRICE_WEIGHTED,MODE_MAIN,0);
   double MACD3H4=iMACD(NULL, TF2, S_EMA*2, F_EMA*2, SMA*2,PRICE_WEIGHTED,MODE_MAIN,0);
   double MACD3D1=iMACD(NULL, TF3, S_EMA*2, F_EMA*2, SMA*2,PRICE_WEIGHTED,MODE_MAIN,0);
   
   double MACD4H1=iMACD(NULL, TF1, S_EMA*2, F_EMA*2, SMA*2,PRICE_WEIGHTED,MODE_SIGNAL,0);
   double MACD4H4=iMACD(NULL, TF2, S_EMA*2, F_EMA*2, SMA*2,PRICE_WEIGHTED,MODE_SIGNAL,0);
   double MACD4D1=iMACD(NULL, TF3, S_EMA*2, F_EMA*2, SMA*2,PRICE_WEIGHTED,MODE_SIGNAL,0);
   
     if(( MACD1H1< MACD2H1)&&( MACD2H1>0)&&( MACD3H1< MACD4H1)&&( MACD4H1>0)){ MACDy1= M; MACDx1=0;}
     if(( MACD1H4< MACD2H4)&&( MACD2H4>0)&&( MACD3H4< MACD4H4)&&( MACD4H4>0)){ MACDy2= M; MACDx2=0;}
     if(( MACD1D1< MACD2D1)&&( MACD2D1>0)&&( MACD3D1< MACD4D1)&&( MACD4D1>0)){ MACDy3= M; MACDx3=0;}
      
     if(( MACD1H1> MACD2H1)&&( MACD2H1<0)&&( MACD3H1> MACD4H1)&&( MACD4H1<0)){ MACDy1=0; MACDx1= M;}
     if(( MACD1H4> MACD2H4)&&( MACD2H4<0)&&( MACD3H4> MACD4H4)&&( MACD4H4<0)){ MACDy2=0; MACDx2= M;}
     if(( MACD1D1> MACD2D1)&&( MACD2D1<0)&&( MACD3D1> MACD4D1)&&( MACD4D1<0)){ MACDy3=0; MACDx3= M;}
 
   double CCIH1=iCCI(NULL, TF1, CCI,PRICE_CLOSE,0);
   double CCIH4=iCCI(NULL, TF1, CCI,PRICE_CLOSE,0);
   double CCID1=iCCI(NULL, TF1, CCI,PRICE_CLOSE,0);
     
     if( CCIH1>120){ CCIx1= CC; CCIy1=0;}
     if( CCIH4>120){ CCIx2= CC; CCIy2=0;}
     if( CCID1>120){ CCIx3= CC; CCIy3=0;}
     
     if( CCIH1<-120){ CCIx1=0; CCIy1= CC;}
     if( CCIH4<-120){ CCIx2=0; CCIy2= CC;}
     if( CCID1<-120){ CCIx3=0; CCIy3= CC;}

Und berechnen...

   double resultz1 = ( Stx1TF1x + Stx1TF2x + Stx1TF3x + OSTF1x + OSTF2x + OSTF3x + SigXTF1 + SigXTF2 + SigXTF3 + GatorX1 + GatorX2 + GatorX3 + MACDx1 + MACDx2 + MACDx3 + CCIx1 + CCIx2 + CCIx3) * 5.5555555555555555555555555555556;

   double resultz2 = ( Stx1TF1y + Stx1TF2y + Stx1TF3y + OSTF1y + OSTF2y + OSTF3y + SigYTF1 + SigYTF2 + SigYTF3 + GatorY1 + GatorY2 + GatorY3 + MACDy1 + MACDy2 + MACDy3 + CCIy1 + CCIy2 + CCIy3) * 5.5555555555555555555555555555556;

     if ( resultz1< Skill && resultz2< Skill) { Signal=0; Comment("КУРИМ");}

     if ( resultz1> Skill)  { Signal=1; Comment("Неплохо бы BUY");}
     if ( resultz2> Skill)  { Signal=-1;Comment("Неплохо бы SELL");}
     
     if ( resultz1> SkillMAX)  { Signal=2; Comment("АФИГЕННО BUY");}
     if ( resultz1> SkillMAX)  { Signal=-2; Comment("ФАИГЕННО SELL");}
 
Dies ist das Format, das der Indikator benötigt... Ja, vergessen Sie nicht die automatische Optimierung von einem Dutzend Parameter... Auch ein Problem...
 

Zunächst einmal müssen die Marktbedingungen, unter denen es "schwer" ist, Fehler zu machen, so klar wie möglich formuliert werden. Darüber hinaus ist es wichtig, sich wiederholende Indikatoren auszuschließen - die gleichen Scheibenwischer und der Alligator, der das Wesen der Scheibenwischer ist.

Gleichzeitig sollten Sie die Auto-Optimierung zunächst auf einer einfacheren Ebene durchführen. Tatsache ist, dass die Optimierung und damit auch die Auto-Optimierung ein recht umstrittenes Phänomen ist und in den meisten Fällen einen "Life"-Check erfordert. Auch die Optimierung auf 10 Parameter zur Angleichung der Testhistorie ist in gewisser Weise eine Anpassung. Ich denke, Sie sollten sich zunächst mit diesen Indikatoren, so dass das System leicht eingeben könnte, ohne externe Hilfe, und vor allem, es Gewinne.

Dies ist natürlich IMHO - Ihr Gral, und jeder im Allgemeinen sollte ein Stop und nehmen (wenn überhaupt), oder einfach nur eine formalisierte Ausfahrt, basierend auf seiner internen Handel Prinzipien, anstatt eine einfache (oder die gleiche GA) Auswahl auf der Geschichte.