Em busca do sagrado 'graal'...

 

Boa tarde...ou noite, a todos. Estou trabalhando em uma EA maníaca aqui. Não vou postar ainda, só que ainda não está terminado, mas vou postar com certeza...de graça. Eu só preciso de ajuda. Pergunta namba van - como fazer otimização automática ... digamos 8-16 napametrov? Artigo sobre a auto-optimização, que é grande no site ... não que não funcione ... aí podem ser colocados 4 parâmetros no ótimo, e como tudo funciona. Em geral, talvez alguém irá provocar Chago de seus próprios desenvolvimentos? MINHA QUERIDA KIM, VALERIA A PENA REFERIR-SE A VOCÊ EM PARTICULAR. Se eu tiver uma boa idéia, posso tentar desenhar algumas delas no mercado, mas não tenho nenhuma boa. Às vezes, ele se sobrepuja, às vezes se abranda, às vezes não mostra nada que valha a pena. Não estou dizendo "me dê um indicador de subomega e eu mudarei o mundo". A essência da minha estratégia no Expert Advisor é a relação percentual de um sinal de grupo de 8 indicadores e um pequeno sinal filtrado. Portanto, tenho indicadores de coleta padrão e quero experimentar com indicadores individuais. Em geral, talvez a mente coletiva vença.

 
Vamos ser específicos. O que, como dizem, o camarada cherchez la (ou le, ou pelo menos les) ? Indicadores? de que tipo - há muitos deles. Tanto mais que sua natureza é muito variada.
 
Vamos ser específicos. Para começar, tomei Stochastic - é o mais rápido, depois diluí-o com um filtro de Osma... e depois tive HyLow, Aligator, Mashki, CCI. Foi o que obtive deles... Mas ao converter todos os sinais em porcentagens, alguns são ignorados. Claramente, você tem que priorizar com base na otimização. Mas podemos seguir outro caminho - adicionar um indicador mais ou menos adequado (ou alguns indicadores) aos já existentes com saída de sinal 0 e 1. Nesta fase, tenho um drawdown de alguns por cento com 1,85 de pagamento esperado e 50 posições por dia. Muito bom, na minha opinião. Mas aqui está o problema - há um momento ou, para ser mais exato, geralmente estes dois momentos por dia (além do mais, qualquer dia da história) em que o Expert Advisor está gravemente equivocado. Portanto, eu queria filtrar esses momentos o máximo possível. Talvez, eu tenha um Zig-Zag que não exagere e trabalhe mais rápido. Acho que isso é algo que eu já vi em algum lugar... mas, infelizmente, não dei importância a isso naquela época, e agora não consigo encontrar. Ou aqui está outro - Extrapolador...seria GRANDE...mas esta coisa ruge...como eu faço isso?
 
     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;}

E calcular...

   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");}
 
Este é o formato que o indicador precisa... Sim, não se esqueça da auto-optimização de uma dúzia de parâmetros... Também um problema...
 

Antes de mais nada, é necessário formalizar o mais claramente possível as condições de mercado sob as quais é "difícil" cometer erros. Além disso, é importante excluir os indicadores repetitivos - os mesmos limpadores e o jacaré, que é a essência dos limpadores.

Ao mesmo tempo, você deve inicialmente executar a auto-optimização em algo mais simples. O fato é que a otimização, e com ela a auto-optimização, é um fenômeno bastante controverso e, na maioria das vezes, requer um controle de "vida". Além disso, a otimização em 10 parâmetros para alinhar o histórico de testes é um ajuste de certa forma. Acho que você deveria lidar primeiro com estes indicadores, para que o sistema pudesse entrar facilmente sem ajuda externa e, o mais importante, lucrar.

Isto é claro IMHO - seu graal, e qualquer em geral deve ter uma parada e tomar (se houver), ou apenas uma saída formalizada, baseada em seus princípios comerciais internos, ao invés de uma simples (ou a mesma AG) seleção sobre a história.

Razão: