Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 136

 
paladin80:
Tal vez lo que he entendido de tu pregunta es diferente de lo que querías decir. Mi ejemplo compara los precios de apertura entre las barras 3 y 2, y 2 y 1. Las barras 3 y 1 no se comparan. En caso de que los valores comparados sean iguales - no pasa nada, sólo se pasa a la siguiente comparación.
Por qué x>1 (no >=). La primera iteración compara Open[3]==Open[3-1], es decir, Open[3]==Open[2]. DE ACUERDO. En el segundo (x=2), Open[2]==Open[1]. DE ACUERDO. No hay una tercera iteración. En x>=1 habrá comparación Open[1]==Open[0], no está bien, porque habrá comparación con 0 barra.

¡Muchas gracias! Y si comparamos los precios de apertura y cierre de cada una de las tres barras, ¿cambiaría el código?
extern int n=4;
//-----------------------------------------------+
for (x=n;x>1;x--)
   {
    if(Close[x]==Open[x]) continue;
      if(Close[x]<Open[x])
     {
      action
     }
     else{
      if(Close[x]>Open[x])
     {
      action
      }
    }
   }
 
ALXIMIKS:

No lo hará, con cada nuevo tick el valor de Flag será verdadero . https://book.mql4.com/ru/variables/types

Puede declarar la variable de forma global, al principio del programa por ejemplo, fuera de todas las funciones.

O hacer la variable estática - static bool flag=true; .

Sólo recuerda que la variable se reinicializa al reiniciar. Así que este enfoque es aceptable para un probador, pero no para el comercio real.
 
Amigos, ¿podrían sugerir un indicador? Se basa en dos diapositivas. Y cuando se cruza da la dirección en forma de flechas. No lo encuentro, gracias.
 
skyjet:

¡Muchas gracias! Y si comparamos los precios de apertura y cierre de cada una de las tres barras, ¿cambiará mucho el código?

Para aclarar el problema. Tenemos que comparar la apertura y el cierre de la misma barra, es decir, si la barra número n es bajista o alcista. Lanza el script de abajo en la ventana de cotización.

extern int n=4;
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   for (int x=n; x>1; x--)
    {  
     if(Close[x]==Open[x])
      {
       Print("Бар номер ",n," плоский :)");
       continue;
      }
     if(Close[x]<Open[x])
      {
       Print("Бар номер ",n," медвежий");
       continue;
      }
     else // if(Close[x]>Open[x]) - В данном случае сравнение if можно пропустить
          // т.к. два случая (равно и меньше) уже обработаны
      {
       Print("Бар номер ",n," бычьий");
      }
    }
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
paladin80:

Para insertar el código correctamente aquí, haga clic en SRC y luego el código allí.

Lanza este EA en la ventana de cotización.


Lo tiré en la ventana, como el indicador sólo escribe el valor de desplazamiento como yo lo entiendo, pero ¿qué debo añadir al código para que pueda añadir cuántos niveles necesito en la configuración?
 
Danila_mactep:

Lo puse en la ventana, como el indicador sólo escribe el valor de desplazamiento como yo lo entiendo, pero lo que debería añadir al código para ser capaz de añadir a la configuración de cuántos niveles que necesito?

No escribe un valor de desplazamiento. Si la memoria no me falla, el código no especifica un desplazamiento, sólo lee el valor del MAHA. Por lo tanto, se emite este valor.

Para ver el valor de desplazamiento en relación con el valor de la MA, es necesario establecer este valor en los parámetros externos y luego emitir el valor de la MA + valor de desplazamiento*Punto para un desplazamiento hacia arriba y el valor de la MA - valor de desplazamiento*Punto para un desplazamiento hacia abajo.

 
Danila_mactep:

Lo lancé en la ventana, al igual que el indicador sólo escribe el valor de desplazamiento según entiendo, pero ¿qué debo añadir al código para poder añadir tantos niveles como necesite en la configuración?
extern int  sdvig=0;
//---
int init() 
{
  return(0);
}
//--------------
int start()
{
  double MA=iMA(NULL, 0, 12, 144, MODE_SMA, PRICE_CLOSE, sdvig);
  Comment("Для бара номер ",sdvig," значение МА = ",DoubleToStr(MA,Digits));
  return(0);
}
//--------------
int deinit()
{
  Comment("");
  return(0);
}
 
paladin80:


No, no lo es. Necesita un desplazamiento hacia arriba y hacia abajo de la MA en un número determinado de puntos. No es un cambio de barra en la historia.
 
artmedia70:

No, no lo es. Necesita un desplazamiento hacia arriba y hacia abajo de la MA en un número determinado de puntos. No es un cambio de barra en la historia.
extern int move=100; 
//---
int init() 
{
  return(0);
}
//--------------
int start()
{
  double MA=iMA(NULL, 0, 12, 144, MODE_SMA, PRICE_CLOSE, 0);
  double Sdvig=MA+(move*Point);
  Comment("Сдвиг на ",sdvig," пунктов от МА = ",DoubleToStr(Sdvig,Digits));
  return(0);
}
//--------------
int deinit()
{
  Comment("");
  return(0);
} 
 
paladin80:

Y ahora también en menos... Y será feliz :) ¿O va a dejarle que "piense" en cómo bajar el turno por sí mismo?