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
+13
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

+1-1
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
+13
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

+13
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

+107-5
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

+181-2
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)