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

 
artmedia70:
Veo que ya estás tomando una decisión por ti mismo
Estoy llegando a la decisión... Pero es como un perro: entiendo lo que entiendo, pero no puedo decirlo, es decir, no puedo representarlo en el código).
Quizá sea el calor lo que hace que se me derrita el cerebro).
 
Shuba:
Me estoy acercando a la solución... Es como un perro: entiendo lo que entiendo, pero no puedo decirlo, es decir, no puedo representarlo en el código).
Quizá sea el calor lo que hace que se me derrita el cerebro).
¿Cómo se buscan los fractales?
 
artmedia70:
¿Cómo se buscan los fractales?

Busco fractales utilizando el indicador ZIGZAG-FRACTALS con esta función:

void GetSignal()
  {
  int UpCount = 0, DnCount = 0;                                        // счетчик пиков ЗЗ
  int i = 0;                                                              // счетчик баров
  double ZZFirst = 0;                            // Значение первого найденного экстремума
  ArrayInitialize(ZZVUp, 0);                       // Значения верхних экстремумов зигзага
  ArrayInitialize(ZZVDn, 0);                         //Значения нижних экстремумов зигзага
  
  while(i < Bars && (UpCount < 2 || DnCount < 2))
    {
    double ZZCur = iCustom(NULL,0,"BW ZIGZAG-FRACTALS_2",0,i);
    if(ZZCur != 0)                                                   // найден экстремум
      {
      if(ZZFirst != 0)                             // Это не первый найденный экстремум
        {
        if(ZZCur == High[i] && UpCount < 2)
          {
          ZZVUp[UpCount] = ZZCur;
          ZZNUp[UpCount] = i;
          UpCount++;
          }         
          if(ZZCur == Low[i] && DnCount < 2)
            {
            ZZVDn[DnCount] = ZZCur;
            ZZNDn[DnCount] = i;
            DnCount++;
            }         
        }
      else
        ZZFirst = ZZCur; 
      }
    i++;
    } 
  if(i == Bars) return;                           // Последний посчитанный бар запоминаем
  
  }
 

Ahora he añadido a las líneas: if( ZZCur == High[i] && UpCount < 2 ) y if(ZZCur == Low[i] && DnCount < 2) lacomprobación del siguiente fractal mayor o menor que el primero encontrado.

Tenemos las siguientes líneas

if(ZZCur == High[i] && ZZCur > ZZFirst && UpCount < 2) and

if(ZZCur == Low[i] && ZZCur < ZZFirst && DnCount < 2)

Pero al final la búsqueda es de alguna manera inadecuada :(

En la imagen, una línea blanca gruesa muestra cómo debe ser y una línea verde fina muestra cómo se hace...


 
Shuba:

Busco los fractales utilizando el indicador ZIGZAG-FRACTALS con esta función:

Prueba a buscar con esta función:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 13.08.2008                                                     |
//|  Описание : Возвращает номер бара фрактала по его номеру.                  |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента        ("" или NULL - текущий символ)     |
//|    tf - таймфрейм                       (    0       - текущий ТФ)         |
//|    nf - номер фрактала                  (    0       - последний)          |
//+----------------------------------------------------------------------------+
int GetFractalBar(string sy="0", int tf=0, int nf=0) {
  if (sy=="" || sy=="0") sy=Symbol();
  double f=0;
  int    i, k=iBars(sy, tf), kf;

  for (i=2; i<k; i++) {
    f=iFractals(sy, tf, MODE_LOWER, i);
    if (f!=0) {
      kf++;
      if (kf>nf) return(i);
    }
    f=iFractals(sy, tf, MODE_UPPER, i);
    if (f!=0) {
      kf++;
      if (kf>nf) return(i);
    }
  }
  Print("GetFractalBar(): Фрактал не найден");
  return(-1);
}

Esta función devuelve el número de barra del fractal. Primero se llama con el parámetro nf = 0 - se encontrará el último fractal, y luego se llama a esta función en el bucle, donde nf = el contador de ciclos de 1 a ... todo el tiempo que sea necesario. En el cuerpo del bucle, comprueba si el siguiente fractal encontrado coincide con los criterios que necesitas y, si es así, sal del bucle. Después del análisis tendrás los números de barra de dos fractales que necesitas y haz con ellos lo que quieras.

 
artmedia70:

Prueba a buscar con esta función:

La función devuelve el número de barra del fractal. Primero se llama con el parámetro nf = 0 - se encontrará el último fractal, y luego se llama a esta función en el bucle, donde nf = contador de ciclos de 1 a ... todo el tiempo que sea necesario. En el cuerpo del bucle, comprueba si el siguiente fractal encontrado coincide con los criterios que necesitas y, si es así, sal del bucle. Después del análisis tendrás los números de barra de dos fractales que necesitas y haz con ellos lo que quieras.


Gracias) Voy a probarlo ahora.
 
Vinin:


¿En el probador o en la demo?

En el probador el punto de los otros instrumentos será 0


Estaba en el probador,... No he tenido la oportunidad de usarlo, pero tengo muchos problemas con él. Así que, como resultado, hice un montón de problemas con mi código de arrastre y tomé la función de monitoreo de pares de arrastre de KimIV. Ahora todo funciona en la demo ))

Gracias a todos por vuestra ayuda, vuestras explicaciones son muy útiles.

 

Parece haber resuelto el problema, pero la pregunta sigue siendo...

¿Cómo puedo desinicializar una variable para reutilizarla?

 

No se puede, cuando se inicializa una variable, sólo se asigna un área de RAM, así que ¿por qué reasignarla? Sólo tienes que poner la variable a cero, y utilizarla tantas veces como quieras. De hecho, ¿cuál es el problema? ¿Por qué desinicializar una variable? No tiene sentido.

 
ToLik_SRGV:

¿Por qué desinicializar una variable?



La condición si

for(int a=0;a<8;a++)

aquí hacemos algo

de lo contrario, si otra condición

for(int a=0;a<8;a++)

hacer otra cosa.

La cuestión es no multiplicar las variables, muchas condiciones y contadores.