[¡AVISO CERRADO!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen. No puedo ir a ningún sitio sin ti. - página 640

 

No puedo averiguar lo que está mal con las matrices (la condición es simple - comprar / vender después del siguiente pico de CCI suavizado):

La estrategia se compila sin errores y no escribe nada en el registro al iniciarse, pero no se coloca ninguna orden.

   double c1b[];
   ArrayResize(c1b,PeriodB);
   for(i=1;i<=PeriodB;i++)
   c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);
   double c1b_1=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i);
   double c1b_2=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i+2);
   double c1b_3=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i+3);
   
   double c1s[];
   ArrayResize(c1b,PeriodS);
   for(i=1;i<=PeriodS;i++)
   c1s[i]=iCCI(NULL,0,PeriodS,PRICE_TYPICAL,i);
   double c1s_1=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i);
   double c1s_2=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i+2);
   double c1s_3=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i+3);


   if (c1s_1>c1s_2&&c1s_2<c1s_3)
     {                                          //
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
   if (c1b_1<c1b_2&&c1b_2>c1b_3)
     {                                          //
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }
 


double c1s[];
ArrayResize(c1b,PeriodS)

Declaras un array y cambias otro.

 
Roger:


doble c1s[];
ArrayResize(c1b,PeriodS)

Declaras un array y cambias otro.


Gracias, lo que está mal - no ayudó.
 

La matriz comienza con un elemento cero, por lo que la expresión

for(i=1;i<=PeriodoS;i++)

se salta el cero y no escribe nada en el último.

más adelante, sólo se ejecutará esta expresión en el bucle

c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);

el resto no tiene sentido, después del bucle i es igual al máximo y por lo tanto todos los valores serán cero.

 
Craft:

qué otra cosa está mal


comparar dobles sin normalizar es incorrecto... pruébalo de esta manera:

   double c1b[];
   ArrayResize(c1b,PeriodB);
   for(i=1;i<=PeriodB;i++)
   c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);
   double c1b_1=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i);
   double c1b_2=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i+2);
   double c1b_3=iMAOnArray(c1b,0,AvgB,0,MODE_SMA,i+3);
   
   double c1s[];
   ArrayResize(c1b,PeriodS);
   for(i=1;i<=PeriodS;i++)
   c1s[i]=iCCI(NULL,0,PeriodS,PRICE_TYPICAL,i);
   double c1s_1=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i);
   double c1s_2=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i+2);
   double c1s_3=iMAOnArray(c1s,0,AvgS,0,MODE_SMA,i+3);


   if (NormalizeDouble(c1s_1,4)>NormalizeDouble(c1s_2,4)&&NormalizeDouble(c1s_2,4)<NormalizeDouble(c1s_3,4))
     {                                          //
      Opn_B=true;                               // Критерий откр. Buy
      Cls_S=true;                               // Критерий закр. Sell
     }
   if (NormalizeDouble(c1b_1,4)<NormalizeDouble(c1b_2,4)&&NormalizeDouble(c1b_2,4)>NormalizeDouble(c1b_3,4))
     {                                          //
      Opn_S=true;                               // Критерий откр. Sell
      Cls_B=true;                               // Критерий закр. Buy
     }

 
DDFedor:


comparar dobles sin normalizar es incorrecto... Inténtalo de esta manera:


Gracias por la ayuda, hermanos, sigue sin funcionar.
 
Roger:

La matriz comienza con un elemento cero, por lo que la expresión

for(i=1;i<=PeriodoS;i++)

se salta el cero y no escribe nada en el último.

más adelante, sólo se ejecutará esta expresión en el bucle

c1b[i]=iCCI(NULL,0,PeriodB,PRICE_TYPICAL,i);

el resto no tiene sentido, después del bucle i es igual al máximo y por lo tanto todos los valores serán cero.


¿Qué debo hacer entonces? Probado for(i=0;i<=PeriodS;i++) - no funcionó.
 
Craft:

¿Y entonces qué?

Poner impresoras en cada variable en cada punto de código y mirar en los registros para ver lo que está pasando en cada paso.
 

Hola, ¿puedo preguntarle a un novato? Cuando abro una demo, el Asesor Experto abre una orden cuando escribo symbol() en la función de apertura, pero cuando lo cambio por un símbolo, por ejemplo EURUSD, obtengo un código de error 133 y cuando intento comprobarlo - if (MarketInfo(Symbol(),MODE_TRADEALLOWED)==true)
{Alert("!");}else{Alert("?");} - Da "!", es decir, el comercio está permitido... y simultáneamente 133. ¿Cuál es el problema? Ningún EA abre una operación si indico un determinado símbolo en la función de apertura... Lo he intentado todo.

Gracias de antemano. estoy aquí para no desordenar el foro ))

 
artmedia70:
¿Quién dice que son retrocesos y no correcciones?

Lo siento, no he contestado enseguida, mi portátil ha muerto por completo. Espero que la muela no te duela más, es algo que da miedo. Mi confesión, tenía miedo de Babon, funciona bien y el culpable es el indicador NMAZZ, no recuerdo donde lo descargué, pero sigue funcionando en un gráfico, pero lo he instalado en tres gráficos (5M, 30M, 4H) y ya está, el ordenador se congeló por completo, o más bien el terminal. He empezado a eliminar los indicadores de los gráficos uno por uno y he encontrado este fallo. No sé qué pasa con este indicador, pero al principio funcionaba bien. Y sobre la reversión o corrección, sí tienes razón, siempre es inequívocamente una reversión, pero si a los 30M, 1H y 4H la porra cambia de color, entonces si no es una reversión, sí es una corrección unívocamente y puedes ganar algo de beneficio.
Razón de la queja: