Muchas gracias al autor por el artículo y el código. Hoy he rediseñado el código de un simple Asesor Experto para la clase modelo. Después de algunos esfuerzos he conseguido que trabaje en paralelo en diferentes pares y timeframes.
Lo único que tuve que corregir en el código fue modernizar ligeramente la función GetMyPosition() para que cuente el volumen sólo por el símbolo pasado como parámetro. De lo contrario, un modelo que trabaje con un paquete de dos o más pares al llamar a GetMyPosition() obtiene el volumen total de varios pares en lugar del volumen separado necesario para cada par. También he añadido un método a la clase CTableOrders para obtener el símbolo de la orden.
Gracias, amigos, por apreciar mi trabajo. Es agradable darse cuenta de que las cuestiones que planteo son pertinentes y necesarias. No entremos en polémicas con críticos analfabetos. Siempre estarán ahí y no se les persuadirá ni siquiera en cosas obvias.
H.Y. Es mejor sobrecargar el método double GetMyPosition() como corresponde: double GetMyPosition(cadena Symbol). Te dará más flexibilidad y versatilidad.
Sin duda, el código será mejorado y cambiado con el tiempo, porque es imposible tener en cuenta todas las áreas posibles de su aplicación a la vez.
Gracias de nuevo, y ¡Feliz Año Nuevo 2011! ¡Felicidad y buena suerte!
Gracias Vasily por el artículo - en mi opinión este es el mejor enfoque hasta ahora. Es increíble como has podido depurar este código.
Vasily - ¿cómo depuraste este código sin un depurador en un probador? Me parece muy difícil trabajar sin un depurador en un probador - porque las señales son diferentes y en condiciones diferentes.
YYURIYY: Después de las últimas actualizaciones del terminal el modelo dejó de funcionar. ¿Alguien puede explicar qué ha pasado?
Igualmente. Llevo una semana analizando el código coma a coma. La estrategia coloca órdenes de venta, pero la función GetNumberOrders() devuelve sólo órdenes de venta = 0, pero órdenes de compra = 1.
Me gustaría pedirle a Vasily, como desarrollador de este código, que me ayude. Todavía no puedo averiguar cuál es la razón.
Me alegro de que más gente cosa acerca de esta idea. Una vez antes de un tiempo me tryied para desarrollar multidivisa multistrategy EA plantilla en MQL4
Desde MQL5 está aquí yo estaba tratando de diseñar el modelo de objetos de tal EA y empezar a ponerlo en práctica
Desafortunadamente no tengo tiempo libre para estas actividades... :-(
por favor continuen con este proyecto...esa es la forma en que pienso... tener un framework, donde sea posible implementar facilmente un monton de estrategias y con la posibilidad de activar/desactivar cualquiera de ellas, manual o incluso automaticamente. Así podemos tener una cartera de EA's e incluso añadir o quitar algunos EA's si es necesario.
YYURIYY: Después de las últimas actualizaciones del terminal el modelo dejó de funcionar. ¿Puede alguien explicarme qué ha pasado?
Creo que lo he averiguado. En el código hay que cambiar :
#property copyright "Copyright 2010, MetaQuotes Software Corp."#property link "http://www.mql5.com"#include <Trade\_OrderInfo.mqh>#include <Trade\_HistoryOrderInfo.mqh>#include <Arrays\List.mqh>class CTableOrders : CObject
{
private:
ulong m_magic; // Magik del experto que emitió la ordenulong m_ticket; // Billete de la orden principalulongm_ticket_sl; // Ticket de la orden de recompra de la operación ejecutada en base a la orden principal (Stop Loss).ulongm_ticket_tp; // Ticket de la orden de recompra de la operación ejecutada en base a la orden principal (Take Profit)ENUM_ORDER_TYPE m_type; // Tipo de orden principaldatetime m_time_setup; // Hora de establecimiento del pedidodouble m_price; // Precio del pedidodoublem_sl; // Precio Stop Loss sugeridodoublem_tp; // Precio de Take Profit estimadodouble m_volume_initial; // Volumen del pedidopublic:
CTableOrders();
bool Add(COrderInfo &order_info, double stop_loss, double take_profit);
bool Add(CHistoryOrderInfo &history_order_info, double stop_loss, double take_profit);
double StopLoss(void){return(m_sl);}
double TakeProfit(void){return(m_tp);}
ulong Magic(){return(m_magic);}
ulong Ticket(){return(m_ticket);}
int Type() const;
datetime TimeSetup(){return(m_time_setup);}
double Price(){return(m_price);}
double VolumeInitial(){return(m_volume_initial);}
};
CTableOrders::CTableOrders(void)
{
m_magic=0;
m_ticket=0;
m_type=0;
m_time_setup=0;
m_price=0.0;
m_volume_initial=0.0;
}
bool CTableOrders::Add(CHistoryOrderInfo &history_order_info, double stop_loss, double take_profit)
{
if(HistoryOrderSelect(history_order_info.Ticket())){
m_magic=history_order_info.Magic();
m_ticket=history_order_info.Ticket();
m_type=history_order_info.OrderType();
m_time_setup=history_order_info.TimeSetup();
m_volume_initial=history_order_info.VolumeInitial();
m_price=history_order_info.PriceOpen();
m_sl=stop_loss;
m_tp=take_profit;
return(true);
}
elsereturn(false);
}
bool CTableOrders::Add(COrderInfo &order_info, double stop_loss, double take_profit)
{
if(OrderSelect(order_info.Ticket())){
m_magic=order_info.Magic();
m_ticket=order_info.Ticket();
m_type=order_info.OrderType();
m_time_setup=order_info.TimeSetup();
m_volume_initial=order_info.VolumeInitial();
m_price=order_info.PriceOpen();
m_sl=stop_loss;
m_tp=take_profit;
return(true);
}
elsereturn(false);
}
int CTableOrders::Type() const
{
return((ENUM_ORDER_TYPE)m_type);
}
El alcance de este artículo es amplio y *muy* bien pensado.
No puedo expresar con palabras lo mucho que aprecio tus esfuerzos en la construcción de este marco; también has explicado el razonamiento detrás de tu enfoque a un nivel comprensible (¡al menos para mí!). Estoy de acuerdo en que este artículo va mucho más allá de los conceptos: es una aplicación práctica, adecuada y, lo que es más importante, prudente de las técnicas de negociación y programación OO.
Una petición - ¿se pueden traducir los comentarios en los archivos en inglés? Además, ¿alguien me puede dirigir a las herramientas para seguir trabajando con el idioma ruso? Los comentarios en MetaEditor ni siquiera aparecen como lengua rusa, más bien como caracteres acentuados confusos no muy diferente de este ejemplo:
// Èíèöèàëèçèóðóåì óêàçàòåëü ìîäåëüþ MACD
He estado utilizando Chrome + Google Translate para ver el sitio ruso desde hace algún tiempo, pero en los artículos más largos (especialmente éste) sólo puedo obtener una longitud finita del documento traducido. Tenía muchas ganas de leer en profundidad este artículo y tuve que esperar algún tiempo, lo cual, al menos para mí, ¡era difícilmente tolerable! ¡Cualquier consejo para ser más respetuoso con las lenguas extranjeras será aceptado con gran consideración!
Una obra maestra, señor Sokolov. Mis felicitaciones y gratitud le envío por su trabajo, y espero con interés la aplicación de mis visiones para este gran enfoque de los sistemas de comercio. Usted ha resuelto muchos conflictos que tenía al tratar de diseñar un sistema que podría manejar mis requisitos del sistema que en última instancia quiero comerciar. Para los problemas que quedan por resolver, este marco dirige mis esfuerzos en la dirección correcta por diseño.
Para iniciar sesión y usar el sitio web MQL5.com es necesario permitir el uso de Сookies.
Por favor, active este ajuste en su navegador, de lo contrario, no podrá iniciar sesión.
Ha iniciado sesión. La autenticación de dos factores se ha desactivado. Vuelva a configurarla y escanee un nuevo código QR, o continúe con la autenticación de dos factores desactivada.
Muchas gracias al autor por el artículo y el código. Hoy he rediseñado el código de un simple Asesor Experto para la clase modelo. Después de algunos esfuerzos he conseguido que trabaje en paralelo en diferentes pares y timeframes.
Lo único que tuve que corregir en el código fue modernizar ligeramente la función GetMyPosition() para que cuente el volumen sólo por el símbolo pasado como parámetro. De lo contrario, un modelo que trabaje con un paquete de dos o más pares al llamar a GetMyPosition() obtiene el volumen total de varios pares en lugar del volumen separado necesario para cada par. También he añadido un método a la clase CTableOrders para obtener el símbolo de la orden.
Gracias de nuevo!
Gracias, amigos, por apreciar mi trabajo. Es agradable darse cuenta de que las cuestiones que planteo son pertinentes y necesarias. No entremos en polémicas con críticos analfabetos. Siempre estarán ahí y no se les persuadirá ni siquiera en cosas obvias.
H.Y. Es mejor sobrecargar el método double GetMyPosition() como corresponde: double GetMyPosition(cadena Symbol). Te dará más flexibilidad y versatilidad.
Sin duda, el código será mejorado y cambiado con el tiempo, porque es imposible tener en cuenta todas las áreas posibles de su aplicación a la vez.
Gracias de nuevo, y ¡Feliz Año Nuevo 2011! ¡Felicidad y buena suerte!
Gracias Vasily por el artículo - en mi opinión este es el mejor enfoque hasta ahora. Es increíble como has podido depurar este código.
Vasily - ¿cómo depuraste este código sin un depurador en un probador? Me parece muy difícil trabajar sin un depurador en un probador - porque las señales son diferentes y en condiciones diferentes.
Comparte tu experiencia de depuración.
Hola. Respekt para este gran Tutorial.Verry gran elogio a usted.
He depurado este código y encontrar un error en la línea 355 en Model.mqh
en ORDER_TYPE_BUY: no hay ninguna Funktion.¿Es eso cierto?No hay función por Buy?
He cambiado el código en:
Pero, en Jornual ves, no tiene Posición larga solo corta.
No encuentro el error.necesito Ayuda.
MfG Christian
Después de las últimas actualizaciones del terminal el modelo dejó de funcionar. ¿Alguien puede explicar qué ha pasado?
Igualmente. Llevo una semana analizando el código coma a coma. La estrategia coloca órdenes de venta, pero la función GetNumberOrders() devuelve sólo órdenes de venta = 0, pero órdenes de compra = 1.
Me gustaría pedirle a Vasily, como desarrollador de este código, que me ayude. Todavía no puedo averiguar cuál es la razón.
¡Felicitaciones por este artículo!
Me alegro de que más gente cosa acerca de esta idea. Una vez antes de un tiempo me tryied para desarrollar multidivisa multistrategy EA plantilla en MQL4
Desde MQL5 está aquí yo estaba tratando de diseñar el modelo de objetos de tal EA y empezar a ponerlo en práctica
Desafortunadamente no tengo tiempo libre para estas actividades... :-(
por favor continuen con este proyecto...esa es la forma en que pienso... tener un framework, donde sea posible implementar facilmente un monton de estrategias y con la posibilidad de activar/desactivar cualquiera de ellas, manual o incluso automaticamente. Así podemos tener una cartera de EA's e incluso añadir o quitar algunos EA's si es necesario.
¡¡¡Gracias por esto!!!
PD: aquí tenéis un enlace por si os interesa...
https:// www.mql5.com/en/forum/118148
Después de las últimas actualizaciones del terminal el modelo dejó de funcionar. ¿Puede alguien explicarme qué ha pasado?
Creo que lo he averiguado. En el código hay que cambiar :
El alcance de este artículo es amplio y *muy* bien pensado.
No puedo expresar con palabras lo mucho que aprecio tus esfuerzos en la construcción de este marco; también has explicado el razonamiento detrás de tu enfoque a un nivel comprensible (¡al menos para mí!). Estoy de acuerdo en que este artículo va mucho más allá de los conceptos: es una aplicación práctica, adecuada y, lo que es más importante, prudente de las técnicas de negociación y programación OO.
Una petición - ¿se pueden traducir los comentarios en los archivos en inglés? Además, ¿alguien me puede dirigir a las herramientas para seguir trabajando con el idioma ruso? Los comentarios en MetaEditor ni siquiera aparecen como lengua rusa, más bien como caracteres acentuados confusos no muy diferente de este ejemplo:
// Èíèöèàëèçèóðóåì óêàçàòåëü ìîäåëüþ MACD
He estado utilizando Chrome + Google Translate para ver el sitio ruso desde hace algún tiempo, pero en los artículos más largos (especialmente éste) sólo puedo obtener una longitud finita del documento traducido. Tenía muchas ganas de leer en profundidad este artículo y tuve que esperar algún tiempo, lo cual, al menos para mí, ¡era difícilmente tolerable! ¡Cualquier consejo para ser más respetuoso con las lenguas extranjeras será aceptado con gran consideración!
Una obra maestra, señor Sokolov. Mis felicitaciones y gratitud le envío por su trabajo, y espero con interés la aplicación de mis visiones para este gran enfoque de los sistemas de comercio. Usted ha resuelto muchos conflictos que tenía al tratar de diseñar un sistema que podría manejar mis requisitos del sistema que en última instancia quiero comerciar. Para los problemas que quedan por resolver, este marco dirige mis esfuerzos en la dirección correcta por diseño.