Times and Sales

 
Olá pessoal,

eu comecei a fazer um indicador que puxa que o histórico de negócios, porém eu estou com um problema na hora de mostrar o resultado na tela.

Eu gostaria de saber se é possível filtrar o resultado, mostrando apenas os preços que sofreram agressão na compra ou na venda. 

Por exemplo, o 5º negocio sofreu uma agressão na compra e os 4 primeiros são apenas repetição dele, eu gostaria de mostrar na tela apenas o 5º negocio e ocultar os outros. Eu tentei com if mas fica um buraco na tela e não ordenado corretamente.

Qualquer ajuda será bem vinda.

//+------------------------------------------------------------------+
//|                                                TimesAndSales.mqh |
//|                               Copyright © 2016, Evandro Teixeira |
//|                                   http://www.evandroteixeira.com | 
//+------------------------------------------------------------------+
#property copyright                 "Evandro Teixeira © 2016"
#property link                      "www.evandroteixeira.com"
#property version                   "2.20"
#property description               "Times and Sales"
#property indicator_plots 0
#property indicator_chart_window

//+------------------------------------------------------------------+
//| Includes                                                         |
//+------------------------------------------------------------------+
#include <Comment.mqh>

//+------------------------------------------------------------------+
//| Global parameters                                                |
//+------------------------------------------------------------------+
int                     panelXX     =  5;
int                     panelYY     =  15;

input string                     _INPativo            = "INDQ16";               // Symbol
input color                      _INPbuyLetterTS      = clrForestGreen;        // Buy Color
input color                      _INPsellLetterTS     = clrFireBrick;         // Sell Color
input color                      _INPbetweenTS        = clrCornflowerBlue;   // Between Color
input color                      _INPchangeTickTS     = clrDimGray;         // Bid/Ask Color
input color                      _INPcolorDefaultB    = clrSilver;         // Window Border Color
input color                      _INPcolorDefault     = clrBlack;         // Window Color
input uchar                      _alpha               = 255;             // Window Transparency
input int                        _INPfsize            = 14;             // Font
input int                        _INPticks            = 26;            // Number of Requested Ticks

CComment comment;
color       clrAgr;

//+------------------------------------------------------------------+
//| On Init                                                          |
//+------------------------------------------------------------------+
int OnInit() 
  {
      comment.Create("TimesNSales",panelXX,panelYY);
      //comment.SetAutoColors(true);
      comment.SetColor(_INPcolorDefaultB,_INPcolorDefault,_alpha);
      comment.SetFont("Verdana",_INPfsize,false,1.3);
      comment.SetGraphMode(true);

//--- Define frequência do timer
   EventSetTimer(1);
   return(0);
  }

//+------------------------------------------------------------------+
//| On DeInit                                                        |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- Destroy panel
   comment.Destroy();
  }
//+------------------------------------------------------------------+
//| On Calculate                                                     |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//--- requesting ticks
   MqlTick tick_array[];
   int copied=CopyTicks(_INPativo,tick_array,COPY_TICKS_ALL,0,_INPticks);
   ArraySetAsSeries(tick_array,true);
   string typeTrade;

   if(copied>0)
     {
         for(int i=0;i<_INPticks;i++)
            {
               MqlTick tick=tick_array[i];
               bool buy    = tick.flags == 24 && tick.last >= tick.ask;
               bool sell   = tick.flags == 24 && tick.last <= tick.bid;

               if(buy)
                  {
                     typeTrade = "BUY  "; clrAgr = _INPbuyLetterTS;
                  }
               else if(sell)
                     {
                        typeTrade = "SELL"; clrAgr = _INPsellLetterTS;
                     }
                     else if(tick.flags == 24 && tick.last < tick.ask && tick.last > tick.bid)
                            {
                                 typeTrade = "BTW "; clrAgr = _INPbetweenTS;
                            }else
                       {
                           typeTrade = "        "; clrAgr = _INPchangeTickTS;
                       }

                  comment.SetText(i,TimeToString(tick.time,TIME_MINUTES|TIME_SECONDS)+"    "+
                                     DoubleToString(tick.last,Digits())+"     "+
                                     typeTrade+"      "+
                                     IntegerToString(tick.volume,1,'0'),clrAgr);
            }
            comment.SetText(_INPticks," ",_INPchangeTickTS);
            comment.Show();
     }
   else // report an error that occurred when receiving ticks
     {
         Print("Ticks could not be loaded. GetLastError()=",GetLastError());
     }
//---
      return(rates_total);
  }

//+------------------------------------------------------------------+
//| On Chart Event                                                   |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {

   int res=comment.OnChartEvent(id,lparam,dparam,sparam);
//--- move panel event
   if(res==EVENT_MOVE)
      return;
//--- change background color
   if(res==EVENT_CHANGE)
      comment.Show();
  }
//+------------------------------------------------------------------+

 

Abraço.
 
Evandro Teixeira:
Olá pessoal,

eu comecei a fazer um indicador que puxa que o histórico de negócios, porém eu estou com um problema na hora de mostrar o resultado na tela.

Eu gostaria de saber se é possível filtrar o resultado, mostrando apenas os preços que sofreram agressão na compra ou na venda. 

Por exemplo, o 5º negocio sofreu uma agressão na compra e os 4 primeiros são apenas repetição dele, eu gostaria de mostrar na tela apenas o 5º negocio e ocultar os outros. Eu tentei com if mas fica um buraco na tela e não ordenado corretamente.

Qualquer ajuda será bem vinda. 

Abraço.

Olá Evandro Teixeira,

Não entendi direito quando vocês diz que "os 4 primeiros são apenas repetição dele"  ... não seriam exatamente 5 negócios diferentes, sendo que 4 deles com características semelhantes ao primeiro negócio?

Se puder explicar melhor como esses 4 primeiros são "repetições" do primeiro, acredito que isso no ajudaria a entender melhor a questão.

Abraços,
Malacarne

 
Rodrigo Malacarne:

Olá Evandro Teixeira,

Não entendi direito quando vocês diz que "os 4 primeiros são apenas repetição dele"  ... não seriam exatamente 5 negócios diferentes, sendo que 4 deles com características semelhantes ao primeiro negócio?

Se puder explicar melhor como esses 4 primeiros são "repetições" do primeiro, acredito que isso no ajudaria a entender melhor a questão.

Abraços,
Malacarne

Oi Malacarne,

Em Times & Trades de outras plataformas como Profitchart ou FlashTrader, costumam aparecer apenas o ultimo negocio de compra ou venda enquanto o MT5 alem dessas informações, ele mostra as alterações no preço decorrente a essas negociações.

Segue uma imagem exemplificando o que quero dizer. O destaque em verde e vermelho são os últimos negócios realizados enquanto as linhas cinzas são apenas alterações no Bid/Ask (No Profit essas informações não são relevantes por que é levado em consideração apenas a agressão inicial).

 tns

 

Então eu gostaria de saber se há alguma forma de ocultar essa variação do Bid/Ask deixando apenas o ultimo negocio na tela como no Times & Trades da esquerda.


Abraços.

 
Evandro Teixeira:

Oi Malacarne,

Em Times & Trades de outras plataformas como Profitchart ou FlashTrader, costumam aparecer apenas o ultimo negocio de compra ou venda enquanto o MT5 alem dessas informações, ele mostra as alterações no preço decorrente a essas negociações.

Segue uma imagem exemplificando o que quero dizer. O destaque em verde e vermelho são os últimos negócios realizados enquanto as linhas cinzas são apenas alterações no Bid/Ask (No Profit essas informações não são relevantes por que é levado em consideração apenas a agressão inicial). 

Então eu gostaria de saber se há alguma forma de ocultar essa variação do Bid/Ask deixando apenas o ultimo negocio na tela como no Times & Trades da esquerda.

Abraços.

Olá Evandro Teixeira,

Documentação da função: https://www.mql5.com/pt/docs/series/copyticks

Experimente utilizar, ao invés de COPY_TICKS_ALL simplesmente COPY_TICKS_TRADE.

Abraços,
Malacarne

Documentação sobre MQL5: Séries Temporais e Acesso a Indicadores / CopyTicks
Documentação sobre MQL5: Séries Temporais e Acesso a Indicadores / CopyTicks
  • www.mql5.com
Séries Temporais e Acesso a Indicadores / CopyTicks - Referência sobre algorítimo/automatização de negociação na linguagem para MetaTrader 5
 
Rodrigo Malacarne:

Olá Evandro Teixeira,

Documentação da função: https://www.mql5.com/pt/docs/series/copyticks

Experimente utilizar, ao invés de COPY_TICKS_ALL simplesmente COPY_TICKS_TRADE.

Abraços,
Malacarne

Funcionou perfeito, Malacarne!

Muito obrigado =) 

 
Evandro Teixeira:
Olá pessoal,

eu comecei a fazer um indicador que puxa que o histórico de negócios, porém eu estou com um problema na hora de mostrar o resultado na tela.

Eu gostaria de saber se é possível filtrar o resultado, mostrando apenas os preços que sofreram agressão na compra ou na venda. 

Por exemplo, o 5º negocio sofreu uma agressão na compra e os 4 primeiros são apenas repetição dele, eu gostaria de mostrar na tela apenas o 5º negocio e ocultar os outros. Eu tentei com if mas fica um buraco na tela e não ordenado corretamente.

Qualquer ajuda será bem vinda.

 

Abraço.


Olá Evandro, parabéns pela iniciativa de desenvolvimento do painel com o histórico de negócios, como em outras plataformas, além da excelente análise gráfica comparativa apresentada.

Sua ferramenta me lembrou da pergunta do tópico abaixo.

Fórum de negociação, sistemas de negociação automatizados e testes de estratégias de negociação

Ferramenta similar a Times & Trades

SurferXP, 2014.05.23 20:26

Olá,

Alguem saberia me informar se o Metatrader 5 tem uma ferramenta que registra as ordens executadas no mercado e mostra em uma janela, para que possamos identificar fluxo de negociação em algum ativo especifico. Ferramenta similar ao Times & Trades?

Obrigado,

 SurferXP 


Melhores cumprimentos,

Rogério Figurelli 

 

Olá Evandro,

Fiz uma comparação dos resultados do teu algoritmo com os da plataforma, segue abaixo.

Me parece que esse é um bom ponto de partida para comparação com outras plataformas e teu sistema. 

 

Melhores cumprimentos,

Rogério Figurelli 

 
Rogerio Figurelli:

Olá Evandro,

Fiz uma comparação dos resultados do teu algoritmo com os da plataforma, segue abaixo.

Me parece que esse é um bom ponto de partida para comparação com outras plataformas e teu sistema. 

 

Melhores cumprimentos,

Rogério Figurelli 

Olá Rogério,

segue em anexo a versão final da ferramenta.

Uma dúvida em relação à esta imagem que você postou. Qual versão você está usando do MT5? Esse simbolo entre os botões 'Show Tick Chart' e 'Show Extended Book' é o histórico de negócios? Tem como ativar ele na versão 1340?

 

Abraços!

Arquivos anexados:
TimeNSales.mq5  15 kb
 
Evandro Teixeira:

Olá Rogério,

segue em anexo a versão final da ferramenta.

Uma dúvida em relação à esta imagem que você postou. Qual versão você está usando do MT5? Esse simbolo entre os botões 'Show Tick Chart' e 'Show Extended Book' é o histórico de negócios? Tem como ativar ele na versão 1340?

 

Abraços!

Evandro, parabéns pela iniciativa!
 
Evandro Teixeira:

Olá Rogério,

segue em anexo a versão final da ferramenta.

Uma dúvida em relação à esta imagem que você postou. Qual versão você está usando do MT5? Esse simbolo entre os botões 'Show Tick Chart' e 'Show Extended Book' é o histórico de negócios? Tem como ativar ele na versão 1340?

 

Abraços!

Olá Evandro,

Perfeitamente, estou com a última build (1352), dá uma atualizada que você pega esses dados também.

Obs: obrigado, atualizei a última versão, sugiro colocar como opcional (em um parâmetro) o flag do tipo de ticks (COPY_TICKS_ALL, COPY_TICKS_TRADE ou COPY_TICKS_INFO), para manter o diferencial em relação a outras plataformas de mercado.

Abraço! 

 
Rogerio Figurelli:

Olá Evandro,

Perfeitamente, estou com a última build (1352), dá uma atualizada que você pega esses dados também.

Obs: obrigado, atualizei a última versão, sugiro colocar como opcional (em um parâmetro) o flag do tipo de ticks (COPY_TICKS_ALL, COPY_TICKS_TRADE ou COPY_TICKS_INFO), para manter o diferencial em relação a outras plataformas de mercado.

Abraço! 

Boa tarde Rogerio,

 Onde acho essa build? 

Razão: