From 90b2425276ad0d01b84e55c69688551d31edb113 Mon Sep 17 00:00:00 2001 From: Alexandre Catarino Date: Thu, 2 Jul 2026 23:23:39 +0100 Subject: [PATCH 1/3] Add KOSPI 200 Index (KM) Futures support Co-Authored-By: Claude Opus 4.8 (1M context) --- Common/Market.cs | 8 +- Common/Securities/Future/Futures.cs | 6 + .../Future/FuturesExpiryFunctions.cs | 19 +++ Data/future/krx/margins/KM.csv | 3 + Data/market-hours/market-hours-database.json | 138 ++++++++++++++++++ .../symbol-properties-database.csv | 3 + .../Futures/FuturesExpiryFunctionsTests.cs | 2 + .../FuturesExpiryFunctionsTestData.xml | Bin 1319308 -> 1321788 bytes 8 files changed, 178 insertions(+), 1 deletion(-) create mode 100644 Data/future/krx/margins/KM.csv diff --git a/Common/Market.cs b/Common/Market.cs index e4745023ce2f..4b6c2107a57f 100644 --- a/Common/Market.cs +++ b/Common/Market.cs @@ -71,7 +71,8 @@ public static class Market Tuple.Create(InteractiveBrokers, 39), Tuple.Create(EUREX, 40), Tuple.Create(OSE, 41), - Tuple.Create(DYDX, 42) + Tuple.Create(DYDX, 42), + Tuple.Create(KRX, 43) }; static Market() @@ -267,6 +268,11 @@ static Market() /// public const string DYDX = "dydx"; + /// + /// Korea Exchange + /// + public const string KRX = "krx"; + /// /// Adds the specified market to the map of available markets with the specified identifier. /// diff --git a/Common/Securities/Future/Futures.cs b/Common/Securities/Future/Futures.cs index 2c228068d1a4..3e666d5be006 100644 --- a/Common/Securities/Future/Futures.cs +++ b/Common/Securities/Future/Futures.cs @@ -1555,6 +1555,12 @@ public static class Indices /// The symbol public const string HangSeng = "HSI"; + /// + /// KOSPI 200 Index Futures + /// + /// The symbol + public const string Kospi200 = "KM"; + /// /// Micro E-mini S&P 500 Index Futures /// diff --git a/Common/Securities/Future/FuturesExpiryFunctions.cs b/Common/Securities/Future/FuturesExpiryFunctions.cs index 30d93fc2e437..b63fb8d0a4fc 100644 --- a/Common/Securities/Future/FuturesExpiryFunctions.cs +++ b/Common/Securities/Future/FuturesExpiryFunctions.cs @@ -793,6 +793,25 @@ public static Func FuturesExpiryFunction(Symbol symbol) }) }, + // KOSPI 200 Index Futures (KM): http://global.krx.co.kr/contents/GLB/05/0503/0503010102/GLB0503010102.jsp + {Symbol.Create(Futures.Indices.Kospi200, SecurityType.Future, Market.KRX), (time => + { + // Contract months: the four nearest months of the quarterly cycle (March, June, September, December) + // Last trading day: the second Thursday of the contract month. Trading terminates at 15:20 KST on that day. + // If the second Thursday is a holiday, the last trading day is the preceding business day. + var market = Market.KRX; + var symbol = Futures.Indices.Kospi200; + var holidays = FuturesExpiryUtilityFunctions.GetExpirationHolidays(market, symbol); + + var lastTradingDay = FuturesExpiryUtilityFunctions.NthWeekday(time, 2, DayOfWeek.Thursday); + while (holidays.Contains(lastTradingDay) || !lastTradingDay.IsCommonBusinessDay()) + { + lastTradingDay = lastTradingDay.AddDays(-1); + } + return lastTradingDay.Add(new TimeSpan(15, 20, 0)); + }) + }, + // MSCI Europe Net Total Return (USD) Futures: https://www.theice.com/products/71512951/MSCI-Europe-NTR-Index-Future-USD & https://www.theice.com/publicdocs/futures_us/exchange_notices/ICE_Futures_US_2022_TRADING_HOLIDAY_CALENDAR_20211118.pdf {Symbol.Create(Futures.Indices.MSCIEuropeNTR, SecurityType.Future, Market.NYSELIFFE), (time => { diff --git a/Data/future/krx/margins/KM.csv b/Data/future/krx/margins/KM.csv new file mode 100644 index 000000000000..b7e72721e38e --- /dev/null +++ b/Data/future/krx/margins/KM.csv @@ -0,0 +1,3 @@ +# we don't have historical information for this symbol +date,initial,maintenance +19900101,7087500,4725000 diff --git a/Data/market-hours/market-hours-database.json b/Data/market-hours/market-hours-database.json index 0aced1b51097..778c6b2a13b4 100644 --- a/Data/market-hours/market-hours-database.json +++ b/Data/market-hours/market-hours-database.json @@ -123301,6 +123301,144 @@ "earlyCloses": {}, "lateOpens": {} }, + "Future-krx-[*]": { + "dataTimeZone": "Asia/Seoul", + "exchangeTimeZone": "Asia/Seoul", + "sunday": [], + "monday": [ + { + "start": "08:00:00", + "end": "09:00:00", + "state": "premarket" + }, + { + "start": "09:00:00", + "end": "15:45:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "08:00:00", + "end": "09:00:00", + "state": "premarket" + }, + { + "start": "09:00:00", + "end": "15:45:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "08:00:00", + "end": "09:00:00", + "state": "premarket" + }, + { + "start": "09:00:00", + "end": "15:45:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "08:00:00", + "end": "09:00:00", + "state": "premarket" + }, + { + "start": "09:00:00", + "end": "15:45:00", + "state": "market" + } + ], + "friday": [ + { + "start": "08:00:00", + "end": "09:00:00", + "state": "premarket" + }, + { + "start": "09:00:00", + "end": "15:45:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {}, + "lateOpens": {} + }, + "Future-krx-KM": { + "dataTimeZone": "Asia/Seoul", + "exchangeTimeZone": "Asia/Seoul", + "sunday": [], + "monday": [ + { + "start": "08:00:00", + "end": "09:00:00", + "state": "premarket" + }, + { + "start": "09:00:00", + "end": "15:45:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "08:00:00", + "end": "09:00:00", + "state": "premarket" + }, + { + "start": "09:00:00", + "end": "15:45:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "08:00:00", + "end": "09:00:00", + "state": "premarket" + }, + { + "start": "09:00:00", + "end": "15:45:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "08:00:00", + "end": "09:00:00", + "state": "premarket" + }, + { + "start": "09:00:00", + "end": "15:45:00", + "state": "market" + } + ], + "friday": [ + { + "start": "08:00:00", + "end": "09:00:00", + "state": "premarket" + }, + { + "start": "09:00:00", + "end": "15:45:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [], + "earlyCloses": {}, + "lateOpens": {} + }, "Index-ose-[*]": { "dataTimeZone": "Asia/Tokyo", "exchangeTimeZone": "Asia/Tokyo", diff --git a/Data/symbol-properties/symbol-properties-database.csv b/Data/symbol-properties/symbol-properties-database.csv index d0abbf743488..1b923b30fa02 100644 --- a/Data/symbol-properties/symbol-properties-database.csv +++ b/Data/symbol-properties/symbol-properties-database.csv @@ -415,6 +415,9 @@ hkfe,[*],index,,HKD,1,0.01,1 ose,[*],index,,JPY,1,0.01,1 +krx,KM,future,KOSPI 200 Index Futures,KRW,250000,0.05,1.0 +krx,[*],index,,KRW,1,0.01,1 + # Futures options -- will default to Futures contract specs in case no entry exists cbot,OZB,futureoption,U.S. Treasury Bond American Futures Options,USD,1000.0,0.015625,1.0 cbot,OZC,futureoption,Corn American Futures Options,USD,5000.0,0.00125,1.0,,,100 diff --git a/Tests/Common/Securities/Futures/FuturesExpiryFunctionsTests.cs b/Tests/Common/Securities/Futures/FuturesExpiryFunctionsTests.cs index 4bf4d3959d91..4c37b061ace5 100644 --- a/Tests/Common/Securities/Futures/FuturesExpiryFunctionsTests.cs +++ b/Tests/Common/Securities/Futures/FuturesExpiryFunctionsTests.cs @@ -56,6 +56,7 @@ public class FuturesExpiryFunctionsTests private const string OneFortyFivePM = "13:45:00"; private const string ThreeThirtyPM = "15:30:00"; private const string FourFifteenPM = "16:15:00"; + private const string ThreeTwentyPMKoreaTime = "15:20:00"; private readonly SymbolPropertiesDatabase _symbolPropertiesDatabase = SymbolPropertiesDatabase.FromDataFolder(); [OneTimeSetUp] @@ -396,6 +397,7 @@ public void FinancialsExpiryDateFunction_WithDifferentDates_ShouldFollowContract [TestCase(QuantConnect.Securities.Futures.Indices.VIX, EightOClockChicagoTime)] [TestCase(QuantConnect.Securities.Futures.Indices.VIXMini, EightOClockChicagoTime)] [TestCase(QuantConnect.Securities.Futures.Indices.Nikkei225Yen, TwoThirtyPM)] + [TestCase(QuantConnect.Securities.Futures.Indices.Kospi200, ThreeTwentyPMKoreaTime)] [TestCase(QuantConnect.Securities.Futures.Indices.MSCITaiwanIndex, OneFortyFivePM)] [TestCase(QuantConnect.Securities.Futures.Indices.Nifty50, ThreeThirtyPM)] [TestCase(QuantConnect.Securities.Futures.Indices.BankNifty, ThreeThirtyPM)] diff --git a/Tests/TestData/FuturesExpiryFunctionsTestData.xml b/Tests/TestData/FuturesExpiryFunctionsTestData.xml index eeac9d8ec128d318d4797b0153816e6bbde2a876..24e92306d4fdccbb06338e847dff918a27894003 100644 GIT binary patch delta 460 zcmYL@O-lk%6o$_efaf-o!6!skzFi+66MJWoW`BoE(8jL)Nx<61z~d7~?O!JsQL{xOvQ z1Bv$^#1$9o{{$G1MgOqtkl(}1?+~-zUp%UxR9xTsY)ir-|C$k&+(D+!JYwrY3Gyk7 tWSzh=+Y%q_GIx%R*~-U Date: Tue, 7 Jul 2026 19:26:56 +0100 Subject: [PATCH 2/3] Fix Forex-interactivebrokers formatting and add KRX futures holidays Expand the compact single-line session arrays in Forex-interactivebrokers-[*] to the multi-line style used throughout the market-hours database. Add South Korean (KRX) market-closure holidays (2000-2027) to Future-krx-[*] and Future-krx-KM, including lunar holidays (Seollal, Buddha's Birthday, Chuseok), substitute holidays, election-day closures, year-end closures, and the reinstated Constitution Day (7/17/2026 onward). Co-Authored-By: Claude Opus 4.8 (1M context) --- Data/market-hours/market-hours-database.json | 836 ++++++++++++++++++- 1 file changed, 834 insertions(+), 2 deletions(-) diff --git a/Data/market-hours/market-hours-database.json b/Data/market-hours/market-hours-database.json index 778c6b2a13b4..8bc49574b3a8 100644 --- a/Data/market-hours/market-hours-database.json +++ b/Data/market-hours/market-hours-database.json @@ -79805,6 +79805,54 @@ "saturday": [], "holidays": [] }, + "Forex-interactivebrokers-[*]": { + "dataTimeZone": "UTC", + "exchangeTimeZone": "America/New_York", + "sunday": [ + { + "start": "17:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "monday": [ + { + "start": "00:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "tuesday": [ + { + "start": "00:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "wednesday": [ + { + "start": "00:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "thursday": [ + { + "start": "00:00:00", + "end": "1.00:00:00", + "state": "market" + } + ], + "friday": [ + { + "start": "00:00:00", + "end": "17:00:00", + "state": "market" + } + ], + "saturday": [], + "holidays": [] + }, "Forex-fxcm-[*]": { "dataTimeZone": "UTC-05", "exchangeTimeZone": "America/New_York", @@ -123366,7 +123414,399 @@ } ], "saturday": [], - "holidays": [], + "holidays": [ + "2/4/2000", + "3/1/2000", + "4/13/2000", + "5/1/2000", + "5/5/2000", + "5/11/2000", + "6/6/2000", + "8/15/2000", + "9/11/2000", + "9/12/2000", + "9/13/2000", + "10/3/2000", + "12/25/2000", + "12/29/2000", + "1/1/2001", + "1/23/2001", + "1/24/2001", + "1/25/2001", + "3/1/2001", + "5/1/2001", + "6/6/2001", + "8/15/2001", + "10/1/2001", + "10/2/2001", + "10/3/2001", + "12/25/2001", + "12/31/2001", + "1/1/2002", + "2/11/2002", + "2/12/2002", + "2/13/2002", + "3/1/2002", + "5/1/2002", + "6/6/2002", + "6/13/2002", + "8/15/2002", + "9/20/2002", + "10/3/2002", + "12/19/2002", + "12/25/2002", + "12/31/2002", + "1/1/2003", + "1/31/2003", + "5/1/2003", + "5/5/2003", + "5/8/2003", + "6/6/2003", + "8/15/2003", + "9/10/2003", + "9/11/2003", + "9/12/2003", + "10/3/2003", + "12/25/2003", + "12/31/2003", + "1/1/2004", + "1/21/2004", + "1/22/2004", + "1/23/2004", + "3/1/2004", + "4/15/2004", + "5/5/2004", + "5/26/2004", + "9/27/2004", + "9/28/2004", + "9/29/2004", + "12/31/2004", + "2/8/2005", + "2/9/2005", + "2/10/2005", + "3/1/2005", + "5/5/2005", + "6/6/2005", + "8/15/2005", + "9/19/2005", + "10/3/2005", + "12/30/2005", + "1/30/2006", + "3/1/2006", + "5/1/2006", + "5/5/2006", + "5/31/2006", + "6/6/2006", + "8/15/2006", + "10/3/2006", + "10/5/2006", + "10/6/2006", + "12/25/2006", + "12/29/2006", + "1/1/2007", + "2/19/2007", + "3/1/2007", + "5/1/2007", + "5/24/2007", + "6/6/2007", + "8/15/2007", + "9/24/2007", + "9/25/2007", + "9/26/2007", + "10/3/2007", + "12/19/2007", + "12/25/2007", + "12/31/2007", + "1/1/2008", + "2/6/2008", + "2/7/2008", + "2/8/2008", + "4/9/2008", + "5/1/2008", + "5/5/2008", + "5/12/2008", + "6/6/2008", + "8/15/2008", + "9/15/2008", + "10/3/2008", + "12/25/2008", + "12/31/2008", + "1/1/2009", + "1/26/2009", + "1/27/2009", + "5/1/2009", + "5/5/2009", + "10/2/2009", + "12/25/2009", + "12/31/2009", + "1/1/2010", + "2/15/2010", + "3/1/2010", + "5/5/2010", + "5/21/2010", + "6/2/2010", + "9/21/2010", + "9/22/2010", + "9/23/2010", + "12/31/2010", + "2/2/2011", + "2/3/2011", + "2/4/2011", + "3/1/2011", + "5/5/2011", + "5/10/2011", + "6/6/2011", + "8/15/2011", + "9/12/2011", + "9/13/2011", + "10/3/2011", + "12/30/2011", + "1/23/2012", + "1/24/2012", + "3/1/2012", + "4/11/2012", + "5/1/2012", + "5/28/2012", + "6/6/2012", + "8/15/2012", + "10/1/2012", + "10/3/2012", + "12/19/2012", + "12/25/2012", + "12/31/2012", + "1/1/2013", + "2/11/2013", + "3/1/2013", + "5/1/2013", + "5/17/2013", + "6/6/2013", + "8/15/2013", + "9/18/2013", + "9/19/2013", + "9/20/2013", + "10/3/2013", + "10/9/2013", + "12/25/2013", + "12/31/2013", + "1/1/2014", + "1/30/2014", + "1/31/2014", + "5/1/2014", + "5/5/2014", + "5/6/2014", + "6/4/2014", + "6/6/2014", + "8/15/2014", + "9/8/2014", + "9/9/2014", + "9/10/2014", + "10/3/2014", + "10/9/2014", + "12/25/2014", + "12/31/2014", + "1/1/2015", + "2/18/2015", + "2/19/2015", + "2/20/2015", + "5/1/2015", + "5/5/2015", + "5/25/2015", + "8/14/2015", + "9/28/2015", + "9/29/2015", + "10/9/2015", + "12/25/2015", + "12/31/2015", + "1/1/2016", + "2/8/2016", + "2/9/2016", + "2/10/2016", + "3/1/2016", + "4/13/2016", + "5/5/2016", + "5/6/2016", + "6/6/2016", + "8/15/2016", + "9/14/2016", + "9/15/2016", + "9/16/2016", + "10/3/2016", + "12/30/2016", + "1/27/2017", + "1/30/2017", + "3/1/2017", + "5/1/2017", + "5/3/2017", + "5/5/2017", + "5/9/2017", + "6/6/2017", + "8/15/2017", + "10/2/2017", + "10/3/2017", + "10/4/2017", + "10/5/2017", + "10/6/2017", + "10/9/2017", + "12/25/2017", + "12/29/2017", + "1/1/2018", + "2/15/2018", + "2/16/2018", + "3/1/2018", + "5/1/2018", + "5/7/2018", + "5/22/2018", + "6/6/2018", + "6/13/2018", + "8/15/2018", + "9/24/2018", + "9/25/2018", + "9/26/2018", + "10/3/2018", + "10/9/2018", + "12/25/2018", + "12/31/2018", + "1/1/2019", + "2/4/2019", + "2/5/2019", + "2/6/2019", + "3/1/2019", + "5/1/2019", + "5/6/2019", + "6/6/2019", + "8/15/2019", + "9/12/2019", + "9/13/2019", + "10/3/2019", + "10/9/2019", + "12/25/2019", + "12/31/2019", + "1/1/2020", + "1/24/2020", + "1/27/2020", + "4/15/2020", + "4/30/2020", + "5/1/2020", + "5/5/2020", + "8/17/2020", + "9/30/2020", + "10/1/2020", + "10/2/2020", + "10/9/2020", + "12/25/2020", + "12/31/2020", + "1/1/2021", + "2/11/2021", + "2/12/2021", + "3/1/2021", + "5/5/2021", + "5/19/2021", + "8/16/2021", + "9/20/2021", + "9/21/2021", + "9/22/2021", + "10/4/2021", + "10/11/2021", + "12/31/2021", + "1/31/2022", + "2/1/2022", + "2/2/2022", + "3/1/2022", + "3/9/2022", + "5/5/2022", + "6/1/2022", + "6/6/2022", + "8/15/2022", + "9/9/2022", + "9/12/2022", + "10/3/2022", + "10/10/2022", + "12/30/2022", + "1/23/2023", + "1/24/2023", + "3/1/2023", + "5/1/2023", + "5/5/2023", + "5/29/2023", + "6/6/2023", + "8/15/2023", + "9/28/2023", + "9/29/2023", + "10/2/2023", + "10/3/2023", + "10/9/2023", + "12/25/2023", + "12/29/2023", + "1/1/2024", + "2/9/2024", + "2/12/2024", + "3/1/2024", + "4/10/2024", + "5/1/2024", + "5/6/2024", + "5/15/2024", + "6/6/2024", + "8/15/2024", + "9/16/2024", + "9/17/2024", + "9/18/2024", + "10/1/2024", + "10/3/2024", + "10/9/2024", + "12/25/2024", + "12/31/2024", + "1/1/2025", + "1/27/2025", + "1/28/2025", + "1/29/2025", + "1/30/2025", + "3/3/2025", + "5/1/2025", + "5/5/2025", + "5/6/2025", + "6/3/2025", + "6/6/2025", + "8/15/2025", + "10/3/2025", + "10/6/2025", + "10/7/2025", + "10/8/2025", + "10/9/2025", + "12/25/2025", + "12/31/2025", + "1/1/2026", + "2/16/2026", + "2/17/2026", + "2/18/2026", + "3/2/2026", + "5/1/2026", + "5/5/2026", + "5/25/2026", + "6/3/2026", + "7/17/2026", + "8/17/2026", + "9/24/2026", + "9/25/2026", + "10/5/2026", + "10/9/2026", + "12/25/2026", + "12/31/2026", + "1/1/2027", + "2/8/2027", + "2/9/2027", + "3/1/2027", + "5/5/2027", + "5/13/2027", + "7/19/2027", + "8/16/2027", + "9/14/2027", + "9/15/2027", + "9/16/2027", + "10/4/2027", + "10/11/2027", + "12/27/2027", + "12/31/2027" + ], "earlyCloses": {}, "lateOpens": {} }, @@ -123435,7 +123875,399 @@ } ], "saturday": [], - "holidays": [], + "holidays": [ + "2/4/2000", + "3/1/2000", + "4/13/2000", + "5/1/2000", + "5/5/2000", + "5/11/2000", + "6/6/2000", + "8/15/2000", + "9/11/2000", + "9/12/2000", + "9/13/2000", + "10/3/2000", + "12/25/2000", + "12/29/2000", + "1/1/2001", + "1/23/2001", + "1/24/2001", + "1/25/2001", + "3/1/2001", + "5/1/2001", + "6/6/2001", + "8/15/2001", + "10/1/2001", + "10/2/2001", + "10/3/2001", + "12/25/2001", + "12/31/2001", + "1/1/2002", + "2/11/2002", + "2/12/2002", + "2/13/2002", + "3/1/2002", + "5/1/2002", + "6/6/2002", + "6/13/2002", + "8/15/2002", + "9/20/2002", + "10/3/2002", + "12/19/2002", + "12/25/2002", + "12/31/2002", + "1/1/2003", + "1/31/2003", + "5/1/2003", + "5/5/2003", + "5/8/2003", + "6/6/2003", + "8/15/2003", + "9/10/2003", + "9/11/2003", + "9/12/2003", + "10/3/2003", + "12/25/2003", + "12/31/2003", + "1/1/2004", + "1/21/2004", + "1/22/2004", + "1/23/2004", + "3/1/2004", + "4/15/2004", + "5/5/2004", + "5/26/2004", + "9/27/2004", + "9/28/2004", + "9/29/2004", + "12/31/2004", + "2/8/2005", + "2/9/2005", + "2/10/2005", + "3/1/2005", + "5/5/2005", + "6/6/2005", + "8/15/2005", + "9/19/2005", + "10/3/2005", + "12/30/2005", + "1/30/2006", + "3/1/2006", + "5/1/2006", + "5/5/2006", + "5/31/2006", + "6/6/2006", + "8/15/2006", + "10/3/2006", + "10/5/2006", + "10/6/2006", + "12/25/2006", + "12/29/2006", + "1/1/2007", + "2/19/2007", + "3/1/2007", + "5/1/2007", + "5/24/2007", + "6/6/2007", + "8/15/2007", + "9/24/2007", + "9/25/2007", + "9/26/2007", + "10/3/2007", + "12/19/2007", + "12/25/2007", + "12/31/2007", + "1/1/2008", + "2/6/2008", + "2/7/2008", + "2/8/2008", + "4/9/2008", + "5/1/2008", + "5/5/2008", + "5/12/2008", + "6/6/2008", + "8/15/2008", + "9/15/2008", + "10/3/2008", + "12/25/2008", + "12/31/2008", + "1/1/2009", + "1/26/2009", + "1/27/2009", + "5/1/2009", + "5/5/2009", + "10/2/2009", + "12/25/2009", + "12/31/2009", + "1/1/2010", + "2/15/2010", + "3/1/2010", + "5/5/2010", + "5/21/2010", + "6/2/2010", + "9/21/2010", + "9/22/2010", + "9/23/2010", + "12/31/2010", + "2/2/2011", + "2/3/2011", + "2/4/2011", + "3/1/2011", + "5/5/2011", + "5/10/2011", + "6/6/2011", + "8/15/2011", + "9/12/2011", + "9/13/2011", + "10/3/2011", + "12/30/2011", + "1/23/2012", + "1/24/2012", + "3/1/2012", + "4/11/2012", + "5/1/2012", + "5/28/2012", + "6/6/2012", + "8/15/2012", + "10/1/2012", + "10/3/2012", + "12/19/2012", + "12/25/2012", + "12/31/2012", + "1/1/2013", + "2/11/2013", + "3/1/2013", + "5/1/2013", + "5/17/2013", + "6/6/2013", + "8/15/2013", + "9/18/2013", + "9/19/2013", + "9/20/2013", + "10/3/2013", + "10/9/2013", + "12/25/2013", + "12/31/2013", + "1/1/2014", + "1/30/2014", + "1/31/2014", + "5/1/2014", + "5/5/2014", + "5/6/2014", + "6/4/2014", + "6/6/2014", + "8/15/2014", + "9/8/2014", + "9/9/2014", + "9/10/2014", + "10/3/2014", + "10/9/2014", + "12/25/2014", + "12/31/2014", + "1/1/2015", + "2/18/2015", + "2/19/2015", + "2/20/2015", + "5/1/2015", + "5/5/2015", + "5/25/2015", + "8/14/2015", + "9/28/2015", + "9/29/2015", + "10/9/2015", + "12/25/2015", + "12/31/2015", + "1/1/2016", + "2/8/2016", + "2/9/2016", + "2/10/2016", + "3/1/2016", + "4/13/2016", + "5/5/2016", + "5/6/2016", + "6/6/2016", + "8/15/2016", + "9/14/2016", + "9/15/2016", + "9/16/2016", + "10/3/2016", + "12/30/2016", + "1/27/2017", + "1/30/2017", + "3/1/2017", + "5/1/2017", + "5/3/2017", + "5/5/2017", + "5/9/2017", + "6/6/2017", + "8/15/2017", + "10/2/2017", + "10/3/2017", + "10/4/2017", + "10/5/2017", + "10/6/2017", + "10/9/2017", + "12/25/2017", + "12/29/2017", + "1/1/2018", + "2/15/2018", + "2/16/2018", + "3/1/2018", + "5/1/2018", + "5/7/2018", + "5/22/2018", + "6/6/2018", + "6/13/2018", + "8/15/2018", + "9/24/2018", + "9/25/2018", + "9/26/2018", + "10/3/2018", + "10/9/2018", + "12/25/2018", + "12/31/2018", + "1/1/2019", + "2/4/2019", + "2/5/2019", + "2/6/2019", + "3/1/2019", + "5/1/2019", + "5/6/2019", + "6/6/2019", + "8/15/2019", + "9/12/2019", + "9/13/2019", + "10/3/2019", + "10/9/2019", + "12/25/2019", + "12/31/2019", + "1/1/2020", + "1/24/2020", + "1/27/2020", + "4/15/2020", + "4/30/2020", + "5/1/2020", + "5/5/2020", + "8/17/2020", + "9/30/2020", + "10/1/2020", + "10/2/2020", + "10/9/2020", + "12/25/2020", + "12/31/2020", + "1/1/2021", + "2/11/2021", + "2/12/2021", + "3/1/2021", + "5/5/2021", + "5/19/2021", + "8/16/2021", + "9/20/2021", + "9/21/2021", + "9/22/2021", + "10/4/2021", + "10/11/2021", + "12/31/2021", + "1/31/2022", + "2/1/2022", + "2/2/2022", + "3/1/2022", + "3/9/2022", + "5/5/2022", + "6/1/2022", + "6/6/2022", + "8/15/2022", + "9/9/2022", + "9/12/2022", + "10/3/2022", + "10/10/2022", + "12/30/2022", + "1/23/2023", + "1/24/2023", + "3/1/2023", + "5/1/2023", + "5/5/2023", + "5/29/2023", + "6/6/2023", + "8/15/2023", + "9/28/2023", + "9/29/2023", + "10/2/2023", + "10/3/2023", + "10/9/2023", + "12/25/2023", + "12/29/2023", + "1/1/2024", + "2/9/2024", + "2/12/2024", + "3/1/2024", + "4/10/2024", + "5/1/2024", + "5/6/2024", + "5/15/2024", + "6/6/2024", + "8/15/2024", + "9/16/2024", + "9/17/2024", + "9/18/2024", + "10/1/2024", + "10/3/2024", + "10/9/2024", + "12/25/2024", + "12/31/2024", + "1/1/2025", + "1/27/2025", + "1/28/2025", + "1/29/2025", + "1/30/2025", + "3/3/2025", + "5/1/2025", + "5/5/2025", + "5/6/2025", + "6/3/2025", + "6/6/2025", + "8/15/2025", + "10/3/2025", + "10/6/2025", + "10/7/2025", + "10/8/2025", + "10/9/2025", + "12/25/2025", + "12/31/2025", + "1/1/2026", + "2/16/2026", + "2/17/2026", + "2/18/2026", + "3/2/2026", + "5/1/2026", + "5/5/2026", + "5/25/2026", + "6/3/2026", + "7/17/2026", + "8/17/2026", + "9/24/2026", + "9/25/2026", + "10/5/2026", + "10/9/2026", + "12/25/2026", + "12/31/2026", + "1/1/2027", + "2/8/2027", + "2/9/2027", + "3/1/2027", + "5/5/2027", + "5/13/2027", + "7/19/2027", + "8/16/2027", + "9/14/2027", + "9/15/2027", + "9/16/2027", + "10/4/2027", + "10/11/2027", + "12/27/2027", + "12/31/2027" + ], "earlyCloses": {}, "lateOpens": {} }, From 94b72e1064b08723af69f2dda3ef63b8a8763e82 Mon Sep 17 00:00:00 2001 From: Alexandre Catarino Date: Tue, 7 Jul 2026 20:08:59 +0100 Subject: [PATCH 3/3] Add USD/KRW forex entry for Interactive Brokers Enables USD/KRW live trading/pricing through the Interactive Brokers brokerage. Co-Authored-By: Claude Opus 4.8 (1M context) --- Data/symbol-properties/symbol-properties-database.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/Data/symbol-properties/symbol-properties-database.csv b/Data/symbol-properties/symbol-properties-database.csv index 1b923b30fa02..8533e008bd35 100644 --- a/Data/symbol-properties/symbol-properties-database.csv +++ b/Data/symbol-properties/symbol-properties-database.csv @@ -91,6 +91,7 @@ oanda,XPDUSD,cfd,Palladium,USD,1,0.001,1 oanda,XPTUSD,cfd,Platinum,USD,1,0.001,1 interactivebrokers,[*],cfd,,USD,1,0.01,1 +interactivebrokers,USDKRW,forex,USD/KRW,KRW,1,0.01,1 interactivebrokers,IBUS500,cfd,US 500,USD,1,0.01,1 interactivebrokers,IBUS30,cfd,US 30,USD,1,0.01,1 interactivebrokers,IBUST100,cfd,US Tech 100,USD,1,0.01,1