Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 154

 
nidves en primer lugar, hacer un mensaje correcto con el código, es muy difícil de entender, y en segundo lugar, me gustaría ver la estructura del archivo de noticias, de lo contrario no está claro qué datos se utiliza donde.
 

Lo primero que llama la atención es que está utilizando el EA como un script ordinario. Lee el manual para ver en qué se diferencian. ¡Es el script, no el Asesor Experto, el que es adecuado para su tarea!

En segundo lugar,¿por qué utiliza este diseño?

  for (count=1; count<=countstr; count++)
  {
   //----
   //----  
  if (count>=countstr) break;
  }

Y la raíz de su problema.

void CreatFile()
   {
    string Filepatch="Analyse news\\"+"Symbol"+"_"+IntegerToString(periodMT)+".csv";
    Comment("Creat a new file");
    int file=FileOpen(Filepatch, FILE_WRITE|FILE_CSV);
    FileWrite(file, "Symbol","Period","News","Data Time","Open","High","Low","Close");
    
    int  bar_index=iBarShift(symbolMT,periodMT,DateNews[count-1]); 
//Чему равен в этот момент count? 
//Для чего нужен был массив событий если в обработку попадает только одно событие?
//Функция iBarShift (так как вы используете) возвращает либо номер бара по времени либо ближайший номер бара если в истории есть пропуски 
//Внимательно почитайте описание 
    int  countBar=bar_index;
    
    for(count=1; count<=countstr; count++)
    {
    countBar--;
    
    FileWrite(file,symbolMT,periodMT,NameNews[count-1],DateNews[count-1],
    
    DoubleToStr(iOpen(symbolMT,periodMT,countBar))

    );
    }
    FileClose(file);
    ExpertRemove();
   }

¡Bueno, lo último que has metido en un simple programa describe lo que quieres de este programa y vamos a tratar de escribir el script paso a paso muy bien!

 
Vitaly Gorbunov:

Lo primero que llama la atención es que está utilizando el EA como un script ordinario. Lee el manual para ver en qué se diferencian. ¡Es el script, no el Asesor Experto, el que es adecuado para su tarea!

En segundo lugar,¿por qué utiliza este diseño?

Y la raíz de su problema.

¡Y por último, estás haciendo demasiado ruido en un programa sencillo, describe lo que quieres de este programa e intentemos escribir el script paso a paso!

Vitaly, ¡gracias por tu respuesta!

1)Sobre el guión, te entiendo, lo intentaré.

2)Bueno, todo es sencillo, interrumpo el bucle for.

3) Quiero crear un Asesor Experto o un script que descargue las cotizaciones de ciertos instrumentos + plazos, noticias específicas por fecha y hora específicas.

El resultado final de la escritura en el archivo debería ser el siguiente

SímboloPeriodoNoticiasDateTimeAbrirAltaBajoCerrar
GBPUSD5Índice de precios al consumo (IPC) dereferencia de Canadá (m/m)26.01.2018 16:30:000.000000000.000000000.000000000.00000000
GBPUSD5Índice de precios al consumo (IPC) de referencia de Canadá (m/m)21.12.2017 15:30:000.000000000.000000000.000000000.00000000
GBPUSD5Índice de precios al consumo (IPC) de referencia de Canadá (m/m)17.11.2017 15:30:000.000000000.000000000.000000000.00000000
GBPUSD5Índice de precios al consumo (IPC) de referencia de Canadá (m/m)20.10.2017 15:30:000.000000000.000000000.000000000.00000000

Y así en diferentes instrumentos+plazos+noticiasy fechas.

Hay un matiz más. Si los datos se descargan en el marco temporal de 60 minutos, las cotizaciones deberían corresponder a los marcos temporales de las 16:00 y las 15:00.

Si el horario de las noticias es 14:45, las cotizaciones deberían corresponder a la hora:

1 minuto - 14:45

5 minutos - 14:45

15 minutos - 14:45

30 minutos - 14:30

60 minutos - 14:00

Espero haber sido claro. Gracias

 

¡Mira este bucle de nuevo! El recuento de la variable sólo se modifica por la propia sentencia for, por lo que el if es superfluo en este bucle.

Definamos ahora cómo vamos a procesar los datos. Me parece que sería más lógico leer del archivo de noticias los parámetros de las mismas, procesar los datos y escribirlos en el archivo de cotizaciones. Recoger un array de noticias que luego hay que volver a recorrer un array para un registro no parece racional, además, muy a menudo en el procesamiento de arrays se pueden cometer muchos errores asociados a los índices.

 
Vitaly Gorbunov:

¡Mira este bucle de nuevo! El recuento de la variable sólo se modifica por la propia sentencia for, por lo que el if es superfluo en este bucle.

Definamos ahora cómo vamos a procesar los datos. Me parece que sería más lógico leer del archivo de noticias los parámetros de las mismas, procesar los datos y escribirlos en el archivo de cotizaciones. Recoger una matriz de noticias, que luego de nuevo para ejecutar a través de una matriz para un registro no parece racional, además, muy a menudo en el procesamiento de matrices puede hacer un montón de errores asociados con los índices.

Es decir, ¿crear archivos con comillas de antemano y añadir parámetros de noticias al archivo?

 
nidves:

¿Se refiere a crear los archivos de cotización por adelantado y añadir los parámetros de las noticias al archivo?

No me entiendes, ¡leemos del archivo de noticias, lo procesamos e inmediatamente lo escribimos en el archivo de citas y así sucesivamente hasta procesar todo el archivo de noticias!
 
Vitaly Gorbunov:
No me entiendes, ¡leemos del archivo de noticias, lo procesamos e inmediatamente lo escribimos en el archivo de citas y así sucesivamente hasta procesar todo el archivo de noticias!
Eso es lo que intento hacer, sólo que a través de arrays. ¿Cómo escribirías este código?
 
nidves:
Eso es lo que intento hacer, sólo que a través de arrays. ¿Cómo escribirías ese código?
¿Por qué utilizar una matriz donde no es necesaria? Cuanto más sencillo sea el código, menos errores podrá cometer.
 
Vitaly Gorbunov:
¿Por qué debo utilizar la matriz donde no es necesaria? Cuanto más sencillo sea el código, menos errores podrá cometer.

Estoy aprendiendo a trabajar con arrays a través de este código. Después de todo, la tarea no es complicada en principio.

OpenSymbol  [count-1]=iOpen(symbolMT,periodMT,numberBar);

Las comillas "abiertas" ya están almacenadas en el array anterior. Por lo tanto, sólo necesito sacar la cita de la fecha que necesito del array.

 
nidves:

Estoy aprendiendo a trabajar con arrays a través de este código. Después de todo, la tarea no es complicada en principio.

Las comillas "abiertas" ya están almacenadas en el array anterior. Por lo tanto, sólo tengo que sacar la cita de la fecha que necesito de este array.

Ahora me voy al verano y estaré allí el lunes. Si te interesa, agrégame como amigo y charlamos sin ensuciar el foro.
Razón de la queja: