-
Notifications
You must be signed in to change notification settings - Fork 351
Expand file tree
/
Copy pathtickers.py
More file actions
414 lines (361 loc) · 13.2 KB
/
tickers.py
File metadata and controls
414 lines (361 loc) · 13.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
from typing import Optional, List
from ...modelclass import modelclass
@modelclass
class CompanyAddress:
"Contains address data for a ticker detail."
address1: Optional[str] = None
address2: Optional[str] = None
city: Optional[str] = None
state: Optional[str] = None
country: Optional[str] = None
postal_code: Optional[str] = None
@staticmethod
def from_dict(d):
return CompanyAddress(**d)
@modelclass
class Branding:
"Contains branding data for a ticker detail."
icon_url: Optional[str] = None
logo_url: Optional[str] = None
accent_color: Optional[str] = None
light_color: Optional[str] = None
dark_color: Optional[str] = None
@staticmethod
def from_dict(d):
return Branding(**d)
@modelclass
class Insight:
"Contains the insights related to the article."
sentiment: Optional[str] = None
sentiment_reasoning: Optional[str] = None
ticker: Optional[str] = None
@staticmethod
def from_dict(d):
return Insight(**d)
@modelclass
class Publisher:
"Contains publisher data for ticker news."
favicon_url: Optional[str] = None
homepage_url: Optional[str] = None
logo_url: Optional[str] = None
name: Optional[str] = None
@staticmethod
def from_dict(d):
return Publisher(**d)
@modelclass
class Ticker:
"Ticker contains data for a specified ticker symbol."
active: Optional[bool] = None
cik: Optional[str] = None
composite_figi: Optional[str] = None
currency_name: Optional[str] = None
currency_symbol: Optional[str] = None
base_currency_symbol: Optional[str] = None
base_currency_name: Optional[str] = None
delisted_utc: Optional[str] = None
last_updated_utc: Optional[str] = None
locale: Optional[str] = None
market: Optional[str] = None
name: Optional[str] = None
primary_exchange: Optional[str] = None
share_class_figi: Optional[str] = None
ticker: Optional[str] = None
type: Optional[str] = None
source_feed: Optional[str] = None
@staticmethod
def from_dict(d):
return Ticker(**d)
@modelclass
class TickerDetails:
"TickerDetails contains data for a specified ticker symbol."
active: Optional[bool] = None
address: Optional[CompanyAddress] = None
branding: Optional[Branding] = None
cik: Optional[str] = None
composite_figi: Optional[str] = None
currency_name: Optional[str] = None
currency_symbol: Optional[str] = None
base_currency_name: Optional[str] = None
base_currency_symbol: Optional[str] = None
delisted_utc: Optional[str] = None
description: Optional[str] = None
ticker_root: Optional[str] = None
ticker_suffix: Optional[str] = None
homepage_url: Optional[str] = None
list_date: Optional[str] = None
locale: Optional[str] = None
market: Optional[str] = None
market_cap: Optional[float] = None
name: Optional[str] = None
phone_number: Optional[str] = None
primary_exchange: Optional[str] = None
share_class_figi: Optional[str] = None
share_class_shares_outstanding: Optional[int] = None
sic_code: Optional[str] = None
sic_description: Optional[str] = None
ticker: Optional[str] = None
total_employees: Optional[int] = None
type: Optional[str] = None
weighted_shares_outstanding: Optional[int] = None
@staticmethod
def from_dict(d):
return TickerDetails(
active=d.get("active", None),
address=(
None if "address" not in d else CompanyAddress.from_dict(d["address"])
),
branding=None if "branding" not in d else Branding.from_dict(d["branding"]),
cik=d.get("cik", None),
composite_figi=d.get("composite_figi", None),
currency_name=d.get("currency_name", None),
currency_symbol=d.get("currency_symbol", None),
base_currency_name=d.get("base_currency_name", None),
base_currency_symbol=d.get("base_currency_symbol", None),
delisted_utc=d.get("delisted_utc", None),
description=d.get("description", None),
ticker_root=d.get("ticker_root", None),
ticker_suffix=d.get("ticker_suffix", None),
homepage_url=d.get("homepage_url", None),
list_date=d.get("list_date", None),
locale=d.get("locale", None),
market=d.get("market", None),
market_cap=d.get("market_cap", None),
name=d.get("name", None),
phone_number=d.get("phone_number", None),
primary_exchange=d.get("primary_exchange", None),
share_class_figi=d.get("share_class_figi", None),
share_class_shares_outstanding=d.get(
"share_class_shares_outstanding", None
),
sic_code=d.get("sic_code", None),
sic_description=d.get("sic_description", None),
ticker=d.get("ticker", None),
total_employees=d.get("total_employees", None),
type=d.get("type", None),
weighted_shares_outstanding=d.get("weighted_shares_outstanding", None),
)
@modelclass
class TickerNews:
"TickerDetails contains data for news articles relating to a stock ticker symbol."
amp_url: Optional[str] = None
article_url: Optional[str] = None
author: Optional[str] = None
description: Optional[str] = None
id: Optional[str] = None
image_url: Optional[str] = None
insights: Optional[List[Insight]] = None
keywords: Optional[List[str]] = None
published_utc: Optional[str] = None
publisher: Optional[Publisher] = None
tickers: Optional[List[str]] = None
title: Optional[str] = None
@staticmethod
def from_dict(d):
return TickerNews(
amp_url=d.get("amp_url", None),
article_url=d.get("article_url", None),
author=d.get("author", None),
description=d.get("description", None),
id=d.get("id", None),
image_url=d.get("image_url", None),
insights=(
[Insight.from_dict(insight) for insight in d["insights"]]
if "insights" in d
else None
),
keywords=d.get("keywords", None),
published_utc=d.get("published_utc", None),
publisher=(
None if "publisher" not in d else Publisher.from_dict(d["publisher"])
),
tickers=d.get("tickers", None),
title=d.get("title", None),
)
@modelclass
class TickerTypes:
"TickerTypes contains data for ticker types."
asset_class: Optional[str] = None
code: Optional[str] = None
description: Optional[str] = None
locale: Optional[str] = None
@staticmethod
def from_dict(d):
return TickerTypes(**d)
@modelclass
class RelatedCompany:
"""
Get a list of tickers related to the queried ticker based on News and Returns data.
"""
ticker: Optional[str] = None
@staticmethod
def from_dict(d):
return RelatedCompany(
ticker=d.get("ticker", None),
)
@modelclass
class TickerChange:
ticker: str
@staticmethod
def from_dict(d):
return TickerChange(**d)
@modelclass
class TickerChangeEvent:
type: str
date: str
ticker_change: TickerChange
@staticmethod
def from_dict(d):
return TickerChangeEvent(**d)
@modelclass
class TickerChangeResults:
name: str
composite_figi: str
cik: str
events: Optional[List[TickerChangeEvent]] = None
@staticmethod
def from_dict(d):
return TickerChangeResults(**d)
@modelclass
class IPOListing:
"""
IPO Listing data as returned by the /vX/reference/ipos endpoint.
"""
announced_date: Optional[str] = None
currency_code: Optional[str] = None
final_issue_price: Optional[float] = None
highest_offer_price: Optional[float] = None
ipo_status: Optional[str] = None
isin: Optional[str] = None
issuer_name: Optional[str] = None
last_updated: Optional[str] = None
listing_date: Optional[str] = None
lot_size: Optional[int] = None
lowest_offer_price: Optional[float] = None
max_shares_offered: Optional[int] = None
min_shares_offered: Optional[int] = None
primary_exchange: Optional[str] = None
security_description: Optional[str] = None
security_type: Optional[str] = None
shares_outstanding: Optional[int] = None
ticker: Optional[str] = None
total_offer_size: Optional[float] = None
us_code: Optional[str] = None
@staticmethod
def from_dict(d):
return IPOListing(
announced_date=d.get("announced_date"),
currency_code=d.get("currency_code"),
final_issue_price=d.get("final_issue_price"),
highest_offer_price=d.get("highest_offer_price"),
ipo_status=d.get("ipo_status"),
isin=d.get("isin"),
issuer_name=d.get("issuer_name"),
last_updated=d.get("last_updated"),
listing_date=d.get("listing_date"),
lot_size=d.get("lot_size"),
lowest_offer_price=d.get("lowest_offer_price"),
max_shares_offered=d.get("max_shares_offered"),
min_shares_offered=d.get("min_shares_offered"),
primary_exchange=d.get("primary_exchange"),
security_description=d.get("security_description"),
security_type=d.get("security_type"),
shares_outstanding=d.get("shares_outstanding"),
ticker=d.get("ticker"),
total_offer_size=d.get("total_offer_size"),
us_code=d.get("us_code"),
)
@modelclass
class ShortInterest:
"""
Short Interest data for a specific identifier.
"""
avg_daily_volume: Optional[int] = None
days_to_cover: Optional[float] = None
settlement_date: Optional[str] = None
short_interest: Optional[int] = None
ticker: Optional[str] = None
@staticmethod
def from_dict(d):
return ShortInterest(
avg_daily_volume=d.get("avg_daily_volume"),
days_to_cover=d.get("days_to_cover"),
settlement_date=d.get("settlement_date"),
short_interest=d.get("short_interest"),
ticker=d.get("ticker"),
)
@modelclass
class ShortVolume:
"""
Short Volume data for a specific identifier on a given date.
"""
adf_short_volume: Optional[int] = None
adf_short_volume_exempt: Optional[int] = None
date: Optional[str] = None
exempt_volume: Optional[int] = None
nasdaq_carteret_short_volume: Optional[int] = None
nasdaq_carteret_short_volume_exempt: Optional[int] = None
nasdaq_chicago_short_volume: Optional[int] = None
nasdaq_chicago_short_volume_exempt: Optional[int] = None
non_exempt_volume: Optional[int] = None
nyse_short_volume: Optional[int] = None
nyse_short_volume_exempt: Optional[int] = None
short_volume: Optional[int] = None
short_volume_ratio: Optional[float] = None
ticker: Optional[str] = None
total_volume: Optional[int] = None
@staticmethod
def from_dict(d):
return ShortVolume(
adf_short_volume=d.get("adf_short_volume"),
adf_short_volume_exempt=d.get("adf_short_volume_exempt"),
date=d.get("date"),
exempt_volume=d.get("exempt_volume"),
nasdaq_carteret_short_volume=d.get("nasdaq_carteret_short_volume"),
nasdaq_carteret_short_volume_exempt=d.get(
"nasdaq_carteret_short_volume_exempt"
),
nasdaq_chicago_short_volume=d.get("nasdaq_chicago_short_volume"),
nasdaq_chicago_short_volume_exempt=d.get(
"nasdaq_chicago_short_volume_exempt"
),
non_exempt_volume=d.get("non_exempt_volume"),
nyse_short_volume=d.get("nyse_short_volume"),
nyse_short_volume_exempt=d.get("nyse_short_volume_exempt"),
short_volume=d.get("short_volume"),
short_volume_ratio=d.get("short_volume_ratio"),
ticker=d.get("ticker"),
total_volume=d.get("total_volume"),
)
@modelclass
class TreasuryYield:
"""
Treasury yield data for a specific date.
"""
date: Optional[str] = None
yield_1_month: Optional[float] = None
yield_3_month: Optional[float] = None
yield_6_month: Optional[float] = None
yield_1_year: Optional[float] = None
yield_2_year: Optional[float] = None
yield_3_year: Optional[float] = None
yield_5_year: Optional[float] = None
yield_7_year: Optional[float] = None
yield_10_year: Optional[float] = None
yield_20_year: Optional[float] = None
yield_30_year: Optional[float] = None
@staticmethod
def from_dict(d):
return TreasuryYield(
date=d.get("date"),
yield_1_month=d.get("yield_1_month"),
yield_3_month=d.get("yield_3_month"),
yield_6_month=d.get("yield_6_month"),
yield_1_year=d.get("yield_1_year"),
yield_2_year=d.get("yield_2_year"),
yield_3_year=d.get("yield_3_year"),
yield_5_year=d.get("yield_5_year"),
yield_7_year=d.get("yield_7_year"),
yield_10_year=d.get("yield_10_year"),
yield_20_year=d.get("yield_20_year"),
yield_30_year=d.get("yield_30_year"),
)