Programa Simples... Deveria ter funcionado.

 

Olá a todos,


Mais uma vez, eu com dúvidas de pré-incipientes.

O programa que gostaria de fazer me informaria a razão volumeTick/VolumeReal de um determinado candle . Porém, ao rodá-lo, não consigo nenhuma saída. Fiz um esquema de printar um valor calculado. Este me retorna 0.0. Nos erros consta a mensagem 

possible loss of data due to type conversion Delta%Vol.mq5 54 25


Variáveis tipo long são convertidas facilmente paratipo double, não?

//+------------------------------------------------------------------+

//|                                                    Delta%Vol.mq5 |
//|                                                  Da B |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "DaB"
#property link     
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot DeltaVol
#property indicator_label1  "DeltaVol"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- indicator buffers
double         DeltaVolBuffer[];
bool           PrimeiraVez = true;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,DeltaVolBuffer,INDICATOR_DATA);
   IndicatorSetInteger(INDICATOR_DIGITS,8); // tentei para outros valores também.. não somente 8
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---

   for(int i=0;i<rates_total;i++)
 {
      if(volume[i] != 0) 
    {      
      DeltaVolBuffer[i] = tick_volume[i]/volume[i] ;
    }   
  }
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+


Descubra novos recursos para o MetaTrader 5 com a comunidade e os serviços MQL5
Descubra novos recursos para o MetaTrader 5 com a comunidade e os serviços MQL5
  • www.mql5.com
Pergunte sobre análise técnica, converse sobre sistemas de negociação e melhore suas habilidades quanto a programação de estratégias de negociação em linguagem MQL5. Mantenha contato e compartilhe experiência com traders de todo o mundo e ajude com feedback os novatos no fórum - nossa comunidade está crescendo junto com você. Como plotar um...
 
AnarcoPhysic:

Olá a todos,


Mais uma vez, eu com dúvidas de pré-incipientes.

O programa que gostaria de fazer me informaria a razão volumeTick/VolumeReal de um determinado candle . Porém, ao rodá-lo, não consigo nenhuma saída. Fiz um esquema de printar um valor calculado. Este me retorna 0.0. Nos erros consta a mensagem 

possible loss of data due to type conversion Delta%Vol.mq5 54 25


Variáveis tipo long são convertidas facilmente paratipo double, não?


Ola,

pois então faltou exatamente isso,  fazer o casting para double!

Aproveitei e otimizei seu código. 


//---
   for(int i=prev_calculated;i<rates_total;i++)
     {
      if(volume[i]!=0)
        {
         DeltaVolBuffer[i]=(double) tick_volume[i]/(double) volume[i];
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total-1);
 
Rogerio Giannetti Torres:

Ola,

pois então faltou exatamente isso,  fazer o casting para double!

Aproveitei e otimizei seu código. 


Mais uma vez, você me resgatando das profundezas! Te devo já duas  cervejas (ou dois sucos,caso não beba).

Muito obrigado!!!
 
Como que se fecha um tópico?!?!? :X
 
AnarcoPhysic:
Como que se fecha um tópico?!?!? :X

Não é possível para usuários fechar um tópico.

Atenciosamente,
Malacarne

Razão: