Errores, fallos, preguntas - página 2784

 

printf(), doble, forma científica. El número de decimales que puedo establecer, la longitud total del número que puedo establecer:

double d=12.3456789;
printf("d=%012.4E",d);

Resultado: d=001.2346E+01

¿Puedo añadir ceros antes de una potencia? Debería ser así: d=001.2346E+0001
 
sershi87:
Como he dicho arriba después de la actualización el terminal va muy lento y se cuelga completamente. Antes de la actualización no había esos problemas y todo funcionaba bien. Soy consciente del tema de Debian y estoy totalmente de acuerdo con que es un disco muy estable. Sin embargo, creo que la necesidad de una versión nativa hace tiempo que debería haber llegado y que debemos perseguirla.

Tengo la suposición de que la ralentización y las caídas son causadas por una sincronización incorrecta con el servidor del historial.
Es decir, por ejemplo, la configuración de barras en la ventana de la terminal es de 100000, por ejemplo solicito 3000 barras desde el código
pero la sincronización puede fallar y comienza a sincronizarse con todo el historial disponible en el servidor y a bombear todo el historial desde el servidor.
Debido a este bombeo completo del historial, el terminal se cuelga, hasta que descarga todo el historial del servidor disponible.
Si esperas esta descarga, el terminal se cuelga y empieza a funcionar.

 
Roman:

Tengo la suposición de que la ralentización y las caídas son causadas por una sincronización incorrecta con el servidor del historial.
Es decir, por ejemplo, la configuración de barras en la ventana de la terminal es 100000, por ejemplo solicito 3000 barras desde el código
pero la sincronización puede fallar y comienza a sincronizar con todo el historial disponible en el servidor y a bombear todo el historial desde el servidor.
Debido a este bombeo completo del historial, el terminal se cuelga, hasta que descarga todo el historial del servidor disponible.
Si esperas esta descarga, el terminal se cuelga y empieza a funcionar.

El frenado se inicia sólo cuando se abre el cristal. Cierras la secadora y todo está bien. Pero no puedes trabajar sin ella.
 

MT5 (build 2496) es MUY malo con los gráficos personalizados que son calculados por la fórmula definida por el usuario.
Carga permanentemente la CPU - carga del núcleo al 100%.
Carga permanentemente el disco - sólo escribe allí desde 3 GB y más datos.
Terminal de Hogs si cualquier indicador con un buffer para ser dibujado en la ventana principal (por ejemplo, Indicadores/Tendencia/Media Móvil Adaptativa).


Pasos para jugar:
MetaQuotes-Demo, Hedge account.
Establecer el número máximo de barras por gráfico: 1000

Crear símbolo personalizado: Ctrl+U ==> Crear símbolo personalizado:
- Símbolo: NZDUSD_AUDUSD
- Fórmula: NZDUSD-AUDUSD
- Permitir precios negativos: Verdadero

Resultado: el sistema empieza a consumir hasta 3 GB en el disco.
Si abro un gráfico con un símbolo personalizado, la carga del núcleo saltará al 100%.
Si añado un indicador (por ejemplo, Indicadores/Tendencia/Media Móvil Adaptativa) y cambio el TF, la Ventana de Datos empezará a convulsionar, y en un par de segundos, el terminal no responderá en absoluto.


 
UPD. También se escriben decenas de miles de entradas monótonas en el registro:
QG      0       18:18:12.209    Synthetic Symbol        NZDUSD_AUDUSD: there is data from 2020.06.19 to 2020.06.19 (4294967295 M1 bars from 1970.01.01 00:00 to 2020.06.19 23:54)
ML      0       18:18:12.209    Synthetic Symbol        NZDUSD_AUDUSD: M1 bars processing finished
LF      0       18:18:12.212    Synthetic Symbol        NZDUSD_AUDUSD: M1 bar 2020.06.19 23:54 updated
GO      0       18:18:12.212    Synthetic Symbol        NZDUSD_AUDUSD: there is data from 2020.06.19 to 2020.06.19 (4294967295 M1 bars from 1970.01.01 00:00 to 2020.06.19 23:54)
CD      0       18:18:12.212    Synthetic Symbol        NZDUSD_AUDUSD: M1 bars processing finished
QN      0       18:18:12.215    Synthetic Symbol        NZDUSD_AUDUSD: M1 bar 2020.06.19 23:54 updated
FG      0       18:18:12.215    Synthetic Symbol        NZDUSD_AUDUSD: there is data from 2020.06.19 to 2020.06.19 (4294967295 M1 bars from 1970.01.01 00:00 to 2020.06.19 23:54)
JL      0       18:18:12.215    Synthetic Symbol        NZDUSD_AUDUSD: M1 bars processing finished
FF      0       18:18:12.218    Synthetic Symbol        NZDUSD_AUDUSD: M1 bar 2020.06.19 23:54 updated
QO      0       18:18:12.218    Synthetic Symbol        NZDUSD_AUDUSD: there is data from 2020.06.19 to 2020.06.19 (4294967295 M1 bars from 1970.01.01 00:00 to 2020.06.19 23:54)
MD      0       18:18:12.218    Synthetic Symbol        NZDUSD_AUDUSD: M1 bars processing finished
LN      0       18:18:12.221    Synthetic Symbol        NZDUSD_AUDUSD: M1 bar 2020.06.19 23:54 updated
GG      0       18:18:12.221    Synthetic Symbol        NZDUSD_AUDUSD: there is data from 2020.06.19 to 2020.06.19 (4294967295 M1 bars from 1970.01.01 00:00 to 2020.06.19 23:54)
CL      0       18:18:12.221    Synthetic Symbol        NZDUSD_AUDUSD: M1 bars processing finished
NF      0       18:18:12.223    Synthetic Symbol        NZDUSD_AUDUSD: M1 bar 2020.06.19 23:54 updated
IO      0       18:18:12.223    Synthetic Symbol        NZDUSD_AUDUSD: there is data from 2020.06.19 to 2020.06.19 (4294967295 M1 bars from 1970.01.01 00:00 to 2020.06.19 23:54)
ED      0       18:18:12.223    Synthetic Symbol        NZDUSD_AUDUSD: M1 bars processing finished
RN      0       18:18:12.227    Synthetic Symbol        NZDUSD_AUDUSD: M1 bar 2020.06.19 23:54 updated

El tamaño total del registro se acerca a 1 GB.


UPD... Si después de todos los cálculos se cierra el terminal y se vuelve a abrir - los 3-8 GB de datos calculados se borran con éxito y el cálculo se inicia de nuevo, utilizando una cantidad más modesta de espacio - unos 500 MB.
Si abro el gráfico con el símbolo personalizado después de reiniciar el terminal - se vuelve vacío por alguna razón, sólo 3 barras en M1 (el comportamiento es algo así como la bandera "Permitir precios negativos" desactivada).

 

¿Dónde puedo enviar mis informes de errores para que los desarrolladores los atiendan?

Desde algunas versiones la compilación de clases de plantilla que llaman a funciones estáticas está rota. Ejemplo:

Class Bar fue compilado con MQL5 de 64 y 32 bits. Ahora genera un error. build 2485 05 Jun 2020

class Foo {
public:
    static void Start() {
        Print("Hallo!");
    }
};

template<typename T>
class Bar {
public:
    Bar() {
        T::Start();
    }
};

class Foz {
public:
    Foz() {
    }

    void Start() {
        Print("Hallo!");
    }
};

template<typename T>
class Baz {
public:
    Baz() {
        T t;
        t.Start();                                                                                                                                                                                          
    }
};

void OnStart() {
    Bar<Foo> var;
    Baz<Foz> vaz;
}

template_static_bug.mq5 : information: compiling 'template_static_bug.mq5'
template_static_bug.mq5(12,12) : error 256: 'Start' - undeclared identifier
Result: 1 errors, 0 warning
 
YanGillan:

¿Dónde puedo enviar mis informes de errores para que los desarrolladores los atiendan?
Desde algunas versiones la compilación de clases de plantilla que llaman a funciones estáticas está rota. Ejemplo:
La clase Bar ha compilado con MQL5 de 64 y 32 bits. Ahora genera un error. build 2485 05 Jun 2020.

Serás más o menos el 5º usuario que se queja de este fallo de una forma u otra...

 
Sergey Dzyublik:

Serás el quinto usuario que se queja de este error de una forma u otra...

Sí, bueno, ¿qué hacer? Conozco la solución a través de la clase base, pero es una muleta. Y no es buena idea parchear todo el código.

¿Dónde puedo descargar las versiones anteriores? No los he encontrado en mi broker ni en la página de mt5.

 
YanGillan:

Sí, bueno, ¿qué hacer? Conozco la solución a través de la clase base, pero es una muleta. Y no es buena idea parchear todo el código.

¿Dónde puedo descargar las versiones anteriores? No los he encontrado en el sitio de mi broker y en el sitio de mt5 no está disponible.

 
YanGillan:

Conozco la solución a través de la clase base, pero es una muleta. Y no es buena idea parchear todo el código.

¿Se refiere a este método o a algún otro?

template<typename T>
class GetClassType{
public:
   class type : public T{}; 
};


class Foo {
public:
    static void Start() {
        Print("Hallo!");
    }
};

template<typename T>
class Bar {
public:
    Bar() {
        GetClassType<T>::type::Start();
    }
};

void OnStart() {
    Bar<Foo> var;
}
Razón de la queja: