[¡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 753

 
Morzh09:

Por favor, avise de cuál es la trampa:

1) Relleno un array bidimensional con el tiempo de formación del extremo ZigZag y el propio valor del extremo.

2) Rellenar la segunda matriz con unos o dos en función de si el extremo correspondiente a un elemento dado es un máximo o un mínimo local.

3) Emitiré los resultados a través de Alert.

pero en un lugar donde debería imprimirse 1 o 2 siempre se imprimen ceros.

¿Cuál es la trampa?

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+


string TimeSave1[100][2], TimeSave2[100][2];

double A[], B[];

double Number_of_extremum[];

extern string Currency = "EURUSD";


+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int start()

{

int counted_bars=IndicatorCounted();

//----

int k;

k=0;

double date;

int status;

for(int shift = 0; shift <= Bars-1; shift++)

{

date = iCustom(NULL, 0, "ZigZag", 12, 5, 3, 0, shift);

//----------------------------------------------------

if(date > 0)

{

TimeSave1[k][0]=TimeToStr(Time[shift]);

TimeSave1[k][1]=date;

k++;

}

}

//====================================================

for (int u=1;u<=k;u++)

{

if (StrToDouble(TimeSave1[u][1])<=StrToDouble(TimeSave1[u-1][1]))

{

Number_of_extremum[u]=1;// значит под номером u - нашли min

}

else

if (StrToDouble(TimeSave1[u][1])>=StrToDouble(TimeSave1[u-1][1]))

{

Number_of_extremum[u]=2;// значит под номером u - нашли max

}

}

//====================================================

for (int j=1;j<10;j++)

{

Alert("время== ",TimeSave1[j][0], " значение== ", TimeSave1[j][1], " max/min== ", Number_of_extremum[j]);

}

//----

return(0);

}

//+------------------------------------------------------------------+

Y una aclaración más:

cómo comparar fechas y horas en mql (por ejemplo, necesito determinar qué vértice de ZZ se formó antes - para ello necesito comparar la hora de su formación...)

datetime es esencialmente int, contiene el número de segundos, empezando por 1970 y terminando con la hora del bar. Compruebo si hay más/menos - funciona...
No he mirado el resto, acabo de llegar...
 

Amigos, una pregunta:


Se enfrenta a este problema:

el indicador emite alguna información a través de la Alerta.

Pero, poco a poco, el campo de salida de la alerta acumula demasiada "basura"...

Cuando vuelva a poner en marcha el indicador, ¿se podrán borrar todos los registros antiguos en Alert?


Gracias de antemano.

P.D.

Por favor, comenten mi post anterior (por qué se muestran valores nulos en lugar de 1 y 2)

 

No lo encontré en el foro...

Pregunta - ¿es posible cambiar el comentario de la orden? Bueno, cuando la operación OrderSend() pongo en el comentario algún valor de "OrderNotModify", y al hacer más acciones con esta orden, por ejemplo el cierre parcial, cambio OrderComment a "OrderIsModify"... ¿o no?

 
Morzh09:

¿Puede decirme cuál es la trampa?

El array se llena desde 0, pero aquí se salta el índice 0, y se llena desde el 1, y

for (int u=1;u<=k;u++) // k при старте =0, u <= k не будет, считать счетчику незачем

{

if (StrToDouble(TimeSave1[u][1])<=StrToDouble(TimeSave1[u-1][1])) // выражение при старте всегда [1][1]<=[0][1]

{

Number_of_extremum[u]=1;// значит под номером u - нашли min

}

else

if (StrToDouble(TimeSave1[u][1])>=StrToDouble(TimeSave1[u-1][1])) // значит, всегда срабатывает [1][1]>=[0][1]

{

Number_of_extremum[u]=2;// значит под номером u - нашли max

}

}
 
Abzasc:

El array se llena desde 0, pero aquí se salta el índice 0 y se llena desde el 1, y

No entiendo muy bien su comentario.

