Errores, fallos, preguntas - página 2677

 
fxsaber:

Liberando, por supuesto. El propio terminal almacena ticks en su caché, que no necesito durante el funcionamiento.

Es mejor que vuelva a plantear estas garrapatas más adelante en frío. Necesita un mecanismo para "enfriar" el Terminal.

No lo noté.

void OnStart()
  {
   Print("используется памяти до закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   MqlTick items[];
   ulong t0=GetMicrosecondCount();
   uint    count=CopyTicks(Symbol(),items,COPY_TICKS_INFO,0,100000000);
   t0=GetMicrosecondCount()-t0;
   Print ("Загружено за "+string(t0/1000)+" миллисекунд "+ (string)count+ " тиков");
   Print("используется памяти после закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   ArrayFree(items);
   Print("используется памяти после ArrayFree: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
  }


SZY Lo triste es que en la memoria, los ticks se almacenan sin empaquetar con 60 bytes por tick. Podría empaquetarse fácilmente 5 veces (~12 bytes por tic).

 
Stanislav Korotky:

Es mejor hacer la descarga automática como por CopyRates.

En este caso se desconoce el plazo. La descarga se inicia con una solicitud de símbolo de periodo.

Considere lo que se puede hacer

 
Nikolai Semko:

no se ha notado.

Hay que ver lo que consume el terminal.

void OnStart()
  {
//   Print("используется памяти до закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   Print("используется памяти до закачки истории: "+string(TerminalInfoInteger(TERMINAL_MEMORY_USED))+" Mb");
   MqlTick items[];
   ulong t0=GetMicrosecondCount();
   uint    count=CopyTicks(Symbol(),items,COPY_TICKS_INFO,0,1 e7);
   t0=GetMicrosecondCount()-t0;
   Print ("Загружено за "+string(t0/1000)+" миллисекунд "+ (string)count+ " тиков");
//   Print("используется памяти после закачки истории: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   Print("используется памяти после закачки истории: "+string(TerminalInfoInteger(TERMINAL_MEMORY_USED))+" Mb");
   ArrayFree(items);
//   Print("используется памяти после ArrayFree: "+string(MQLInfoInteger(MQL_MEMORY_USED))+" Mb");
   Print("используется памяти после ArrayFree: "+string(TerminalInfoInteger(TERMINAL_MEMORY_USED))+" Mb");
  }


El resultado está en un Terminal que lleva mucho tiempo funcionando. No hay EAs/indicadores funcionando. Dos gráficos, barras M1 sólo para el año en curso.

используется памяти до закачки истории: 1043 Mb
Загружено за 11223 миллисекунд 10000000 тиков
используется памяти после закачки истории: 1675 Mb
используется памяти после ArrayFree: 1102 Mb

60Mb no han sido liberados. El terminal vacío consume más de un gigabyte. La única forma de reducir el consumo es recargar el Terminal.

 
Sergey Dzyublik:

Buenas tardes, muchas gracias.
No he utilizado antes el operador new porque lógicamente debe ser más lento que ArrayResize con memoria reservada.
Pero estoy impresionado con los resultados obtenidos, resulta que es al revés, el array nativo mediante el operador new es más rápido.

MT5 (build 2363):

Lanzado en la beta 2364 (desafortunadamente tiene un error de compilación para new T() dentro de la plantilla)

Aquí están los registros de su script:

2020.03.19 10:39:45.784 Test (EURUSD,H1)        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
2020.03.19 10:39:46.765 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops=1000 ms=984
2020.03.19 10:39:48.233 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops=1000 ms=1469
2020.03.19 10:39:49.944 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator         : loops=1000 ms=1703
2020.03.19 10:39:50.923 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops=1000 ms=969
2020.03.19 10:39:52.392 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops=1000 ms=1484
2020.03.19 10:39:54.100 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator         : loops=1000 ms=1703
2020.03.19 10:39:55.079 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops=1000 ms=985
2020.03.19 10:39:56.548 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops=1000 ms=1469
2020.03.19 10:39:58.258 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator         : loops=1000 ms=1703
2020.03.19 10:39:59.237 Test (EURUSD,H1)        Test Class ArrayResize all                                  : loops=1000 ms=984
2020.03.19 10:40:00.705 Test (EURUSD,H1)        Test Class ArrayResize one by one with reserved memory      : loops=1000 ms=1469
2020.03.19 10:40:02.416 Test (EURUSD,H1)        Test Class ArrayResize one by one with new operator         : loops=1000 ms=1703
Puedes ver que ArrayResize para objetos ha empezado a funcionar más rápido.

Una vez más, la complejidad de una parte de la función ArrayResize se redujo de logaritmo a cero
 
Ilyas:
Podemos ver que ArrayResize para objetos es más rápido ahora.
Una vez más, hemos conseguido reducir la complejidad de una parte de la función ArrayResize de logaritmo a cero.

He conseguido comparar la velocidad de ArrayResizeReserve y ArrayOnNew en un proyecto real para el tipo de datos - clase con un solo campo int, número de registros 20M.

En MT5 (build 2363) en todos los parámetros comparados excepto uno ArrayOnNew era peor para ArrayResizeReserve:

Acceso de lectura/escritura (std::fill_n, std::copy, std::vector::clear): 2-2,5 veces más lento
Creación de todos los elementos a la vez (std::vector::resize) para memoria "fría"/"caliente" - 1,1-1,2 veces más lento

Creación de todos los elementos uno a uno (std::vector::push_back) para memoria "caliente" - 1,2 veces
más rápido

 

estos enlaces en la ayuda (editor) conducen a una página no encontrada


 
Error en MT5 (compilación 2363) Falta de coincidencia en las prioridades de ejecución de las funciones de plantilla en MQL en comparación con las funciones de plantilla en C++(en línea:https://onlinegdb.com/HkNqBDZ88).
El problema
se produce cuando la primera función de "prueba" contiene como argumento una clase base de plantilla totalmenteespecializada,
y la segunda función "test" sobrecarga la primera, es una función de plantilla y contiene una clase base de plantilla no especializada como argumento.

template<typename T>
struct B{
   T data;
};

template<typename T>
struct BB : public B<T>{};


template<typename T>                                             
struct A{
public:
   static void test(T& src){
      printf("1");
   }
   
   template<typename TT>
   static void test(B<TT>& src){
      printf("2");
   }
};
      

void OnStart(){
   BB<int> bb;
   A<B<int>>::test(bb);         //'test' - ambiguous call to overloaded function        
}
 
¡¡¡Hola a todos!!! Pregunta: Utilizo dos plataformas MT4 y MT5 en mi copyutera. MT4 se conecta a la señal sin ningún problema. Pero no puedo conectarme a otra señal de MT5. Tengo una cuenta y el movimiento de fondos se muestra, pero no hay ningún número de cuenta en la cuenta, no tengo ningún botón de señal en el tablero del terminal. Alquilé un servidor, vps, escribí que necesito la migración, pero el botón de migración no funciona. Por favor, dígame por qué.
 
Anna:
¡¡¡Hola a todos!!! Mi pregunta es: Uso dos plataformas MT4 y MT5 en mi copyutera. Me conecté a la señal de MT4 sin ningún problema. Pero no puedo conectarme a otra señal de MT5. Tengo una cuenta y el movimiento de fondos se muestra, pero no hay ningún número de cuenta en la cuenta, no tengo ningún botón de señal en el tablero del terminal. Alquilé un servidor, vps, escribí que necesito migrar, pero el botón de migración no funciona. Por favor, dígame por qué.

MetaTrader 5 (para el alquiler de alojamiento virtual incorporado en el terminal) requiere un sistema operativo de 64 bits.

 

en Win 10 ¿alguien conecta los agentes locales?

Intenté conectar 2 PCs, el agente remoto está constantemente listo-conectado-listo-conectado... no hay trabajos.

he mirado en el firewall creo que hay una marca de verificación para Metatrader Agent , exportar - importar el agente a través del archivo ve los puertos y el nombre del pc también

sospecho que tengo que redirigir los puertos a otro lugar?