En busca del "grial" sagrado...

 

Buenas tardes... o noches, a todos. Estoy trabajando en un EA maníaco aquí. No lo voy a publicar todavía, aún no está terminado, pero seguro que lo publicaré... GRATIS. Sólo necesito ayuda. Pregunta nemba van - cómo hacer auto-optimización ... decir 8-16 napametrov? Artículo sobre la auto-optimización, que se cierne sobre el sitio ... no es que no funciona ... allí a 4 parámetros se puede poner en el óptimo, y cómo esquiva todo funciona. En general, tal vez alguien va a impulsar Chago de sus propios desarrollos? MI QUERIDA KIM, VALDRÍA LA PENA REFERIRSE A TI EN PARTICULAR. Si tengo una buena idea, puede que intente dibujar alguna en el mercado, pero no tengo ninguna buena. A veces se sobredimensiona, a veces se ralentiza, a veces no muestra nada que merezca la pena. No estoy diciendo "dame un indicador subomega y cambiaré el mundo". La esencia de mi estrategia en el Asesor Experto es la relación porcentual de una señal de grupo de 8 indicadores y una poco filtrada. Así que tengo indicadores de colección estándar y quiero experimentar con indicadores individuales. En general, tal vez la mente colectiva gane.

 
Seamos concretos. ¿Qué, como se dice, camarada cherchez la (o le, o al menos les) ? ¿Indicadores? De qué tipo, hay muchos. Sobre todo porque su naturaleza es muy variada.
 
Seamos concretos. Para empezar tomé el Estocástico - es el más rápido, luego lo diluí con un filtro de Osma... y luego tuve HyLow, Aligator, Mashki, CCI. Eso es lo que he sacado de ellos... Pero al convertir todas las señales en porcentajes, algunas se ignoran. Está claro que hay que priorizar en función de la optimización. Pero podemos ir por otro camino: añadir un indicador más o menos adecuado (o un par de indicadores) a los ya existentes con salida de señal 0 y 1. En este momento tengo un drawdown de un par de porcentajes con un payoff esperado de 1,85 y 50 posiciones por día. Bastante bueno en mi opinión. Pero aquí está el problema - hay un momento o, para ser más exactos, normalmente estos dos momentos por día (además, cualquier día en la historia) cuando el Asesor Experto se equivoca gravemente. Así que quería filtrar estos momentos lo máximo posible. Tal vez, tengo un Zig-Zag que no sobredimensionaría y funcionaría más rápido. Creo que es algo que una vez vi en algún sitio... pero por desgracia no le di importancia entonces, y ahora no lo encuentro. O aquí hay otra - Extrapolator.... sería genial... pero esta cosa redibuja... ¿cómo lo hago?
 
     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;}

Y calcula...

   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 es el formato que necesita el indicador... Sí, no olvides la autooptimización de una docena de parámetros... También un problema...
 

En primer lugar, es necesario formalizar lo más claramente posible las condiciones del mercado en las que es "difícil" cometer errores. Además, es importante excluir los indicadores repetitivos - los mismos limpiaparabrisas y el caimán, que es la esencia de los limpiaparabrisas.

Al mismo tiempo, debería ejecutar inicialmente la auto-optimización en algo más sencillo. El hecho es que la optimización, y con ella la autooptimización, es un fenómeno bastante controvertido y que, en la mayoría de los casos, requiere un control de "vida". Además, la optimización de 10 parámetros para suavizar el historial de pruebas es un ajuste en cierto modo. Creo que primero debe lidiar con estos indicadores, por lo que el sistema podría entrar fácilmente sin ayuda externa, y lo más importante, los beneficios.

Esto es, por supuesto, IMHO - su grial, y cualquiera en general debe tener una parada y tomar (si hay), o simplemente una salida formalizada, basada en sus principios de negociación interna, en lugar de un simple (o el mismo GA) la selección en la historia.