Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions Common/Securities/Future/FuturesExpiryFunctions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ public static Func<DateTime, DateTime> FuturesExpiryFunction(Symbol symbol)
}

// Trading can occur up to 9:30 a.m. Eastern Time (ET) on the 3rd Friday of the contract month
var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time);
var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time, Symbol.Create(Futures.Indices.SP500EMini, SecurityType.Future, Market.CME));
return thirdFriday.Add(new TimeSpan(13,30,0));
})
},
Expand Down Expand Up @@ -217,7 +217,7 @@ public static Func<DateTime, DateTime> FuturesExpiryFunction(Symbol symbol)
}

// Trading can occur up to 9:30 a.m. Eastern Time (ET) on the 3rd Friday of the contract month
var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time);
var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time, Symbol.Create(Futures.Indices.NASDAQ100EMini, SecurityType.Future, Market.CME));
return thirdFriday.Add(new TimeSpan(13,30,0));
})
},
Expand All @@ -231,7 +231,7 @@ public static Func<DateTime, DateTime> FuturesExpiryFunction(Symbol symbol)
}

// Trading can occur up to 9:30 a.m. Eastern Time (ET) on the 3rd Friday of the contract month
var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time);
var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time, Symbol.Create(Futures.Indices.Dow30EMini, SecurityType.Future, Market.CBOT));
return thirdFriday.Add(new TimeSpan(13,30,0));
})
},
Expand All @@ -245,7 +245,7 @@ public static Func<DateTime, DateTime> FuturesExpiryFunction(Symbol symbol)
}

// Trading can occur up to 9:30 a.m. Eastern Time (ET) on the 3rd Friday of the contract month
var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time);
var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time, Symbol.Create(Futures.Indices.Russell2000EMini, SecurityType.Future, Market.CME));
return thirdFriday.Add(new TimeSpan (13,30,0));
})
},
Expand Down Expand Up @@ -3208,7 +3208,7 @@ Dec listed in June
}

// Trading terminates at 9:30 a.m. ET on the 3rd Friday of the contract month.
var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time);
var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time, Symbol.Create(Futures.Indices.MicroSP500EMini, SecurityType.Future, Market.CME));
return thirdFriday.Add(new TimeSpan(13,30,0));
})
},
Expand All @@ -3222,7 +3222,7 @@ Dec listed in June
}

// Trading terminates at 9:30 a.m. ET on the 3rd Friday of the contract month.
var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time);
var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time, Symbol.Create(Futures.Indices.MicroNASDAQ100EMini, SecurityType.Future, Market.CME));
return thirdFriday.Add(new TimeSpan(13,30,0));
})
},
Expand All @@ -3236,7 +3236,7 @@ Dec listed in June
}

// Trading terminates at 9:30 a.m. ET on the 3rd Friday of the contract month.
var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time);
var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time, Symbol.Create(Futures.Indices.MicroRussell2000EMini, SecurityType.Future, Market.CME));
return thirdFriday.Add(new TimeSpan(13,30,0));
})
},
Expand All @@ -3250,7 +3250,7 @@ Dec listed in June
}

// Trading can occur up to 9:30 a.m. Eastern Time (ET) on the 3rd Friday of the contract month
var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time);
var thirdFriday = FuturesExpiryUtilityFunctions.ThirdFriday(time, Symbol.Create(Futures.Indices.MicroDow30EMini, SecurityType.Future, Market.CBOT));
return thirdFriday.Add(new TimeSpan(13,30,0));
})
},
Expand Down
14 changes: 14 additions & 0 deletions Tests/Common/Securities/Futures/FuturesExpiryFunctionsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,20 @@ public void BankHolidaysAreRespected()
Assert.AreEqual(new DateTime(2025, 2, 14), expiryDate.Date);
}

[TestCase(QuantConnect.Securities.Futures.Indices.NASDAQ100EMini, "20260302", "20260320")]
[TestCase(QuantConnect.Securities.Futures.Indices.NASDAQ100EMini, "20260602", "20260618")]
public void ExpirationUsesHolidays(string symbol, string dateStr, string expectedDate)
{
var date = Time.ParseDate(dateStr);
var expected = Time.ParseDate(expectedDate);

var futureSymbol = GetFutureSymbol(symbol, date);
var func = FuturesExpiryFunctions.FuturesExpiryFunction(GetFutureSymbol(symbol));

var actual = func(futureSymbol.ID.Date);
Assert.AreEqual(expected, actual.Date, $"Failed for symbol: {symbol}. Date {dateStr}");
}

// 25th is a sunday
[TestCase(QuantConnect.Securities.Futures.Energy.MicroCrudeOilWTI, "20221001", "20220919")]
[TestCase(QuantConnect.Securities.Futures.Energy.CrudeOilWTI, "20221001", "20220920")]
Expand Down