¿Cómo extraer sólo los puntos de giro de los fondos extraídos por el indicador zigzag? - página 3

 
jackprobe:
Gracias deVries. Lo probaré ...


y si pones algo como

esto dentro de su código ....

 
ubzen:

Esto es lo que se me ocurrió. No he comprobado los resultados deVries arriba [estaba haciendo esto cuando él publicó].


hola, ubzen, acabo de ver tu código como el de abajo:

No sé qué significan estas dos líneas de código: if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift]; if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];

Me parece que no cambia casi nada cuando borro los códigos de estas dos líneas, así que no sé por qué se añaden estas dos líneas.

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_width1 1
#property indicator_color2 Yellow
#property indicator_width2 1

double Bottoms[];
double Toppers[];

int init()
{

   IndicatorBuffers(2);

   SetIndexStyle(0,DRAW_SECTION);
   SetIndexBuffer(0,Bottoms);
   SetIndexEmptyValue(0,0.0);

   SetIndexStyle(1,DRAW_SECTION);
   SetIndexBuffer(1,Toppers);
   SetIndexEmptyValue(1,0.0);

  IndicatorShortName("zz show top & bottom");
  return(0);
}

int deinit()
{
  return(0);
}

int start()
{
  int counted_bars=IndicatorCounted();
  int limit=0;
  limit = Bars-counted_bars;
  
  for(int shift=limit-1;shift>=0;shift--)
  {
    int ExtDepth=12; int ExtDeviation=5; int ExtBackstep=3;
    int ZigzagBuffer=0; int HighMapBuffer=1; int LowMapBuffer=2;
    
    Bottoms[shift]=iCustom(
        Symbol(),0,"ZigZag",
        ExtDepth, ExtDeviation, ExtBackstep,
        LowMapBuffer, shift
    );
    
    Toppers[shift]=iCustom(
        Symbol(),0,"ZigZag",
        ExtDepth, ExtDeviation, ExtBackstep,
        HighMapBuffer, shift
    );
    
    if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift];
    if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];
  }
  
  return(0);
}
 
vx0532:


hola, ubzen, acabo de ver tu código como el de abajo:

No sé qué significan estos códigos de dos líneas: if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift]; if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];

Veo que no cambia casi nada cuando borro los códigos de estas dos líneas, así que no sé por qué añade estas dos líneas.


Zigzag con línea en los mínimos y línea en los máximos
 


Escribo los siguientes códigos en el EA

pero cuando lo pruebo en los datos históricos, la "impresión" muestra todo 0, ¿por qué?

for(int shift=99;shift>=0;shift--)
  {
    int ExtDepth=12; int ExtDeviation=5; int ExtBackstep=3;
    int ZigzagBuffer=0; int HighMapBuffer=1; int LowMapBuffer=2;
    
    Bottoms[shift]=iCustom(
        Symbol(),0,"ZigZag",
        ExtDepth, ExtDeviation, ExtBackstep,
        LowMapBuffer, shift
    );
    
    Toppers[shift]=iCustom(
        Symbol(),0,"ZigZag",
        ExtDepth, ExtDeviation, ExtBackstep,
        HighMapBuffer, shift
    );
    if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift];
    if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];
 }
 
 shift=0;
 while(shift<100)
 {
 Print("Bottoms,Toppers:",Bottoms[shift]," , ",Toppers[shift]);
 shift++;
 }
 

leer mi publicación 1 página atrás

deVries 2013.10.19 12:13 #

https://www.mql5.com/en/forum/144092/page2#854926


//+------------------------------------------------------------------+
//|                                              ZigZag practise.mq4 |
//|                                Copyright © 2012, Tjipke de Vries |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, Tjipke de Vries"
#property link      ""

//---- input parameters  ZigZag
extern int ExtDepth=12;
extern int ExtDeviation=5;
 
deVries:

Gracias deVries, he conocido este asunto después de revisar su puesto.

Así que llego a la conclusión de que podemos usar una matriz doble y una variable para recibir el valor de retorno de iCustom() en los códigos de los indicadores; pero sólo podemos usar una variable para recibir el valor de retorno de iCustom() en los códigos de EA.

tu explicacion es que:"eso son los buffers equivocados y tienes que encontrar el valor de i en que barra estara la parte superior o inferior "

mi entendimiento es que en EA, cuando usamos el array x[i] para recibir iCustom(), la asignación está bien, pero la barra de la asignación es incierta.

así que iCustom() no sólo devuelve un valor simplemente sino otras cosas, ¿sí?

