Skip to content

Commit 1cb16d3

Browse files
Adds IPOs, Short Interest/Volume, and Treasury Yields (#875)
* Adds IPOs, Short Interest/Volume, and Treasury Yields * Fix docs url
1 parent 83b28f3 commit 1cb16d3

File tree

6 files changed

+328
-8
lines changed

6 files changed

+328
-8
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from polygon import RESTClient
2+
3+
# docs
4+
# https://polygon.io/docs/rest/economy/treasury-yields
5+
6+
# client = RESTClient("XXXXXX") # hardcoded api_key is used
7+
client = RESTClient() # POLYGON_API_KEY environment variable is used
8+
9+
yields = []
10+
for date in client.vx.list_treasury_yields():
11+
yields.append(date)
12+
13+
print(yields)

examples/rest/stocks-ipos.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from polygon import RESTClient
22

33
# docs
4-
# https://polygon.io/docs/stocks/get_vx_reference_ipos
4+
# https://polygon.io/docs/rest/stocks/corporate-actions/ipos
55

66
# client = RESTClient("XXXXXX") # hardcoded api_key is used
77
client = RESTClient() # POLYGON_API_KEY environment variable is used
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from polygon import RESTClient
2+
3+
# docs
4+
# https://polygon.io/docs/rest/stocks/fundamentals/short-interest
5+
6+
# client = RESTClient("XXXXXX") # hardcoded api_key is used
7+
client = RESTClient() # POLYGON_API_KEY environment variable is used
8+
9+
items = []
10+
for item in client.vx.list_short_interest(ticker="RDDT"):
11+
items.append(item)
12+
13+
print(items)

examples/rest/stocks-short_volume.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from polygon import RESTClient
2+
3+
# docs
4+
# https://polygon.io/docs/rest/stocks/fundamentals/short-volume
5+
6+
# client = RESTClient("XXXXXX") # hardcoded api_key is used
7+
client = RESTClient() # POLYGON_API_KEY environment variable is used
8+
9+
items = []
10+
for item in client.vx.list_short_volume(ticker="RDDT"):
11+
items.append(item)
12+
13+
print(items)

polygon/rest/models/tickers.py

Lines changed: 107 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from typing import Optional, List
2-
32
from ...modelclass import modelclass
43

54

@@ -255,10 +254,6 @@ def from_dict(d):
255254
return TickerChangeResults(**d)
256255

257256

258-
from typing import Optional
259-
from ...modelclass import modelclass
260-
261-
262257
@modelclass
263258
class IPOListing:
264259
"""
@@ -310,3 +305,110 @@ def from_dict(d):
310305
total_offer_size=d.get("total_offer_size"),
311306
us_code=d.get("us_code"),
312307
)
308+
309+
310+
@modelclass
311+
class ShortInterest:
312+
"""
313+
Short Interest data for a specific identifier.
314+
"""
315+
316+
avg_daily_volume: Optional[int] = None
317+
days_to_cover: Optional[float] = None
318+
settlement_date: Optional[str] = None
319+
short_interest: Optional[int] = None
320+
ticker: Optional[str] = None
321+
322+
@staticmethod
323+
def from_dict(d):
324+
return ShortInterest(
325+
avg_daily_volume=d.get("avg_daily_volume"),
326+
days_to_cover=d.get("days_to_cover"),
327+
settlement_date=d.get("settlement_date"),
328+
short_interest=d.get("short_interest"),
329+
ticker=d.get("ticker"),
330+
)
331+
332+
333+
@modelclass
334+
class ShortVolume:
335+
"""
336+
Short Volume data for a specific identifier on a given date.
337+
"""
338+
339+
adf_short_volume: Optional[int] = None
340+
adf_short_volume_exempt: Optional[int] = None
341+
date: Optional[str] = None
342+
exempt_volume: Optional[int] = None
343+
nasdaq_carteret_short_volume: Optional[int] = None
344+
nasdaq_carteret_short_volume_exempt: Optional[int] = None
345+
nasdaq_chicago_short_volume: Optional[int] = None
346+
nasdaq_chicago_short_volume_exempt: Optional[int] = None
347+
non_exempt_volume: Optional[int] = None
348+
nyse_short_volume: Optional[int] = None
349+
nyse_short_volume_exempt: Optional[int] = None
350+
short_volume: Optional[int] = None
351+
short_volume_ratio: Optional[float] = None
352+
ticker: Optional[str] = None
353+
total_volume: Optional[int] = None
354+
355+
@staticmethod
356+
def from_dict(d):
357+
return ShortVolume(
358+
adf_short_volume=d.get("adf_short_volume"),
359+
adf_short_volume_exempt=d.get("adf_short_volume_exempt"),
360+
date=d.get("date"),
361+
exempt_volume=d.get("exempt_volume"),
362+
nasdaq_carteret_short_volume=d.get("nasdaq_carteret_short_volume"),
363+
nasdaq_carteret_short_volume_exempt=d.get(
364+
"nasdaq_carteret_short_volume_exempt"
365+
),
366+
nasdaq_chicago_short_volume=d.get("nasdaq_chicago_short_volume"),
367+
nasdaq_chicago_short_volume_exempt=d.get(
368+
"nasdaq_chicago_short_volume_exempt"
369+
),
370+
non_exempt_volume=d.get("non_exempt_volume"),
371+
nyse_short_volume=d.get("nyse_short_volume"),
372+
nyse_short_volume_exempt=d.get("nyse_short_volume_exempt"),
373+
short_volume=d.get("short_volume"),
374+
short_volume_ratio=d.get("short_volume_ratio"),
375+
ticker=d.get("ticker"),
376+
total_volume=d.get("total_volume"),
377+
)
378+
379+
380+
@modelclass
381+
class TreasuryYield:
382+
"""
383+
Treasury yield data for a specific date.
384+
"""
385+
386+
date: Optional[str] = None
387+
yield_1_month: Optional[float] = None
388+
yield_3_month: Optional[float] = None
389+
yield_6_month: Optional[float] = None
390+
yield_1_year: Optional[float] = None
391+
yield_2_year: Optional[float] = None
392+
yield_3_year: Optional[float] = None
393+
yield_5_year: Optional[float] = None
394+
yield_7_year: Optional[float] = None
395+
yield_10_year: Optional[float] = None
396+
yield_20_year: Optional[float] = None
397+
yield_30_year: Optional[float] = None
398+
399+
@staticmethod
400+
def from_dict(d):
401+
return TreasuryYield(
402+
date=d.get("date"),
403+
yield_1_month=d.get("yield_1_month"),
404+
yield_3_month=d.get("yield_3_month"),
405+
yield_6_month=d.get("yield_6_month"),
406+
yield_1_year=d.get("yield_1_year"),
407+
yield_2_year=d.get("yield_2_year"),
408+
yield_3_year=d.get("yield_3_year"),
409+
yield_5_year=d.get("yield_5_year"),
410+
yield_7_year=d.get("yield_7_year"),
411+
yield_10_year=d.get("yield_10_year"),
412+
yield_20_year=d.get("yield_20_year"),
413+
yield_30_year=d.get("yield_30_year"),
414+
)

polygon/rest/vX.py

Lines changed: 181 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
from .base import BaseClient
22
from typing import Optional, Any, Dict, List, Union, Iterator
3-
from .models import StockFinancial, IPOListing, Timeframe, Sort, Order
3+
from .models import (
4+
StockFinancial,
5+
IPOListing,
6+
ShortInterest,
7+
ShortVolume,
8+
TreasuryYield,
9+
Timeframe,
10+
Sort,
11+
Order,
12+
)
413
from urllib3 import HTTPResponse
514
from datetime import datetime, date
6-
715
from .models.request import RequestOptionBuilder
816

917

@@ -77,6 +85,10 @@ def list_ipos(
7785
us_code: Optional[str] = None,
7886
isin: Optional[str] = None,
7987
listing_date: Optional[str] = None,
88+
listing_date_lt: Optional[str] = None,
89+
listing_date_lte: Optional[str] = None,
90+
listing_date_gt: Optional[str] = None,
91+
listing_date_gte: Optional[str] = None,
8092
ipo_status: Optional[str] = None,
8193
limit: Optional[int] = None,
8294
sort: Optional[Union[str, Sort]] = None,
@@ -111,3 +123,170 @@ def list_ipos(
111123
result_key="results",
112124
options=options,
113125
)
126+
127+
def list_short_interest(
128+
self,
129+
ticker: Optional[str] = None,
130+
days_to_cover: Optional[str] = None,
131+
days_to_cover_lt: Optional[str] = None,
132+
days_to_cover_lte: Optional[str] = None,
133+
days_to_cover_gt: Optional[str] = None,
134+
days_to_cover_gte: Optional[str] = None,
135+
settlement_date: Optional[str] = None,
136+
settlement_date_lt: Optional[str] = None,
137+
settlement_date_lte: Optional[str] = None,
138+
settlement_date_gt: Optional[str] = None,
139+
settlement_date_gte: Optional[str] = None,
140+
avg_daily_volume: Optional[str] = None,
141+
avg_daily_volume_lt: Optional[str] = None,
142+
avg_daily_volume_lte: Optional[str] = None,
143+
avg_daily_volume_gt: Optional[str] = None,
144+
avg_daily_volume_gte: Optional[str] = None,
145+
limit: Optional[int] = None,
146+
sort: Optional[Union[str, Sort]] = None,
147+
order: Optional[Union[str, Order]] = None,
148+
params: Optional[Dict[str, Any]] = None,
149+
raw: bool = False,
150+
options: Optional[RequestOptionBuilder] = None,
151+
) -> Union[List[ShortInterest], HTTPResponse]:
152+
"""
153+
Retrieve short interest data for stocks.
154+
155+
:param ticker: Filter by the primary ticker symbol.
156+
:param days_to_cover: Filter by the days to cover value.
157+
:param days_to_cover_lt: Filter for days to cover dates less than the provided date.
158+
:param days_to_cover_lte: Filter for days to cover dates less than or equal to the provided date.
159+
:param days_to_cover_gt: Filter for days to cover dates greater than the provided date.
160+
:param days_to_cover_gte: Filter for days to cover dates greater than or equal to the provided date.
161+
:param settlement_date: Filter by settlement date (YYYY-MM-DD).
162+
:param settlement_date_lt: Filter for settlement dates less than the provided date.
163+
:param settlement_date_lte: Filter for settlement dates less than or equal to the provided date.
164+
:param settlement_date_gt: Filter for settlement dates greater than the provided date.
165+
:param settlement_date_gte: Filter for settlement dates greater than or equal to the provided date.
166+
:param avg_daily_volume: Filter by average daily volume.
167+
:param avg_daily_volume_lt: Filter for average daily volume dates less than the provided date.
168+
:param avg_daily_volume_lte: Filter for average daily volume dates less than or equal to the provided date.
169+
:param avg_daily_volume_gt: Filter for average daily volume dates greater than the provided date.
170+
:param avg_daily_volume_gte: Filter for average daily volume dates greater than or equal to the provided date.
171+
:param limit: Limit the number of results returned. Default 10, max 50000.
172+
:param sort: Field to sort by (e.g., "ticker").
173+
:param order: Order results based on the sort field ("asc" or "desc"). Default "desc".
174+
:param params: Additional query parameters.
175+
:param raw: Return raw HTTPResponse object if True, else return List[ShortInterest].
176+
:param options: RequestOptionBuilder for additional headers or params.
177+
:return: A list of ShortInterest objects or HTTPResponse if raw=True.
178+
"""
179+
url = "/stocks/vX/short-interest"
180+
181+
return self._paginate(
182+
path=url,
183+
params=self._get_params(self.list_short_interest, locals()),
184+
deserializer=ShortInterest.from_dict,
185+
raw=raw,
186+
result_key="results",
187+
options=options,
188+
)
189+
190+
def list_short_volume(
191+
self,
192+
ticker: Optional[str] = None,
193+
date: Optional[str] = None,
194+
date_lt: Optional[str] = None,
195+
date_lte: Optional[str] = None,
196+
date_gt: Optional[str] = None,
197+
date_gte: Optional[str] = None,
198+
short_volume_ratio: Optional[str] = None,
199+
short_volume_ratio_lt: Optional[str] = None,
200+
short_volume_ratio_lte: Optional[str] = None,
201+
short_volume_ratio_gt: Optional[str] = None,
202+
short_volume_ratio_gte: Optional[str] = None,
203+
total_volume: Optional[str] = None,
204+
total_volume_lt: Optional[str] = None,
205+
total_volume_lte: Optional[str] = None,
206+
total_volume_gt: Optional[str] = None,
207+
total_volume_gte: Optional[str] = None,
208+
limit: Optional[int] = None,
209+
sort: Optional[Union[str, Sort]] = None,
210+
order: Optional[Union[str, Order]] = None,
211+
params: Optional[Dict[str, Any]] = None,
212+
raw: bool = False,
213+
options: Optional[RequestOptionBuilder] = None,
214+
) -> Union[List[ShortVolume], HTTPResponse]:
215+
"""
216+
Retrieve short volume data for stocks.
217+
218+
:param ticker: Filter by the primary ticker symbol.
219+
:param date: Filter by the date of trade activity (YYYY-MM-DD).
220+
:param date_lt: Filter for dates less than the provided date.
221+
:param date_lte: Filter for dates less than or equal to the provided date.
222+
:param date_gt: Filter for dates greater than the provided date.
223+
:param date_gte: Filter for dates greater than or equal to the provided date.
224+
:param short_volume_ratio: Filter by short volume ratio.
225+
:param short_volume_ratio_lt: Filter for short volume ratio less than the provided date.
226+
:param short_volume_ratio_lte: Filter for short volume ratio less than or equal to the provided date.
227+
:param short_volume_ratio_gt: Filter for short volume ratio greater than the provided date.
228+
:param short_volume_ratio_gte: Filter for short volume ratio greater than or equal to the provided date.
229+
:param total_volume: Filter by total volume.
230+
:param total_volume_lt: Filter for total volume less than the provided date.
231+
:param total_volume_lte: Filter for total volume less than or equal to the provided date.
232+
:param total_volume_gt: Filter for total volume greater than the provided date.
233+
:param total_volume_gte: Filter for total volume greater than or equal to the provided date.
234+
:param limit: Limit the number of results returned. Default 10, max 50000.
235+
:param sort: Field to sort by (e.g., "ticker").
236+
:param order: Order results based on the sort field ("asc" or "desc"). Default "desc".
237+
:param params: Additional query parameters.
238+
:param raw: Return raw HTTPResponse object if True, else return List[ShortVolume].
239+
:param options: RequestOptionBuilder for additional headers or params.
240+
:return: A list of ShortVolume objects or HTTPResponse if raw=True.
241+
"""
242+
url = "/stocks/vX/short-volume"
243+
244+
return self._paginate(
245+
path=url,
246+
params=self._get_params(self.list_short_volume, locals()),
247+
deserializer=ShortVolume.from_dict,
248+
raw=raw,
249+
result_key="results",
250+
options=options,
251+
)
252+
253+
def list_treasury_yields(
254+
self,
255+
date: Optional[str] = None,
256+
date_gt: Optional[str] = None,
257+
date_gte: Optional[str] = None,
258+
date_lt: Optional[str] = None,
259+
date_lte: Optional[str] = None,
260+
limit: Optional[int] = None,
261+
sort: Optional[Union[str, Sort]] = None,
262+
order: Optional[Union[str, Order]] = None,
263+
params: Optional[Dict[str, Any]] = None,
264+
raw: bool = False,
265+
options: Optional[RequestOptionBuilder] = None,
266+
) -> Union[List[TreasuryYield], HTTPResponse]:
267+
"""
268+
Retrieve treasury yield data.
269+
270+
:param date: Calendar date of the yield observation (YYYY-MM-DD).
271+
:param date_gt: Filter for dates greater than the provided date.
272+
:param date_gte: Filter for dates greater than or equal to the provided date.
273+
:param date_lt: Filter for dates less than the provided date.
274+
:param date_lte: Filter for dates less than or equal to the provided date.
275+
:param limit: Limit the number of results returned. Default 100, max 50000.
276+
:param sort: Field to sort by (e.g., "date"). Default "date".
277+
:param order: Order results based on the sort field ("asc" or "desc"). Default "desc".
278+
:param params: Additional query parameters.
279+
:param raw: Return raw HTTPResponse object if True, else return List[TreasuryYield].
280+
:param options: RequestOptionBuilder for additional headers or params.
281+
:return: A list of TreasuryYield objects or HTTPResponse if raw=True.
282+
"""
283+
url = "/fed/vX/treasury-yields"
284+
285+
return self._paginate(
286+
path=url,
287+
params=self._get_params(self.list_treasury_yields, locals()),
288+
deserializer=TreasuryYield.from_dict,
289+
raw=raw,
290+
result_key="results",
291+
options=options,
292+
)

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy