Discusión sobre el artículo "Asesor Experto multiplataforma: las clases CExpertAdvisor y CExpertAdvisor" - página 2
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
52959000 undeleted objects left
6619875 objects of type CExpertAdvisor left
6619875 objects of type CAccountInfo left
6619875 objects of type CSymbolManager left
6619875 objects of type COrderManager left
13239750 objects of type COrders left
6619875 objects of type CTradeManager left
6619875 objects of type CCandleManager left
1689399848 bytes of leaked memory
¿Cómo corrijo estos errores? El programa está diseñado en base a su muestra.
En la función OnDeinit() sólo tengo experts.OnDeinit().
En OnInit() sólo experts.OnTick();
Y en la función de señal que acaba de crear objetos indicadores personalizados de la misma manera como en sus muestras.
52959000 undeleted objects left
6619875 objects of type CExpertAdvisor left
6619875 objects of type CAccountInfo left
6619875 objects of type CSymbolManager left
6619875 objects of type COrderManager left
13239750 objects of type COrders left
6619875 objects of type CTradeManager left
6619875 objects of type CCandleManager left
1689399848 bytes of leaked memory
¿Cómo corrijo estos errores? El programa está diseñado en base a su muestra.
En la función OnDeinit() sólo tengo experts.OnDeinit().
En OnInit() sólo experts.OnTick();
Y en la función de señal que acaba de crear objetos indicadores personalizados misma manera que en sus muestras.
Eso está bien, mi culpa
Permítame informarle de otro posible error si no le importa.
No devuelve el número de órdenes abiertas. Empecé a comprobar y descubrí que el problema está relacionado con OrdersBase y el modo de ordenación.
Tuve que añadir el siguiente código:
No sé por qué no se inicializa con el modo de ordenación adecuado o tengo que inicializarlo adicionalmente... no tengo ni idea.
Permítame informarle de otro posible error si no le importa.
No devuelve el número de órdenes abiertas. Empecé a comprobar y descubrí que el problema está relacionado con OrdersBase y el modo de ordenación.
Tuve que añadir el siguiente código:
No sé por qué no se inicializa con el modo de ordenación adecuado o tengo que inicializarlo adicionalmente... no tengo ni idea.
El constructor COrdersBase tiene el siguiente código:
Al principio, ordena su array interno de objetos si aún no está ordenado, pero estoy seguro de que ya eres consciente de ello.
Puede quedar sin ordenar si se le añaden otros elementos sin utilizar NewOrder() (por ejemplo, Add()).
No puedo reproducir el problema que tienes. Mis resultados siempre aparecen ordenados durante toda la prueba. Intenta encontrar el momento en el que el array se desordena por primera vez en tu prueba. Puede ser una pista sobre el origen del problema.
Hola,
Le haré saber si me enfrento con el problema de nuevo.
Tengo otra pregunta. ¿Cómo puedo obtener la instancia experta actual que llama al módulo de señal?
Digamos que tengo una clase de señal que tiene una función para comprobar los resultados de órdenes anteriores. Tengo varias instancias de expertos. Entonces, ¿cómo puedo obtener las órdenes de expertos actuales que está llamando a las funciones de comprobación de la señal?
O tal vez hay otra solución adecuada. ¿Puede usted por favor compartir alguna idea o pieza de código para que.
Mi objetivo es crear una señal que funcione de manera diferente dependiendo del resultado de la orden/posición anterior.
Hay muchas maneras de hacerlo, puede variar de un programador a otro. Por defecto, las instancias de expertos actúan independientemente unas de otras. Usted puede implementarlo para que las instancias puedan compartir la misma información.
Si desea diferenciar las operaciones abiertas por cada uno de los expertos, puede empezar por asignar un número mágico único para cada instancia. No puedo ayudarte más a menos que muestres tu código.
Enrico,
Mi código se basa totalmente en sus últimos ejemplos.
Sólo tengo una definición global CExpertAdvisors expertos;
En OnInit() inicializo el módulo dinero/paradas/señal y luego los añado para cada instancia de experto.
En OnTick() solo tengo experts.OnTick()
Y tengo mi clase de señal personalizada con Calculate(), LongCondition(), ShortCondition() y otros. Esta señal se añade para cada instancia de experto.
Ahora, solo quiero que la logica de la señal dependa de cada instancia especifica de experto ultimo resultado de orden/posicion. No está relacionado con el número mágico (por cierto, todas mis instancias de expertos tienen diferentes magias). En la señal llamada funciones Calculate(), LongCondition(), ShortCondition() no tengo magia o cualquier otro detalle que me puede ayudar a identificar la instancia de expertos y luego encontrar sus órdenes.
En cuanto al código, que sea Calculate() función como esta:
Espero que se entienda. ¿Hay alguna manera de implementar esto sin modificar el código de su biblioteca?
Hola Enrico,
Todavía estoy tratando de encontrar una manera posible de identificar qué instancia de expertos llamando funciones de comprobación de señales. ¿Cómo puedo hacerlo? ¿Alguna pista por favor?
Otra pregunta. Si quiero tener un experto con varios pares, ¿cómo lo inicializo? En CExpertAdvisorBase::Init() tengo que especificar un nombre de simbolo.
¿Cómo puedo crear un tipo de MM basado en los resultados de pedidos anteriores? Es tan poco flexible...