diff --git a/polygon/rest/models/snapshot.py b/polygon/rest/models/snapshot.py index 89d3b511..f1905f22 100644 --- a/polygon/rest/models/snapshot.py +++ b/polygon/rest/models/snapshot.py @@ -156,6 +156,21 @@ def from_dict(d): return LastQuoteOptionContractSnapshot(**d) +@modelclass +class LastTradeOptionContractSnapshot: + "Contains data for the most recent trade for an options contract." + price: Optional[float] = None + sip_timestamp: Optional[int] = None + size: Optional[int] = None + conditions: Optional[List[int]] = None + exchange: Optional[int] = None + timeframe: Optional[str] = None + + @staticmethod + def from_dict(d): + return LastTradeOptionContractSnapshot(**d) + + @modelclass class Greeks: "Contains data for the greeks in an options contract." @@ -193,6 +208,7 @@ class OptionContractSnapshot: greeks: Optional[Greeks] = None implied_volatility: Optional[float] = None last_quote: Optional[LastQuoteOptionContractSnapshot] = None + last_trade: Optional[LastTradeOptionContractSnapshot] = None open_interest: Optional[float] = None underlying_asset: Optional[UnderlyingAsset] = None @@ -211,6 +227,9 @@ def from_dict(d): last_quote=None if "last_quote" not in d else LastQuoteOptionContractSnapshot.from_dict(d["last_quote"]), + last_trade=None + if "last_trade" not in d + else LastTradeOptionContractSnapshot.from_dict(d["last_trade"]), open_interest=d.get("open_interest", None), underlying_asset=None if "underlying_asset" not in d diff --git a/test_rest/mocks/v3/snapshot/options/AAPL.json b/test_rest/mocks/v3/snapshot/options/AAPL.json index 677b39ea..de91e5d7 100644 --- a/test_rest/mocks/v3/snapshot/options/AAPL.json +++ b/test_rest/mocks/v3/snapshot/options/AAPL.json @@ -39,6 +39,14 @@ "midpoint": 29.075, "timeframe": "REAL-TIME" }, + "last_trade":{ + "price": 29.25, + "sip_timestamp": 1678718527714665700, + "size": 1, + "conditions": [209], + "exchange": 309, + "timeframe": "REAL-TIME" + }, "open_interest": 8133, "underlying_asset": { "change_to_break_even": 19.11439999999999, @@ -49,4 +57,4 @@ } }], "status": "OK" -} \ No newline at end of file +} diff --git a/test_rest/mocks/v3/snapshot/options/AAPL/O;AAPL230616C00150000.json b/test_rest/mocks/v3/snapshot/options/AAPL/O;AAPL230616C00150000.json index da4210f8..81e4aab2 100644 --- a/test_rest/mocks/v3/snapshot/options/AAPL/O;AAPL230616C00150000.json +++ b/test_rest/mocks/v3/snapshot/options/AAPL/O;AAPL230616C00150000.json @@ -38,6 +38,14 @@ "midpoint": 29.075, "timeframe": "REAL-TIME" }, + "last_trade":{ + "price": 29.25, + "sip_timestamp": 1678718527714665700, + "size": 1, + "conditions": [209], + "exchange": 309, + "timeframe": "REAL-TIME" + }, "open_interest": 8133, "underlying_asset": { "change_to_break_even": 19.11439999999999, @@ -48,4 +56,4 @@ } }, "status": "OK" -} \ No newline at end of file +} diff --git a/test_rest/test_snapshots.py b/test_rest/test_snapshots.py index 072b5a09..4ae72f8a 100644 --- a/test_rest/test_snapshots.py +++ b/test_rest/test_snapshots.py @@ -9,6 +9,7 @@ OrderBookQuote, UnderlyingAsset, LastQuoteOptionContractSnapshot, + LastTradeOptionContractSnapshot, Greeks, OptionDetails, DayOptionContractSnapshot, @@ -201,6 +202,14 @@ def test_get_snapshot_option(self): midpoint=29.075, timeframe="REAL-TIME", ), + last_trade=LastTradeOptionContractSnapshot( + price=29.25, + sip_timestamp=1678718527714665700, + size=1, + conditions=[209], + exchange=309, + timeframe="REAL-TIME", + ), open_interest=8133, underlying_asset=UnderlyingAsset( change_to_break_even=19.11439999999999, @@ -253,6 +262,14 @@ def test_list_snapshot_options_chain(self): midpoint=29.075, timeframe="REAL-TIME", ), + last_trade=LastTradeOptionContractSnapshot( + price=29.25, + sip_timestamp=1678718527714665700, + size=1, + conditions=[209], + exchange=309, + timeframe="REAL-TIME", + ), open_interest=8133, underlying_asset=UnderlyingAsset( change_to_break_even=19.11439999999999,