Mt4 Fin de soporte. - página 35

 
Реter Konow:

Esta variante de la función no tiene ninguna función New_bar();

Esta es la opción que más recursos ha proporcionado. Además, tiene otra ventaja: el nuevo evento de la barra se guarda todas las veces que el código del usuario se ejecuta en un evento de temporizador o de tic.

Anteriormente, sólo se podía obtener este evento una vez y la bandera se borraba con New_bar(). La función especial ahora borra la matriz "event_new_bar[][]" una vez por minuto y se llama sólo después de la ejecución del código personalizado.

Las funciones personalizadas pueden acceder directamente a la matriz y recuperar la información de los nuevos eventos de barra cada vez que se ejecuta el código en un evento de temporizador o de tic.

Esto ahorra aún más recursos.

El último código tampoco funciona, la impresión tardó 7 minutos en llegar

//+------------------------------------------------------------------+
//Пример использования событий нового бара в пользовательском функционал.
//Просто обращаемся к глобальному массиву "События_нового_бара[a1][a2]" напрямую
//и используем событие в наших торговых алгоритмах.
//+------------------------------------------------------------------+
void Моя_стратегия_торговли_на_новых_барах()
{
  for(int a1 = 0; a1 < Всех_символов; a1++)
   {
    string Этот_символ    = Символы[a1];
    //----------------------------------
    for(int a2 = 0; a2 < Всех_таймфреймов; a2++)
      {
       bool   Новый_бар      = События_нового_бара[a1][a2];
       int    Этот_таймфрейм = Таймфреймы[a2];
       //----------------------------------
       if(Новый_бар && Этот_символ == "EURUSD" && Этот_таймфрейм == PERIOD_M5)
         {
          Print("M5");
         }
       //---------------------------------- 
       if(Новый_бар && Этот_символ == "EURUSD" && Этот_таймфрейм == PERIOD_M1)
         {
          Print("M1");
         }
       //----------------------------------        
      }
   }
}
 
Vitaly Muzichenko:

El último código tampoco funciona, la impresión tardó 7 minutos en llegar.

Esta función debe ser llamada desde OnTick o desde un temporizador.

Puede que haya algún pequeño problema, pero aún no he podido localizarlo. Echa un vistazo al código tú mismo y busca un error. Es tan simple como un 3 kopecks. Y además con comentarios.

Si no lo entiendes, pregunta. Tengo otras cosas que hacer.

 
Реter Konow:

Esta variante de la función no tiene ninguna función New_bar();

Esta es la opción que más recursos ha proporcionado. Además, tiene otra ventaja: el nuevo evento de la barra se guarda todas las veces que el código del usuario se ejecuta en un evento de temporizador o de tic.

Anteriormente, sólo se podía obtener este evento una vez y la bandera se borraba con New_bar(). La función especial ahora borra la matriz "event_new_bar[][]" una vez por minuto y se llama sólo después de la ejecución del código personalizado.

Las funciones personalizadas pueden acceder directamente a la matriz y recuperar la información de los nuevos eventos de barra cada vez que se ejecuta el código en un evento de temporizador o de tic.

Los recursos se ahorran aún más.


No entiendo el humor. ¿Por qué - el depurador no entiende el ruso? ¿O sólo soy yo quien tiene ese fallo? Ve las variables en latín, pero no en cirílico.

Peter, ¿entonces cómo usas el depurador, o no lo usas?

 

Cualquiera que esté interesado puede buscar un error en el código.

Lo esencial del código:

1. Declarar matrices globales:

  • matriz unidimensional para nombres de símbolos "Symbols[]"
  • matriz unidimensional para los plazos "Timeframes[]"
  • Una matriz bidimensional donde escribimos el número actual de barras "Number_bars[][]".
  • array bidimensional "New Bar Events[][]" donde escribiremos las banderas del nuevo evento de barra de cada símbolo y de cada timeframe. Los que están en las matrices "Symbols[]" y "Timeframes[]". Esta matriz se llenará en el bucle por símbolos y plazos en el evento del temporizador, una vez por minuto. Después de eso, se borrará. En el intervalo entre el llenado y el vaciado este array será llamado por la funcionalidad del usuario e informado de las nuevas barras.

2. En la inicialización, establece el tamaño de la matriz de símbolos y escribe allí los nombres de los símbolos de la revisión del mercado.

3. Establece el tamaño de la primera dimensión de la matriz "Number_bars[][]" que es igual al número de símbolos, y la segunda dimensión es igual al número de plazos. Esta matriz es como una tabla. Registrará el número actual de barras de cada símbolo y de cada marco temporal. El número es devuelto por la función iBars.

4. Establece el tamaño de la primera dimensión de la matriz "Events_new_bar[][]", que es igual al número de símbolos, y la segunda dimensión es igual al número de plazos. Esta matriz es como una tabla. Registrará las banderas de eventos de las nuevas barras de cada símbolo en cada marco temporal.

5. Dentro del temporizador, contamos el minuto y hacemos un bucle doble (anidado) sobre los símbolos (que están en el array Symbols[]) y los timeframes (que están en el array Timframes[]). Llamamos a la función iBars y obtenemos el número actual de barras de cada símbolo y de cada marco temporal de las matrices Symbols y Timeframe. En primer lugar, comparamos el número actual de barras con el número ya almacenado en la matriz. Si estos valores no son iguales, establecemos la bandera del nuevo evento de barra en la matriz "Event_new_bar[][]". A continuación, escribimos el número actual de barras en lugar del anterior.


La matriz global "events_new_bar[][]" está disponible en cualquier punto del programa y se llena automáticamente cada minuto, y también se borra automáticamente. Durante el periodo en el que se rellena la matriz, la funcionalidad del usuario recibe datos frescos sobre nuevas barras. La matriz se borra automáticamente.


Eso es todo.

 
Реter Konow:

Esta función debe ser llamada desde OnTick o desde un temporizador.

Puede que haya algún pequeño problema, pero aún no he podido localizarlo. Echa un vistazo al código tú mismo y busca un error. Es tan simple como un 3 kopecks. Y encima con comentarios.

Si no lo entiendes, pregúntalo. Tengo otras cosas que hacer.


respuesta profesional

 
Nikolai Semko:

No entiendo el humor. ¿Qué? ¿El depurador no entiende el ruso? ¿O sólo soy yo quien tiene ese problema? Ve las variables en latín, pero no en cirílico.

Peter, ¿entonces cómo usas el depurador, o no lo usas?

Nikolai, para mi vergüenza no tengo ni idea de cómo usar el depurador. Nunca lo he usado. ((
 
Galina Bobro:

respuesta profesional

Y esto es trolling profesional.
 
Реter Konow:

Esta función debe ser llamada desde OnTick o desde un temporizador.

Puede que haya algún pequeño problema, pero aún no he podido localizarlo. Echa un vistazo al código tú mismo y busca un error. Es tan simple como un 3 kopecks. Y además con comentarios.

Si no lo entiendes, pregúntalo. Tengo otras cosas que hacer.

Es tan complicado y retorcido que no se puede entender.

Lo siento, pero también es completamente ilegible.

 
Vitaly Muzichenko:

Es tan complicado y retorcido que es un lío.

Lo siento, pero también es completamente ilegible.

Ya sabes lo que dicen de que "no se puede... no torturar..."? Creo que es bueno.

 
Реter Konow:

Ya conoces el dicho de "no se puede... no torturar..."? Creo que es bueno.

Así es, así es como se ha conseguido que la tarea sea concluyente, bueno, o que no haya acertado en su solución.