|
|
|
|
|
|
|
|
import datetime |
|
|
from typing import Literal, Optional, Union |
|
|
from warnings import simplefilter, warn |
|
|
|
|
|
from openbb_core.app.deprecation import OpenBBDeprecationWarning |
|
|
from openbb_core.app.model.field import OpenBBField |
|
|
from openbb_core.app.model.obbject import OBBject |
|
|
from openbb_core.app.static.container import Container |
|
|
from openbb_core.app.static.utils.decorators import exception_handler, validate |
|
|
from openbb_core.app.static.utils.filters import filter_inputs |
|
|
from typing_extensions import Annotated, deprecated |
|
|
|
|
|
|
|
|
class ROUTER_fixedincome(Container): |
|
|
"""/fixedincome |
|
|
bond_indices |
|
|
/corporate |
|
|
/government |
|
|
mortgage_indices |
|
|
/rate |
|
|
sofr |
|
|
/spreads |
|
|
""" |
|
|
|
|
|
def __repr__(self) -> str: |
|
|
return self.__doc__ or "" |
|
|
|
|
|
@exception_handler |
|
|
@validate |
|
|
def bond_indices( |
|
|
self, |
|
|
start_date: Annotated[ |
|
|
Union[datetime.date, None, str], |
|
|
OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), |
|
|
] = None, |
|
|
end_date: Annotated[ |
|
|
Union[datetime.date, None, str], |
|
|
OpenBBField(description="End date of the data, in YYYY-MM-DD format."), |
|
|
] = None, |
|
|
index_type: Annotated[ |
|
|
Literal["yield", "yield_to_worst", "total_return", "oas"], |
|
|
OpenBBField( |
|
|
description="The type of series. OAS is the option-adjusted spread. Default is yield." |
|
|
), |
|
|
] = "yield", |
|
|
provider: Annotated[ |
|
|
Optional[Literal["fred"]], |
|
|
OpenBBField( |
|
|
description="The provider to use, by default None. If None, the priority list configured in the settings is used. Default priority: fred." |
|
|
), |
|
|
] = None, |
|
|
**kwargs |
|
|
) -> OBBject: |
|
|
"""Bond Indices. |
|
|
|
|
|
Parameters |
|
|
---------- |
|
|
provider : str |
|
|
The provider to use, by default None. If None, the priority list configured in the settings is used. Default priority: fred. |
|
|
start_date : Union[date, None, str] |
|
|
Start date of the data, in YYYY-MM-DD format. |
|
|
end_date : Union[date, None, str] |
|
|
End date of the data, in YYYY-MM-DD format. |
|
|
index_type : Literal['yield', 'yield_to_worst', 'total_return', 'oas'] |
|
|
The type of series. OAS is the option-adjusted spread. Default is yield. |
|
|
category : Literal['high_yield', 'us', 'emerging_markets'] |
|
|
The type of index category. Used in conjunction with 'index', default is 'us'. (provider: fred) |
|
|
index : str |
|
|
The specific index to query. Used in conjunction with 'category' and 'index_type', default is 'yield_curve'. |
|
|
Possible values are: |
|
|
corporate |
|
|
seasoned_corporate |
|
|
liquid_corporate |
|
|
yield_curve |
|
|
crossover |
|
|
public_sector |
|
|
private_sector |
|
|
non_financial |
|
|
high_grade |
|
|
high_yield |
|
|
liquid_emea |
|
|
emea |
|
|
liquid_asia |
|
|
asia |
|
|
liquid_latam |
|
|
latam |
|
|
liquid_aaa |
|
|
liquid_bbb |
|
|
aaa |
|
|
aa |
|
|
a |
|
|
bbb |
|
|
bb |
|
|
b |
|
|
ccc |
|
|
|
|
|
Multiple comma separated items allowed. (provider: fred) |
|
|
frequency : Optional[Literal['a', 'q', 'm', 'w', 'd', 'wef', 'weth', 'wew', 'wetu', 'wem', 'wesu', 'wesa', 'bwew', 'bwem']] |
|
|
|
|
|
Frequency aggregation to convert daily data to lower frequency. |
|
|
None = No change |
|
|
a = Annual |
|
|
q = Quarterly |
|
|
m = Monthly |
|
|
w = Weekly |
|
|
d = Daily |
|
|
wef = Weekly, Ending Friday |
|
|
weth = Weekly, Ending Thursday |
|
|
wew = Weekly, Ending Wednesday |
|
|
wetu = Weekly, Ending Tuesday |
|
|
wem = Weekly, Ending Monday |
|
|
wesu = Weekly, Ending Sunday |
|
|
wesa = Weekly, Ending Saturday |
|
|
bwew = Biweekly, Ending Wednesday |
|
|
bwem = Biweekly, Ending Monday |
|
|
(provider: fred) |
|
|
aggregation_method : Literal['avg', 'sum', 'eop'] |
|
|
|
|
|
A key that indicates the aggregation method used for frequency aggregation. |
|
|
This parameter has no affect if the frequency parameter is not set, default is 'avg'. |
|
|
avg = Average |
|
|
sum = Sum |
|
|
eop = End of Period |
|
|
(provider: fred) |
|
|
transform : Optional[Literal['chg', 'ch1', 'pch', 'pc1', 'pca', 'cch', 'cca', 'log']] |
|
|
|
|
|
Transformation type |
|
|
None = No transformation |
|
|
chg = Change |
|
|
ch1 = Change from Year Ago |
|
|
pch = Percent Change |
|
|
pc1 = Percent Change from Year Ago |
|
|
pca = Compounded Annual Rate of Change |
|
|
cch = Continuously Compounded Rate of Change |
|
|
cca = Continuously Compounded Annual Rate of Change |
|
|
log = Natural Log |
|
|
(provider: fred) |
|
|
|
|
|
Returns |
|
|
------- |
|
|
OBBject |
|
|
results : list[BondIndices] |
|
|
Serializable results. |
|
|
provider : Optional[str] |
|
|
Provider name. |
|
|
warnings : Optional[list[Warning_]] |
|
|
list of warnings. |
|
|
chart : Optional[Chart] |
|
|
Chart object. |
|
|
extra : Dict[str, Any] |
|
|
Extra info. |
|
|
|
|
|
BondIndices |
|
|
----------- |
|
|
date : date |
|
|
The date of the data. |
|
|
symbol : Optional[str] |
|
|
Symbol representing the entity requested in the data. |
|
|
value : float |
|
|
Index values. |
|
|
maturity : Optional[str] |
|
|
The maturity range of the bond index. Only applicable when 'index' is 'yield_curve'. (provider: fred) |
|
|
title : Optional[str] |
|
|
The title of the index. (provider: fred) |
|
|
|
|
|
Examples |
|
|
-------- |
|
|
>>> from openbb import obb |
|
|
>>> # The default state for FRED are series for constructing the US Corporate Bond Yield Curve. |
|
|
>>> obb.fixedincome.bond_indices(provider='fred') |
|
|
>>> # Multiple indices, from within the same 'category', can be requested. |
|
|
>>> obb.fixedincome.bond_indices(category='high_yield', index='us,europe,emerging', index_type='total_return', provider='fred') |
|
|
>>> # From FRED, there are three main categories, 'high_yield', 'us', and 'emerging_markets'. Emerging markets is a broad category. |
|
|
>>> obb.fixedincome.bond_indices(category='emerging_markets', index='corporate,private_sector,public_sector', provider='fred') |
|
|
""" |
|
|
|
|
|
return self._run( |
|
|
"/fixedincome/bond_indices", |
|
|
**filter_inputs( |
|
|
provider_choices={ |
|
|
"provider": self._get_provider( |
|
|
provider, |
|
|
"fixedincome.bond_indices", |
|
|
("fred",), |
|
|
) |
|
|
}, |
|
|
standard_params={ |
|
|
"start_date": start_date, |
|
|
"end_date": end_date, |
|
|
"index_type": index_type, |
|
|
}, |
|
|
extra_params=kwargs, |
|
|
info={ |
|
|
"index": { |
|
|
"fred": { |
|
|
"multiple_items_allowed": True, |
|
|
"choices": [ |
|
|
"a", |
|
|
"aa", |
|
|
"aaa", |
|
|
"asia", |
|
|
"b", |
|
|
"bb", |
|
|
"bbb", |
|
|
"ccc", |
|
|
"corporate", |
|
|
"crossover", |
|
|
"emea", |
|
|
"high_grade", |
|
|
"high_yield", |
|
|
"latam", |
|
|
"liquid_aaa", |
|
|
"liquid_asia", |
|
|
"liquid_bbb", |
|
|
"liquid_corporate", |
|
|
"liquid_emea", |
|
|
"liquid_latam", |
|
|
"non_financial", |
|
|
"private_sector", |
|
|
"public_sector", |
|
|
"seasoned_corporate", |
|
|
"yield_curve", |
|
|
], |
|
|
} |
|
|
} |
|
|
}, |
|
|
) |
|
|
) |
|
|
|
|
|
@property |
|
|
def corporate(self): |
|
|
|
|
|
from . import fixedincome_corporate |
|
|
|
|
|
return fixedincome_corporate.ROUTER_fixedincome_corporate( |
|
|
command_runner=self._command_runner |
|
|
) |
|
|
|
|
|
@property |
|
|
def government(self): |
|
|
|
|
|
from . import fixedincome_government |
|
|
|
|
|
return fixedincome_government.ROUTER_fixedincome_government( |
|
|
command_runner=self._command_runner |
|
|
) |
|
|
|
|
|
@exception_handler |
|
|
@validate |
|
|
def mortgage_indices( |
|
|
self, |
|
|
start_date: Annotated[ |
|
|
Union[datetime.date, None, str], |
|
|
OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), |
|
|
] = None, |
|
|
end_date: Annotated[ |
|
|
Union[datetime.date, None, str], |
|
|
OpenBBField(description="End date of the data, in YYYY-MM-DD format."), |
|
|
] = None, |
|
|
provider: Annotated[ |
|
|
Optional[Literal["fred"]], |
|
|
OpenBBField( |
|
|
description="The provider to use, by default None. If None, the priority list configured in the settings is used. Default priority: fred." |
|
|
), |
|
|
] = None, |
|
|
**kwargs |
|
|
) -> OBBject: |
|
|
"""Mortgage Indices. |
|
|
|
|
|
Parameters |
|
|
---------- |
|
|
provider : str |
|
|
The provider to use, by default None. If None, the priority list configured in the settings is used. Default priority: fred. |
|
|
start_date : Union[date, None, str] |
|
|
Start date of the data, in YYYY-MM-DD format. |
|
|
end_date : Union[date, None, str] |
|
|
End date of the data, in YYYY-MM-DD format. |
|
|
index : Union[Literal['primary', 'ltv_lte_80', 'ltv_gt_80', 'conforming_30y', 'conforming_30y_na', 'jumbo_30y', 'fha_30y', 'va_30y', 'usda_30y', 'conforming_15y', 'ltv_lte80_fico_ge740', 'ltv_lte80_fico_a720b739', 'ltv_lte80_fico_a700b719', 'ltv_lte80_fico_a680b699', 'ltv_lte80_fico_lt680', 'ltv_gt80_fico_ge740', 'ltv_gt80_fico_a720b739', 'ltv_gt80_fico_a700b719', 'ltv_gt80_fico_a680b699', 'ltv_gt80_fico_lt680'], str] |
|
|
The specific index, or index group, to query. Default is the 'primary' group. Multiple comma separated items allowed. (provider: fred) |
|
|
frequency : Optional[Literal['a', 'q', 'm', 'w', 'd', 'wef', 'weth', 'wew', 'wetu', 'wem', 'wesu', 'wesa', 'bwew', 'bwem']] |
|
|
|
|
|
Frequency aggregation to convert daily data to lower frequency. |
|
|
None = No change |
|
|
a = Annual |
|
|
q = Quarterly |
|
|
m = Monthly |
|
|
w = Weekly |
|
|
d = Daily |
|
|
wef = Weekly, Ending Friday |
|
|
weth = Weekly, Ending Thursday |
|
|
wew = Weekly, Ending Wednesday |
|
|
wetu = Weekly, Ending Tuesday |
|
|
wem = Weekly, Ending Monday |
|
|
wesu = Weekly, Ending Sunday |
|
|
wesa = Weekly, Ending Saturday |
|
|
bwew = Biweekly, Ending Wednesday |
|
|
bwem = Biweekly, Ending Monday |
|
|
(provider: fred) |
|
|
aggregation_method : Literal['avg', 'sum', 'eop'] |
|
|
|
|
|
A key that indicates the aggregation method used for frequency aggregation. |
|
|
This parameter has no affect if the frequency parameter is not set, default is 'avg'. |
|
|
avg = Average |
|
|
sum = Sum |
|
|
eop = End of Period |
|
|
(provider: fred) |
|
|
transform : Optional[Literal['chg', 'ch1', 'pch', 'pc1', 'pca', 'cch', 'cca', 'log']] |
|
|
|
|
|
Transformation type |
|
|
None = No transformation |
|
|
chg = Change |
|
|
ch1 = Change from Year Ago |
|
|
pch = Percent Change |
|
|
pc1 = Percent Change from Year Ago |
|
|
pca = Compounded Annual Rate of Change |
|
|
cch = Continuously Compounded Rate of Change |
|
|
cca = Continuously Compounded Annual Rate of Change |
|
|
log = Natural Log |
|
|
(provider: fred) |
|
|
|
|
|
Returns |
|
|
------- |
|
|
OBBject |
|
|
results : list[MortgageIndices] |
|
|
Serializable results. |
|
|
provider : Optional[str] |
|
|
Provider name. |
|
|
warnings : Optional[list[Warning_]] |
|
|
list of warnings. |
|
|
chart : Optional[Chart] |
|
|
Chart object. |
|
|
extra : Dict[str, Any] |
|
|
Extra info. |
|
|
|
|
|
MortgageIndices |
|
|
--------------- |
|
|
date : date |
|
|
The date of the data. |
|
|
symbol : Optional[str] |
|
|
Symbol representing the entity requested in the data. |
|
|
name : Optional[str] |
|
|
Name of the index. |
|
|
rate : float |
|
|
Mortgage rate. |
|
|
|
|
|
Examples |
|
|
-------- |
|
|
>>> from openbb import obb |
|
|
>>> # The default state for FRED are the primary mortgage indices from Optimal Blue. |
|
|
>>> obb.fixedincome.mortgage_indices(provider='fred') |
|
|
>>> # Multiple indices can be requested. |
|
|
>>> obb.fixedincome.mortgage_indices(index='jumbo_30y,conforming_30y,conforming_15y', provider='fred') |
|
|
""" |
|
|
|
|
|
return self._run( |
|
|
"/fixedincome/mortgage_indices", |
|
|
**filter_inputs( |
|
|
provider_choices={ |
|
|
"provider": self._get_provider( |
|
|
provider, |
|
|
"fixedincome.mortgage_indices", |
|
|
("fred",), |
|
|
) |
|
|
}, |
|
|
standard_params={ |
|
|
"start_date": start_date, |
|
|
"end_date": end_date, |
|
|
}, |
|
|
extra_params=kwargs, |
|
|
info={ |
|
|
"index": { |
|
|
"fred": { |
|
|
"multiple_items_allowed": True, |
|
|
"choices": [ |
|
|
"primary", |
|
|
"ltv_lte_80", |
|
|
"ltv_gt_80", |
|
|
"conforming_30y", |
|
|
"conforming_30y_na", |
|
|
"jumbo_30y", |
|
|
"fha_30y", |
|
|
"va_30y", |
|
|
"usda_30y", |
|
|
"conforming_15y", |
|
|
"ltv_lte80_fico_ge740", |
|
|
"ltv_lte80_fico_a720b739", |
|
|
"ltv_lte80_fico_a700b719", |
|
|
"ltv_lte80_fico_a680b699", |
|
|
"ltv_lte80_fico_lt680", |
|
|
"ltv_gt80_fico_ge740", |
|
|
"ltv_gt80_fico_a720b739", |
|
|
"ltv_gt80_fico_a700b719", |
|
|
"ltv_gt80_fico_a680b699", |
|
|
"ltv_gt80_fico_lt680", |
|
|
], |
|
|
} |
|
|
} |
|
|
}, |
|
|
) |
|
|
) |
|
|
|
|
|
@property |
|
|
def rate(self): |
|
|
|
|
|
from . import fixedincome_rate |
|
|
|
|
|
return fixedincome_rate.ROUTER_fixedincome_rate( |
|
|
command_runner=self._command_runner |
|
|
) |
|
|
|
|
|
@exception_handler |
|
|
@validate |
|
|
@deprecated( |
|
|
"This endpoint is deprecated; use `/fixedincome/rate/sofr` instead. Deprecated in OpenBB Platform V4.2 to be removed in V4.5.", |
|
|
category=OpenBBDeprecationWarning, |
|
|
) |
|
|
def sofr( |
|
|
self, |
|
|
start_date: Annotated[ |
|
|
Union[datetime.date, None, str], |
|
|
OpenBBField(description="Start date of the data, in YYYY-MM-DD format."), |
|
|
] = None, |
|
|
end_date: Annotated[ |
|
|
Union[datetime.date, None, str], |
|
|
OpenBBField(description="End date of the data, in YYYY-MM-DD format."), |
|
|
] = None, |
|
|
provider: Annotated[ |
|
|
Optional[Literal["federal_reserve", "fred"]], |
|
|
OpenBBField( |
|
|
description="The provider to use, by default None. If None, the priority list configured in the settings is used. Default priority: federal_reserve, fred." |
|
|
), |
|
|
] = None, |
|
|
**kwargs |
|
|
) -> OBBject: |
|
|
"""Secured Overnight Financing Rate. |
|
|
|
|
|
The Secured Overnight Financing Rate (SOFR) is a broad measure of the cost of |
|
|
borrowing cash overnight collateralizing by Treasury securities. |
|
|
|
|
|
|
|
|
Parameters |
|
|
---------- |
|
|
provider : str |
|
|
The provider to use, by default None. If None, the priority list configured in the settings is used. Default priority: federal_reserve, fred. |
|
|
start_date : Union[date, None, str] |
|
|
Start date of the data, in YYYY-MM-DD format. |
|
|
end_date : Union[date, None, str] |
|
|
End date of the data, in YYYY-MM-DD format. |
|
|
frequency : Optional[Literal['a', 'q', 'm', 'w', 'wef', 'weth', 'wew', 'wetu', 'wem', 'wesu', 'wesa', 'bwew', 'bwem']] |
|
|
|
|
|
Frequency aggregation to convert daily data to lower frequency. |
|
|
a = Annual |
|
|
q = Quarterly |
|
|
m = Monthly |
|
|
w = Weekly |
|
|
wef = Weekly, Ending Friday |
|
|
weth = Weekly, Ending Thursday |
|
|
wew = Weekly, Ending Wednesday |
|
|
wetu = Weekly, Ending Tuesday |
|
|
wem = Weekly, Ending Monday |
|
|
wesu = Weekly, Ending Sunday |
|
|
wesa = Weekly, Ending Saturday |
|
|
bwew = Biweekly, Ending Wednesday |
|
|
bwem = Biweekly, Ending Monday |
|
|
(provider: fred) |
|
|
aggregation_method : Optional[Literal['avg', 'sum', 'eop']] |
|
|
|
|
|
A key that indicates the aggregation method used for frequency aggregation. |
|
|
avg = Average |
|
|
sum = Sum |
|
|
eop = End of Period |
|
|
(provider: fred) |
|
|
transform : Optional[Literal['chg', 'ch1', 'pch', 'pc1', 'pca', 'cch', 'cca', 'log']] |
|
|
|
|
|
Transformation type |
|
|
None = No transformation |
|
|
chg = Change |
|
|
ch1 = Change from Year Ago |
|
|
pch = Percent Change |
|
|
pc1 = Percent Change from Year Ago |
|
|
pca = Compounded Annual Rate of Change |
|
|
cch = Continuously Compounded Rate of Change |
|
|
cca = Continuously Compounded Annual Rate of Change |
|
|
log = Natural Log |
|
|
(provider: fred) |
|
|
|
|
|
Returns |
|
|
------- |
|
|
OBBject |
|
|
results : list[SOFR] |
|
|
Serializable results. |
|
|
provider : Optional[str] |
|
|
Provider name. |
|
|
warnings : Optional[list[Warning_]] |
|
|
list of warnings. |
|
|
chart : Optional[Chart] |
|
|
Chart object. |
|
|
extra : Dict[str, Any] |
|
|
Extra info. |
|
|
|
|
|
SOFR |
|
|
---- |
|
|
date : date |
|
|
The date of the data. |
|
|
rate : float |
|
|
Effective federal funds rate. |
|
|
percentile_1 : Optional[float] |
|
|
1st percentile of the distribution. |
|
|
percentile_25 : Optional[float] |
|
|
25th percentile of the distribution. |
|
|
percentile_75 : Optional[float] |
|
|
75th percentile of the distribution. |
|
|
percentile_99 : Optional[float] |
|
|
99th percentile of the distribution. |
|
|
volume : Optional[float] |
|
|
The trading volume.The notional volume of transactions (Billions of $). |
|
|
average_30d : Optional[float] |
|
|
30-Day Average SOFR (provider: fred) |
|
|
average_90d : Optional[float] |
|
|
90-Day Average SOFR (provider: fred) |
|
|
average_180d : Optional[float] |
|
|
180-Day Average SOFR (provider: fred) |
|
|
index : Optional[float] |
|
|
SOFR index as 2018-04-02 = 1 (provider: fred) |
|
|
|
|
|
Examples |
|
|
-------- |
|
|
>>> from openbb import obb |
|
|
>>> obb.fixedincome.sofr(provider='fred') |
|
|
""" |
|
|
|
|
|
simplefilter("always", DeprecationWarning) |
|
|
warn( |
|
|
"This endpoint is deprecated; use `/fixedincome/rate/sofr` instead. Deprecated in OpenBB Platform V4.2 to be removed in V4.5.", |
|
|
category=DeprecationWarning, |
|
|
stacklevel=2, |
|
|
) |
|
|
|
|
|
return self._run( |
|
|
"/fixedincome/sofr", |
|
|
**filter_inputs( |
|
|
provider_choices={ |
|
|
"provider": self._get_provider( |
|
|
provider, |
|
|
"fixedincome.sofr", |
|
|
("federal_reserve", "fred"), |
|
|
) |
|
|
}, |
|
|
standard_params={ |
|
|
"start_date": start_date, |
|
|
"end_date": end_date, |
|
|
}, |
|
|
extra_params=kwargs, |
|
|
) |
|
|
) |
|
|
|
|
|
@property |
|
|
def spreads(self): |
|
|
|
|
|
from . import fixedincome_spreads |
|
|
|
|
|
return fixedincome_spreads.ROUTER_fixedincome_spreads( |
|
|
command_runner=self._command_runner |
|
|
) |
|
|
|