Discusión sobre el artículo "Desarrollamos un Asesor Experto multidivisas (Parte 1): Funcionamiento conjunto de varias estrategias comerciales" - página 3

 
Yuriy Bykov #:

Estoy en el proceso de rediseñar casi desde cero mi código previamente escrito en los últimos años

Cuando refactorizas, siempre quieres hacerlo de tal manera que no tengas que rehacerlo más tarde y sea conveniente/perspectivo.

Child( const string sInputs ) : Parent(sInputs)
{
  this.SetInputs(sInputs);
}

virtual int SetInputs( const string sInputs )
{
  return(this.Inputs.FromString(sInputs) + this.Parent::SetInputs(sInputs));
} 

Como resultado, llegué a esta solución de trabajar con entradas.

 
fxsaber #:

Al refactorizar, siempre quieres hacerlo de manera que no tengas que rehacerlo más tarde y sea conveniente/perspectivo.

Parece arquitectónicamente prometedor cuando CStrategy se divide en tres entidades: el núcleo de negociación (da señales), la parte de negociación (negocia señales) y MM.

class CSimpleVolumeStrategy : public CStrategy {
private:
   //--- Parámetros de la señal de apertura
   int               signalPeriod_;       // Número de velas para promediar el volumen
   double            signalDeviation_;    // Desviación relativa de la media para la apertura de la primera orden
   double            signaAddlDeviation_; // Desviación relativa de la media en la apertura de la segunda orden y siguientes

   //--- Parámetros de órdenes pendientes
   int               openDistance_;       // Distancia del precio a la orden pendiente
   double            stopLevel_;          // Stop Loss (en puntos)
   double            takeLevel_;          // Take Profit (en pips)
   int               ordersExpiration_;   // Hora de vencimiento de las órdenes pendientes (en minutos)

   //--- Parámetros de gestión del capital
   int               maxCountOfOrders_;   // Número máximo de órdenes abiertas simultáneamente

Aquí los tenemos todos juntos. Pero es conveniente cuando se puede cambiar el mismo núcleo (nuevo Core2 en lugar de nuevo Core1) con otras entradas. Al mismo tiempo, la sustitución se puede hacer sin tocar las entradas, porque se definen sintácticamente de la misma manera - una cadena.


Lo mismo ocurre con control y MM. En general, propongo volver a pensar en una arquitectura universal.

 
fxsaber #:
Parece arquitectónicamente prometedor, cuando CStrategy se divide en tres entidades: núcleo de negociación (da señales), parte de negociación (negocia señales) y MM.....

Parece que este enfoque ya está implementado en SB - clase CExpert.

E incluso hay una clase CStrategy por Vasily Sokolov ))

Документация по MQL5: Стандартная библиотека / Модули стратегий / Базовые классы экспертов / CExpert
Документация по MQL5: Стандартная библиотека / Модули стратегий / Базовые классы экспертов / CExpert
  • www.mql5.com
CExpert - Базовые классы экспертов - Модули стратегий - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Vi la clase CExpert estándar, pero no funcionó para mí. Añadía demasiadas cosas que no necesitaba. La jerarquía de herencia también era un poco desalentadora, cuando la clase base para implementar algoritmos de gestión de dinero y riesgo y la clase base para crear generadores de señales de trading se heredan de la misma clase base.

No he visto la serie de artículos de Vasily Sokolov, gracias por el enlace, le echaré un vistazo.

 
Denis Kirichenko #:

Así que ya, al parecer, este enfoque se aplica en SB - clase CExpert.

Parece que la tarea de integración en el Asistente de Estrategia se resolvió allí. Es decir, el enfoque inicial es bastante diferente. Ciertamente, hay algunas coincidencias, pero es más bien una coincidencia.

 
Denis Kirichenko #:

E incluso hay una clase CStrategy de Vasily Sokolov ))

Me parece que el esqueleto arquitectónico debería ser extremadamente conciso y fácil de usar. Por eso la clase básica de TS es así.

Lo siguiente es engordar un poco el tendón. Debería ser muy sencillo.

Por desgracia, Vasily tiene un enfoque diferente.

 
fxsaber #:

Me parece que el esqueleto arquitectónico debe ser extremadamente conciso y fácil de usar. Por eso la clase básica de TC es así.

A continuación, un poco de desarrollo de los tendones. Debería ser muy simple.

Hay algo similar simple (en términos de interfaz) pero extendido (en términos de implementación) en el libro.

interface TradingSignal
{
   virtual int signal(void);
};

interface TradingStrategy
{
   virtual bool trade(void);
};

...
...
AutoPtr<TradingStrategy> strategy;
   
int OnInit()
{
   strategy = new SimpleStrategy(
      new BandOsMaSignal(...параметры...), Magic, StopLoss, Lots);
   return INIT_SUCCEEDED;
}
   
void OnTick()
{
   if(strategy[] != NULL)
   {
      strategy[].trade();
   }
}
...
Учебник по MQL5: Автоматизация торговли / Тестирование и оптимизация экспертов / Большой пример эксперта
Учебник по MQL5: Автоматизация торговли / Тестирование и оптимизация экспертов / Большой пример эксперта
  • www.mql5.com
Автоматизация торговли - Программирование на MQL5 для трейдеров - Учебник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Stanislav Korotky #:

Hay algo similarmente simple (en términos de interfaz) pero extendido (en términos de implementación) en el libro.

¿Dónde puedo descargar el código fuente?

 
fxsaber #:

¿Dónde descargar el código fuente?

https://www.mql5.com/es/code/45595

Программирование на MQL5 для трейдеров — исходные коды из книги. Часть 6
Программирование на MQL5 для трейдеров — исходные коды из книги. Часть 6
  • www.mql5.com
В шестой части книги "Программирование на MQL5 для трейдеров" мы изучим ключевую составляющую языка MQL5 — автоматизацию торговли. Начнем с описания основных сущностей, таких как спецификации финансовых инструментов и настройки торгового счета, которые необходимы для создания корректных советников.
 
¡¡¡Estrategia muy interesante!!!