Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 568

 
PolarSeaman:

Hay tres ciclos de este tipo. Al sustituirlos, el terminal se congeló.

He contado cuatro:

   int i;

   SetIndexDrawBegin(0,Bars-cb);
   SetIndexDrawBegin(1,Bars-cb);

   double avg;

   ki=2.0/(p+1);

   int total;
   int limit = GetRecalcIndex(total,rates_total,prev_calculated);

   for(i=limit; i>=0; i--) 
      fx1[i]=Close[i];

   for(int m=0; m<=s; m++)
     {
      z1=fx1[0];
      for(i=0; i<=limit; i++) {z1=z1+(fx1[i]-z1)*ki; hp[i]=z1;}

      z2=fx1[limit];
      for(i=limit; i>=0; i--) {z2=z2+(fx1[i]-z2)*ki; fx1[i]=(hp[i]+z2)/2;}
     }

   fs=0;
   for(i=limit; i>=0; i--)
     {
      if(fx1[i]>fx1[i+1]) fs=1;
      if(fx1[i]<fx1[i+1]) {if(fs==1) fx2[i+1]=fx1[i+1]; fs=2;}
      if(fs==2) fx2[i]=fx1[i]; else fx2[i]=0.0;

      avg=iATR(NULL,0,ATR,i+10);
      upper[i] = hp[i] + distance*avg;
      lower[i] = hp[i] - distance*avg;

      if(Close[i+1+barsig]<upper[i+1+barsig] && Close[i+barsig]>upper[i+barsig])
         dnar[i]=High[i]+arrots*Point; else dnar[i]=EMPTY_VALUE;

      if(Close[i+1+barsig]>lower[i+1+barsig] && Close[i+barsig]<lower[i+barsig])
         upar[i]=Low[i]-arrots*Point; else upar[i]=EMPTY_VALUE;
     }

No se cuelga nada. No debería haber ningún desbordamiento de las matrices. Excepto que el valor de la barra de cero no está calculado correctamente en mi opinión.

 
Ihor Herasko:

He contado cuatro:

No se cuelga nada. No debería haber ningún exceso fuera de las matrices. Excepto que creo que el valor de la barra de cero no está calculado correctamente.

Gracias, está bien. No lo necesito en la barra cero, quiero obtenerlo desde la primera barra pero las posiciones se abren caóticamente

sell_1_B=NormalizeDouble(iCustom(Symbol(),0,"HiLo",1,1),Digits);
sell_1_1_B=NormalizeDouble(iCustom(Symbol(),0,"HiLo",1,2),Digits);

if(sell_1_1_B==0.0&&sell_1_B!=0.0)
{открываю sell}
if(sell_1_1_B!=0.0&&sell_1_B==0.0)
{открываю buy}

¿Por qué?

 
Ihor Herasko:

En el probador, en la visualización está esto

ooppe

el primer giro, el comienzo de la prueba, el indicador que tiene un error, construye una línea recta cuando lo lanzo en el gráfico después del comienzo de la prueba

rompimos algo)

 

¿Puedes decirme cómo poner una "selección"de herramienta gráfica en el botón del Asesor Experto, de modo que al hacer clic en el botón el icono de la herramienta aparezca bajo el cursor y sea posible estirarlo?

Y ya debería tener las propiedades especificadas

 
PolarSeaman:

En el probador, en la visualización está esto

el primer giro, el comienzo de la prueba, el indicador que tiene un error, construye una línea recta cuando lo lanzo en el gráfico después del comienzo de la prueba

rompimos algo)

Correcto, es un indicador de redibujo que recalcula todo el historial para un número específico de barras en cada tick. Muy mala solución. Entonces tienes que hacerlo así:

   int i;

   SetIndexDrawBegin(0,Bars-cb);
   SetIndexDrawBegin(1,Bars-cb);

   double avg;

   ki=2.0/(p+1);

   int total;
   int limit = GetRecalcIndex(total,rates_total,prev_calculated);

   for(i=total; i>=0; i--) 
      fx1[i]=Close[i];

   for(int m=0; m<=s; m++)
     {
      z1=fx1[0];
      for(i=0; i<=total; i++) {z1=z1+(fx1[i]-z1)*ki; hp[i]=z1;}

      z2=fx1[total];
      for(i=total; i>=0; i--) {z2=z2+(fx1[i]-z2)*ki; fx1[i]=(hp[i]+z2)/2;}
     }

   fs=0;
   for(i=total; i>=0; i--)
     {
      if(fx1[i]>fx1[i+1]) fs=1;
      if(fx1[i]<fx1[i+1]) {if(fs==1) fx2[i+1]=fx1[i+1]; fs=2;}
      if(fs==2) fx2[i]=fx1[i]; else fx2[i]=0.0;

      avg=iATR(NULL,0,ATR,i+10);
      upper[i] = hp[i] + distance*avg;
      lower[i] = hp[i] - distance*avg;

      if(Close[i+1+barsig]<upper[i+1+barsig] && Close[i+barsig]>upper[i+barsig])
         dnar[i]=High[i]+arrots*Point; else dnar[i]=EMPTY_VALUE;

      if(Close[i+1+barsig]>lower[i+1+barsig] && Close[i+barsig]<lower[i+barsig])
         upar[i]=Low[i]-arrots*Point; else upar[i]=EMPTY_VALUE;
     }

Desagradable, por supuesto, pero funciona.

 
¿por qué esta construcción no funciona en las declaraciones de variables?
int K=20;
int TIKET[K];
 
igrok333:
¿por qué no funciona esta construcción en la declaración de variables?

Porque K es una variable. Se desconoce su valor en el momento de la compilación. Para que funcione, tenemos que hacer que K sea una constante:

#define  K 20
int TIKET[K];
 
Ihor Herasko:

Correcto, porque es un indicador de redibujo que recalcula todo el historial para un número específico de barras en cada tick. Esta es una solución muy mala. Entonces tienes que hacerlo así:

Desagradable, por supuesto, pero funciona.

Gracias. He pasado mucho tiempo con usted y aún así se lleva 20(!) bares, tal vez incluso más.

¿Creamos una petición?

Que haya una leyque prohíba la distribución de indicadores que redibujen más de tres barras.

Para que el Parlamento lo tenga en cuenta, tenemos que recoger un total de 100.000 firmas en un año.

 
PolarSeaman:

Gracias. Todo el tiempo que hemos perdido y que ha dibujado 20(!) bares, tal vez más, no he buscado más.

Si se establece un valor menor de cb, habrá menos barras que se redibujen.

¿Creamos una petición?

Que haya una leyque prohíba la distribución de indicadores que redibujen más de tres barras.

Sólo serán necesarias 100.000 firmas en un año para que el Parlamento las considere.

)))

 

¿Pueden decirme cómo excluir/añadir una fecha específica al EA?

Por ejemplo, no negociar el 2 de marzo de 2018. Intenté diferentes opciones, me confundí con las fechas.

TimeDayOfYear (TimeCurrent()) != StrToTime("2018.03.02")
Razón de la queja: