//+------------------------------------------------------------------+ //| Find Data Holes.mq4 | //| Copyright © 2005, Luis Guilherme Damiani | //| http://www.damianifx.com.br | //+------------------------------------------------------------------+ #property copyright "Copyright © 2005, Luis Guilherme Damiani" #property link "http://www.damianifx.com.br" #property show_inputs extern bool ShowWeekends=FALSE; #define WEEKEND_OBJROOT "Weekend_" #define GAP_OBJROOT "Hole_" int start() { // Clear up after last time ... for(int i=ObjectsTotal();i>=0;i--) { if(StringSubstr(ObjectName(i),0,StringLen(WEEKEND_OBJROOT))==WEEKEND_OBJROOT) { ObjectDelete(ObjectName(i)); } else { if(StringSubstr(ObjectName(i),0,StringLen(GAP_OBJROOT))==GAP_OBJROOT) { ObjectDelete(ObjectName(i)); } } } int numHoles=0; int period=Period(); int maxMissing=0; datetime maxTime; for(i=0;iperiod*60) { if(TimeDayOfWeek(t2)==5 && TimeDayOfWeek(t1)==1) { if(ShowWeekends) { ObjectCreate(WEEKEND_OBJROOT+i,OBJ_ARROW,0,t1, Low[i]); ObjectSet (WEEKEND_OBJROOT+i,OBJPROP_WIDTH,5); ObjectSet (WEEKEND_OBJROOT+i,OBJPROP_COLOR,Cyan); } } else { int nMissing=1.0*secsDiff/(period*60)-1; if(nMissing>maxMissing) { // Record biggest gap ... maxMissing=nMissing; maxTime=t1; } string objName=StringConcatenate(GAP_OBJROOT,numHoles); ObjectCreate(objName,OBJ_ARROW,0,t1, Low[i]); ObjectSet (objName,OBJPROP_WIDTH,5); ObjectSet (objName,OBJPROP_ARROWCODE,251); string descr=StringConcatenate(nMissing," missing bars detected at ",TimeToStr(t1)); ObjectSetText(objName,descr,0); numHoles++; } } } Alert(numHoles," holes were found, biggest was ",maxMissing," bars at ",TimeToStr(maxTime)); return(0); }