Discusión sobre el artículo "Crear Multi-Expert Advisors basados en los modelos de trading" - página 4

 

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.

string            OrderSymbol(){return(m_symbol);}


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

switch(op_type)
 {
 case ORDER_TYPE_BUY:
 case ORDER_TYPE_SELL:
 rez=m_trade.PositionOpen(m_symbol,op_type,lot_send,price,0.0,0.0,comment);
 break;

en ORDER_TYPE_BUY: no hay ninguna Funktion.¿Es eso cierto?No hay función por Buy?
He cambiado el código en:

switch(op_type)
 {
 case ORDER_TYPE_BUY:
 rez=m_trade.PositionOpen(m_symbol,op_type,lot_send,price,0.0,0.0,comment);
 break;
 case ORDER_TYPE_SELL:
 rez=m_trade.PositionOpen(m_symbol,op_type,lot_send,price,0.0,0.0,comment);
 break;


Pero, en Jornual ves, no tiene Posición larga solo corta.


ea_modelclass



No encuentro el error.necesito Ayuda.


MfG Christian

Archivos adjuntos:
logfile.txt  100 kb
 
Después de las últimas actualizaciones del terminal el modelo dejó de funcionar. ¿Puede alguien explicarme qué ha pasado?
 
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.

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 

¡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

Cooperation on interesting projects: TRENDLINE AUTOTRADER and UNIVERSAL MULTICURRENCY MULTISTRATEGY TRADER TEMPLATE - MQL4 forum
  • www.mql5.com
Cooperation on interesting projects: TRENDLINE AUTOTRADER and UNIVERSAL MULTICURRENCY MULTISTRATEGY TRADER TEMPLATE - MQL4 forum
 
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 orden
   ulong             m_ticket;      // Billete de la orden principal
   ulong             m_ticket_sl;    // Ticket de la orden de recompra de la operación ejecutada en base a la orden principal (Stop Loss).
   ulong             m_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 principal
   datetime          m_time_setup;  // Hora de establecimiento del pedido
   double            m_price;       // Precio del pedido
   double            m_sl;          // Precio Stop Loss sugerido
   double            m_tp;          // Precio de Take Profit estimado
   double            m_volume_initial;      // Volumen del pedido
public:
                     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);
   }
   else return(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);
   }
   else return(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.