À la recherche du "Graal" sacré...

 

Bonjour... ou nuit, tout le monde. Je travaille sur une EA maniaque ici. Je ne vais pas encore le poster, il n'est pas encore terminé, mais je le posterai certainement... GRATUITEMENT. J'ai juste besoin d'aide. Question namba van - comment faire l'auto-optimisation ... disons 8-16 napametrov ? Article sur l'auto-optimisation, qui domine sur le site ... pas qu'il ne fonctionne pas ... il y a jusqu'à 4 paramètres qui peuvent être mis sur l'optimum, et comment dodgy tout fonctionne. En général, peut-être quelqu'un va inciter Chago de leurs propres développements ? MA CHÈRE KIM, CELA VAUDRAIT LA PEINE DE SE RÉFÉRER À VOUS EN PARTICULIER. Si j'ai une bonne idée, je peux essayer d'en dessiner sur le marché, mais je n'en ai pas de bonne. Parfois il surcharge, parfois il ralentit, parfois il ne montre rien d'intéressant. Je ne dis pas "donnez-moi un indicateur subomega et je vais changer le monde". L'essence de ma stratégie dans l'Expert Advisor est le rapport en pourcentage d'un signal de groupe de 8 indicateurs et d'un signal peu filtré. J'ai donc des indicateurs de collecte standard et je veux expérimenter avec des indicateurs individuels. En général, c'est peut-être l'esprit collectif qui l'emportera.

 
Soyons précis. Quoi, comme on dit, camarade cherchez la (ou le, ou au moins les) ? Des indicateurs ? Quel genre ? Il y en a beaucoup. D'autant plus que leur nature est très variée.
 
Soyons précis. J'ai d'abord pris le stochastique - c'est le plus rapide, puis je l'ai dilué avec un filtre d'Osma... et ensuite j'ai eu HighLow, Aligator, Mashki, CCI. C'est ce que j'en ai retiré... Mais en convertissant tous les signaux en pourcentages, certains sont ignorés. Il est clair que vous devez établir des priorités en fonction de l'optimisation. Mais il est possible d'aller dans une autre direction - ajouter un indicateur plus ou moins adéquat (ou un couple d'indicateurs) aux indicateurs existants avec une sortie de signal 0 et 1. A ce stade, j'ai un drawdown de quelques pourcents avec un payoff attendu de 1.85 et 50 positions par jour. Très bien à mon avis. Mais voilà le problème - il y a un moment ou, pour être plus exact, généralement ces deux moments par jour (d'ailleurs, n'importe quel jour dans l'histoire) où le conseiller expert se trompe lourdement. Je voulais donc filtrer ces moments autant que possible. Peut-être que j'ai un Zig-Zag qui ne tirerait pas trop et qui fonctionnerait plus vite. Je pense que c'est quelque chose que j'ai vu une fois quelque part ... mais hélas je n'y ai pas attaché d'importance alors, et maintenant je ne peux pas trouver. Ou en voici un autre - Extrapolateur... ce serait SUPER... mais ce truc redessine... comment faire ?
 
     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;}

Et calculez...

   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");}
 
C'est le format dont l'indicateur a besoin... Oui, n'oubliez pas l'auto-optimisation d'une douzaine de paramètres... Un problème également...
 

Tout d'abord, il est nécessaire de formaliser aussi clairement que possible les conditions de marché dans lesquelles il est "difficile" de faire des erreurs. En outre, il est important d'exclure les indicateurs répétitifs - les mêmes essuie-glaces et l'alligator, qui est l'essence même des essuie-glaces.

En même temps, vous devriez d'abord exécuter l'auto-optimisation sur quelque chose de plus simple. Le fait est que l'optimisation, et avec elle l'auto-optimisation, est un phénomène plutôt controversé et nécessite le plus souvent un contrôle de "vie". De même, l'optimisation sur 10 paramètres pour aligner l'historique des tests est un ajustement en quelque sorte. Je pense que vous devriez d'abord vous occuper de ces indicateurs, afin que le système puisse entrer facilement sans aide extérieure, et surtout, qu'il fasse des bénéfices.

Ceci est bien sûr IMHO - votre graal, et tout en général devrait avoir un stop et take (le cas échéant), ou juste une sortie formalisée, basée sur ses principes internes de trading, plutôt qu'une simple (ou la même GA) sélection sur l'historique.

Raison: