Discusión sobre el artículo "Trabajando con las series temporales en la biblioteca DoEasy (Parte 35): El objeto "Barra" y la lista de serie temporal del símbolo"

 

Artículo publicado Trabajando con las series temporales en la biblioteca DoEasy (Parte 35): El objeto "Barra" y la lista de serie temporal del símbolo:

Con este artículo, comenzamos una nueva serie en la descripción de la biblioteca "DoEasy" para la creación rápida y sencilla de programas. Hoy, empezaremos a preparar la funcionalidad de la biblioteca para acceder a los datos de las series temporales de los símbolos y trabajar con los mismos. Asimismo, crearemos el objeto "Barra", encargado de guardar los datos tanto básicos como ampliados de la barra de la serie temporal, y también ubicaremos los objetos de barra en la lista de serie temporal para que resulte más cómodo buscar y clasificar dichos objetos.

Partiendo de este artículo, vamos a comenzar un nuevo apartado en la descripción de la biblioteca para la escritura cómoda de programas para los terminales MetaTrader5 y 4. La primera serie de artículos (34 partes) la dedicamos al desarrollo del concepto de los objetos de la bibilioteca y sus interacciones. Usando como base el desarrollo de dicho concepto, creamos una funcionalidad para trabajar con la cuenta: su estado actual y su historia.

En el momento actual, la biblioteca posee la siguiente funcionalidad:

  • sabe buscar, clasificar y comparar los datos de cualquier orden o posición,
  • ofrece acceso rápido y cómodo a cualquier propiedad de las órdenes y posiciones,
  • monitorea cualquier evento que suceda en la cuenta,
  • permite obtener y comparar los datos de la cuenta y los símbolos,
  • reacciona a los cambios de las propiedades de todos los objetos disponibles en nuestras bases de datos (colecciones) y envía notificaciones al programa sobre los eventos registrados por él.

Asimismo, podemos indicar a la biblioteca a qué eventos debe reaccionar, para luego enviar notificaciones sobre estos cuando sucedan.

Además, hemos organizado el trabajo con las funciones comerciales de los terminales, y también desarrollado nuevos tipos de solicitudes coemrciales: las solicitudes comerciales pendientes, que nos permitirán en el futuro, y directamente desde nuestro propio programa, crear su lógica de comportamiento en determinadas condiciones comerciales. Asimismo, las solicitudes comerciales pendientes ofrecen un amplio conjunto de posibilidades a la hora de crear nuevos tipos de órdenes pendientes.
Todo esto y mucho más ha sido creado y descrito en la anterior serie sobre la creación de la biblioteca.

En la segunda serie de descripción de la biblioteca se analizarán muchos aspectos sobre el trabajo con los datos de precios, los gráficos de los símbolos, las profundidades de mercado, los indicadores, etcétera. En general, la nueva serie de artículos está dedicada al desarrollo de la funcionalidad de la biblioteca para acceder, buscar, comparar y clasificar rápidamente cualquier matriz de datos de precio, así como los objetos para su guardado y sus fuentes.

Autor: Artyom Trishkin

 

No es correcto crear una nueva clase CSeries cuando ya existe una con el mismo nombre en SB.

Документация по MQL5: Стандартная библиотека / Индикаторы / Базовые классы / CSeries
Документация по MQL5: Стандартная библиотека / Индикаторы / Базовые классы / CSeries
  • www.mql5.com
Класс CSeries обеспечивает всем своим потомкам (классам таймсерий и индикаторов) возможность упрощенного доступа к общим функциям API MQL5 в части работы с серийными данными.
 
Denis Kirichenko:

No es correcto crear una nueva clase CSeries cuando ya existe una con el mismo nombre en SB.

Estoy de acuerdo. Gracias, lo arreglaré.

 

Un parámetro muy importante de cada barra es la hora del precio Máximo y la hora del precio Mínimo, o al menos una bandera que indique cuál de los dos precios Máximo o Mínimo se produjo primero en el tiempo. Esta información puede obtenerse analizando barras de un marco temporal inferior o directamente de M1. Por favor, añada esta funcionalidad.

 
Rosimir Mateev:

Un parámetro muy importante de cada barra es la hora del precio Máximo y la hora del precio Mínimo, o al menos una bandera que indique cuál de los dos precios Máximo o Mínimo se produjo primero en el tiempo. Esta información puede obtenerse analizando barras de un marco temporal inferior o directamente de M1. Por favor, añada esta funcionalidad.

Tal funcionalidad puede ser hecha por usted mismo - hay todos los datos en los marcos de tiempo inferiores, y hay todos los datos en sus barras. Este no es el último artículo, y en los próximos hay una lista completa de todos los plazos de cualquier símbolo - por lo que no debe sobrecargar el ya existente con la funcionalidad innecesaria. Especialmente porque causará un aumento en el tiempo de actualización de las series de tiempo. Por lo tanto, es mejor obtener datos de los ya disponibles a petición que hacer este tipo de análisis cuando no es necesario.

 

Hola Artyom -- usando DoEasy en lugar de la Librería Estándar, ¿cuál es el mejor enfoque para crear una clase para detectar diferentes patrones de velas, similar a lo que es CCandlePattern como en https://www.mql5.com/es/code/316?

Estoy preguntando para evitar hacer algo que sea completamente contrario a la dirección futura que están tomando con esta librería... Estaba pensando en (1) modificar o extender las clases CBar & CSeries para hacer lo que necesito; o (2) o usar los eventos DoEasy para detectar nuevas barras en los símbolos/periodos que me interesan, desde ahí implementar mi código para comprobar mis patrones de velas y usar DoEasy de nuevo para colocar órdenes o abrir posiciones. Quizás la opción #2 sea más limpia y menos arriesgada en relación a tus futuros desarrollos, pero hazme saber si tienes otra sugerencia por favor.

