[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 427

 

Buenas tardes. Pregunta sobre un puntero de archivo... En el libro de MQL4, que se encuentra en MQL4.community, en la sección "Standard Functions", hay un ejemplo del script "File Operations", que está pensado para leer datos de un archivo y mostrar objetos gráficos en una ventana de símbolos:

//--------------------------------------------------------------------
// timetablenews.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------- 1 --
int start()                            // Спец. функция start
  {
//--------------------------------------------------------------- 2 --
   int Handle,                         // Файловый описатель
       Stl;                            // Стиль вертикальной линии
   string File_Name="News.csv",        // Имя файла
          Obj_Name,                    // Bмя объекта
          Instr,                       // Название валюты
          One,Two,                     // 1я и 2я чать названия инстр.
          Text,                        // Текст описания события
          Str_DtTm;                    // Дата и время события(строка)
   datetime Dat_DtTm;                  // Дата и время события(дата)
   color Col;                          // Цвет вертикальной линии
//--------------------------------------------------------------- 3 --
   Handle=FileOpen(File_Name,FILE_CSV|FILE_READ,";");// Открытие файла
   if(Handle<0)                        // Неудача при открытии файла
     {
      if(GetLastError()==4103)         // Если файла не существует,..
         Alert("Нет файла с именем ",File_Name);//.. извещаем трейдера 
      else                             // При любой другой ошибке..
         Alert("Ошибка при открытии файла ",File_Name);//..такое сообщ
      PlaySound("Bzrrr.wav");          // Звуковое сопровождение
      return;                          // Выход из start()      
     }
//--------------------------------------------------------------- 4 --
   while(FileIsEnding(Handle)==false)// До тех пор, пока файловый ..
     {                                // ..указатель не в конце файла
      //--------------------------------------------------------- 5 --
      Str_DtTm =FileReadString(Handle);// Дата и время события(дата)
      Text     =FileReadString(Handle);// Текст описания события
      if(FileIsEnding(Handle)==true)   // Файловый указатель в конце
         break;                        // Выход из чтения и рисования
      //--------------------------------------------------------- 6 --
      Dat_DtTm =StrToTime(Str_DtTm);   // Преобразование типа данных
      Instr    =StringSubstr(Text,0,3);// Извлекаем первые 3 символа
      One=StringSubstr(Symbol(),0,3);// Извлекаем первые 3 символа
      Two=StringSubstr(Symbol(),3,3);// Извлекаем вторые 3 символа
      Stl=STYLE_DOT;                   // Для всех - стиль пунктир
      Col=DarkOrange;                  // Для всех - цвет такой
      if(Instr==One || Instr==Two)     // А для событий по нашему ..
        {                             // .. финансовому инструменту..
         Stl=STYLE_SOLID;              // .. такой стиль..
         Col=Red;                      // .. и такой цвет верт. линии
        }
      //--------------------------------------------------------- 7 --
      Obj_Name="News_Line  "+Str_DtTm;     // Имя объекта
      ObjectCreate(Obj_Name,OBJ_VLINE,0,Dat_DtTm,0);//Создаем объект..
      ObjectSet(Obj_Name,OBJPROP_COLOR, Col);       // ..и его цвет,..
      ObjectSet(Obj_Name,OBJPROP_STYLE, Stl);       // ..стиль..
      ObjectSetText(Obj_Name,Text,10);              // ..и описание 
     }
//--------------------------------------------------------------- 8 --
   FileClose( Handle );                // Закрываем файл
   PlaySound("bulk.wav");              // Звуковое сопровождение
   WindowRedraw();                     // Перерисовываем объекты
   return;                             // Выход из start()
  }
//--------------------------------------------------------------- 9 --

A continuación, al analizar este script en el Libro sobre MQL4, se da la siguiente frase: "si se elimina la comprobación especificada (las 2 últimas líneas del bloque 5-6), se creará un objeto extra en tiempo de ejecución. Y sólo después de eso, la condición de finalización del bucle while se activará y el control pasará al bloque 8-9".

¿Lo he entendido bien? Un puntero de archivo NO SE ENCUENTRA CON SIGNOS DE TEXTO (por ejemplo: texto| donde | es un puntero de archivo), sino que es un puntero CON EXPRESIÓN, por ejemplo: texto donde k es el carácter "a", k-ésimo es resaltado por un puntero de archivo. Esto explica la necesidad de las cuerdas (ver p.164):

      if(FileIsEnding(Handle)==true)   // Файловый указатель в конце
         break;                        // Выход из чтения и рисования
      //--------------------------------------------------------- 6 --

Sí, es cierto. En la penúltima iteración, después de crear el último objeto

2007.05.11 18:30;JPY

el puntero del archivo está en la posición del último objeto, es decir

2007.05.11 18:30;JPYFabricación industrial

(donde o es el carácter" o", k es el índice del archivo). Entonces, al pasar el control a la cabecera de la sentencia while, la función FileIsEnding(handle) obviamente devolverá true, porque el puntero del archivo NO está al final del archivo, sino al ÚLTIMO carácter de ese archivo. Entonces, cuando se ejecuten las dos primeras líneas, el puntero del archivo se moverá al espacio vacío y si no hay líneas

      if(FileIsEnding(Handle)==true)   // Файловый указатель в конце
         break;                        // Выход из чтения и рисования
      //--------------------------------------------------------- 6 --

el script creará un gráfico (es decir, una línea) con una descripción vacía y una coordenada de tiempo que corresponde a 0. Esto es lo que se quiere decir en la frase: "si se elimina la comprobación especificada (las dos últimas líneas del bloque 5-6), se creará un objeto extra en tiempo de ejecución". "

Pregunta: ¿he entendido bien?

a) la definición de un puntero de archivo;

b) el significado de la frase "Si se elimina la comprobación especificada (las 2 últimas líneas del bloque 5-6), se crearáun objeto extra en la ejecución del programa.Y sólo después de eso la condición de finalización del bucle while se activará y el control pasará al bloque 8-9".

P.S. Para no ensuciar el foro, gracias de antemano por su respuesta

 
Gente!!! por favor denme la función para abrir la barra de la hora (necesito determinar la Apertura de la vela anterior) y si (TimeMinute(TimeCurrent())==m && TimeSeconds(TimeCurrent())==n) por alguna razón no funciona poniendo m=1 n=1 pero les ruego, a quien le importa....
 
stater:
Gente!!! por favor denme la función para abrir la barra de la hora (necesito determinar la Apertura de la vela anterior) y si (TimeMinute(TimeCurrent())==m && TimeSeconds(TimeCurrent())==n) por alguna razón no funciona poniendo m=1 n=1 pero les ruego, a quien le importa....
https://docs.mql4.com/ru/series
 
gracias por sus comentarios, pero no entiendo qué función se utiliza para saber si una vela horaria se ha abierto....
 
stater:
gracias por sus comentarios, pero no entiendo qué función se utiliza para saber si una vela horaria se ha abierto....

iTime
 
El asesor sigue dando el error 0, ¿puede decirme cómo comprobar la causa, cómo encontrar este lugar?
 
FAQ:

iTime
Gracias por su paciencia.
 
Egori4:
EA sigue dando el error 0, aconsejar - ¿cómo comprobar lo que está causando, cómo encontrar este lugar?

El error 0 es que no hay errores.

Deje de hacer la impresión (alerta) =)

 

¿cómo se acorta la escritura de una fórmula si una ecuación se repite varias veces?

 
Elektronik:

¿cómo se acorta la escritura de una fórmula si una ecuación se repite varias veces?


Utilice la función