Discussão do artigo "O Histograma de preço (Perfil de mercado) e sua implementação no MQL5" - página 10

 
Olá, não consigo encontrar os arquivos anexados! Somente o histograma de preços.
 
Thiago Duarte:

Remova o comando "Delete()" que irá funcionar.

Na verdade a função delete foi declarada sem type, colocando "void" ela volta a funcionar corretamente
 

Hey guys, i really liked this indicator, i've being learning about market profile for a while and this is the best a found.


I just made a change in the metod of calculating the profile, i used the volume tick instead verifying just if the price past in the point. I did this cuz if you see, negociations and the diferent times haave pounds diferrents, you can see it in the volume histogram. So we can't junt count if price is there add one.


Do you agree?


The change I made showed diferrences beetween in the two mettods

 
Olá Alguém sabe se é possível fazer um robô trair somente nessas linhas do POC? se sim, como posso fazer isso? porque estou testando todas as variáveis no arquivo ClassPriceHistogram e os valores são todos zeros, alguém pode me ajudar?
 
Olá Luiz@Luiz Vinicius Pereira Rocha - então amigo eu sou novo em programação, e estava trabalhando em um EA que traide somente nas POCs, nas Valuation hight e low, e acabei achando esse indicador. Entretanto eu não consegui achar o lugar onde ele armazena os pontos da Poc, quando uso a função print em algumas variaveis do autor como: Poc_value, aparecem valores  zerados. vc por acaso pode me ajudar? 
 

Olá, Dmitry,

antes de mais nada: Obrigado por seu excelente artigo e trabalho!

Embora tenha sido publicado há muito tempo, ele funciona muito bem.

O que eu tenho aqui para você e para a comunidade é uma atualização, para que o histograma use o volume de ticks, porque usar somente a ação do preço em áreas de tempo em que o volume é quase zero não ajuda muito.

Substitua o código correspondente no arquivo ClassPriceHistogram.mqh


bool CPriceHistogram::calculationPOCs()
  {
   int rates_total,rates_high,rates_time,rates_tv,index;
   double iHigh[],iLow[];
   long iTV[];
   datetime iTime[];
// Ïîëó÷àåì äàííûå çà ïåðèîä ñ time_start äî time_end / We obtain the data from time_start to time_end
   int err=0;
   do
     {
      rates_time=CopyTime(NULL,PERIOD_M1,time_start,time_end,iTime);
      rates_high=CopyHigh(NULL,PERIOD_M1,time_start,time_end,iHigh);
      rates_total=CopyLow(NULL,PERIOD_M1,time_start,time_end,iLow);
      
      rates_tv=CopyTickVolume(NULL,PERIOD_M1,time_start,time_end,iTV);
      
      err++;
     }
   while((rates_time<=0 || (rates_total!=rates_high || rates_total!=rates_time || rates_tv!=rates_time)) && err<AMOUNT_OF_ATTEMPTS);
   if(err>=AMOUNT_OF_ATTEMPTS)
     {
      return(false);
     }
   poc_start_time=iTime[0];
   high_day=iHigh[ArrayMaximum(iHigh,0,rates_total)];
   low_day=iLow[ArrayMinimum(iLow,0,rates_total)];
   int count=int((high_day-low_day)/_Point)+1;
// Ïîäñ÷åò äëèòåëüíîñòè íàõîæäåíèÿ öåíû íà êàæäîì óðîâíå / Contagem da duração de uma descoberta do preço em cada nível
   int ThicknessOfLevel[];    // ñîçäàåì ìàññèâ äëÿ ïîäñ÷åòà òèêîâ / criamos uma matriz para a contagem de tiques
   ArrayResize(ThicknessOfLevel,count);
   ArrayInitialize(ThicknessOfLevel,0);
   for(int i=0;i<rates_total;i++)
     {
      double C=iLow[i];
      long CTV=iTV[i];
      // Distribuir o volume de ticks da barra de minutos em todos os pontos possíveis da barra
      // Portanto, o incremento por ponto será este ...
      int CInc=int(((iHigh[i]-iLow[i])/_Point));  
      while(C<iHigh[i])
        {
         int Index=int((C-low_day)/_Point);
         ThicknessOfLevel[Index]+=CInc;
         C+=_Point;
        }
     }


Admito que é um hack rápido e não testei cada parte do código, mas até agora funciona bem.

Aqui está um exemplo com o índice SP500:


Código original do lado esquerdo. Lado direito com tickvolume

 

Prezado Dmitry

Espero que você esteja bem.

Seria possível implementar buffers para as linhas?

Para cada POC, talvez um Vwap e um Median?


Muito obrigado, desde já

 
Apenas uma observação... Fiz o download de todos os arquivos para os diretórios apropriados, compilei e recebi erros relacionados ao ClassPriceHistogram.mqh. Na linha 375, simplesmente substituí
CPriceHistogram::Delete()

por

void CPriceHistogram::Delete()

Agora funciona bem no MT5 Versão 5.00 Build 3661 da AMP Futures.

@Oleksandr, esse "indicador" é tecnicamente um Expert. Os buffers do indicador não estão disponíveis nos Experts. Os buffers podem ser efetivamente recriados usando matrizes nos Experts, mas somente os buffers de indicadores reais podem ser chamados pelo iCustom, portanto, para esse fim, um novo indicador personalizado teria que ser codificado do zero. Infelizmente, ambas as opções estão além do meu nível de capacidade de codificação. Boa sorte em encontrar ajuda melhor.

 
Existe alguma maneira de plotar a sessão atual?


OBRIGADO
 
Olá, tentei alterar as linhas em seu comentário, mas ainda não funciona, não consigo ver o perfil de volume da sessão atual

OBRIGADO