Características del lenguaje mql4, sutilezas y técnicas - página 14

 
Nota para los desarrolladores.


https://docs.mql4.com/ru/basis/types/integer


El estándar C++ sólo garantiza el tamaño del tipo char. Las longitudes de los otros tipos son específicas de la implementación. La tabla de coincidencias es incorrecta y puede provocar un comportamiento indefinido.

Целые типы - Типы данных - Основы языка - Справочник MQL4
Целые типы - Типы данных - Основы языка - Справочник MQL4
  • docs.mql4.com
Целые типы представлены в языке MQL4 одиннадцатью видами. Некоторые из типов могут использоваться вместе с другими, если этого требует логика программы, но при этом необходимо иметь ввиду правила преобразования типов. В таблице приведены характеристики каждого типа. Кроме того, в...
 
Los comentarios no relacionados con este tema han sido trasladados a "Preguntas de los principiantes de MQL4 MT4 MetaTrader 4".
 

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Bichos, errores, preguntas

fxsaber, 2018.12.01 11:15

Diseño de superfreno
string Str[];
const int handle = FileOpen(FileName, FILE_READ | FILE_ANSI | FILE_TXT);  

FileReadArray(handle, Str);

Un archivo de 40Mb de 1 millón de líneas tarda 18 segundos en leerse.


El mismo resultado de salida, pero hecho de manera diferente

  uchar Bytes[];
  const int handle = FileOpen(FileName, FILE_READ | FILE_BIN);
  
  FileReadArray(handle, Bytes);

  string Str[];
  StringSplit(CharArrayToString(Bytes), '\n', Str);

Ya está hecho en 0,5 segundos.


 

Sobrecarga de 16Gb de RAM con tareas. Chrome acabó congelándose, MT5 con la optimización en marcha - sin problemas. Pero más interesante es MT4.

Los indicadores siguen funcionando, pero los Asesores Expertos se detienen debido a "fuera de rango" por la ausencia de la comprobación del resultado de ArrayResize.

No siempre quiero comprobar ArrayResize pero aquí se confirma que la ausencia de esta comprobación puede detener, por ejemplo, un EA en vivo en VPS.


Lo único que no puedo entender es cómo se ha quedado "fuera de rango" si ArrayResize se hizo previamente con una gran Reserva?

 
fxsaber:

Sobrecarga de 16Gb de RAM con tareas. Chrome acabó congelándose, MT5 con la optimización en marcha - sin problemas. Pero más interesante es MT4.

Los indicadores siguen funcionando, pero los Asesores Expertos se detienen debido a "fuera de rango" por la ausencia de la comprobación del resultado de ArrayResize.

No siempre quiero comprobar ArrayResize pero aquí se confirma que la ausencia de esta comprobación puede detener, por ejemplo, un Asesor Experto que lucha en VPS.


Lo único que no puedo entender es cómo se ha quedado "fuera de rango" si ArrayResize se hizo previamente con una gran Reserva?

fácil :-) esto es cierto para la mayoría de los idiomas/sistemas.

Reserve la memoria virtual asignada y cuando me quedé sin memoria física, no pude encontrar una página libre. Obtuvimos una excepción del procesador, que después de una serie de procesamientos se convirtió en un fuera de rango

Por cierto, el hecho de que MT no se estrellara en absoluto confirma la calidad de la mano de obra :-)

 

Un duro error en el tema de la ordenación de la historia. La clasificación por hora de cierre no siempre es así, por desgracia.

Escritura de comprobación

#property strict

void OnStart()
{
  datetime time = INT_MAX;
  
  for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
    {
      if (OrderCloseTime() > time)
      {
        Print(time);
        OrderPrint();
        
//        break;
      }
      
      time = OrderCloseTime();
    }
}


Es un misterio por qué no se pudo escribir inmediatamente un código tan elemental para la autocomprobación.

También es un rompecabezas: ¿cómo es posible que los pedidos no estén ordenados por tiempo? Hago esta pregunta porque he utilizado un probador personalizado en un QB. Y lógicamente, desde que la orden entró en la historia, el registro de ella allí más tarde que los que llegaron antes. No está nada claro cómo sacudir esta lógica.

Tal vez, las órdenes se almacenan en diferentes servidores de MT5 y este lío se produce durante la sincronización. Espero que sea un fallo del Terminal y no del servidor de MT4. También espero que esto no ocurra con los intercambios en MT.

 
fxsaber:

Un duro error en el tema de la clasificación del orden en la historia. La clasificación por hora de cierre no siempre es así, por desgracia.

Escritura de comprobación


Es un misterio por qué no se ha podido crear un código tan elemental para la autocomprobación instantánea.

También es un rompecabezas: ¿cómo es posible que los pedidos no estén ordenados por tiempo? Hago esta pregunta porque he utilizado un probador personalizado en un QB. Y lógicamente, desde que la orden entró en la historia, el registro de ella allí más tarde que los que llegaron antes. No está nada claro cómo sacudir esta lógica.

Tal vez, las órdenes se almacenan en diferentes servidores de MT5 y este lío se produce durante la sincronización. Espero que sea un error del Terminal y no del servidor de MT4. También espero que esto no ocurra con los intercambios en MT.

¿Has probado a cambiar la ordenación en el historial de la cuenta?

 
Artyom Trishkin:

¿Has probado a cambiar la ordenación en el historial de la cuenta?

No afecta al resultado.

 
Artyom Trishkin:

¿Has probado a cambiar la ordenación en el historial de la cuenta?

Sí, no debería tener ningún efecto. Sólo se ve afectado el número de pedidos en la pestaña del historial de la cuenta. Hay que vigilar eso.

 
fxsaber:

No afecta al resultado.

La hora de cierre de la posición la da el servidor.