Errores, fallos, preguntas - página 1851

 
kaus_bonus:

Gracias por su respuesta.

En general, los resultados son los que he mostrado en mis posts.

He estado probando en uno normal.

No es una trampa, son las mismas condiciones para ambos sistemas.


Y, sin embargo, los resultados entre MT4 y MT5 son casi 200 veces diferentes (debido a -debe controlar la sincronización completa con los datos del servidor? y el ping? ).

Alrededor de 0,6ms en MT4 lo voy a resolver todavía. Al parecer, los datos ya están preparados de antemano y, por tanto, esta cifra no muestra los costes reales.

MT4 tiene una ideología bastante diferente y, de hecho, el terminal copia una gran cantidad de datos para cada script/experto en el nivel del sistema fuera del código MQL4. Por lo tanto, las mediciones realizadas en MQL4 no suelen demostrar el consumo real de recursos para la recepción de datos. Los gastos, por supuesto, existen, pero están a otro nivel: el sistema es responsable de ellos.

Está claro que el mecanismo de MT4 (crear copias de datos de mercado para cada robot) no puede aplicarse cuando su tarea se escala a flujos de datos infinitos (historial profundo, decenas de miles de instrumentos). Por lo tanto, he tenido que cambiar y mejorar drásticamente MQL5 deshaciéndome de los accesos directos Open/High/Low/Close y cambiando a las funciones CopyXXX. Considerando el tamaño de los datos de MT5, es demasiado caro para un Asesor Experto construir la copia de EURUSD M1 para 6 millones de barras.

MT5/MQL5 utiliza la estrategia de carga de datos bajo demanda sin copiar por adelantado, lo que significa una mejor oportunidad para medir los costes reales del código MQL5.

Traer la base de datos a la memoria, comprobar la sincronización y preparar las cachés de un objeto complejo en MT5 en 113 milisegundos es aceptable.

 
kaus_bonus:

Por ejemplo, debido a que MT no tiene un screener de mercado, escribí un pequeño script que añade símbolos a la vigilancia del mercado pero los precios sólo están disponibles a través de CopyClose, no están disponibles a través de SymbolInfoDouble o a través de MqlTick hasta que un símbolo se añade a la vigilancia del mercado, por lo que este script se ejecuta infinitamente cuando se ejecuta con una cantidad muy grande de símbolos. Esto es sólo un ejemplo.

No es necesario añadir los instrumentos a la visión general del mercado para obtener su historial. Cualquier referencia a los datos de los símbolos desencadena la sincronización de los datos en segundo plano.

Ahora hay un problema con el uso de un nivel excesivo de almacenamiento en caché con toda la base de datos de gráficos levantada a su máxima profundidad, incluso si se solicitan los últimos datos. Esto da lugar a una gran sobrecarga de memoria para los examinadores que comprueban cientos de gráficos.

La tarea ya se ha configurado para cambiar esta estrategia y recoger los datos a no más de 500 barras de la fecha más lejana de la solicitud. Esto permitirá redactar sin problemas los filtros de mercado.

 
fxsaber:

¿Cuál es el camino correcto?


Tú preguntaste, tú respondiste:) Pues sí, lo es.
 
Алексей Тарабанов:

Tú preguntaste, tú respondiste:) Pues sí, así es.
Nunca vi la llamada del operador de la plantilla abreviada.
 
fxsaber:
Todavía no he visto una llamada de operador de plantilla acortada.

Hace años que no trabajo con estructuras. Si necesita iniciar un elemento de matriz de estructura completo, será una operación de cadena. Y el elemento entero de esa cadena convertida lo iniciaste correctamente, que es lo que reportó el compilador. Si quieres iniciar, comparar o manejar de alguna manera matrices de estructuras, pregunta cómo se representan/almacenan en MQL. No es nada complicado y agiliza mucho el trabajo.
 
Алексей Тарабанов:
Necesito saber qué entrada de sintaxis es la versión abreviada de esto
Struct.operator[]<int>(0);
 
fxsaber:
Necesito saber qué entrada de sintaxis es la versión abreviada de esto
Struct[0]
 
Комбинатор:
Struct[0].

A quién cómo
 
Комбинатор:
Struct[0].
Para no navegar por las páginas, voy a copiar el código

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

Bichos, errores, preguntas

fxsaber, 2017.04.12 14:27

struct STRUCT
{
  template <typename T>
  void operator []( int ) {}
};

void OnStart()
{
  STRUCT Struct;
  
  Struct.operator[]<int>(0); // Нормально
  Struct[0]<int>;            // Ошибка
}

Estas dos llamadas son diferentes.

Struct.operator[]<int>(0);
Struct.operator[]<MqlTick>(0);

Debe haber una entrada abreviada correspondiente para cada uno. ¿Cuál?

 
fxsaber:
Necesito saber qué entrada de sintaxis es una versión abreviada de esto

Ninguna entrada puede proporcionarle lo que desea. Fundamentalmente. Semánticamente.