//+------------------------------------------------------------------+ //| TicksAndRatesCompatibility.mq4 | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, Tick & Rate" #property version "1.00" #property strict MqlTick tick; MqlRates tickbar, ratesbar; MqlRates rates[]; int OnInit() { initTickBar(); return(INIT_SUCCEEDED); } void OnTick() { if(!SymbolInfoTick(Symbol(), tick)) return; if(tickbar.time > 0 && tickbar.time != (tick.time/60)*60) { RefreshRates(); int barcnt = ArrayCopyRates(rates, Symbol(), PERIOD_M1); int err = GetLastError(); if(err != ERR_HISTORY_WILL_UPDATED && barcnt > 1) { ratesbar = rates[1]; if(ratesbar.time == tickbar.time) { string msg = StringFormat("%s: RatesOHLCV[%G %G %G %G %d] TickOHLCV[%G %G %G %G %d]", TimeToString(tickbar.time), ratesbar.open, ratesbar.high, ratesbar.low, ratesbar.close, ratesbar.tick_volume, tickbar.open, tickbar.high, tickbar.low, tickbar.close, tickbar.tick_volume); if(ratesbar.high < tickbar.high || ratesbar.low > tickbar.low) Alert(msg); else Print(msg); } } initTickBar(); } if(tickbar.time == 0) tickbar.time = (tick.time/60)*60; tickbar.tick_volume++; if(tick.bid <= 0) return; if(tickbar.open == 0) tickbar.open = tick.bid; if(tickbar.high < tick.bid) tickbar.high = tick.bid; if(tickbar.low > tick.bid) tickbar.low = tick.bid; tickbar.close = tick.bid; } void initTickBar() { tickbar.time = 0; tickbar.open = 0; tickbar.high = 0; tickbar.low = 1e+100; tickbar.close = 0; tickbar.tick_volume = 0; }