Discussão do artigo "Trabalhando com séries temporais na biblioteca DoEasy (Parte 35): Objeto "Barra" e lista-série temporal do símbolo"

 

Novo artigo Trabalhando com séries temporais na biblioteca DoEasy (Parte 35): Objeto "Barra" e lista-série temporal do símbolo foi publicado:

Neste artigo, estamos lançando uma nova série de descrições de criação de bibliotecas DoEasy para criação simples e rápida de programas. Hoje começaremos a preparar a funcionalidade da biblioteca para acessar e trabalhar com dados de séries temporais de símbolos. Criaremos um objeto "Barra" que armazenará os dados básicos e avançados da barra da série temporal e colocaremos os objetos-barras na lista de séries temporais para facilitar a pesquisa e a classificação desses objetos.

Com este artigo, começamos uma nova seção para descrever a criação de uma biblioteca que facilita escrever programas para os terminais MetaTrader5 e 4. A primeira série de artigos (34 partes) foi dedicada ao desenvolvimento do conceito de objetos de biblioteca e às suas interconexões. Além disso, com base nesse conceito, foi criada uma funcionalidade para trabalhar com o estado e histórico atuais da conta.

Atualmente, a biblioteca possui a seguinte funcionalidade:

  • sabe pesquisar, classificar e comparar dados de qualquer ordem ou posição,
  • fornece acesso rápido e conveniente a quaisquer propriedades de ordens e posições,
  • controla todos os eventos que ocorrem na conta,
  • permite receber e comparar dados da conta e símbolos,
  • reage a alterações nas propriedades de todos os objetos disponíveis em seus bancos de dados (coleções) e envia notificações ao programa sobre os eventos registrados por ele.

Também podemos indicar à biblioteca a quais eventos deve responder e sobre quais enviar notificações.

Além disso, é possível trabalhar com as funções de negociação dos terminais, desenvolver novos tipos de solicitações de negociação, isto é, solicitações de negociação pendentes que nos permitirão no futuro, diretamente desde nosso programa, criar sua lógica de comportamento em determinadas condições e também fornecer muitos recursos para a criação de novos tipos de ordens pendentes.
Criamos e descrevemos tudo isso e muito mais na série anterior que descreve a criação da biblioteca.

Na segunda série, consideraremos muitos aspectos do trabalho com dados de preços, gráficos de símbolos, livro de ofertas, indicadores etc. Em geral, será dedicada uma nova série de artigos ao desenvolvimento da funcionalidade da biblioteca para acessar rápido, pesquisar, comparar e classificar quaisquer matrizes de dados de preços, bem como objetos de armazenamento e fontes.

Autor: Artyom Trishkin

 

É um pouco inaceitável ter uma nova classe CSeries quando já existe uma com o mesmo nome no SB.

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

É um pouco inaceitável ter uma nova classe CSeries quando já existe uma com o mesmo nome no SB.

Eu concordo. Obrigado, vou corrigir isso.

 

Um parâmetro muito importante de cada barra é o horário do preço máximo e o horário do preço mínimo, ou pelo menos um sinalizador indicando qual dos dois preços máximos ou mínimos ocorreu primeiro no tempo. Essas informações podem ser obtidas por meio da análise de barras de um período de tempo inferior ou diretamente do M1. Por favor, adicione essa funcionalidade.

 
Rosimir Mateev:

Um parâmetro muito importante de cada barra é o horário do preço máximo e o horário do preço mínimo, ou pelo menos um sinalizador indicando qual dos dois preços máximos ou mínimos ocorreu primeiro no tempo. Essas informações podem ser obtidas por meio da análise de barras de um período de tempo inferior ou diretamente do M1. Por favor, adicione essa funcionalidade.

Essa funcionalidade pode ser feita por você mesmo - há todos os dados nos timeframes inferiores e há todos os dados em suas barras. Este não é o último artigo, e nos próximos há uma lista completa de todos os timeframes de qualquer símbolo - portanto, você não deve sobrecarregar o artigo já existente com funcionalidades desnecessárias. Especialmente porque isso causará um aumento no tempo de atualização das séries temporais. Portanto, é melhor obter dados dos já disponíveis mediante solicitação do que fazer essa análise onde ela não é necessária.

 

Olá, Artyom. Usando a DoEasy em vez da Biblioteca Padrão, qual é a melhor abordagem para criar uma classe que detecte diferentes padrões de velas, semelhante ao CCandlePattern do site https://www.mql5.com/pt/code/316?

Estou perguntando para evitar fazer algo que seja completamente contrário à direção futura que você está tomando com essa biblioteca... Eu estava pensando em (1) modificar ou estender as classes CBar e CSeries para fazer o que preciso; ou (2) ou usar os eventos DoEasy para detectar novas barras nos símbolos/períodos nos quais estou interessado, a partir daí implementar meu código para verificar meus padrões de velas e usar o DoEasy novamente para colocar ordens ou abrir posições. Talvez a opção nº 2 seja mais limpa e menos arriscada em relação aos seus desenvolvimentos futuros, mas, se tiver outra sugestão, por favor, avise-me.

acandlepatterns.mqh

class  CCandlePattern : public  CExpertSignal
  {
protected:

// ...

   //--- métodos usados para verificar a formação do padrão de candlestick
   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 para verificação de padrões de candlestick
   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 :

Olá, Artyom. Usando o DoEasy em vez da Biblioteca Padrão, qual é a melhor abordagem para criar uma classe para detectar diferentes padrões de velas, semelhante ao CCandlePattern do site https://www.mql5.com/pt/code/316?

Estou perguntando para evitar fazer algo que seja completamente contrário à direção futura que você está tomando com essa biblioteca... Eu estava pensando em (1) modificar ou estender as classes CBar e CSeries para fazer o que preciso; ou (2) ou usar os eventos DoEasy para detectar novas barras nos símbolos/períodos nos quais estou interessado, a partir daí implementar meu código para verificar meus padrões de velas e usar o DoEasy novamente para colocar ordens ou abrir posições. Talvez a opção nº 2 seja mais limpa e menos arriscada em relação aos seus desenvolvimentos futuros, mas, se tiver outra sugestão, entre em contato comigo.

acandlepatterns.mqh

class   CCandlePattern :  public   CExpertSignal
  {
protected :

// ...

    //--- métodos usados para verificar a formação do padrão de candlestick
    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 para verificação de padrões de candlestick
    bool               CheckPatternThreeBlackCrows();
    bool               CheckPatternThreeWhiteSoldiers();
    bool               CheckPatternDarkCloudCover();
    bool               CheckPatternPiercingLine();
    bool               CheckPatternMorningDoji();
    bool               CheckPatternEveningDoji();
    bool               CheckPatternBearishEngulfing();
    bool               CheckPatternBullishEngulfing();
    bool               CheckPatternEveningStar();
    bool               CheckPatternMorningStar();
    bool               CheckPatternHammer();
    bool               CheckPatternHangingMan();

A biblioteca conterá uma classe para pesquisar padrões de velas PriceAction e várias formações de velas japonesas.

Considero mais prudente adicionar uma nova propriedade à classe de objeto CBar. Dessa forma, a coleção de séries temporais poderá pesquisar as velas e os padrões desejados.

Portanto, ela estará na biblioteca.

Por enquanto, você pode procurar os padrões e candles de que precisa nas listas da coleção de séries temporais - lá estão todas as barras, e você pode usá-las para determinar o padrão.

 
Artyom Trishkin:

A biblioteca conterá uma classe para pesquisa de padrões de velas PriceAction e várias formações de velas japonesas.

Acho mais prudente adicionar uma nova propriedade à classe de objeto CBar. Dessa forma, a coleção de séries temporais poderá pesquisar as velas e os padrões desejados.

Portanto, ela estará na biblioteca.

Por enquanto, você pode procurar os padrões e candles de que precisa nas listas da coleção de séries temporais - lá estão todas as barras, e você pode usá-las para determinar o padrão.

Isso parece ótimo! Alguma ideia de quando você começará a implementar todas essas coisas boas? Você está interessado em alguma contribuição de código?

 
Dima Diall :

Isso parece ótimo! Alguma ideia de quando você começará a implementar todas essas coisas boas? Você está interessado em alguma contribuição de código?

Quando chegar a hora :)