Mt4 Fin de soporte. - página 25

 
Artyom Trishkin:

Sólo hay que escribir una función en la que el usuario pregunte: "¿hay un nuevo bar en la M5?" y recibe una respuesta de sí/no.

Por ejemplo:

Aquí está su función IsNewBar() y la desarrollaremos y giraremos más con la ampliación de la tarea


Me parece que este no es un buen ejemplo para demostrar la utilidad de la POO.
Aquí, por ejemplo, hay una variante que utiliza sólo una función:

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
void OnTick()
  {
   IsNewBar(0,false); // режим сбора информации
   if(IsNewBar()) Print("Пришел новый бар текущего ТФ");  // режим считывания информации
   if(IsNewBar(PERIOD_H4)) Print("Пришел новый бар H4");  // режим считывания информации
   if(IsNewBar(PERIOD_D1)) Print("Пришел новый бар D1");  // режим считывания информации
   
  }
bool IsNewBar(ENUM_TIMEFRAMES tf=PERIOD_CURRENT,bool out=true)
  {
   static const ENUM_TIMEFRAMES TF[22]=
     {
      PERIOD_CURRENT,PERIOD_M1,PERIOD_M2,PERIOD_M3,PERIOD_M4,PERIOD_M5,PERIOD_M6,PERIOD_M10,PERIOD_M12,PERIOD_M15,PERIOD_M20,PERIOD_M30,
      PERIOD_H1,PERIOD_H2,PERIOD_H3,PERIOD_H4,PERIOD_H6,PERIOD_H8,PERIOD_H12,PERIOD_D1,PERIOD_W1,PERIOD_MN1
     };
   static bool newbar[22];
   static bool FirstTime=true;
   static int acb[22]; // array of current bars
   if(FirstTime)
     {
      for(int i=0;i<22;i++) acb[i]=Bars(Symbol(),TF[i]);
      FirstTime=false;
      return(false);
     }
   int curtf=0;
   while(TF[curtf]!=tf) curtf++;
   if(out) return (newbar[curtf]);
   for(int i=0;i<22;i++)
     {
      int CurBars=Bars(Symbol(),TF[i]);
      if(acb[i]<CurBars)
        {
         acb[i]=CurBars;
         newbar[i]=true;
        }
      else newbar[i]=false;
     }
   return(false);
  }

por supuesto, puede quitarlo deOnTick e insertarlo enOnTimer

 
Реter Konow:

Sobre esta pregunta, creo que se equivoca. Consulte con el Servicio de Atención al Cliente. Que respondan a la pregunta: si se forman nuevas barras en la plataforma independientemente de la llegada de las cotizaciones, o no. Si no, entonces en el caso de una nueva barra comprueba si había una cita en ella. Si lo era, el nuevo bar se ha formado. Podemos hacerlo así. No hay mucho que cambiar.

Oh mama mia... Lee ya la información. Me sorprende mucho que no lo sepas, y que cuando te lo cuenten también tengas dudas. Ni siquiera voy a mirar en dirección al Servicio de Atención al Cliente por esas preguntas tan infantiles: se van a reír de ti. Entonces pregúntales tú mismo: tienes un enlace a servicedesk en tu perfil.
 
Nikolai Semko:

Me parece que este no es un buen ejemplo para demostrar la utilidad de la POO.
He aquí, por ejemplo, una variante que utiliza sólo una función:

puede, por supuesto, quitarlo deOnTick e insertarlo enOnTimer

No he mirado la lógica, bueno supongamos que hipotéticamente funciona correctamente.

¿Y por cualquier personaje al azar?

Imagínese que el programa utiliza una lista de símbolos de la ventana de Visión General del Mercado, y que el usuario puede cambiar los conjuntos de símbolos en cualquier momento.

 
Personalmente no he visto el código OOP de @Nikolai Semko.


Respetuosamente.

 

Artyom está un poco atrasado en su pregunta, pero la cuestión es la siguiente: escribirlo en estilo procedimental para que funcione correctamente

