|
| 1 | +from typing import Optional, List |
| 2 | +from ...modelclass import modelclass |
| 3 | + |
| 4 | +@modelclass |
| 5 | +class MarketExchanges: |
| 6 | + "Contains exchange market status data." |
| 7 | + nasdaq: Optional[str] = None |
| 8 | + nyse: Optional[str] = None |
| 9 | + otc: Optional[str] = None |
| 10 | + |
| 11 | +@modelclass |
| 12 | +class FuturesAggregate: |
| 13 | + """Represents an aggregate for a futures contract.""" |
| 14 | + close: Optional[float] = None |
| 15 | + dollar_volume: Optional[float] = None |
| 16 | + high: Optional[float] = None |
| 17 | + low: Optional[float] = None |
| 18 | + open: Optional[float] = None |
| 19 | + ticker: Optional[str] = None |
| 20 | + transaction_count: Optional[int] = None |
| 21 | + underlying_asset: Optional[str] = None |
| 22 | + volume: Optional[int] = None |
| 23 | + window_end: Optional[int] = None |
| 24 | + window_start: Optional[int] = None |
| 25 | + |
| 26 | + @staticmethod |
| 27 | + def from_dict(d): |
| 28 | + return FuturesAggregate(**{k: v for k, v in d.items() if k in FuturesAggregate.__annotations__}) |
| 29 | + |
| 30 | +@modelclass |
| 31 | +class FuturesContract: |
| 32 | + """Represents a futures contract.""" |
| 33 | + active: Optional[bool] = None |
| 34 | + as_of: Optional[str] = None |
| 35 | + days_to_maturity: Optional[int] = None |
| 36 | + exchange_code: Optional[str] = None |
| 37 | + first_trade_date: Optional[str] = None |
| 38 | + last_trade_date: Optional[str] = None |
| 39 | + max_order_quantity: Optional[int] = None |
| 40 | + min_order_quantity: Optional[int] = None |
| 41 | + name: Optional[str] = None |
| 42 | + product_code: Optional[str] = None |
| 43 | + settlement_date: Optional[str] = None |
| 44 | + settlement_tick_size: Optional[float] = None |
| 45 | + spread_tick_size: Optional[float] = None |
| 46 | + ticker: Optional[str] = None |
| 47 | + trade_tick_size: Optional[float] = None |
| 48 | + type: Optional[str] = None |
| 49 | + |
| 50 | + @staticmethod |
| 51 | + def from_dict(d): |
| 52 | + return FuturesContract(**{k: v for k, v in d.items() if k in FuturesContract.__annotations__}) |
| 53 | + |
| 54 | +@modelclass |
| 55 | +class FuturesMarketStatus: |
| 56 | + """Represents the market status for a futures product.""" |
| 57 | + exchange_code: Optional[str] = None |
| 58 | + market_status: Optional[str] = None |
| 59 | + product_code: Optional[str] = None |
| 60 | + |
| 61 | + @staticmethod |
| 62 | + def from_dict(d): |
| 63 | + return FuturesMarketStatus(**{k: v for k, v in d.items() if k in FuturesMarketStatus.__annotations__}) |
| 64 | + |
| 65 | +@modelclass |
| 66 | +class FuturesProduct: |
| 67 | + """Represents a futures product.""" |
| 68 | + as_of: Optional[str] = None |
| 69 | + asset_class: Optional[str] = None |
| 70 | + asset_sub_class: Optional[str] = None |
| 71 | + exchange_code: Optional[str] = None |
| 72 | + last_updated: Optional[str] = None |
| 73 | + name: Optional[str] = None |
| 74 | + otc_eligible: Optional[bool] = None |
| 75 | + price_quotation: Optional[str] = None |
| 76 | + product_code: Optional[str] = None |
| 77 | + sector: Optional[str] = None |
| 78 | + settlement_currency_code: Optional[str] = None |
| 79 | + settlement_method: Optional[str] = None |
| 80 | + settlement_type: Optional[str] = None |
| 81 | + sub_sector: Optional[str] = None |
| 82 | + trade_currency_code: Optional[str] = None |
| 83 | + type: Optional[str] = None |
| 84 | + unit_of_measure: Optional[str] = None |
| 85 | + unit_of_measure_quantity: Optional[float] = None |
| 86 | + |
| 87 | + @staticmethod |
| 88 | + def from_dict(d): |
| 89 | + return FuturesProduct(**{k: v for k, v in d.items() if k in FuturesProduct.__annotations__}) |
| 90 | + |
| 91 | +@modelclass |
| 92 | +class FuturesScheduleEvent: |
| 93 | + """Represents a single event in a futures schedule.""" |
| 94 | + event: Optional[str] = None |
| 95 | + timestamp: Optional[str] = None |
| 96 | + |
| 97 | + @staticmethod |
| 98 | + def from_dict(d): |
| 99 | + return FuturesScheduleEvent(**{k: v for k, v in d.items() if k in FuturesScheduleEvent.__annotations__}) |
| 100 | + |
| 101 | +@modelclass |
| 102 | +class FuturesSchedule: |
| 103 | + """Represents a futures trading schedule.""" |
| 104 | + market_identifier_code: Optional[str] = None |
| 105 | + product_code: Optional[str] = None |
| 106 | + product_name: Optional[str] = None |
| 107 | + schedule: Optional[List[FuturesScheduleEvent]] = None |
| 108 | + session_end_date: Optional[str] = None |
| 109 | + |
| 110 | + @staticmethod |
| 111 | + def from_dict(d): |
| 112 | + schedule = [FuturesScheduleEvent.from_dict(e) for e in d.get("schedule", [])] if d.get("schedule") else None |
| 113 | + return FuturesSchedule( |
| 114 | + market_identifier_code=d.get("market_identifier_code"), |
| 115 | + product_code=d.get("product_code"), |
| 116 | + product_name=d.get("product_name"), |
| 117 | + schedule=schedule, |
| 118 | + session_end_date=d.get("session_end_date"), |
| 119 | + ) |
| 120 | + |
| 121 | +@modelclass |
| 122 | +class FuturesQuote: |
| 123 | + """Represents a quote for a futures contract.""" |
| 124 | + ask_price: Optional[float] = None |
| 125 | + ask_size: Optional[float] = None |
| 126 | + ask_timestamp: Optional[int] = None |
| 127 | + bid_price: Optional[float] = None |
| 128 | + bid_size: Optional[float] = None |
| 129 | + bid_timestamp: Optional[int] = None |
| 130 | + session_start_date: Optional[str] = None |
| 131 | + ticker: Optional[str] = None |
| 132 | + timestamp: Optional[int] = None |
| 133 | + |
| 134 | + @staticmethod |
| 135 | + def from_dict(d): |
| 136 | + return FuturesQuote(**{k: v for k, v in d.items() if k in FuturesQuote.__annotations__}) |
| 137 | + |
| 138 | +@modelclass |
| 139 | +class FuturesTrade: |
| 140 | + """Represents a trade for a futures contract.""" |
| 141 | + price: Optional[float] = None |
| 142 | + session_start_date: Optional[str] = None |
| 143 | + size: Optional[float] = None |
| 144 | + ticker: Optional[str] = None |
| 145 | + timestamp: Optional[int] = None |
| 146 | + |
| 147 | + @staticmethod |
| 148 | + def from_dict(d): |
| 149 | + return FuturesTrade(**{k: v for k, v in d.items() if k in FuturesTrade.__annotations__}) |
0 commit comments