From b7b97c8ca038cce2fbaf55f921cd1e6c3bc2af69 Mon Sep 17 00:00:00 2001 From: Romazes Date: Tue, 21 Apr 2026 01:29:01 +0300 Subject: [PATCH 1/4] feature: add NASDAQ_SC and NASDAQ_INT equity exchanges - map primary exchange codes S and T to new NASDAQ tier exchanges - T was previously folded into NASDAQ, now returns NASDAQ_INT - add V as alias for IEX in equity switch - fix MEMX description (was copy of LTSE) --- Common/Exchange.cs | 14 +++++++++++++- Common/Global.cs | 8 +++++++- Tests/Common/ExchangeTest.cs | 4 ++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/Common/Exchange.cs b/Common/Exchange.cs index 762171618c0d..3249dab3388b 100644 --- a/Common/Exchange.cs +++ b/Common/Exchange.cs @@ -33,7 +33,7 @@ public class Exchange /// The Members Exchange (MEMX) is an independently owned, technology-driven stock exchange /// public static Exchange MEMX { get; } - = new("MEMX", "MM", "The Long-Term Stock Exchange", QuantConnect.Market.USA, SecurityType.Equity); + = new("MEMX", "MM", "The Members Exchange", QuantConnect.Market.USA, SecurityType.Equity); /// /// Long-Term Stock Exchange @@ -47,6 +47,18 @@ public class Exchange public static Exchange NASDAQ { get; } = new("NASDAQ", "Q", "National Association of Securities Dealers Automated Quotation", QuantConnect.Market.USA, SecurityType.Equity); + /// + /// NASDAQ Small Cap + /// + public static Exchange NASDAQ_SC { get; } + = new("NASDAQ_SC", "S", "NASDAQ Small Cap", QuantConnect.Market.USA, SecurityType.Equity); + + /// + /// NASDAQ Intermarket + /// + public static Exchange NASDAQ_INT { get; } + = new("NASDAQ_INT", "T", "NASDAQ Intermarket", QuantConnect.Market.USA, SecurityType.Equity); + /// /// The NASDAQ options market /// diff --git a/Common/Global.cs b/Common/Global.cs index 4832b5e2ad08..e5ce8af60a5d 100644 --- a/Common/Global.cs +++ b/Common/Global.cs @@ -1040,11 +1040,16 @@ public static Exchange GetPrimaryExchange(this string exchange, { switch (exchange.LazyToUpper()) { - case "T": case "Q": case "NASDAQ": case "NASDAQ_OMX": return Exchange.NASDAQ; + case "S": + case "NASDAQ_SC": + return Exchange.NASDAQ_SC; + case "T": + case "NASDAQ_INT": + return Exchange.NASDAQ_INT; case "Z": case "BATS": case "BATS Z": @@ -1109,6 +1114,7 @@ public static Exchange GetPrimaryExchange(this string exchange, return Exchange.BOSTON; case "BSE": return Exchange.BSE; + case "V": case "IEX": return Exchange.IEX; case "SMART": diff --git a/Tests/Common/ExchangeTest.cs b/Tests/Common/ExchangeTest.cs index 577431d75f4b..35e36a8e9580 100644 --- a/Tests/Common/ExchangeTest.cs +++ b/Tests/Common/ExchangeTest.cs @@ -22,6 +22,8 @@ namespace QuantConnect.Tests.Common public class ExchangeTest { [TestCase("NASDAQ", "Q")] + [TestCase("NASDAQ_SC", "S")] + [TestCase("NASDAQ_INT", "T")] [TestCase("NASDAQ BX", "B")] [TestCase("NASDAQ PSX", "X")] [TestCase("BATS", "Z")] @@ -129,6 +131,8 @@ private static TestCaseData[] ExchangeCases() { new TestCaseData(Exchange.UNKNOWN, null, "", SecurityType.Base), new TestCaseData(Exchange.NASDAQ, "Q", "NASDAQ", SecurityType.Equity), + new TestCaseData(Exchange.NASDAQ_SC, "S", "NASDAQ_SC", SecurityType.Equity), + new TestCaseData(Exchange.NASDAQ_INT, "T", "NASDAQ_INT", SecurityType.Equity), new TestCaseData(Exchange.NASDAQ_BX, "B", "NASDAQ_BX", SecurityType.Equity), new TestCaseData(Exchange.NASDAQ_PSX, "X", "NASDAQ_PSX", SecurityType.Equity), new TestCaseData(Exchange.BATS, "Z", "BATS", SecurityType.Equity), From 206f99ff8eb78873013e20305135f64b0531cb5b Mon Sep 17 00:00:00 2001 From: Romazes Date: Tue, 21 Apr 2026 14:47:54 +0300 Subject: [PATCH 2/4] feature: map equity exchange codes H and U to MIAX_PEARL and MEMX --- Common/Global.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Common/Global.cs b/Common/Global.cs index e5ce8af60a5d..9e9cc17b3dbc 100644 --- a/Common/Global.cs +++ b/Common/Global.cs @@ -1121,6 +1121,7 @@ public static Exchange GetPrimaryExchange(this string exchange, return Exchange.SMART; case "OTCX": return Exchange.OTCX; + case "H": case "MP": case "MIAX PEARL": case "MIAX_PEARL": @@ -1128,6 +1129,7 @@ public static Exchange GetPrimaryExchange(this string exchange, case "L": case "LTSE": return Exchange.LTSE; + case "U": case "MM": case "MEMX": return Exchange.MEMX; From 944d5965b95c15a87cb3d1df9b33d90d6061be34 Mon Sep 17 00:00:00 2001 From: Romazes Date: Tue, 21 Apr 2026 17:50:54 +0300 Subject: [PATCH 3/4] feature: consolidate NASDAQ_INT code T into NASDAQ_SC Remove the separate NASDAQ_INT mapping in GetPrimaryExchange and map exchange code "T" to NASDAQ_SC. Update ExchangeTest cases accordingly and add coverage for IEX ("V") and MEMX ("U"). --- Common/Global.cs | 4 +--- Tests/Common/ExchangeTest.cs | 8 ++++---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/Common/Global.cs b/Common/Global.cs index 9e9cc17b3dbc..ae4103c78565 100644 --- a/Common/Global.cs +++ b/Common/Global.cs @@ -1040,6 +1040,7 @@ public static Exchange GetPrimaryExchange(this string exchange, { switch (exchange.LazyToUpper()) { + case "T": case "Q": case "NASDAQ": case "NASDAQ_OMX": @@ -1047,9 +1048,6 @@ public static Exchange GetPrimaryExchange(this string exchange, case "S": case "NASDAQ_SC": return Exchange.NASDAQ_SC; - case "T": - case "NASDAQ_INT": - return Exchange.NASDAQ_INT; case "Z": case "BATS": case "BATS Z": diff --git a/Tests/Common/ExchangeTest.cs b/Tests/Common/ExchangeTest.cs index 35e36a8e9580..10f7a5b1c518 100644 --- a/Tests/Common/ExchangeTest.cs +++ b/Tests/Common/ExchangeTest.cs @@ -1,4 +1,4 @@ -/* +/* * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. * @@ -23,7 +23,6 @@ public class ExchangeTest { [TestCase("NASDAQ", "Q")] [TestCase("NASDAQ_SC", "S")] - [TestCase("NASDAQ_INT", "T")] [TestCase("NASDAQ BX", "B")] [TestCase("NASDAQ PSX", "X")] [TestCase("BATS", "Z")] @@ -132,7 +131,6 @@ private static TestCaseData[] ExchangeCases() new TestCaseData(Exchange.UNKNOWN, null, "", SecurityType.Base), new TestCaseData(Exchange.NASDAQ, "Q", "NASDAQ", SecurityType.Equity), new TestCaseData(Exchange.NASDAQ_SC, "S", "NASDAQ_SC", SecurityType.Equity), - new TestCaseData(Exchange.NASDAQ_INT, "T", "NASDAQ_INT", SecurityType.Equity), new TestCaseData(Exchange.NASDAQ_BX, "B", "NASDAQ_BX", SecurityType.Equity), new TestCaseData(Exchange.NASDAQ_PSX, "X", "NASDAQ_PSX", SecurityType.Equity), new TestCaseData(Exchange.BATS, "Z", "BATS", SecurityType.Equity), @@ -151,13 +149,15 @@ private static TestCaseData[] ExchangeCases() new TestCaseData(Exchange.BSE, "BSE", "BSE", SecurityType.Equity), new TestCaseData(Exchange.UNKNOWN, "O", "", SecurityType.Equity), - new TestCaseData(Exchange.UNKNOWN, "H", "", SecurityType.Equity), + new TestCaseData(Exchange.MIAX_PEARL, "H", "MIAX_PEARL", SecurityType.Equity), new TestCaseData(Exchange.EDGA, "J", "EDGA", SecurityType.Equity), new TestCaseData(Exchange.OPRA, "O", "OPRA", SecurityType.Option), new TestCaseData(Exchange.ISE_GEMINI, "H", "ISE_GEMINI", SecurityType.Option), new TestCaseData(Exchange.ISE_MERCURY, "J", "ISE_MERCURY", SecurityType.Option), + new TestCaseData(Exchange.IEX, "V", "IEX", SecurityType.Equity), + new TestCaseData(Exchange.MEMX, "U", "MEMX", SecurityType.Equity), }; } } From 8a672dabb7baa4ba9a84f1cd81b02c8c333da125 Mon Sep 17 00:00:00 2001 From: Romazes Date: Tue, 21 Apr 2026 18:44:30 +0300 Subject: [PATCH 4/4] feature: remove orphaned NASDAQ_INT exchange entry Drop the NASDAQ_INT class entry from Exchange.cs. The "T" tape letter already routes to Exchange.NASDAQ via GetPrimaryExchange, leaving the class definition unreachable and inconsistent. --- Common/Exchange.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Common/Exchange.cs b/Common/Exchange.cs index 3249dab3388b..4306a9b47bad 100644 --- a/Common/Exchange.cs +++ b/Common/Exchange.cs @@ -53,12 +53,6 @@ public class Exchange public static Exchange NASDAQ_SC { get; } = new("NASDAQ_SC", "S", "NASDAQ Small Cap", QuantConnect.Market.USA, SecurityType.Equity); - /// - /// NASDAQ Intermarket - /// - public static Exchange NASDAQ_INT { get; } - = new("NASDAQ_INT", "T", "NASDAQ Intermarket", QuantConnect.Market.USA, SecurityType.Equity); - /// /// The NASDAQ options market ///