1) ¡k, al principio, no es cero! k = el número de vértices ZigZag que hemos detectado en una determinada profundidad de la historia

2) "entonces, siempre funciona [1][1]>=[0][1]" - ¿por qué siempre funciona? si el elemento anterior del array TimeSave1 > el siguiente elemento, no funcionará.

repita, por favor, lo que quiso decir.

 
Morzh09:

no entendí bien tu comentario.

1) ¡k, al principio, no es igual a cero! k = el número de vértices ZigZag que hemos detectado en una determinada profundidad de la historia

2) "entonces, siempre funciona [1][1]>=[0][1]" - ¿por qué siempre funciona? si el elemento anterior del array TimeSave1 > el siguiente elemento, no funcionará.

Por favor, dígame de nuevo lo que quiere decir.

Entiendo k. Esto es lo que no entiendo.

for (int u=1;u<=k;u++) // на первом шаге счетчик присваивает u = 1

{

if (StrToDouble(TimeSave1[u][1])<=StrToDouble(TimeSave1[u-1][1])) // здесь, значит[u=1][1]<=[(u=1)-1][1]
// т. е. 1<=0, вы же от 1 еще 1 отнимаете

{

en la parte derecha

 
Michelangelo:

¿es posible cambiar el comentario de orden?

Sólo en OrderModify billete precio stoploss Aprovechar el beneficio caducidad color_flecha

Parece que no.

 

así que... parece que es el calor... Y también está afectando a mi compilador :)

Verás, necesito pasar por un array que registre la fecha de formación del max/min del ZigZ y el valor de ese max/min.

Necesito entender, de hecho, qué vértice de ZZ es un mínimo y cuál es un máximo.

Para ello, comparo el siguiente punto más alto de ZZ con el anterior.

Si el tope consecutivo es mayor, entonces es un tope.

si es más pequeño, es una depresión.

Dependiendo de si se trata de un vértice o una depresión, añadimos 1 o 2 a un elemento de otra matriz, respectivamente.

¡¡¡¡Tengo curiosidad por esto, DONDE podría haber un error!!!!

Archivos adjuntos:
 
Voy a ir aquí con arcos - Rompí mi calculadora de todos modos ... :)
Quiero poder calcular los niveles de fiba a partir de dos valores conocidos:
El nivel de fibra cero corresponde a 1,2807, el nivel 23,6 corresponde a 1,2838.

Tenemos que encontrar los otros niveles 38,2, 50,0, 61,5, 100,0 y a qué precios corresponden.

No pude encontrar ninguna conexión entre 1,2807 y 1,2838 para entender los principios de
de encontrar todos los demás valores.

Por favor, dígame, alguien ... :)

 
IgorM:
Alguien ha conocido el indicador para ver el tiempo de apertura de la barra en un TF bajo, no cuánto tiempo es interesante, y para dibujar las marcas en el gráfico donde la barra comenzó y donde terminó
#property indicator_chart_window
#property link      "IgorM"

extern int num    = 10;
extern color line = White;
int init()
{return(0);
}
  
void clear(){
   for(int i=ObjectsTotal()-1; i>=0;i--) {
      string name = ObjectName(i);
      if (StringFind(name,"timeH1_") !=-1) ObjectDelete(name);
    }
}

int deinit(){
clear();
return(0);
}

int start()
{   
   int counted_bars = IndicatorCounted();
   if(counted_bars < 0)   return(-1);
   clear();
   for (int i=0;i<=num;i++){ 
      string name = "timeH1_"+TimeToStr(Time[i],TIME_DATE|TIME_MINUTES);
      ObjectCreate(name,OBJ_VLINE,0,iTime(NULL,PERIOD_H1,i),0);
      ObjectSet(name,OBJPROP_COLOR,line);
      ObjectSet(name,OBJPROP_STYLE,STYLE_DOT);
    }
return(0);
}

Creo que sí. El código no está optimizado, pero dibuja lo que me gustaría ver.