acandlepatterns.mqh

class  CCandlePattern : public  CExpertSignal
  {
protected:

// ...

   //--- métodos, utilizados para la comprobación de la formación del patrón de velas
   double            AvgBody(int ind);
   double            MA(int ind)                const { return(m_MA.Main(ind));             }
   double            Open(int ind)              const { return(m_open.GetData(ind));        }
   double            High(int ind)              const { return(m_high.GetData(ind));        }
   double            Low(int ind)               const { return(m_low.GetData(ind));         }
   double            Close(int ind)             const { return(m_close.GetData(ind));       }
   double            CloseAvg(int ind)          const { return(MA(ind));                    }
   double            MidPoint(int ind)          const { return(0.5*(High(ind)+Low(ind)));   }
   double            MidOpenClose(int ind)      const { return(0.5*(Open(ind)+Close(ind))); }
   //--- métodos de comprobación de patrones de velas
   bool              CheckPatternThreeBlackCrows();
   bool              CheckPatternThreeWhiteSoldiers();
   bool              CheckPatternDarkCloudCover();
   bool              CheckPatternPiercingLine();
   bool              CheckPatternMorningDoji();
   bool              CheckPatternEveningDoji();
   bool              CheckPatternBearishEngulfing();
   bool              CheckPatternBullishEngulfing();
   bool              CheckPatternEveningStar();
   bool              CheckPatternMorningStar();
   bool              CheckPatternHammer();
   bool              CheckPatternHangingMan();

MQL5 Wizard - Trade Signals Based on Hammer/Hanging Man + MFI
MQL5 Wizard - Trade Signals Based on Hammer/Hanging Man + MFI
  • www.mql5.com
The generic idea is the following: the class of trading signals is derived from CExpertSignal, the next, it's necessary to override the LongCondition() and ShortCondition() virtual methods with your own methods. The best way is to create the separate class, derived from CExpertSignal for checking of formation of candlestick patterns. For...
 
ddiall :

Hola Artyom -- usando DoEasy en lugar de la Librería Estándar, ¿cuál es el mejor enfoque para crear una clase para detectar diferentes patrones de velas, similar a lo que es CCandlePattern como en https://www.mql5.com/es/code/316?

Estoy preguntando para evitar hacer algo que sea completamente contrario a la dirección futura que están tomando con esta librería... Estaba pensando en (1) modificar o extender las clases CBar & CSeries para hacer lo que necesito; o (2) o usar los eventos DoEasy para detectar nuevas barras en los símbolos/periodos que me interesan, desde ahí implementar mi código para comprobar mis patrones de velas y usar DoEasy de nuevo para colocar órdenes o abrir posiciones. Quizás la opción #2 sea más limpia y menos arriesgada en relación a tus futuros desarrollos, pero hazme saber si tienes otra sugerencia por favor.

acandlepatterns.mqh

class   CCandlePattern :  public   CExpertSignal
  {
protected :

// ...

    //--- métodos, utilizados para la comprobación de la formación del patrón de velas
    double             AvgBody( int  ind);
    double             MA( int  ind)                 const  {  return (m_MA.Main(ind));             }
    double             Open( int  ind)               const  {  return (m_open.GetData(ind));        }
    double             High( int  ind)               const  {  return (m_high.GetData(ind));        }
    double             Low( int  ind)                const  {  return (m_low.GetData(ind));         }
    double             Close( int  ind)              const  {  return (m_close.GetData(ind));       }
    double             CloseAvg( int  ind)           const  {  return ( MA(ind) );                    }
    double             MidPoint( int  ind)           const  {  return ( 0.5 *(High(ind)+Low(ind)) );   }
    double             MidOpenClose( int  ind)       const  {  return ( 0.5 *(Open(ind)+Close(ind)) ); }
    //--- métodos de comprobación de patrones de velas
    bool               CheckPatternThreeBlackCrows();
    bool               CheckPatternThreeWhiteSoldiers();
    bool               CheckPatternDarkCloudCover();
    bool               CheckPatternPiercingLine();
    bool               CheckPatternMorningDoji();
    bool               CheckPatternEveningDoji();
    bool               CheckPatternBearishEngulfing();
    bool               CheckPatternBullishEngulfing();
    bool               CheckPatternEveningStar();
    bool               CheckPatternMorningStar();
    bool               CheckPatternHammer();
    bool               CheckPatternHangingMan();

La librería contendrá una clase para buscar patrones de velas PriceAction y varias formaciones de velas japonesas.

Me parece más prudente añadir una nueva propiedad a la clase objeto CBar. De este modo, la colección de series temporales podrá buscar las velas y los patrones deseados.

Así será en la biblioteca.

Por ahora, puedes buscar los patrones y velas que necesites en las listas de la colección de timeseries - ahí están todas las barras, y puedes usarlas para determinar el patrón.

 
Artyom Trishkin:

La biblioteca contendrá una clase para buscar patrones de velas PriceAction y varias formaciones de velas japonesas.

Me parece más prudente añadir una nueva propiedad a la clase objeto CBar. De este modo, la colección de series temporales podrá buscar las velas y los patrones deseados.

Así será en la biblioteca.

Por ahora, puedes buscar los patrones y velas que necesites en las listas de la colección de timeseries - ahí están todas las barras, y puedes usarlas para determinar el patrón.

Me parece estupendo. ¿Alguna idea de cuándo empezarás a implementar todas estas cosas buenas? ¿Estás interesado en alguna contribución de código?

 
Dima Diall :

Suena muy bien. ¿Tienes idea de cuándo empezarás a poner en práctica todo esto? ¿Estás interesado en alguna contribución de código?

Cuando llegue el momento :)