Discusión sobre el artículo "Recetas de MQL5 - implementamos el array asociativo o el diccionario para el acceso rápido a los datos" - página 3
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Decidí utilizar esta clase en mi EA como un contenedor de estrategias de la forma (StrategyGUID, Strategy), donde StrategyGUID es un identificador de tipo ulong; Strategy es una estrategia creada sobre la base de una clase con herencia de CObject.
En consecuencia, declaro las variables necesarias, incluyendo CDictionary StrategyBook - el libro de estrategias activas; creo las estrategias necesarias Strategy01, Strategy02, que en la función OnInit() del EA inician varios parámetros, incluyendo la asignación de GUIDs únicos. Al final de OnInit() decido guardar las estrategias en StrategyBook llamando al código
StrategyBook.AddObject(Strategy01.strGUID,Strategy01);
StrategyBook.AddObject(Strategy02.strGUID,Strategy02);
Y entonces obtengo el error "StrategyXX - parameter conversion not allowed" en ambas líneas.
Basado en mi experiencia con C#, todo se hace correctamente. Pero en MQL5 me sale este error.
¿Con qué puede estar relacionado?
Decidí utilizar esta clase en mi EA como un contenedor de estrategias de la forma (StrategyGUID, Strategy), donde StrategyGUID es un identificador de tipo ulong; Strategy es una estrategia creada sobre la base de una clase con herencia de CObject.
En consecuencia, declaro las variables necesarias, incluyendo CDictionary StrategyBook - el libro de estrategias activas; creo las estrategias necesarias Strategy01, Strategy02, que en la función OnInit() del EA inician varios parámetros, incluyendo la asignación de GUIDs únicos. Al final de OnInit() decido guardar las estrategias en StrategyBook llamando al código
StrategyBook.AddObject(Strategy01.strGUID,Strategy01);
StrategyBook.AddObject(Strategy02.strGUID,Strategy02);
Y entonces obtengo el error "StrategyXX - parameter conversion not allowed" en ambas líneas.
Basado en mi experiencia con C#, todo se hace correctamente. Pero en MQL5 me sale este error.
¿Qué puede estar relacionado con?
Puede haber varias razones. Lo más probable, o incompatibilidad de tipos o trabajo incorrecto con punteros. Además, no podemos excluir las peculiaridades de trabajar con métodos de plantilla (también tienen sus propios matices).
En general, es mejor utilizar un motor de operaciones ya hecho, ahorrará mucho tiempo y nervios: https://www.mql5.com/es/articles/2166.
Sí, eso es lo que finalmente decidí hacer.
Nuevo artículo MQL5 Cookbook: Implementación de un Array Asociativo o un Diccionario para Acceso Rápido a Datos ha sido publicado:
Autor: Vasiliy Sokolov
Gracias por todo el esfuerzo, pero no consigo que funcione ninguno de los ejemplos de código.
Parece que Dictionary dict; debería ser CDictionary dict;
¿Qué tal un simple ejemplo de trabajo?
En relación con la nueva MT4 (Build 1080, 12 de mayo de 2017) se producen estos errores al compilar e impide la ejecución:
'm_array' - no se permiten estructuras que contengan objetos Dictionary.mqh 303 25
Hola,
Como ya ha dicho otra persona, no hay ningún ejemplo compilable.
Sólo un archivo con comentarios en ruso.
Estoy usando con gratitud la biblioteca de Vasiliy con éxito. ¡Es una verdadera ayuda!
Recuerdo que también tuve algunos errores del compilador y pude solucionarlos. Sin embargo, no puedo decir cuales eran y que hice.
Y como estoy muy molesto por el formato del código MQL5 y siempre reformateo todo a un formato C++ moderno (sangría adecuada, evitando paréntesis innecesarios, sin comentarios desordenados, etc.), es imposible para mí decir cuál fue el verdadero cambio en el código. Todo lo que recuerdo es que los cambios fueron pequeños.
En caso de que desee utilizar la biblioteca con el formato adecuado, aquí está:
(Nótese que estoy usando tabuladores, por lo que el formato parece roto aquí, pero en el MetaEditor no lo está).
Creo que he encontrado un error al borrar un elemento e intentar llegar al último elemento:
El error en el CDictionary.mqh será:
invalid pointer access in 'Dictionary.mqh' (463,9)
¿Alguien puede confirmar esto? ¿Alguna idea de cómo solucionarlo?