void OnTick()
 {
 
  if(IsNewBar("AUDCAD",PERIOD_H1)) {
   // задача №1
  }
 
  if(IsNewBar("GBPJPY",PERIOD_M15)) {
   // задача №2
  }
 
  if(IsNewBar("EURUSD",PERIOD_H4)) {
   // задача №3
  }

 }

// Функция "Новый бар"
bool IsNewBar(....) {
 здесь код, который нужно написать
}
 
Реter Konow:

Sí, con un temporizador. Aparece una nueva barra sin comillas. Nos interesa exactamente el evento de aparición de la barra, mientras que podemos fijar la cotización en Optisk();

En cualquier caso, aparecerá una barra.


Aquí tenemos la explicación de las barras:

La hora de apertura de la barra [i] no suele coincidir con la hora de llegada del tick. El tiempo de apertura de una barra para cualquier marco temporal es siempre un múltiplo del marco temporal. Cualquier primer tick que se produzca dentro de un marco temporal es una barra que se forma; si no llega ningún tick dentro del marco temporal, no se formará ninguna barra dentro del marco temporal.

 
Vitaly Muzichenko:

Artyom no cubrió realmente la cuestión, pero la pregunta es la siguiente: escríbalo en estilo procedimental, para que funcione correctamente

He querido añadir gradualmente tareas para que la gente las ejecute de forma rápida, cómoda, fácil y sencilla. Para mostrar más tarde cómo se hace fácilmente usando OOP.

Pero el principal rechazador de la POO se apartó de la solución del problema :)

 
Artyom Trishkin:

He querido añadir gradualmente tareas para que la gente las ejecute de forma rápida, cómoda, fácil y sencilla. Para mostrar entonces lo fácil que es hacerlo con OOP.

Pero el principal rechazador de la POO ha rechazado él mismo la solución de la tarea :)

Sí, no lo he dicho exactamente, lo parafrasearé:

Artem no ha abierto un poco la cuestión, y la cuestión es esta: escribir en estilo procedimental que funcione correctamente

Quizá vuelva y demuestre que es muy fácil y sencillo

 
Vitaly Muzichenko:

En realidad no lo he dicho yo, así que lo reformularé:

Artyom no cubrió realmente la pregunta, y la pregunta es esta: escribir en estilo procedimental, para que funcione correctamente

Tal vez vuelva y demuestre que es muy fácil y sencillo.

Mi objetivo era conseguir que su código de estilo procedimental funcionara al final en un bucle de este tipo:

   ENUM_TIMEFRAMES array_timeframes[]=
      {
      PERIOD_M1,PERIOD_M2,PERIOD_M3,PERIOD_M4,PERIOD_M5,PERIOD_M6,PERIOD_M10,PERIOD_M12,PERIOD_M15,PERIOD_M30,
      PERIOD_H1,PERIOD_H2,PERIOD_H3,PERIOD_H4,PERIOD_H6,PERIOD_H8,PERIOD_H12,PERIOD_D1,PERIOD_W1,PERIOD_MN1
      };
   int total=SymbolsTotal(true), total_tf=ArraySize(array_timeframes);
   for(int i=0; i<total; i++){
      string symbol_name=SymbolName(i,true);
      for(int j=0; j<total_tf; j++){
         if(IsNewBar(symbol_name,array_timeframes[j])){
            Print("Новый бар на ",symbol_name," ",EnumToString(array_timeframes[j]));
            }
         }
      }
 
Artyom Trishkin:

Tenía el objetivo de que el resultado final fuera que su código de estilo procedimental funcionara en dicho bucle:

El bucle de símbolos, la comprobación de la apertura de una nueva barra cuando llega una cotización, etc., podría añadirse fácilmente a mi solución. ¿Y qué tiene que ver la POO con esto?

Has elegido un ejemplo equivocado. Piensa en otra cosa en tu tiempo libre.