Skip to content

Commit 2fe7f5b

Browse files
RUT index options support (#8542)
1 parent 64f848a commit 2fe7f5b

File tree

2 files changed

+95
-7
lines changed

2 files changed

+95
-7
lines changed

Common/Securities/IndexOption/IndexOptionSymbol.cs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public static class IndexOptionSymbol
2727
{
2828
private static readonly Dictionary<string, string> _nonStandardOptionToIndex = new()
2929
{
30+
{ "RUTW", "RUT" },
3031
{ "SPXW", "SPX" },
3132
{ "VIXW", "VIX" },
3233
{ "NDXP", "NDX" },
@@ -39,6 +40,7 @@ public static class IndexOptionSymbol
3940
private static readonly HashSet<string> _nonStandardIndexOptionTickers = new()
4041
{
4142
// Weeklies
43+
"RUTW", // PM-Settled. While RUT AM-Settled on 3rd Fridays
4244
"SPXW",
4345
"VIXW",
4446
// PM-Settled
@@ -50,7 +52,7 @@ public static class IndexOptionSymbol
5052
/// <summary>
5153
/// Supported index option tickers
5254
/// </summary>
53-
public static readonly HashSet<string> SupportedIndexOptionTickers = new string[] { "SPX", "NDX", "VIX" }
55+
public static readonly HashSet<string> SupportedIndexOptionTickers = new string[] { "SPX", "NDX", "VIX", "RUT" }
5456
.Union(_nonStandardIndexOptionTickers)
5557
.ToHashSet();
5658

@@ -70,12 +72,14 @@ public static bool IsStandard(Symbol symbol)
7072
{
7173
case "NQX":
7274
case "SPXW":
73-
// they have weeklies and monthly contracts
74-
// NQX https://www.nasdaq.com/docs/NQXFactSheet.pdf
75-
// SPXW https://www.cboe.com/tradable_products/sp_500/spx_weekly_options/specifications/
76-
return FuturesExpiryUtilityFunctions.ThirdFriday(symbol.ID.Date) == symbol.ID.Date;
75+
case "RUTW":
76+
// they have weeklies and monthly contracts
77+
// NQX https://www.nasdaq.com/docs/NQXFactSheet.pdf
78+
// SPXW https://www.cboe.com/tradable_products/sp_500/spx_weekly_options/specifications/
79+
// RUTW expires every day
80+
return FuturesExpiryUtilityFunctions.ThirdFriday(symbol.ID.Date) == symbol.ID.Date;
7781
default:
78-
// NDX/SPX/NQX/VIX/VIXW/NDXP are all normal contracts
82+
// NDX/SPX/NQX/VIX/VIXW/NDXP/RUT are all normal contracts
7983
return true;
8084
}
8185
}
@@ -132,6 +136,7 @@ public static DateTime GetExpiryDate(string ticker, DateTime lastTradingDate)
132136
/// <summary>
133137
/// Some index options last tradable date is the previous day to the expiration
134138
/// https://www.cboe.com/tradable_products/vix/vix_options/specifications/
139+
/// https://www.cboe.com/tradable_products/ftse_russell/russell_2000_index_options/rut_specifications
135140
/// </summary>
136141
private static int GetExpirationOffset(string ticker)
137142
{
@@ -141,9 +146,10 @@ private static int GetExpirationOffset(string ticker)
141146
case "NDX":
142147
case "VIX":
143148
case "VIXW":
149+
case "RUT":
144150
return 1;
145151
default:
146-
// SPXW, NQX, NDXP
152+
// SPXW, NQX, NDXP, RUTW
147153
return 0;
148154
}
149155
}

Data/market-hours/market-hours-database.json

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109905,6 +109905,88 @@
109905109905
"saturday": [],
109906109906
"holidays": []
109907109907
},
109908+
"IndexOption-usa-RUT": {
109909+
"dataTimeZone": "America/New_York",
109910+
"exchangeTimeZone": "America/New_York",
109911+
"monday": [
109912+
{
109913+
"start": "09:30:00",
109914+
"end": "16:15:00",
109915+
"state": "market"
109916+
}
109917+
],
109918+
"tuesday": [
109919+
{
109920+
"start": "09:30:00",
109921+
"end": "16:15:00",
109922+
"state": "market"
109923+
}
109924+
],
109925+
"wednesday": [
109926+
{
109927+
"start": "09:30:00",
109928+
"end": "16:15:00",
109929+
"state": "market"
109930+
}
109931+
],
109932+
"thursday": [
109933+
{
109934+
"start": "09:30:00",
109935+
"end": "16:15:00",
109936+
"state": "market"
109937+
}
109938+
],
109939+
"friday": [
109940+
{
109941+
"start": "09:30:00",
109942+
"end": "16:15:00",
109943+
"state": "market"
109944+
}
109945+
],
109946+
"saturday": [],
109947+
"holidays": []
109948+
},
109949+
"IndexOption-usa-RUTW": {
109950+
"dataTimeZone": "America/New_York",
109951+
"exchangeTimeZone": "America/Chicago",
109952+
"monday": [
109953+
{
109954+
"start": "08:30:00",
109955+
"end": "15:15:00",
109956+
"state": "market"
109957+
}
109958+
],
109959+
"tuesday": [
109960+
{
109961+
"start": "08:30:00",
109962+
"end": "15:15:00",
109963+
"state": "market"
109964+
}
109965+
],
109966+
"wednesday": [
109967+
{
109968+
"start": "08:30:00",
109969+
"end": "15:15:00",
109970+
"state": "market"
109971+
}
109972+
],
109973+
"thursday": [
109974+
{
109975+
"start": "08:30:00",
109976+
"end": "15:15:00",
109977+
"state": "market"
109978+
}
109979+
],
109980+
"friday": [
109981+
{
109982+
"start": "08:30:00",
109983+
"end": "15:15:00",
109984+
"state": "market"
109985+
}
109986+
],
109987+
"saturday": [],
109988+
"holidays": []
109989+
},
109908109990
"Crypto-kraken-[*]": {
109909109991
"dataTimeZone": "UTC",
109910109992
"exchangeTimeZone": "UTC",

0 commit comments

Comments
 (0)