86 lines
8.6 KiB
MQL5
86 lines
8.6 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| 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;
|