//+------------------------------------------------------------------+ //| 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 <stdlib.mqh> #property indicator_chart_window extern bool DrawFullMoon=true; extern color FullMoonLineColor=White; extern bool DrawNewMoon=false; extern color NewMoonLineColor=DimGray; extern datetime StartDate= D'2006.01.01 00:00'; extern datetime EndDate= D'2008.01.01 00:00'; //extern string OutFileName="FullMoonDates_out.csv"; extern int ChartTimeMinusGMTInMinutes = 120; int OutputHandle,i; datetime FullMoonTime,NewMoonTime; string LineName; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators if(StartDate<Time[Bars-1]) StartDate=Time[Bars-1]; //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { //---- int total=300; 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; while(FullMoonTime < EndDate) { if(DrawFullMoon) FullMoonTime=StrToTime("2000.01.01 00:00")+MathRound(SecondsPerDay*(20.362954+29.5305888531*i+0.00000000010219*i*i)+ChartTimeMinusGMTInMinutes*60); else FullMoonTime=-1; if(FullMoonTime>StartDate) { 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,FullMoonLineColor);ObjectSet(LineName,OBJPROP_WIDTH,2);} } if(DrawNewMoon) NewMoonTime=StrToTime("2000.01.01 00:00")+MathRound(SecondsPerDay*(5.597661+29.5305888610*i+0.00000000010219*i*i)+ChartTimeMinusGMTInMinutes*60); else NewMoonTime=-1; if(NewMoonTime > StartDate) { LineName=StringConcatenate("New_",DoubleToStr(i,0)); if(!ObjectCreate(LineName,OBJ_VLINE,0,NewMoonTime,0,0,0)) {HandleError(errCount, "Problem creating "+LineName+" "+TimeToStr(NewMoonTime,TIME_DATE));} else {ObjectSet(LineName,OBJPROP_COLOR,NewMoonLineColor);ObjectSet(LineName,OBJPROP_WIDTH,2);} } // HandleError(errCount,LineName); // FileWrite(OutputHandle,TimeToStr(TheDates[i],TIME_DATE||TIME_MINUTES),DoubleToStr(Open[iBarShift(Symbol(),0,TheDates[i],false)],Digits)); i++; } // FileClose(InputHandle); // FileClose(OutputHandle); //---- 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); }
Sample
Analysis
Market Information Used:
Series array that contains open time of each bar
Indicator Curves created:
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Other Features:
It issuies visual alerts to the screen