//+------------------------------------------------------------------+ //| MoonPhases.mq4 | //+------------------------------------------------------------------+ // // Calculation taken from: // http://individual.utoronto.ca/kalendis/lunar/index.htm // // Coded by: Ben Letto, sbgtrading@yahoo.com //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ #property copyright "Ben L." #include #property indicator_chart_window extern color FullMoonLineColor1=Red; extern color FullMoonLineColor2=Blue; extern color FullMoonLineColor3=Yellow; extern color FullMoonLineColor4=Green; extern datetime ColorStartDate= D'2008.11.01 00:00'; extern datetime StartDate= D'2006.01.01 00:00'; extern datetime EndDate= D'2012.01.01 00:00'; //extern string OutFileName="FullMoonDates_out.csv"; extern int ChartTimeMinusGMTInMinutes = 120; int OutputHandle,i,cnt=0,bar; datetime FullMoonTime,NewMoonTime; string LineName; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators if(StartDate=1;bar--) { ObjectDelete("Full_"+bar); } //---- // return; } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { //---- int total=300; color lincol=FullMoonLineColor1; for(i=total;i>0;i--) { LineName=StringConcatenate("Full_",DoubleToStr(i,0)); ObjectDelete(LineName); LineName=StringConcatenate("New_",DoubleToStr(i,0)); ObjectDelete(LineName); } i=1; int errCount=0; FullMoonTime=0; NewMoonTime=0; int BarsForOpenLine=10*24*60/Period(); double SecondsPerDay=60*60*24; cnt=-1; while(FullMoonTime < EndDate) { FullMoonTime=StrToTime("2000.01.01 00:00")+MathRound(SecondsPerDay*(20.362954+29.5305888531*i+0.00000000010219*i*i)+ChartTimeMinusGMTInMinutes*60); if(FullMoonTime>StartDate) { if (FullMoonTime>=ColorStartDate) cnt++; if (cnt>3) cnt=0; if (cnt==0) lincol=FullMoonLineColor1; if (cnt==1) lincol=FullMoonLineColor2; if (cnt==2) lincol=FullMoonLineColor3; if (cnt==3) lincol=FullMoonLineColor4; LineName=StringConcatenate("Full_",DoubleToStr(i,0)); if(!ObjectCreate(LineName,OBJ_VLINE,0,FullMoonTime,0,0,0)) {HandleError(errCount, "Problem creating "+LineName+" "+TimeToStr(FullMoonTime,TIME_DATE));} else {ObjectSet(LineName,OBJPROP_COLOR,lincol);ObjectSet(LineName,OBJPROP_WIDTH,2);} } i++; } return(0); } void HandleError(int& errCount, string estr) { int err=GetLastError(); if(err>1) { errCount++; if(errCount==1) Alert("New errors start here!"); } if (err>0) Alert("Error: ",err," ",ErrorDescription(err)," e: ",estr); }