Please help debug this code, I have tried for days and failed. The EA is meant to draw these sessions every day but it only works once when I try it in the strategy tester. When I forward test it seems to work.
Where would my error be?
//+------------------------------------------------------------------+//| Input Variables |//+------------------------------------------------------------------+input group "=== GENERAL SETTINGS ==="inputstring MidNightOpenPrice = "7:00"; // New York Midnight Open Price.inputstring LondonSessionOpen = "9:00"; // London Session Open.inputstring LondonSessionClose = "12:00"; // London Session Close.inputstring NewYorkSessionOpen = "15:30"; // New York Session Open.inputstring NewYorkSessionClose= "19:00"; // New York Session Close.input group "=== SILVER BULLET TIME === "inputstring LondonSilverBulletOpen = "10:00"; // London Silver Bullet Open.inputstring LondonSilverBulletClose = "11:00"; // London Silver Bullet Close.inputstring NewYorkSilverBulletOpen = "17:00"; // New York Silver Bullet Open.inputstring NewYorkSilverBulletClose = "18:00"; // New York Silver Bullet Close.// Convert input string variables into time variables //datetime midNightOpenPrice = StringToTime(MidNightOpenPrice);
datetime londonSessionOpen = StringToTime(LondonSessionOpen);
datetime londonSessionClose = StringToTime(LondonSessionClose);
datetime newYorkSessionOpen = StringToTime(NewYorkSessionOpen);
datetime newYorkSessionClose = StringToTime(NewYorkSessionClose);
datetime londonSilverBulletOpen = StringToTime(LondonSilverBulletOpen);
datetime londonSilverBulletClose = StringToTime(LondonSilverBulletClose);
datetime newYorkSilverBulletOpen = StringToTime(NewYorkSilverBulletOpen);
datetime newYorkSilverBulletClose= StringToTime(NewYorkSilverBulletClose);
//+------------------------------------------------------------------+//| London Session Range Structure |//+------------------------------------------------------------------+struct LondonSession{
string SessionName; // Session Namedatetime StartTime; // Session Start Timedatetime EndTime; // Session End Timedouble high; // Session Highdouble low; // Session Low
}londonSession;
//+------------------------------------------------------------------+//| New York Session Range Structure |//+------------------------------------------------------------------+struct NewYorkSession{
string SessionName; // Session Namedatetime StartTime; // Session Start Timedatetime EndTime; // Session End Timedouble high; // Session Highdouble low; // Session Low
}newYorkSession;
//+------------------------------------------------------------------+//| London Session Silver Bullet Structure |//+------------------------------------------------------------------+struct LondonSessionSilverBullet{
datetime StartTime; // Session Start Timedatetime EndTime; // Session End Timedouble high; // Session Highdouble low; // Session Low
}LNDSilverBullet;
//+------------------------------------------------------------------+//| New York Session Silver Bullet Structure |//+------------------------------------------------------------------+struct NewYorkSessionSilverBullet{
datetime StartTime; // Session Start Timedatetime EndTime; // Session End Timedouble high; // Session Highdouble low; // Session Low
}NYSilverBullet;
//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+intOnInit(){
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Expert deinitialization function |//+------------------------------------------------------------------+voidOnDeinit(constint reason){
ObjectsDeleteAll(NULL, "London ");
ObjectsDeleteAll(NULL, "New York ");
ObjectsDeleteAll(NULL, "fvg ");
}
//+------------------------------------------------------------------+//| Expert tick function |//+------------------------------------------------------------------+voidOnTick(){
datetime startOfDay = iTime(NULL,PERIOD_D1,0);
// If a new day starts then calculate these ranges //if(startOfDay){
LondonSessionRange();
LondonSilverBullet();
NewYorkSessionRange();
NewYorkSilverBullet();
}
}
//+------------------------------------------------------------------+//| London Session Range |//+------------------------------------------------------------------+void LondonSessionRange(){
// Reset London session variables //
londonSession.SessionName = "";
londonSession.StartTime = 0;
londonSession.EndTime = 0;
londonSession.high = 0;
londonSession.low = 0;
// Get London session variables //
londonSession.SessionName = "London Session";
londonSession.StartTime = londonSessionOpen;
londonSession.EndTime = londonSessionClose;
// Index of the start and end time //int start = iBarShift(_Symbol,PERIOD_CURRENT,londonSession.StartTime,false);
int end = iBarShift(_Symbol,PERIOD_CURRENT,londonSession.EndTime,false);
// High and Low of the London session range //
londonSession.high = iHigh(_Symbol,PERIOD_CURRENT,iHighest(_Symbol,PERIOD_CURRENT,MODE_HIGH,start - end + 1, end));
londonSession.low = iLow(_Symbol,PERIOD_CURRENT,iLowest(_Symbol,PERIOD_CURRENT,MODE_LOW,start - end + 1, end));
// Visualize Session //
DrawSessionRange();
}
//+------------------------------------------------------------------+//| London Session Silver Bullet |//+------------------------------------------------------------------+void LondonSilverBullet(){
// Reset London session silver bullet variables //
LNDSilverBullet.StartTime = 0;
LNDSilverBullet.EndTime = 0;
LNDSilverBullet.high = 0;
LNDSilverBullet.low = 0;
// Get london session silver bullet variables //
LNDSilverBullet.StartTime = londonSilverBulletOpen;
LNDSilverBullet.EndTime = londonSilverBulletClose;
// Index of the start and end time //int start = iBarShift(_Symbol,PERIOD_CURRENT,LNDSilverBullet.StartTime,false);
int end = iBarShift(_Symbol,PERIOD_CURRENT,LNDSilverBullet.EndTime,false);
// High and Low of the London silver bullet //
LNDSilverBullet.high = iHigh(_Symbol,PERIOD_CURRENT,iHighest(_Symbol,PERIOD_CURRENT,MODE_HIGH,start - end + 1, end));
LNDSilverBullet.low = iLow(_Symbol,PERIOD_CURRENT,iLowest(_Symbol,PERIOD_CURRENT,MODE_LOW,start - end + 1, end));
// Visualize Silver Bullet //
DrawSilverBullet();
}
//+------------------------------------------------------------------+//| NewYork Session Range |//+------------------------------------------------------------------+void NewYorkSessionRange(){
// Reset London session variables //
newYorkSession.SessionName = "";
newYorkSession.StartTime = 0;
newYorkSession.EndTime = 0;
newYorkSession.high = 0;
newYorkSession.low = 0;
// Get London session variables //
newYorkSession.SessionName = "NewYork Session";
newYorkSession.StartTime = newYorkSessionOpen;
newYorkSession.EndTime = newYorkSessionClose;
// Index of the start and end time //int start = iBarShift(_Symbol,PERIOD_CURRENT,newYorkSession.StartTime,false);
int end = iBarShift(_Symbol,PERIOD_CURRENT,newYorkSession.EndTime,false);
// High and Low of the London session range //
newYorkSession.high = iHigh(_Symbol,PERIOD_CURRENT,iHighest(_Symbol,PERIOD_CURRENT,MODE_HIGH,start - end + 1, end));
newYorkSession.low = iLow(_Symbol,PERIOD_CURRENT,iLowest(_Symbol,PERIOD_CURRENT,MODE_LOW,start - end + 1, end));
// Visualize Session //
DrawSessionRange();
}
//+------------------------------------------------------------------+//| NewYork Session Silver Bullet |//+------------------------------------------------------------------+void NewYorkSilverBullet(){
// Reset London session silver bullet variables //
NYSilverBullet.StartTime = 0;
NYSilverBullet.EndTime = 0;
NYSilverBullet.high = 0;
NYSilverBullet.low = 0;
// Get london session silver bullet variables //
NYSilverBullet.StartTime = newYorkSilverBulletOpen;
NYSilverBullet.EndTime = newYorkSilverBulletClose;
// Index of the start and end time //int start = iBarShift(_Symbol,PERIOD_CURRENT,NYSilverBullet.StartTime,false);
int end = iBarShift(_Symbol,PERIOD_CURRENT,NYSilverBullet.EndTime,false);
// High and Low of the London silver bullet //
NYSilverBullet.high = iHigh(_Symbol,PERIOD_CURRENT,iHighest(_Symbol,PERIOD_CURRENT,MODE_HIGH,start - end + 1, end));
NYSilverBullet.low = iLow(_Symbol,PERIOD_CURRENT,iLowest(_Symbol,PERIOD_CURRENT,MODE_LOW,start - end + 1, end));
// Visualize Silver Bullet //
DrawSilverBullet();
}
//+------------------------------------------------------------------+//| Visualise Session Ranges |//+------------------------------------------------------------------+void DrawSessionRange(){
// Draw London session start timeif(londonSession.StartTime > 0){
ObjectCreate(NULL,"London Session Start",OBJ_VLINE,0,londonSession.StartTime,0);
ObjectSetString(NULL,"London Session Start",OBJPROP_TOOLTIP,"London Session Start \n"+TimeToString(londonSession.StartTime,TIME_DATE|TIME_MINUTES));
ObjectSetInteger(NULL,"London Session Start",OBJPROP_COLOR,clrBlue);
ObjectSetInteger(NULL,"London Session Start",OBJPROP_BACK,true);
}
// Draw London session end timeif(londonSession.StartTime > 0){
ObjectCreate(NULL,"London Session End",OBJ_VLINE,0,londonSession.EndTime,0);
ObjectSetString(NULL,"London Session End",OBJPROP_TOOLTIP,"London Session End \n"+TimeToString(londonSession.EndTime,TIME_DATE|TIME_MINUTES));
ObjectSetInteger(NULL,"London Session End",OBJPROP_COLOR,clrBlue);
ObjectSetInteger(NULL,"London Session End",OBJPROP_BACK,true);
}
// Draw London Session Highif(londonSession.StartTime > 0){
ObjectCreate(NULL,"London Session High",OBJ_TREND,0,londonSession.StartTime,londonSession.high,londonSession.EndTime,londonSession.high);
ObjectSetString(NULL,"London Session High",OBJPROP_TOOLTIP,"London Session High "+DoubleToString(londonSession.high,_Digits));
ObjectSetInteger(NULL,"London Session High",OBJPROP_COLOR,clrBlue);
ObjectSetInteger(NULL,"London Session High",OBJPROP_BACK,true);
ObjectCreate(NULL,"London Session High ",OBJ_TREND,0,londonSession.EndTime,londonSession.high,londonSession.EndTime,londonSession.high);
ObjectSetString(NULL,"London Session High ",OBJPROP_TOOLTIP,"London Session High "+DoubleToString(londonSession.high,_Digits));
ObjectSetInteger(NULL,"London Session High ",OBJPROP_COLOR,clrBlue);
ObjectSetInteger(NULL,"London Sesssion High ",OBJPROP_STYLE,STYLE_DOT);
}
// Draw London Session Lowif(londonSession.StartTime > 0){
ObjectCreate(NULL,"London Session Low",OBJ_TREND,0,londonSession.StartTime,londonSession.low,londonSession.EndTime,londonSession.low);
ObjectSetString(NULL,"London Session Low",OBJPROP_TOOLTIP,"London Session Low "+DoubleToString(londonSession.low,_Digits));
ObjectSetInteger(NULL,"London Session Low",OBJPROP_COLOR,clrBlue);
ObjectSetInteger(NULL,"London Session Low",OBJPROP_BACK,true);
ObjectCreate(NULL,"London Session Low ",OBJ_TREND,0,londonSession.EndTime,londonSession.low,londonSession.EndTime,londonSession.low);
ObjectSetString(NULL,"London Session Low ",OBJPROP_TOOLTIP,"London Session Low "+DoubleToString(londonSession.low,_Digits));
ObjectSetInteger(NULL,"London Session Low ",OBJPROP_COLOR,clrBlue);
ObjectSetInteger(NULL,"London Sesssion Low ",OBJPROP_STYLE,STYLE_DOT);
}
// Draw New York session start timeif(newYorkSession.StartTime > 0){
ObjectCreate(NULL,"New York Session Start",OBJ_VLINE,0,newYorkSession.StartTime,0);
ObjectSetString(NULL,"New York Session Start",OBJPROP_TOOLTIP,"New York Session Start \n"+TimeToString(newYorkSession.StartTime,TIME_DATE|TIME_MINUTES));
ObjectSetInteger(NULL,"New York Session Start",OBJPROP_COLOR,clrRed);
ObjectSetInteger(NULL,"New York Session Start",OBJPROP_BACK,true);
}
// Draw New York session end timeif(newYorkSession.StartTime > 0){
ObjectCreate(NULL,"New York Session End",OBJ_VLINE,0,newYorkSession.EndTime,0);
ObjectSetString(NULL,"New York Session End",OBJPROP_TOOLTIP,"New York Session End \n"+TimeToString(newYorkSession.EndTime,TIME_DATE|TIME_MINUTES));
ObjectSetInteger(NULL,"New York Session End",OBJPROP_COLOR,clrRed);
ObjectSetInteger(NULL,"New York Session End",OBJPROP_BACK,true);
}
// Draw New York Session Highif(newYorkSession.StartTime > 0){
ObjectCreate(NULL,"New York Session High",OBJ_TREND,0,newYorkSession.StartTime,newYorkSession.high,newYorkSession.EndTime,newYorkSession.high);
ObjectSetString(NULL,"New York Session High",OBJPROP_TOOLTIP,"New York Session High "+DoubleToString(newYorkSession.high,_Digits));
ObjectSetInteger(NULL,"New York Session High",OBJPROP_COLOR,clrRed);
ObjectSetInteger(NULL,"New York Session High",OBJPROP_BACK,true);
}
// Draw New York Session Lowif(newYorkSession.StartTime > 0){
ObjectCreate(NULL,"New York Session Low",OBJ_TREND,0,newYorkSession.StartTime,newYorkSession.low,newYorkSession.EndTime,newYorkSession.low);
ObjectSetString(NULL,"New York Session Low",OBJPROP_TOOLTIP,"New York Session Low "+DoubleToString(newYorkSession.low,_Digits));
ObjectSetInteger(NULL,"New York Session Low",OBJPROP_COLOR,clrRed);
ObjectSetInteger(NULL,"New York Session Low",OBJPROP_BACK,true);
}
}
//+------------------------------------------------------------------+//| Visualise Silver Bullet Windows |//+------------------------------------------------------------------+void DrawSilverBullet(){
// Visualize London silver bullet //if(LNDSilverBullet.StartTime > 0){
ObjectCreate(0,"London Silver Bullet",OBJ_RECTANGLE,0,LNDSilverBullet.StartTime,LNDSilverBullet.high,LNDSilverBullet.EndTime,LNDSilverBullet.low);
ObjectSetInteger(0,"London Silver Bullet",OBJPROP_COLOR,clrBlue);
ObjectSetInteger(0,"London Silver Bullet",OBJPROP_STYLE,STYLE_DASHDOTDOT);
}
// Visualize NewYork silver bullet //if(NYSilverBullet.StartTime > 0){
ObjectCreate(0,"New York Silver Bullet",OBJ_RECTANGLE,0,NYSilverBullet.StartTime,NYSilverBullet.high,NYSilverBullet.EndTime,NYSilverBullet.low);
ObjectSetInteger(0,"New York Silver Bullet",OBJPROP_COLOR,clrRed);
ObjectSetInteger(0,"New York Silver Bullet",OBJPROP_STYLE,STYLE_DASHDOTDOT);
}
}
Please help debug this code, I have tried for days and failed. The EA is meant to draw these sessions every day but it only works once when I try it in the strategy tester. When I forward test it seems to work.
Where would my error be?