pero sigo sin entender el significado del código: " if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift]; if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];"

 
vx0532:

Gracias deVries, he conocido este asunto después de la revisión de su puesto.

Así que llego a la conclusión de que podemos utilizar una matriz doble y una variable para recibir el valor de retorno de iCustom() en los códigos de los indicadores; pero sólo podemos utilizar una variable para recibir el valor de retorno de iCustom() en los códigos de EA.

tu explicacion es que:"eso son los buffers equivocados y tienes que encontrar el valor de i en que barra estara la parte superior o inferior "

mi entendimiento es que en EA, cuando usamos el array x[i] para recibir iCustom(), la asignación está bien, pero la barra de la asignación es incierta.

así que iCustom() no sólo devuelve un valor simplemente sino otras cosas, ¿sí?

pero sigo sin entender el significado del código: " if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift]; if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];"


todavía está luchando para obtener datos del indicador ZigZag

¿por qué quieres que te explique lo que no está dentro de mi código?

por qué no investigas el código de

//+------------------------------------------------------------------+
//|                                              ZigZag practise.mq4 |
//|                                Copyright © 2012, Tjipke de Vries |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, Tjipke de Vries"
#property link      ""

//---- input parameters  ZigZag
extern int ExtDepth=12;
extern int ExtDeviation=5;

todo el código se puede encontrar una página de nuevo .... https://www.mql5.com/en/forum/144092/page2#854926

si usted entiende el trabajo de ese código, entonces es simplemente usando el mismo método en EA

 
  1. deVries: todo el código se puede encontrar una página atrás....
    No digas una página atrás, pon el enlace al post exacto. Es el signo # a la derecha de tu nombre (clic derecho, copiar enlace) una página atrás
  2. vx0532: pero sigo sin entender el significado del código: " if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift]; if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];"
    ¿Qué crees que significa "if(x> 0.1) x=x;"? Nada. El código corregido dice después:
        if(ZigZag[shift]>0.1 && Low[shift]==ZigZag[shift]) Bottoms[shift]=ZigZag[shift];
        if(ZigZag[shift]>0.1 && High[shift]==ZigZag[shift]) Toppers[shift]=ZigZag[shift];
    
 
WHRoeder:
  1. deVries: el código completo lo puedes encontrar una página atrás....
    No digas una página atrás, pon el enlace al post exacto. Es el signo # a la derecha de tu nombre (clic derecho, copiar enlace) una página atrás
  2. vx0532: pero sigo sin entender el significado del código: " if(Bottoms[shift]>0.1) Bottoms[shift]=Bottoms[shift]; if(Toppers[shift]>0.1) Toppers[shift]=Toppers[shift];"
    ¿Qué crees que significa "if(x> 0.1) x=x;"? Nada. El código corregido dice después:

hecho https://www.mql5.com/en/forum/144092/page2#854926
 

Estimados todos,

gracias por esta maravillosa discusión sobre el ZigZag y los códigos. Me gustaría añadir un nuevo giro a la discusión
Para mí sería de gran valor si pudiera extraer los valores altos/bajos calculados por el indicador ZigZag
(con un conjunto determinado y específico de parámetros) junto con sus tiempos de ocurrencia a un archivo de texto o csv,
algo así:

- Día, hora, valor alto, alto(booleano)
- Día, hora, valor bajo, bajo(booleano)

Me gustaría extraer estos valores para su posterior análisis en MS Excel con el fin de identificar las probabilidades de
ocurrencia de períodos de tiempo y amplitudes en un gráfico. Al final, se crearán histogramas a partir de
estos datos, indicando la "firma" del valor en el gráfico mediante la identificación de períodos de tiempo intrínsecos y
y amplitudes de oscilación intrínsecas.

Tal vez estoy tratando de reinventar la rueda aquí y hay código por ahí que hace lo que quiero
hacer. Si no es así, valdría la pena desarrollar dicho código. Estoy haciendo este tipo de análisis manualmente
con toneladas de gráficos cada día, y puedo afirmar claramente que conocer la firma intrínseca de un valor
mejora enormemente la posibilidad de predecir un cambio de dirección. En mi opinión, este proceso podría ser
fácilmente automatizado ... pero necesitaría algo de ayuda de gente con experiencia en programación. El resultado de
sería un indicador práctico, o incluso un EA (Asesor Experto) automático de MT4
que opere en puntos de giro significativos.

Sería bueno encontrar a alguien aquí que está interesado en un esfuerzo de colaboración. Pero algunas pistas
sobre cómo extraer los datos del indicador ZigZag también ayudaría. Muchas gracias.

- spjuliman