[¡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 429

 

В документации есть 2 момента касательно индикаторов.

En constantes especiales, son:

" indicator_buffers número de buffers para calcular el indicador, hasta un máximo de 8 "

En los indicadores personalizados:

"Asigna memoria para los búferes utilizados para los cálculos de los indicadores personalizados. El número de buffers no puede exceder de 8 y ser menor que el valor especificado en la propiedad indicator_buffers. Si el indicador personalizado requiere búferes adicionales para el recuento, debe utilizar esta función para especificar el número total de búferes. "

Si se especifica el número de búferes, creo que esto ya significa asignar memoria para los búferes. Corrígeme si te refieres a otra cosa, por favor.

 

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".

¿Estoy leyendo 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

 

Por favor, díganme, no tengo experiencia, si entre dos ticks mi programa envía varios comandos al servidor, ¿se ejecutarán todos, o sólo el primer comando? ¿Dónde puedo encontrar información sobre este tema?

 
cubus:

Por favor, díganme, no tengo experiencia, si entre dos ticks mi programa envía varios comandos al servidor, ¿se ejecutarán todos, o sólo el primer comando? ¿Dónde puedo encontrar información sobre este tema?


Lee:

https://book.mql4.com/ru/basics/common

 
Muchas gracias.
 
Vladero:

Hola! Tengo una pregunta sobre los indicadores en MQL4 y no puedo resolverla... Por ejemplo, tengo un simple indicador fractal:

Si lo compilo de esta forma, al extender el borde izquierdo del gráfico y cargar el historial, empieza a dar fallos y muestra marcas donde no deberían estar (ver captura de pantalla en el archivo adjunto). Si comentamos una parte del código:

Entonces estos fallos desaparecen... Los mismos fallos aparecen al cargar el historial, si se rellenan sólo los elementos "no vacíos" de la matriz de indicadores y no se restablece el valor del indicador donde no hay etiquetas...

¿Por qué ocurre esto? ¿Por qué, resulta, es necesario recalcular todo el indicador al cargar el historial? ¿Y por qué tengo que anular los valores de los elementos "vacíos" del array?

Si las barras estuvieran indexadas de izquierda a derecha, al cargar el historial los índices de las barras cambiarían, y el indicador se mostraría incorrectamente sin recalcular, entonces entenderíamos este fallo... Pero en MT4 las barras se indexan de derecha a izquierda, por lo que, al cargar el historial, los índices de las barras, que estaban indexadas, deberían permanecer igual (y los valores del indicador, también), entonces, ¿por qué recalcular el indicador y de dónde vienen estos desplazamientos de marca?


¿Por qué es necesario recalcular todo el indicador al cargar el historial? ¿Y por qué los valores de los elementos "vacíos" de la matriz deben ponerse a cero? Y si no lo haces, los indicadores se muestran de forma incorrecta...
 
hoz:
#La propiedad indicator_buffers especifica el número de buffers a mostrar.
IndicatorBuffers especifica el número total de buffers utilizados.

Ejemplo.
#property indicator_buffers 2
.......... .................................
IndicadorBuffers 3

Dibuja dos líneas, el tercer buffer no se muestra pero se utiliza para los cálculos intermedios.
 
¿Me pueden decir cómo hacer salir 1 valor y un valor de indicador ya redibujado como 2 líneas, que se redibuja en un indicador separado? No lo entiendo, siempre sale el último valor redibujado.
 
Lamentablemente, nadie ha respondido sobre el error al intentar instalar la compilación 438 https://www.mql5.com/ru/forum/138609/page425
 

Hola.

Me puedes decir qué cambios debo hacer en el código para que el trailing se active inmediatamente y no después de haber entrado en beneficios.

Archivos adjuntos:
Razón de la queja: