oslib/osc-padrao.mqh

87 lines
8.6 KiB
MQL5
Raw Permalink Normal View History

2025-05-30 16:15:18 +02:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| osc-padrao.mqh |
//| marcoc |
//| https://www.mql5.com/pt/users/marcoc |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Classe padrao OS |
//+------------------------------------------------------------------+
class osc_padrao {
private:
static int s_id_gen; // semente geradora de ID pra todas as instancias.
int m_id ; // id da instancia.
MqlTick m_tick_ant_padrao;
uint m_qtd_tick_consertado;
void setId(){m_id = s_id_gen++;} // define ID unico dentre as demais instancias de osc_padrao;
protected:
int getId (){return m_id ;} // retorna ID unico dentre as demais instancias de osc_padrao;
string getIdStr(){return IntegerToString(getId());} // retorna ID unico dentre as demais instancias de osc_padrao em formato String;
void initQtdTickConsertado(){m_qtd_tick_consertado=0;}
public:
osc_padrao(){setId(); }
double oneIfZero (double p ) {return (p==0.0)?1.0:p;}
double xIfZero (double p, double x) {return (p==0.0)?x :p;}
static bool isTkBuy(MqlTick& tick){ return ( (tick.flags&TICK_FLAG_BUY )==TICK_FLAG_BUY );} // Aconteceu uma compra
static bool isTkSel(MqlTick& tick){ return ( (tick.flags&TICK_FLAG_SELL )==TICK_FLAG_SELL );} // Aconteceu uma venda
static bool isTkAsk(MqlTick& tick){ return ( (tick.flags&TICK_FLAG_ASK )==TICK_FLAG_ASK );} // Aconteceu uma alteracao no preco de compra
static bool isTkBid(MqlTick& tick){ return ( (tick.flags&TICK_FLAG_BID )==TICK_FLAG_BID );} // Aconteceu uma alteracao no preco de venda
static bool isTkLas(MqlTick& tick){ return ( (tick.flags&TICK_FLAG_LAST )==TICK_FLAG_LAST );} // Aconteceu uma alteracao no preco negociado
static bool isTkVol(MqlTick& tick){ return ( (tick.flags&TICK_FLAG_VOLUME)==TICK_FLAG_VOLUME );} // Aconteceu uma alteracao no volume total negociado
//static bool isTkTra(MqlTick& tick){ return ( isTkBuy(tick) || isTkSel(tick) );} // Aconteceu uma compra ou uma venda
static bool isTkTra(MqlTick& tick){ return ( isTkVol(tick) || isTkLas(tick) ||
isTkBuy(tick) || isTkSel(tick) );} // Aconteceu uma compra ou uma venda
uint getQtdTicksConsertados(){return m_qtd_tick_consertado;}
void consertarTickSemFlag(MqlTick& tick){
// tick tem flag. atualizo tick anterior e termino...
if( tick.flags!=0 ){
m_tick_ant_padrao = tick;
return;
}
// tem last diferente do tick anterior...
if(tick.last != m_tick_ant_padrao.last){
if( tick.last == tick.bid ){
tick.flags = tick.flags|TICK_FLAG_SELL|TICK_FLAG_LAST|TICK_FLAG_VOLUME;
if(tick.volume ==0) tick.volume ++;
if(tick.volume_real==0) tick.volume_real++;
m_qtd_tick_consertado++;
}else{
if(tick.last == tick.ask){
tick.flags = tick.flags|TICK_FLAG_BUY|TICK_FLAG_LAST|TICK_FLAG_VOLUME;
if(tick.volume ==0) tick.volume ++;
if(tick.volume_real==0) tick.volume_real++;
m_qtd_tick_consertado++;
}
}
}else{
// tem volume e eh diferente do volume do tick anterior
if(tick.volume != m_tick_ant_padrao.volume && tick.volume != 0){
if( tick.last == tick.bid ){
tick.flags = tick.flags|TICK_FLAG_SELL|TICK_FLAG_VOLUME;
m_qtd_tick_consertado++;
}else{
if(tick.last == tick.ask){
tick.flags = tick.flags|TICK_FLAG_BUY|TICK_FLAG_VOLUME;
m_qtd_tick_consertado++;
}
}
}
}
// atualizando o tick anterior...
m_tick_ant_padrao = tick;
}
};
int osc_padrao::s_id_gen = 1;