mirror of
https://github.com/OpenBB-finance/OpenBB.git
synced 2026-10-27 20:42:26 +00:00
Merge branch 'develop' of https://github.com/OpenBB-finance/OpenBBTerminal into feature/docs-intros-updates
This commit is contained in:
2
README.md
vendored
2
README.md
vendored
@@ -27,7 +27,7 @@
|
||||
|
||||
| OpenBB is committed to build the future of investment research by focusing on an open source infrastructure accessible to everyone, everywhere. |
|
||||
|:--:|
|
||||
|  |
|
||||
| [](https://openbb.co) |
|
||||
| Check our website at [openbb.co](https://openbb.co) |
|
||||
|
||||
<br />
|
||||
|
||||
2
build/pyinstaller/terminal.spec
vendored
2
build/pyinstaller/terminal.spec
vendored
@@ -60,7 +60,6 @@ added_files = [
|
||||
(os.path.join(pathex, "user_agent"), "user_agent"),
|
||||
(os.path.join(pathex, "vaderSentiment"), "vaderSentiment"),
|
||||
(os.path.join(pathex, "prophet"), "prophet"),
|
||||
(os.path.join(pathex, "frozendict", "VERSION"), "frozendict"),
|
||||
(
|
||||
os.path.join(pathex, "linearmodels", "datasets"),
|
||||
os.path.join("linearmodels", "datasets"),
|
||||
@@ -99,7 +98,6 @@ hidden_imports = [
|
||||
"statsmodels",
|
||||
"user_agent",
|
||||
"vaderSentiment",
|
||||
"frozendict",
|
||||
"pyEX",
|
||||
"feedparser",
|
||||
"_sysconfigdata__darwin_darwin",
|
||||
|
||||
@@ -200,3 +200,6 @@ OPENBB_PERSONAL_ACCESS_TOKEN = (
|
||||
|
||||
# https://intrinio.com/starter-plan
|
||||
API_INTRINIO_KEY = os.getenv("OPENBB_API_INTRINIO_KEY") or "REPLACE_ME"
|
||||
|
||||
# https://databento.com/
|
||||
API_DATABENTO_KEY = os.getenv("OPENBB_API_DATABENTO_KEY") or "REPLACE_ME"
|
||||
|
||||
@@ -13,7 +13,7 @@ from multiprocessing import cpu_count
|
||||
from multiprocessing.pool import Pool
|
||||
from pathlib import Path
|
||||
from traceback import FrameSummary, extract_tb, format_list
|
||||
from typing import Any, Dict, List, Optional, Tuple
|
||||
from typing import Any, Callable, Dict, List, Optional, Tuple
|
||||
|
||||
from openbb_terminal.core.config.paths import (
|
||||
MISCELLANEOUS_DIRECTORY,
|
||||
@@ -353,6 +353,7 @@ def run_test_files(
|
||||
verbose: bool = False,
|
||||
special_arguments: Optional[Dict[str, str]] = None,
|
||||
subprocesses: Optional[int] = None,
|
||||
ordered: bool = False,
|
||||
) -> Tuple[int, int, Dict[str, Dict[str, Any]], float]:
|
||||
"""Runs the test scripts and returns the fails dictionary
|
||||
|
||||
@@ -366,6 +367,8 @@ def run_test_files(
|
||||
The special arguments to use in the scripts
|
||||
subprocesses: Optional[int]
|
||||
The number of subprocesses to use to run the tests
|
||||
ordered: bool
|
||||
Multiprocessing is not ordered by default. Use this flag to run the tests in order
|
||||
|
||||
Returns
|
||||
-------
|
||||
@@ -410,8 +413,10 @@ def run_test_files(
|
||||
if extra:
|
||||
chunksize += 1
|
||||
|
||||
runner: Callable = pool.imap if ordered else pool.imap_unordered
|
||||
|
||||
for i, result in enumerate(
|
||||
pool.imap(
|
||||
runner(
|
||||
partial(
|
||||
run_test,
|
||||
verbose=verbose,
|
||||
@@ -531,6 +536,7 @@ def run_test_session(
|
||||
special_arguments: Optional[Dict[str, str]] = None,
|
||||
verbose: bool = False,
|
||||
subprocesses: Optional[int] = None,
|
||||
ordered: bool = False,
|
||||
):
|
||||
"""Run the integration test session
|
||||
|
||||
@@ -552,11 +558,13 @@ def run_test_session(
|
||||
Whether or not to print the output of the scripts
|
||||
subprocesses
|
||||
The number of subprocesses to use to run the tests
|
||||
ordered: bool
|
||||
Multiprocessing is not ordered by default. Use this flag to run the tests in order.
|
||||
"""
|
||||
console.print(to_section_title("integration test session starts"), style="bold")
|
||||
test_files = collect_test_files(path_list, skip_list)
|
||||
n_successes, n_failures, fails, seconds = run_test_files(
|
||||
test_files, verbose, special_arguments, subprocesses
|
||||
test_files, verbose, special_arguments, subprocesses, ordered
|
||||
)
|
||||
display_failures(fails)
|
||||
display_summary(fails, n_successes, n_failures, seconds)
|
||||
@@ -645,6 +653,14 @@ def parse_args_and_run():
|
||||
action="store_true",
|
||||
default=False,
|
||||
)
|
||||
parser.add_argument(
|
||||
"-o",
|
||||
"--ordered",
|
||||
help="Multiprocessing is not ordered by default. Use this flag to run the tests in order.",
|
||||
dest="ordered",
|
||||
action="store_true",
|
||||
default=False,
|
||||
)
|
||||
for arg in special_arguments_values:
|
||||
parser.add_argument(
|
||||
f"--{arg}",
|
||||
@@ -680,6 +696,7 @@ def parse_args_and_run():
|
||||
special_arguments=special_args_dict,
|
||||
verbose=ns_parser.verbose,
|
||||
subprocesses=ns_parser.subprocesses,
|
||||
ordered=ns_parser.ordered,
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -511,11 +511,19 @@ def load(
|
||||
start_date: Optional[Union[datetime, Union[str, None]]] = None,
|
||||
interval: Union[str, int] = "1440",
|
||||
exchange: str = "binance",
|
||||
to_symbol: str = "usdt",
|
||||
to_symbol: str = "usd",
|
||||
end_date: Optional[Union[datetime, Union[str, None]]] = None,
|
||||
source: str = "CCXT",
|
||||
source: str = "CoinGecko",
|
||||
) -> pd.DataFrame:
|
||||
"""Load crypto currency to get data for
|
||||
"""
|
||||
Load crypto currency to get data for
|
||||
Note:
|
||||
take into consideration that the data might not be found if the data provider
|
||||
(example) uses `usd` instead of `usdt` as the quote currency, so you might need to adjust
|
||||
the `to_symbol` parameter.
|
||||
For `CCXT` a valid pair would be: "BTC/USDT"
|
||||
For `CoinGecko` a valid pair would be: "BTC-USD"
|
||||
For `YahooFinance` a valid pair would be: "BTC-USD"
|
||||
|
||||
Parameters
|
||||
----------
|
||||
@@ -549,7 +557,7 @@ def load(
|
||||
if isinstance(interval, int):
|
||||
interval = str(interval)
|
||||
if start_date is None:
|
||||
start_date = (datetime.now() - timedelta(days=1100)).strftime("%Y-%m-%d")
|
||||
start_date = (datetime.now() - timedelta(days=365)).strftime("%Y-%m-%d")
|
||||
|
||||
if end_date is None:
|
||||
end_date = datetime.now().strftime("%Y-%m-%d")
|
||||
|
||||
@@ -68,8 +68,6 @@ class EconomyController(BaseController):
|
||||
"map",
|
||||
"rtps",
|
||||
"bigmac",
|
||||
"ycrv",
|
||||
# "spread",
|
||||
"events",
|
||||
"edebt",
|
||||
]
|
||||
@@ -254,7 +252,6 @@ class EconomyController(BaseController):
|
||||
mt.add_cmd("futures")
|
||||
mt.add_cmd("map")
|
||||
mt.add_cmd("bigmac")
|
||||
mt.add_cmd("ycrv")
|
||||
mt.add_cmd("events")
|
||||
mt.add_cmd("edebt")
|
||||
mt.add_raw("\n")
|
||||
@@ -1043,42 +1040,6 @@ class EconomyController(BaseController):
|
||||
if obbff.ENABLE_EXIT_AUTO_HELP:
|
||||
self.print_help()
|
||||
|
||||
@log_start_end(log=logger)
|
||||
def call_ycrv(self, other_args: List[str]):
|
||||
"""Process ycrv command"""
|
||||
parser = argparse.ArgumentParser(
|
||||
add_help=False,
|
||||
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
||||
prog="ycrv",
|
||||
description="Generate country yield curve. The yield curve shows the bond rates"
|
||||
" at different maturities.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-d",
|
||||
"--date",
|
||||
type=valid_date,
|
||||
help="Date to get data from FRED. If not supplied, the most recent entry will be used.",
|
||||
dest="date",
|
||||
default=None,
|
||||
)
|
||||
ns_parser = self.parse_known_args_and_warn(
|
||||
parser,
|
||||
other_args,
|
||||
export_allowed=EXPORT_ONLY_RAW_DATA_ALLOWED,
|
||||
raw=True,
|
||||
)
|
||||
if ns_parser:
|
||||
fred_view.display_yield_curve(
|
||||
date=ns_parser.date.strftime("%Y-%m-%d") if ns_parser.date else "",
|
||||
raw=ns_parser.raw,
|
||||
export=ns_parser.export,
|
||||
sheet_name=" ".join(ns_parser.sheet_name)
|
||||
if ns_parser.sheet_name
|
||||
else None,
|
||||
)
|
||||
|
||||
# TODO: Add `Investing` to sources again when `investpy` is fixed
|
||||
|
||||
@log_start_end(log=logger)
|
||||
def call_events(self, other_args: List[str]):
|
||||
"""Process events command"""
|
||||
|
||||
@@ -4,7 +4,6 @@ __docformat__ = "numpy"
|
||||
import logging
|
||||
import os
|
||||
import textwrap
|
||||
from datetime import datetime, timedelta
|
||||
from typing import List, Optional, Tuple
|
||||
|
||||
import certifi
|
||||
@@ -247,105 +246,3 @@ def get_aggregated_series_data(
|
||||
data[s_id] = series[s_id]
|
||||
|
||||
return data, detail
|
||||
|
||||
|
||||
@log_start_end(log=logger)
|
||||
@check_api_key(["API_FRED_KEY"])
|
||||
def get_yield_curve(
|
||||
date: str = "", return_date: bool = False
|
||||
) -> Tuple[pd.DataFrame, str]:
|
||||
"""Gets yield curve data from FRED
|
||||
|
||||
Parameters
|
||||
----------
|
||||
date: str
|
||||
Date to get curve for. If empty, gets most recent date (format yyyy-mm-dd)
|
||||
return_date: bool
|
||||
If True, returns date of yield curve
|
||||
|
||||
Returns
|
||||
-------
|
||||
Tuple[pd.DataFrame, str]
|
||||
Dataframe of yields and maturities,
|
||||
Date for which the yield curve is obtained
|
||||
|
||||
Examples
|
||||
--------
|
||||
>>> from openbb_terminal.sdk import openbb
|
||||
>>> ycrv_df = openbb.economy.ycrv()
|
||||
|
||||
Since there is a delay with the data, the most recent date is returned and can be accessed with return_date=True
|
||||
>>> ycrv_df, ycrv_date = openbb.economy.ycrv(return_date=True)
|
||||
"""
|
||||
|
||||
# Necessary for installer so that it can locate the correct certificates for
|
||||
# API calls and https
|
||||
# https://stackoverflow.com/questions/27835619/urllib-and-ssl-certificate-verify-failed-error/73270162#73270162
|
||||
# os.environ["REQUESTS_CA_BUNDLE"] = certifi.where()
|
||||
# os.environ["SSL_CERT_FILE"] = certifi.where()
|
||||
|
||||
fredapi_client = Fred(cfg.API_FRED_KEY)
|
||||
fred_series = {
|
||||
"1Month": "DGS1MO",
|
||||
"3Month": "DGS3MO",
|
||||
"6Month": "DGS6MO",
|
||||
"1Year": "DGS1",
|
||||
"2Year": "DGS2",
|
||||
"3Year": "DGS3",
|
||||
"5Year": "DGS5",
|
||||
"7Year": "DGS7",
|
||||
"10Year": "DGS10",
|
||||
"20Year": "DGS20",
|
||||
"30Year": "DGS30",
|
||||
}
|
||||
df = pd.DataFrame()
|
||||
# Check that the date is in the past
|
||||
today = datetime.now().strftime("%Y-%m-%d")
|
||||
if date and date >= today:
|
||||
console.print("[red]Date cannot be today or in the future[/red]")
|
||||
if return_date:
|
||||
return pd.DataFrame(), date
|
||||
return pd.DataFrame()
|
||||
|
||||
# Add in logic that will get the most recent date.
|
||||
get_last = False
|
||||
|
||||
if not date:
|
||||
date = (datetime.now() - timedelta(days=7)).strftime("%Y-%m-%d")
|
||||
get_last = True
|
||||
|
||||
for key, s_id in fred_series.items():
|
||||
df = pd.concat(
|
||||
[
|
||||
df,
|
||||
pd.DataFrame(fredapi_client.get_series(s_id, date), columns=[key]),
|
||||
],
|
||||
axis=1,
|
||||
)
|
||||
if df.empty:
|
||||
if return_date:
|
||||
return pd.DataFrame(), date
|
||||
return pd.DataFrame()
|
||||
# Drop rows with NaN -- corresponding to weekends typically
|
||||
df = df.dropna()
|
||||
|
||||
if date not in df.index or get_last:
|
||||
# If the get_last flag is true, we want the first date, otherwise we want the last date.
|
||||
idx = -1 if get_last else 0
|
||||
date_of_yield = df.index[idx].strftime("%Y-%m-%d")
|
||||
rates = pd.DataFrame(df.iloc[idx, :].values, columns=["Rate"])
|
||||
else:
|
||||
date_of_yield = date
|
||||
series = df[df.index == date]
|
||||
if series.empty:
|
||||
return pd.DataFrame(), date_of_yield
|
||||
rates = pd.DataFrame(series.values.T, columns=["Rate"])
|
||||
|
||||
rates.insert(
|
||||
0,
|
||||
"Maturity",
|
||||
[1 / 12, 0.25, 0.5, 1, 2, 3, 5, 7, 10, 20, 30],
|
||||
)
|
||||
if return_date:
|
||||
return rates, date_of_yield
|
||||
return rates
|
||||
|
||||
@@ -182,62 +182,3 @@ def format_data_to_plot(data: pd.DataFrame, detail: dict) -> Tuple[pd.DataFrame,
|
||||
data_to_plot.index = pd.to_datetime(data_to_plot.index)
|
||||
|
||||
return data_to_plot, title
|
||||
|
||||
|
||||
@log_start_end(log=logger)
|
||||
@check_api_key(["API_FRED_KEY"])
|
||||
def display_yield_curve(
|
||||
date: str = "",
|
||||
external_axes: Optional[List[plt.Axes]] = None,
|
||||
raw: bool = False,
|
||||
export: str = "",
|
||||
sheet_name: Optional[str] = None,
|
||||
):
|
||||
"""Display yield curve based on US Treasury rates for a specified date.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
date: str
|
||||
Date to get curve for. If None, gets most recent date (format yyyy-mm-dd)
|
||||
external_axes : Optional[List[plt.Axes]], optional
|
||||
External axes (1 axis is expected in the list), by default None
|
||||
raw : bool
|
||||
Output only raw data
|
||||
export : str
|
||||
Export data to csv,json,xlsx or png,jpg,pdf,svg file
|
||||
"""
|
||||
rates, date_of_yield = fred_model.get_yield_curve(date, True)
|
||||
if rates.empty:
|
||||
console.print(f"[red]Yield data not found for {date_of_yield}.[/red]\n")
|
||||
return
|
||||
if external_axes is None:
|
||||
_, ax = plt.subplots(figsize=plot_autoscale(), dpi=PLOT_DPI)
|
||||
elif is_valid_axes_count(external_axes, 1):
|
||||
(ax,) = external_axes
|
||||
else:
|
||||
return
|
||||
|
||||
ax.plot(rates["Maturity"], rates["Rate"], "-o")
|
||||
ax.set_xlabel("Maturity")
|
||||
ax.set_ylabel("Rate (%)")
|
||||
theme.style_primary_axis(ax)
|
||||
if external_axes is None:
|
||||
ax.set_title(f"US Yield Curve for {date_of_yield} ")
|
||||
theme.visualize_output()
|
||||
|
||||
if raw:
|
||||
print_rich_table(
|
||||
rates,
|
||||
headers=list(rates.columns),
|
||||
show_index=False,
|
||||
title=f"United States Yield Curve for {date_of_yield}",
|
||||
floatfmt=".3f",
|
||||
)
|
||||
|
||||
export_data(
|
||||
export,
|
||||
os.path.dirname(os.path.abspath(__file__)),
|
||||
"ycrv",
|
||||
rates,
|
||||
sheet_name,
|
||||
)
|
||||
|
||||
BIN
openbb_terminal/fixedincome/commercial_paper.xlsx
vendored
Normal file
BIN
openbb_terminal/fixedincome/commercial_paper.xlsx
vendored
Normal file
Binary file not shown.
BIN
openbb_terminal/fixedincome/corporate_spot_rates.xlsx
vendored
Normal file
BIN
openbb_terminal/fixedincome/corporate_spot_rates.xlsx
vendored
Normal file
Binary file not shown.
201
openbb_terminal/fixedincome/ecb_model.py
Normal file
201
openbb_terminal/fixedincome/ecb_model.py
Normal file
@@ -0,0 +1,201 @@
|
||||
""" ECB model """
|
||||
__docformat__ = "numpy"
|
||||
|
||||
import logging
|
||||
from datetime import datetime, timedelta
|
||||
from typing import Tuple
|
||||
|
||||
import pandas as pd
|
||||
|
||||
from openbb_terminal.decorators import log_start_end
|
||||
from openbb_terminal.rich_config import console, optional_rich_track
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# pylint: disable=too-many-return-statements
|
||||
|
||||
|
||||
@log_start_end(log=logger)
|
||||
def get_series_data(
|
||||
series_id: str = "EST.B.EU000A2X2A25.WT", start_date: str = "", end_date: str = ""
|
||||
):
|
||||
"""Get ECB data
|
||||
|
||||
Parameters
|
||||
----------
|
||||
series_id: str
|
||||
ECB ID of data
|
||||
start_date: Optional[str]
|
||||
Start date, formatted YYYY-MM-DD
|
||||
end_date: Optional[str]
|
||||
End date, formatted YYYY-MM-DD
|
||||
"""
|
||||
start_date = start_date[0:4] + start_date[4:7] + start_date[8:9]
|
||||
end_date = end_date[0:4] + end_date[4:7] + end_date[8:9]
|
||||
|
||||
df = pd.read_csv(
|
||||
f"https://sdw.ecb.europa.eu/quickviewexport.do?trans=N&start={start_date}&end={end_date}&SERIES_KEY={series_id}&type=csv",
|
||||
header=5,
|
||||
usecols=[0, 1],
|
||||
index_col=0,
|
||||
parse_dates=True,
|
||||
)
|
||||
df = df.iloc[::-1]
|
||||
|
||||
return df
|
||||
|
||||
|
||||
@log_start_end(log=logger)
|
||||
def get_ecb_yield_curve(
|
||||
date: str = "",
|
||||
yield_type: str = "spot_rate",
|
||||
return_date: bool = False,
|
||||
detailed: bool = False,
|
||||
any_rating: bool = True,
|
||||
) -> Tuple[pd.DataFrame, str]:
|
||||
"""Gets euro area yield curve data from ECB.
|
||||
|
||||
The graphic depiction of the relationship between the yield on bonds of the same credit quality but different
|
||||
maturities is known as the yield curve. In the past, most market participants have constructed yield curves from
|
||||
the observations of prices and yields in the Treasury market. Two reasons account for this tendency. First,
|
||||
Treasury securities are viewed as free of default risk, and differences in creditworthiness do not affect yield
|
||||
estimates. Second, as the most active bond market, the Treasury market offers the fewest problems of illiquidity
|
||||
or infrequent trading. The key function of the Treasury yield curve is to serve as a benchmark for pricing bonds
|
||||
and setting yields in other sectors of the debt market.
|
||||
|
||||
It is clear that the market’s expectations of future rate changes are one important determinant of the
|
||||
yield-curve shape. For example, a steeply upward-sloping curve may indicate market expectations of near-term Fed
|
||||
tightening or of rising inflation. However, it may be too restrictive to assume that the yield differences across
|
||||
bonds with different maturities only reflect the market’s rate expectations. The well-known pure expectations
|
||||
hypothesis has such an extreme implication. The pure expectations hypothesis asserts that all government bonds
|
||||
have the same near-term expected return (as the nominally riskless short-term bond) because the return-seeking
|
||||
activity of risk-neutral traders removes all expected return differentials across bonds.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
date: str
|
||||
Date to get curve for. If empty, gets most recent date (format yyyy-mm-dd)
|
||||
yield_type: str
|
||||
What type of yield curve to get, options: ['spot_rate', 'instantaneous_forward', 'par_yield']
|
||||
return_date: bool
|
||||
If True, returns date of yield curve
|
||||
detailed: bool
|
||||
If True, returns detailed data. Note that this is very slow.
|
||||
aaa_only: bool
|
||||
If True, it only returns rates for AAA rated bonds. If False, it returns rates for all bonds
|
||||
|
||||
Returns
|
||||
-------
|
||||
Tuple[pd.DataFrame, str]
|
||||
Dataframe of yields and maturities,
|
||||
Date for which the yield curve is obtained
|
||||
|
||||
Examples
|
||||
--------
|
||||
>>> from openbb_terminal.sdk import openbb
|
||||
>>> ycrv_df = openbb.fixedincome.ycrv()
|
||||
|
||||
Since there is a delay with the data, the most recent date is returned and can be accessed with return_date=True
|
||||
>>> ycrv_df, ycrv_date = openbb.fixedincome.ycrv(return_date=True)
|
||||
"""
|
||||
if yield_type == "spot_rate":
|
||||
yield_type = f"YC.B.U2.EUR.4F.G_N_{'A' if any_rating else 'C'}.SV_C_YM.SR_"
|
||||
elif yield_type == "instantaneous_forward":
|
||||
yield_type = f"YC.B.U2.EUR.4F.G_N_{'A' if any_rating else 'C'}.SV_C_YM.IF_"
|
||||
elif yield_type == "par_yield":
|
||||
yield_type = f"YC.B.U2.EUR.4F.G_N_{'A' if any_rating else 'C'}.SV_C_YM.PY"
|
||||
else:
|
||||
console.print("[red]Incorrect input for parameter yield_type[/red]")
|
||||
if return_date:
|
||||
return pd.DataFrame(), date
|
||||
return pd.DataFrame()
|
||||
|
||||
if detailed:
|
||||
console.print(
|
||||
"Note that due to the large amount of data, this may take a while. Use CTRL + C to cancel."
|
||||
)
|
||||
series_id = [
|
||||
f"{yield_type}{y}Y{m}M" if y != 0 else f"{yield_type}{m}M"
|
||||
for y in range(0, 30)
|
||||
for m in range(1, 12)
|
||||
if (y != 0 or m >= 3)
|
||||
]
|
||||
series_id.append(f"{type}30Y")
|
||||
labels = [
|
||||
f"{y}Year{m}Month" if y != 0 else f"{m}Month"
|
||||
for y in range(0, 30)
|
||||
for m in range(1, 12)
|
||||
if (y != 0 or m >= 3)
|
||||
]
|
||||
labels.append("30Year")
|
||||
years = [
|
||||
y + m / 12 for y in range(0, 30) for m in range(1, 12) if (y != 0 or m >= 3)
|
||||
]
|
||||
years.append(30)
|
||||
else:
|
||||
series_id = [f"{yield_type}{m}M" for m in [3, 6]]
|
||||
series_id += [f"{yield_type}{y}Y" for y in [1, 2, 3, 5, 7, 10, 20, 30]]
|
||||
labels = [f"{m}Month" for m in [3, 6]]
|
||||
labels += [f"{y}Year" for y in [1, 2, 3, 5, 7, 10, 20, 30]]
|
||||
years = [0.25, 0.5, 1, 2, 3, 5, 7, 10, 20, 30]
|
||||
|
||||
df = pd.DataFrame()
|
||||
# Check that the date is in the past
|
||||
today = datetime.now().strftime("%Y-%m-%d")
|
||||
if date and date >= today:
|
||||
console.print("[red]Date cannot be today or in the future[/red]")
|
||||
if return_date:
|
||||
return pd.DataFrame(), date
|
||||
return pd.DataFrame()
|
||||
|
||||
# Add in logic that will get the most recent date.
|
||||
|
||||
if not date:
|
||||
date = (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d")
|
||||
|
||||
try:
|
||||
for i in optional_rich_track(
|
||||
range(len(series_id)), desc="Obtaining yield curve data"
|
||||
):
|
||||
temp = get_series_data(series_id[i], date, date)
|
||||
temp.columns = [labels[i]]
|
||||
df = pd.concat([df, temp], axis=1)
|
||||
except KeyboardInterrupt:
|
||||
console.print("Data collection was canceled.")
|
||||
return pd.DataFrame(), date
|
||||
|
||||
if df.empty:
|
||||
if return_date:
|
||||
return pd.DataFrame(), date
|
||||
return pd.DataFrame()
|
||||
|
||||
# Drop rows with NaN -- corresponding to weekends typically
|
||||
df = df.dropna()
|
||||
if datetime.strptime(date, "%Y-%m-%d") not in df.index:
|
||||
nearest_value = df.index.get_indexer(
|
||||
[datetime.strptime(date, "%Y-%m-%d")], method="nearest"
|
||||
)
|
||||
date_of_yield = df.iloc[nearest_value].index[0].date()
|
||||
series = df[df.index == df.iloc[nearest_value].index[0]]
|
||||
if series.empty:
|
||||
return pd.DataFrame(), date_of_yield
|
||||
rates = pd.DataFrame(series.values.T, columns=["Rate"])
|
||||
console.print(
|
||||
f"{date} not available, therefore selecting the nearest date, {date_of_yield}."
|
||||
)
|
||||
else:
|
||||
date_of_yield = date
|
||||
series = df[df.index == datetime.strptime(date, "%Y-%m-%d")]
|
||||
if series.empty:
|
||||
return pd.DataFrame(), date_of_yield
|
||||
rates = pd.DataFrame(series.values.T, columns=["Rate"])
|
||||
|
||||
rates.insert(
|
||||
0,
|
||||
"Maturity",
|
||||
years,
|
||||
)
|
||||
|
||||
if return_date:
|
||||
return rates, date_of_yield
|
||||
return rates
|
||||
204
openbb_terminal/fixedincome/ecb_view.py
Normal file
204
openbb_terminal/fixedincome/ecb_view.py
Normal file
@@ -0,0 +1,204 @@
|
||||
""" ECB view """
|
||||
__docformat__ = "numpy"
|
||||
|
||||
import logging
|
||||
import os
|
||||
from itertools import cycle
|
||||
from typing import List, Optional
|
||||
|
||||
import pandas as pd
|
||||
from matplotlib import pyplot as plt
|
||||
|
||||
from openbb_terminal.config_plot import PLOT_DPI
|
||||
from openbb_terminal.config_terminal import theme
|
||||
from openbb_terminal.decorators import log_start_end
|
||||
from openbb_terminal.fixedincome import ecb_model
|
||||
from openbb_terminal.helper_funcs import (
|
||||
export_data,
|
||||
is_valid_axes_count,
|
||||
plot_autoscale,
|
||||
print_rich_table,
|
||||
)
|
||||
from openbb_terminal.rich_config import console
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# pylint: disable=too-many-function-args
|
||||
|
||||
ID_TO_NAME = {
|
||||
"EST.B.EU000A2X2A25.WT": "Euro Short-Term Rate: Volume-Weighted Trimmed Mean Rate [Percent]",
|
||||
"EST.B.EU000A2X2A25.TT": "Euro Short-Term Rate: Total Volume [Millions of EUR]",
|
||||
"EST.B.EU000A2X2A25.NT": "Euro Short-Term Rate: Number of Transactions",
|
||||
"EST.B.EU000A2X2A25.R75": "Euro Short-Term Rate: Rate at 75th Percentile of Volume [Percent]",
|
||||
"EST.B.EU000A2X2A25.NB": "Euro Short-Term Rate: Number of Active Banks",
|
||||
"EST.B.EU000A2X2A25.VL": "Euro Short-Term Rate: Share of Volume of the 5 Largest Active Banks [Percent]",
|
||||
"EST.B.EU000A2X2A25.R25": "Euro Short-Term Rate: Rate at 25th Percentile of Volume [Percent]",
|
||||
}
|
||||
|
||||
ESTR_PARAMETER_TO_ECB_ID = {
|
||||
"volume_weighted_trimmed_mean_rate": "EST.B.EU000A2X2A25.WT",
|
||||
"number_of_transactions": "EST.B.EU000A2X2A25.NT",
|
||||
"number_of_active_banks": "EST.B.EU000A2X2A25.NB",
|
||||
"total_volume": "EST.B.EU000A2X2A25.TT",
|
||||
"share_of_volume_of_the_5_largest_active_banks": "EST.B.EU000A2X2A25.VL",
|
||||
"rate_at_75th_percentile_of_volume": "EST.B.EU000A2X2A25.R75",
|
||||
"rate_at_25th_percentile_of_volume": "EST.B.EU000A2X2A25.R25",
|
||||
}
|
||||
|
||||
|
||||
@log_start_end(log=logger)
|
||||
def plot_estr(
|
||||
parameter: str = "EST.B.EU000A2X2A25.WT",
|
||||
start_date: Optional[str] = None,
|
||||
end_date: Optional[str] = None,
|
||||
export: str = "",
|
||||
sheet_name: str = "",
|
||||
external_axes: Optional[List[plt.Axes]] = None,
|
||||
):
|
||||
"""Plot Euro Short-Term Rate (ESTR)
|
||||
|
||||
Parameters
|
||||
----------
|
||||
series_id: str
|
||||
ECB ID of ESTR data to plot, options: ['EST.B.EU000A2X2A25.WT', 'EST.B.EU000A2X2A25.TT',
|
||||
'EST.B.EU000A2X2A25.NT', 'EST.B.EU000A2X2A25.R75', 'EST.B.EU000A2X2A25.NB',
|
||||
'EST.B.EU000A2X2A25.VL', 'EST.B.EU000A2X2A25.R25']
|
||||
start_date: Optional[str]
|
||||
Start date, formatted YYYY-MM-DD
|
||||
end_date: Optional[str]
|
||||
End date, formatted YYYY-MM-DD
|
||||
export: str
|
||||
Export data to csv or excel file
|
||||
external_axes: Optional[List[plt.Axes]]
|
||||
External axes (1 axis is expected in the list)
|
||||
"""
|
||||
series_id = ESTR_PARAMETER_TO_ECB_ID.get(parameter, "")
|
||||
|
||||
df = ecb_model.get_series_data(
|
||||
series_id, start_date if start_date else "", end_date if end_date else ""
|
||||
)
|
||||
|
||||
# This plot has 1 axis
|
||||
if not external_axes:
|
||||
_, ax = plt.subplots(figsize=plot_autoscale(), dpi=PLOT_DPI)
|
||||
elif is_valid_axes_count(external_axes, 1):
|
||||
(ax,) = external_axes
|
||||
else:
|
||||
return
|
||||
|
||||
colors = cycle(theme.get_colors())
|
||||
ax.plot(
|
||||
df.index,
|
||||
df.values,
|
||||
color=next(colors, "#FCED00"),
|
||||
)
|
||||
ax.set_title(ID_TO_NAME[series_id])
|
||||
theme.style_primary_axis(ax)
|
||||
|
||||
if external_axes is None:
|
||||
theme.visualize_output()
|
||||
|
||||
if export:
|
||||
if "[Percent]" in ID_TO_NAME[series_id]:
|
||||
# Check whether it is a percentage, relevant for exporting
|
||||
df_transformed = pd.DataFrame(df, columns=[series_id]) / 100
|
||||
else:
|
||||
df_transformed = pd.DataFrame(df, columns=[series_id])
|
||||
|
||||
export_data(
|
||||
export,
|
||||
os.path.dirname(os.path.abspath(__file__)),
|
||||
series_id,
|
||||
df_transformed,
|
||||
sheet_name,
|
||||
)
|
||||
|
||||
|
||||
@log_start_end(log=logger)
|
||||
def display_ecb_yield_curve(
|
||||
date: str = "",
|
||||
yield_type: str = "spot_rate",
|
||||
detailed: bool = False,
|
||||
any_rating: bool = True,
|
||||
external_axes: Optional[List[plt.Axes]] = None,
|
||||
raw: bool = False,
|
||||
export: str = "",
|
||||
sheet_name: str = "",
|
||||
):
|
||||
"""Display yield curve based on ECB Treasury rates for a specified date.
|
||||
|
||||
The graphic depiction of the relationship between the yield on bonds of the same credit quality but different
|
||||
maturities is known as the yield curve. In the past, most market participants have constructed yield curves from
|
||||
the observations of prices and yields in the Treasury market. Two reasons account for this tendency. First,
|
||||
Treasury securities are viewed as free of default risk, and differences in creditworthiness do not affect yield
|
||||
estimates. Second, as the most active bond market, the Treasury market offers the fewest problems of illiquidity
|
||||
or infrequent trading. The key function of the Treasury yield curve is to serve as a benchmark for pricing bonds
|
||||
and setting yields in other sectors of the debt market.
|
||||
|
||||
It is clear that the market’s expectations of future rate changes are one important determinant of the
|
||||
yield-curve shape. For example, a steeply upward-sloping curve may indicate market expectations of near-term Fed
|
||||
tightening or of rising inflation. However, it may be too restrictive to assume that the yield differences across
|
||||
bonds with different maturities only reflect the market’s rate expectations. The well-known pure expectations
|
||||
hypothesis has such an extreme implication. The pure expectations hypothesis asserts that all government bonds
|
||||
have the same near-term expected return (as the nominally riskless short-term bond) because the return-seeking
|
||||
activity of risk-neutral traders removes all expected return differentials across bonds.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
date: str
|
||||
Date to get curve for. If None, gets most recent date (format yyyy-mm-dd)
|
||||
yield_type: str
|
||||
What type of yield curve to get, options: ['spot_rate', 'instantaneous_forward', 'par_yield']
|
||||
detailed: bool
|
||||
If True, returns detailed data. Note that this is very slow.
|
||||
aaa_only: bool
|
||||
If True, it only returns rates for AAA rated bonds. If False, it returns rates for all bonds
|
||||
external_axes : Optional[List[plt.Axes]], optional
|
||||
External axes (1 axis is expected in the list), by default None
|
||||
raw : bool
|
||||
Output only raw data
|
||||
export : str
|
||||
Export data to csv,json,xlsx or png,jpg,pdf,svg file
|
||||
"""
|
||||
rates, date_of_yield = ecb_model.get_ecb_yield_curve(
|
||||
date, yield_type, True, detailed, any_rating
|
||||
)
|
||||
if rates.empty:
|
||||
console.print(f"[red]Yield data not found for {date_of_yield}.[/red]\n")
|
||||
return
|
||||
if external_axes is None:
|
||||
_, ax = plt.subplots(figsize=plot_autoscale(), dpi=PLOT_DPI)
|
||||
elif is_valid_axes_count(external_axes, 1):
|
||||
(ax,) = external_axes
|
||||
else:
|
||||
return
|
||||
|
||||
ax.plot(rates["Maturity"], rates["Rate"], "-o")
|
||||
ax.set_xlabel("Maturity")
|
||||
ax.set_ylabel("Rate (%)")
|
||||
theme.style_primary_axis(ax)
|
||||
if external_axes is None:
|
||||
ax.set_title(
|
||||
f"Euro Area{' AAA Bonds' if not any_rating else ' All Bonds'} {yield_type.replace('_', ' ').title()} "
|
||||
f"Yield Curve for {date_of_yield}",
|
||||
fontsize=15,
|
||||
)
|
||||
theme.visualize_output()
|
||||
|
||||
if raw:
|
||||
print_rich_table(
|
||||
rates,
|
||||
headers=list(rates.columns),
|
||||
show_index=False,
|
||||
title=f"Euro Area{' AAA Bonds' if not any_rating else ' All Bonds'} {yield_type.replace('_', ' ').title()} "
|
||||
f"Yield Curve for {date_of_yield}",
|
||||
floatfmt=".3f",
|
||||
)
|
||||
|
||||
export_data(
|
||||
export,
|
||||
os.path.dirname(os.path.abspath(__file__)),
|
||||
"ecbycrv",
|
||||
rates / 100,
|
||||
sheet_name,
|
||||
)
|
||||
175
openbb_terminal/fixedincome/econdb_model.py
Normal file
175
openbb_terminal/fixedincome/econdb_model.py
Normal file
@@ -0,0 +1,175 @@
|
||||
""" EconDB Model """
|
||||
__docformat__ = "numpy"
|
||||
|
||||
import logging
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, Optional
|
||||
|
||||
import pandas as pd
|
||||
import pandas_datareader.data as web
|
||||
|
||||
from openbb_terminal.decorators import log_start_end
|
||||
from openbb_terminal.rich_config import console
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
TREASURIES: Dict = {
|
||||
"frequencies": {
|
||||
"annually": 203,
|
||||
"monthly": 129,
|
||||
"weekly": 21,
|
||||
"daily": 9,
|
||||
},
|
||||
"instruments": {
|
||||
"nominal": {
|
||||
"identifier": "TCMNOM",
|
||||
"maturities": {
|
||||
"1m": "1-month",
|
||||
"3m": "3-month",
|
||||
"6m": "6-month",
|
||||
"1y": "1-year",
|
||||
"2y": "2-year",
|
||||
"3y": "3-year",
|
||||
"5y": "5-year",
|
||||
"7y": "7-year",
|
||||
"10y": "10-year",
|
||||
"20y": "20-year",
|
||||
"30y": "30-year",
|
||||
},
|
||||
},
|
||||
"inflation": {
|
||||
"identifier": "TCMII",
|
||||
"maturities": {
|
||||
"5y": "5-year",
|
||||
"7y": "7-year",
|
||||
"10y": "10-year",
|
||||
"20y": "20-year",
|
||||
"30y": "30-year",
|
||||
},
|
||||
},
|
||||
"average": {
|
||||
"identifier": "LTAVG",
|
||||
"maturities": {
|
||||
"Longer than 10-year": "Longer than 10-year",
|
||||
},
|
||||
},
|
||||
"secondary": {
|
||||
"identifier": "TB",
|
||||
"maturities": {
|
||||
"4w": "4-week",
|
||||
"3m": "3-month",
|
||||
"6m": "6-month",
|
||||
"1y": "1-year",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@log_start_end(log=logger)
|
||||
def get_treasuries(
|
||||
instruments: Optional[list] = None,
|
||||
maturities: Optional[list] = None,
|
||||
frequency: str = "monthly",
|
||||
start_date: str = "1900-01-01",
|
||||
end_date: Optional[str] = None,
|
||||
) -> pd.DataFrame:
|
||||
"""Get U.S. Treasury rates [Source: EconDB]
|
||||
|
||||
Parameters
|
||||
----------
|
||||
instruments: list
|
||||
Type(s) of treasuries, nominal, inflation-adjusted (long term average) or secondary market.
|
||||
Available options can be accessed through economy.treasury_maturities().
|
||||
maturities : list
|
||||
Treasury maturities to get. Available options can be accessed through economy.treasury_maturities().
|
||||
frequency : str
|
||||
Frequency of the data, this can be annually, monthly, weekly or daily.
|
||||
start_date : str
|
||||
Starting date, format "YEAR-MONTH-DAY", i.e. 2010-12-31.
|
||||
end_date : Optional[str]
|
||||
End date, format "YEAR-MONTH-DAY", i.e. 2020-06-05.
|
||||
|
||||
Returns
|
||||
-------
|
||||
treasury_data: pd.Dataframe
|
||||
Holds data of the selected types and maturities
|
||||
"""
|
||||
|
||||
if end_date is None:
|
||||
end_date = datetime.today().strftime("%Y-%m-%d")
|
||||
|
||||
if instruments is None:
|
||||
instruments = ["nominal"]
|
||||
if maturities is None:
|
||||
maturities = ["10y"]
|
||||
|
||||
treasury_data: Dict[Any, Dict[Any, pd.Series]] = {}
|
||||
|
||||
for instrument in instruments:
|
||||
if instrument not in TREASURIES["instruments"]:
|
||||
console.print(
|
||||
f"{instrument} is not an option. Please choose between: "
|
||||
f"{', '.join(TREASURIES['instruments'].keys())}"
|
||||
)
|
||||
else:
|
||||
instrument_identifier = TREASURIES["instruments"][instrument]["identifier"]
|
||||
frequency_number = TREASURIES["frequencies"][frequency]
|
||||
df = web.DataReader(
|
||||
"&".join(
|
||||
[
|
||||
"dataset=FRB_H15",
|
||||
"v=Instrument",
|
||||
"h=TIME",
|
||||
f"instrument=[{instrument_identifier}]",
|
||||
f"from={start_date}",
|
||||
f"to={end_date}",
|
||||
f"freq=[{frequency_number}",
|
||||
"UNIT=[PERCENT:_PER_YEAR]",
|
||||
]
|
||||
),
|
||||
"econdb",
|
||||
)
|
||||
|
||||
if instrument == "average":
|
||||
maturities_list = ["Longer than 10-year"]
|
||||
type_string = "Long-term average"
|
||||
else:
|
||||
maturities_list = maturities
|
||||
type_string = instrument.capitalize()
|
||||
|
||||
treasury_data[type_string] = {}
|
||||
|
||||
for maturity in maturities_list:
|
||||
if maturity not in TREASURIES["instruments"][instrument]["maturities"]:
|
||||
console.print(
|
||||
f"The maturity {maturity} is not an option for {instrument}. Please choose between "
|
||||
f"{', '.join(TREASURIES['instruments'][instrument]['maturities'].keys())}"
|
||||
)
|
||||
else:
|
||||
maturity_string = TREASURIES["instruments"][instrument][
|
||||
"maturities"
|
||||
][maturity]
|
||||
|
||||
for column in df.columns:
|
||||
# check if type inside the name and maturity inside the maturity string
|
||||
if (
|
||||
type_string.lower() in column[2].lower()
|
||||
and maturity_string in column[3]
|
||||
):
|
||||
treasury_data[type_string][maturity_string] = df[
|
||||
column
|
||||
].dropna()
|
||||
break
|
||||
|
||||
if maturity_string not in treasury_data[type_string]:
|
||||
console.print(
|
||||
f"No data found for the combination {instrument} and {maturity}."
|
||||
)
|
||||
|
||||
df = pd.DataFrame.from_dict(treasury_data, orient="index").stack().to_frame()
|
||||
df = pd.DataFrame(df[0].values.tolist(), index=df.index).T
|
||||
df.columns = ["_".join(column) for column in df.columns]
|
||||
|
||||
return df
|
||||
252
openbb_terminal/fixedincome/econdb_view.py
Normal file
252
openbb_terminal/fixedincome/econdb_view.py
Normal file
@@ -0,0 +1,252 @@
|
||||
""" EconDB view """
|
||||
__docformat__ = "numpy"
|
||||
|
||||
import logging
|
||||
import os
|
||||
from itertools import cycle
|
||||
from typing import List, Optional
|
||||
|
||||
import pandas as pd
|
||||
from matplotlib import pyplot as plt
|
||||
|
||||
from openbb_terminal.config_plot import PLOT_DPI
|
||||
from openbb_terminal.config_terminal import theme
|
||||
from openbb_terminal.decorators import check_api_key, log_start_end
|
||||
from openbb_terminal.fixedincome import econdb_model
|
||||
from openbb_terminal.helper_funcs import (
|
||||
export_data,
|
||||
is_valid_axes_count,
|
||||
plot_autoscale,
|
||||
)
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
MATURITY_TO_ID = {
|
||||
"4_week": "4w",
|
||||
"3_month": "3m",
|
||||
"6_month": "6m",
|
||||
"1_year": "1y",
|
||||
"1_month": "1m",
|
||||
"2_year": "2y",
|
||||
"3_year": "3y",
|
||||
"5_year": "5y",
|
||||
"7_year": "7y",
|
||||
"10_year": "10y",
|
||||
"20_year": "20y",
|
||||
"30_year": "30y",
|
||||
}
|
||||
|
||||
|
||||
@log_start_end(log=logger)
|
||||
@check_api_key(["API_FRED_KEY"])
|
||||
def plot_cmn(
|
||||
maturity: str = "3_month",
|
||||
start_date: Optional[str] = None,
|
||||
end_date: Optional[str] = None,
|
||||
export: str = "",
|
||||
external_axes: Optional[List[plt.Axes]] = None,
|
||||
):
|
||||
"""Plot Treasury Constant Maturity Nominal Market Yield.
|
||||
|
||||
Yields on Treasury nominal securities at “constant maturity” are interpolated by the U.S. Treasury from the daily
|
||||
yield curve for non-inflation-indexed Treasury securities. This curve, which relates the yield on a security to
|
||||
its time to maturity, is based on the closing market bid yields on actively traded Treasury securities in the
|
||||
over-the-counter market. These market yields are calculated from composites of quotations obtained by the Federal
|
||||
Reserve Bank of New York. The constant maturity yield values are read from the yield curve at fixed maturities,
|
||||
currently 1, 3, and 6 months and 1, 2, 3, 5, 7, 10, 20, and 30 years. This method provides a yield for a 10-year
|
||||
maturity, for example, even if no outstanding security has exactly 10 years remaining to maturity. Similarly,
|
||||
yields on inflation-indexed securities at “constant maturity” are interpolated from the daily yield curve for
|
||||
Treasury inflation protected securities in the over-the-counter market. The inflation-indexed constant maturity
|
||||
yields are read from this yield curve at fixed maturities, currently 5, 7, 10, 20, and 30 years.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
maturity: str
|
||||
Maturity to plot, options: ['1_month', '3_month', '6_month', '1_year', '2_year',
|
||||
'3_year', '5_year', '7_year', '10_year', '20_year', '30_year']
|
||||
start_date: Optional[str]
|
||||
Start date, formatted YYYY-MM-DD
|
||||
end_date: Optional[str]
|
||||
End date, formatted YYYY-MM-DD
|
||||
export: str
|
||||
Export data to csv or excel file
|
||||
external_axes: Optional[List[plt.Axes]]
|
||||
External axes (1 axis is expected in the list)
|
||||
"""
|
||||
df = econdb_model.get_treasuries(
|
||||
instruments=["nominal"],
|
||||
maturities=[MATURITY_TO_ID[maturity]],
|
||||
frequency="daily",
|
||||
start_date=start_date,
|
||||
end_date=end_date,
|
||||
)
|
||||
|
||||
# This plot has 1 axis
|
||||
if not external_axes:
|
||||
_, ax = plt.subplots(figsize=plot_autoscale(), dpi=PLOT_DPI)
|
||||
elif is_valid_axes_count(external_axes, 1):
|
||||
(ax,) = external_axes
|
||||
else:
|
||||
return
|
||||
|
||||
colors = cycle(theme.get_colors())
|
||||
ax.plot(
|
||||
df.index,
|
||||
df.values,
|
||||
color=next(colors, "#FCED00"),
|
||||
)
|
||||
ax.set_title(
|
||||
f"{maturity.replace('-', ' ')} Treasury Constant Maturity Nominal Market Yield [Percent]"
|
||||
)
|
||||
theme.style_primary_axis(ax)
|
||||
|
||||
if external_axes is None:
|
||||
theme.visualize_output()
|
||||
|
||||
export_data(
|
||||
export,
|
||||
os.path.dirname(os.path.abspath(__file__)),
|
||||
f"cmn, {maturity}",
|
||||
pd.DataFrame(df, columns=[maturity]) / 100,
|
||||
)
|
||||
|
||||
|
||||
@log_start_end(log=logger)
|
||||
@check_api_key(["API_FRED_KEY"])
|
||||
def plot_tips(
|
||||
maturity: str = "10_year",
|
||||
start_date: Optional[str] = None,
|
||||
end_date: Optional[str] = None,
|
||||
export: str = "",
|
||||
external_axes: Optional[List[plt.Axes]] = None,
|
||||
):
|
||||
"""Plot Yields on Treasury inflation protected securities (TIPS) adjusted to constant maturities.
|
||||
|
||||
Yields on Treasury nominal securities at “constant maturity” are interpolated by the U.S. Treasury from the daily
|
||||
yield curve for non-inflation-indexed Treasury securities. This curve, which relates the yield on a security to
|
||||
its time to maturity, is based on the closing market bid yields on actively traded Treasury securities in the
|
||||
over-the-counter market. These market yields are calculated from composites of quotations obtained by the Federal
|
||||
Reserve Bank of New York. The constant maturity yield values are read from the yield curve at fixed maturities,
|
||||
currently 1, 3, and 6 months and 1, 2, 3, 5, 7, 10, 20, and 30 years. This method provides a yield for a 10-year
|
||||
maturity, for example, even if no outstanding security has exactly 10 years remaining to maturity. Similarly,
|
||||
yields on inflation-indexed securities at “constant maturity” are interpolated from the daily yield curve for
|
||||
Treasury inflation protected securities in the over-the-counter market. The inflation-indexed constant maturity
|
||||
yields are read from this yield curve at fixed maturities, currently 5, 7, 10, 20, and 30 years.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
maturity: str
|
||||
Maturity to plot, options: ['5_year', '7_year', '10_year', '20_year', '30_year']
|
||||
start_date: Optional[str]
|
||||
Start date, formatted YYYY-MM-DD
|
||||
end_date: Optional[str]
|
||||
End date, formatted YYYY-MM-DD
|
||||
export: str
|
||||
Export data to csv or excel file
|
||||
external_axes: Optional[List[plt.Axes]]
|
||||
External axes (1 axis is expected in the list)
|
||||
"""
|
||||
df = econdb_model.get_treasuries(
|
||||
instruments=["inflation"],
|
||||
maturities=[MATURITY_TO_ID[maturity]],
|
||||
frequency="daily",
|
||||
start_date=start_date,
|
||||
end_date=end_date,
|
||||
)
|
||||
|
||||
# This plot has 1 axis
|
||||
if not external_axes:
|
||||
_, ax = plt.subplots(figsize=plot_autoscale(), dpi=PLOT_DPI)
|
||||
elif is_valid_axes_count(external_axes, 1):
|
||||
(ax,) = external_axes
|
||||
else:
|
||||
return
|
||||
|
||||
colors = cycle(theme.get_colors())
|
||||
ax.plot(
|
||||
df.index,
|
||||
df.values,
|
||||
color=next(colors, "#FCED00"),
|
||||
)
|
||||
ax.set_title(
|
||||
f"{maturity.replace('-', ' ')} Yields on Treasury inflation protected securities (TIPS) adjusted to "
|
||||
f"constant maturities [Percent]"
|
||||
)
|
||||
theme.style_primary_axis(ax)
|
||||
|
||||
if external_axes is None:
|
||||
theme.visualize_output()
|
||||
|
||||
export_data(
|
||||
export,
|
||||
os.path.dirname(os.path.abspath(__file__)),
|
||||
f"tips, {maturity}",
|
||||
pd.DataFrame(df, columns=[maturity]) / 100,
|
||||
)
|
||||
|
||||
|
||||
@log_start_end(log=logger)
|
||||
@check_api_key(["API_FRED_KEY"])
|
||||
def plot_tbill(
|
||||
maturity: str = "3_month",
|
||||
start_date: Optional[str] = None,
|
||||
end_date: Optional[str] = None,
|
||||
export: str = "",
|
||||
external_axes: Optional[List[plt.Axes]] = None,
|
||||
):
|
||||
"""Plot the Treasury Bill Secondary Market Rate.
|
||||
|
||||
A Treasury Bill (T-Bill) is a short-term U.S. government debt obligation backed by the Treasury Department with a
|
||||
maturity of one year or less. Treasury bills are usually sold in denominations of $1,000. However, some can reach
|
||||
a maximum denomination of $5 million in non-competitive bids. These securities are widely regarded as low-risk
|
||||
and secure investments.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
maturity: str
|
||||
Maturity to plot, options: ['4_week', '3_month', '6_month', '1_year']
|
||||
start_date: Optional[str]
|
||||
Start date, formatted YYYY-MM-DD
|
||||
end_date: Optional[str]
|
||||
End date, formatted YYYY-MM-DD
|
||||
export: str
|
||||
Export data to csv or excel file
|
||||
external_axes: Optional[List[plt.Axes]]
|
||||
External axes (1 axis is expected in the list)
|
||||
"""
|
||||
df = econdb_model.get_treasuries(
|
||||
instruments=["secondary"],
|
||||
maturities=[MATURITY_TO_ID[maturity]],
|
||||
frequency="daily",
|
||||
start_date=start_date,
|
||||
end_date=end_date,
|
||||
)
|
||||
|
||||
# This plot has 1 axis
|
||||
if not external_axes:
|
||||
_, ax = plt.subplots(figsize=plot_autoscale(), dpi=PLOT_DPI)
|
||||
elif is_valid_axes_count(external_axes, 1):
|
||||
(ax,) = external_axes
|
||||
else:
|
||||
return
|
||||
|
||||
colors = cycle(theme.get_colors())
|
||||
ax.plot(
|
||||
df.index,
|
||||
df.values,
|
||||
color=next(colors, "#FCED00"),
|
||||
)
|
||||
ax.set_title(
|
||||
f"{maturity.replace('-', ' ')} Treasury Bill Secondary Market Rate, Discount Basis [Percent]"
|
||||
)
|
||||
theme.style_primary_axis(ax)
|
||||
|
||||
if external_axes is None:
|
||||
theme.visualize_output()
|
||||
|
||||
export_data(
|
||||
export,
|
||||
os.path.dirname(os.path.abspath(__file__)),
|
||||
f"tbill, {maturity}",
|
||||
pd.DataFrame(df, columns=[maturity]) / 100,
|
||||
)
|
||||
1542
openbb_terminal/fixedincome/fixedincome_controller.py
Normal file
1542
openbb_terminal/fixedincome/fixedincome_controller.py
Normal file
File diff suppressed because it is too large
Load Diff
1325
openbb_terminal/fixedincome/fred_model.py
Normal file
1325
openbb_terminal/fixedincome/fred_model.py
Normal file
File diff suppressed because it is too large
Load Diff
1836
openbb_terminal/fixedincome/fred_view.py
Normal file
1836
openbb_terminal/fixedincome/fred_view.py
Normal file
File diff suppressed because it is too large
Load Diff
BIN
openbb_terminal/fixedincome/ice_bofa_indices.xlsx
vendored
Normal file
BIN
openbb_terminal/fixedincome/ice_bofa_indices.xlsx
vendored
Normal file
Binary file not shown.
242
openbb_terminal/fixedincome/oecd_model.py
Normal file
242
openbb_terminal/fixedincome/oecd_model.py
Normal file
@@ -0,0 +1,242 @@
|
||||
""" OECD model """
|
||||
__docformat__ = "numpy"
|
||||
|
||||
import logging
|
||||
from datetime import datetime
|
||||
from typing import List, Optional
|
||||
|
||||
import pandas as pd
|
||||
|
||||
from openbb_terminal.decorators import log_start_end
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
COUNTRY_TO_CODE = {
|
||||
"australia": "AUS",
|
||||
"austria": "AUT",
|
||||
"belgium": "BEL",
|
||||
"bulgaria": "BGR",
|
||||
"brazil": "BRA",
|
||||
"canada": "CAN",
|
||||
"switzerland": "CHE",
|
||||
"chile": "CHL",
|
||||
"china": "CHN",
|
||||
"colombia": "COL",
|
||||
"costa_rica": "CRI",
|
||||
"czech_republic": "CZE",
|
||||
"germany": "DEU",
|
||||
"denmark": "DNK",
|
||||
"spain": "ESP",
|
||||
"estonia": "EST",
|
||||
"finland": "FIN",
|
||||
"france": "FRA",
|
||||
"united_kingdom": "GBR",
|
||||
"greece": "GRC",
|
||||
"croatia": "HRV",
|
||||
"hungary": "HUN",
|
||||
"indonesia": "IDN",
|
||||
"india": "IND",
|
||||
"ireland": "IRL",
|
||||
"iceland": "ISL",
|
||||
"israel": "ISR",
|
||||
"italy": "ITA",
|
||||
"japan": "JPN",
|
||||
"korea": "KOR",
|
||||
"lithuania": "LTU",
|
||||
"luxembourg": "LUX",
|
||||
"latvia": "LVA",
|
||||
"mexico": "MEX",
|
||||
"netherlands": "NLD",
|
||||
"norway": "NOR",
|
||||
"new_zealand": "NZL",
|
||||
"poland": "POL",
|
||||
"portugal": "PRT",
|
||||
"romania": "ROU",
|
||||
"russia": "RUS",
|
||||
"slovak_republic": "SVK",
|
||||
"slovenia": "SVN",
|
||||
"sweden": "SWE",
|
||||
"united_states": "USA",
|
||||
"south_africa": "ZAF",
|
||||
}
|
||||
|
||||
|
||||
@log_start_end(log=logger)
|
||||
def get_interest_rate_data(
|
||||
data: str = "short",
|
||||
countries: Optional[List[str]] = None,
|
||||
start_date: str = "",
|
||||
end_date: str = "",
|
||||
) -> pd.DataFrame:
|
||||
"""Gets interest rate data from selected countries.
|
||||
|
||||
Long-term interest rates refer to government bonds maturing in ten years. Rates are mainly determined by the
|
||||
price charged by the lender, the risk from the borrower and the fall in the capital value. Long-term interest
|
||||
rates are generally averages of daily rates, measured as a percentage. These interest rates are implied by the
|
||||
prices at which the government bonds are traded on financial markets, not the interest rates at which the loans
|
||||
were issued. In all cases, they refer to bonds whose capital repayment is guaranteed by governments. Long-term
|
||||
interest rates are one of the determinants of business investment. Low long-term interest rates encourage
|
||||
investment in new equipment and high interest rates discourage it. Investment is, in turn, a major source of
|
||||
economic growth.
|
||||
|
||||
Short-term interest rates are the rates at which short-term borrowings are effected between financial
|
||||
institutions or the rate at which short-term government paper is issued or traded in the market. Short-term
|
||||
interest rates are generally averages of daily rates, measured as a percentage. Short-term interest rates are
|
||||
based on three-month money market rates where available. Typical standardised names are "money market rate" and
|
||||
"treasury bill rate".
|
||||
|
||||
Parameters
|
||||
----------
|
||||
data: str
|
||||
Type of data to getz, options ['short', 'short_forecast', 'long', 'long_forecast']
|
||||
countries: list
|
||||
List of countries to get data for
|
||||
start_date: str
|
||||
Start date of data, in YYYY-MM-DD format
|
||||
end_date: str
|
||||
End date of data, in YYYY-MM-DD format
|
||||
|
||||
Returns
|
||||
-------
|
||||
pd.DataFrame
|
||||
Dataframe with the interest rate data
|
||||
"""
|
||||
if data == "short":
|
||||
if isinstance(start_date, datetime):
|
||||
start_date = start_date.strftime("%Y-%m")
|
||||
elif len(start_date) > 8:
|
||||
start_date = start_date[:8]
|
||||
if isinstance(end_date, datetime):
|
||||
end_date = end_date.strftime("%Y-%m")
|
||||
elif len(end_date) > 8:
|
||||
end_date = end_date[:8]
|
||||
df = pd.read_csv(
|
||||
f"https://stats.oecd.org/sdmx-json/data/DP_LIVE/.LTINT.TOT.PC_PA.M/OECD?contentType=csv&detail=code"
|
||||
f"&separator=comma&csv-lang=en&startPeriod={start_date}&endPeriod={end_date}",
|
||||
index_col=5,
|
||||
)
|
||||
data_name = "3 month"
|
||||
elif data == "short_forecast":
|
||||
if isinstance(start_date, datetime):
|
||||
month = start_date.month
|
||||
start_date = start_date.strftime("%Y") + "-Q" + str((month - 1) // 3 + 1)
|
||||
elif len(start_date) > 7:
|
||||
month = int(start_date[5:7])
|
||||
start_date = start_date[:4] + "-Q" + str((month - 1) // 3 + 1)
|
||||
if isinstance(end_date, datetime):
|
||||
month = end_date.month
|
||||
end_date = end_date.strftime("%Y") + "-Q" + str((month - 1) // 3 + 1)
|
||||
elif len(end_date) > 7:
|
||||
month = int(end_date[5:7])
|
||||
end_date = end_date[:4] + "-Q" + str((month - 1) // 3 + 1)
|
||||
df = pd.read_csv(
|
||||
f"https://stats.oecd.org/sdmx-json/data/DP_LIVE/.LTINTFORECAST.TOT.PC_PA.Q/OECD?contentType=csv&detail"
|
||||
f"=code&separator=comma&csv-lang=en&startPeriod={start_date}&endPeriod={end_date}",
|
||||
index_col=5,
|
||||
)
|
||||
data_name = "3 month with forecast"
|
||||
elif data == "long":
|
||||
if isinstance(start_date, datetime):
|
||||
start_date = start_date.strftime("%Y-%m")
|
||||
elif len(start_date) > 8:
|
||||
start_date = start_date[:8]
|
||||
if isinstance(end_date, datetime):
|
||||
end_date = end_date.strftime("%Y-%m")
|
||||
elif len(end_date) > 8:
|
||||
end_date = end_date[:8]
|
||||
df = pd.read_csv(
|
||||
f"https://stats.oecd.org/sdmx-json/data/DP_LIVE/.STINT.TOT.PC_PA.M/OECD?contentType=csv&detail=code"
|
||||
f"&separator=comma&csv-lang=en&startPeriod={start_date}&endPeriod={end_date}",
|
||||
index_col=5,
|
||||
)
|
||||
data_name = "10 year"
|
||||
elif data == "long_forecast":
|
||||
if isinstance(start_date, datetime):
|
||||
month = start_date.month
|
||||
start_date = start_date.strftime("%Y") + "-Q" + str((month - 1) // 3 + 1)
|
||||
elif len(start_date) > 7:
|
||||
month = int(start_date[5:7])
|
||||
start_date = start_date[:4] + "-Q" + str((month - 1) // 3 + 1)
|
||||
if isinstance(end_date, datetime):
|
||||
month = end_date.month
|
||||
end_date = end_date.strftime("%Y") + "-Q" + str((month - 1) // 3 + 1)
|
||||
elif len(end_date) > 7:
|
||||
month = int(end_date[5:7])
|
||||
end_date = end_date[:4] + "-Q" + str((month - 1) // 3 + 1)
|
||||
df = pd.read_csv(
|
||||
f"https://stats.oecd.org/sdmx-json/data/DP_LIVE/.STINTFORECAST.TOT.PC_PA.Q/OECD?contentType=csv&detail"
|
||||
f"=code&separator=comma&csv-lang=en&startPeriod={start_date}&endPeriod={end_date}",
|
||||
index_col=5,
|
||||
)
|
||||
data_name = "10 year with forecast"
|
||||
else:
|
||||
return pd.DataFrame()
|
||||
df = df.iloc[:, [0, 5]]
|
||||
|
||||
result = pd.DataFrame()
|
||||
for country in countries: # type: ignore
|
||||
temp = pd.DataFrame(df[df["LOCATION"] == COUNTRY_TO_CODE[country]]["Value"])
|
||||
temp.columns = [f"{country} ({data_name})"]
|
||||
result = pd.concat([result, temp], axis=1)
|
||||
|
||||
result.index = pd.to_datetime(result.index).date
|
||||
result.sort_index(inplace=True)
|
||||
|
||||
return result
|
||||
|
||||
|
||||
def get_treasury(
|
||||
short_term: Optional[list] = None,
|
||||
long_term: Optional[list] = None,
|
||||
forecast: bool = False,
|
||||
start_date: Optional[str] = None,
|
||||
end_date: Optional[str] = None,
|
||||
) -> pd.DataFrame:
|
||||
"""Gets interest rates data from selected countries (3 month and 10 year)
|
||||
|
||||
Short-term interest rates are the rates at which short-term borrowings are effected between financial
|
||||
institutions or the rate at which short-term government paper is issued or traded in the market. Short-term
|
||||
interest rates are generally averages of daily rates, measured as a percentage. Short-term interest rates are
|
||||
based on three-month money market rates where available. Typical standardised names are "money market rate" and
|
||||
"treasury bill rate".
|
||||
|
||||
Long-term interest rates refer to government bonds maturing in ten years. Rates are mainly determined by the
|
||||
price charged by the lender, the risk from the borrower and the fall in the capital value. Long-term interest
|
||||
rates are generally averages of daily rates, measured as a percentage. These interest rates are implied by the
|
||||
prices at which the government bonds are traded on financial markets, not the interest rates at which the loans
|
||||
were issued. In all cases, they refer to bonds whose capital repayment is guaranteed by governments. Long-term
|
||||
interest rates are one of the determinants of business investment. Low long-term interest rates encourage
|
||||
investment in new equipment and high interest rates discourage it. Investment is, in turn, a major source of
|
||||
economic growth.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
short_term: list
|
||||
Countries you wish to plot the 3-month interest rate for
|
||||
long_term: list
|
||||
Countries you wish to plot the 10-year interest rate for
|
||||
forecast: bool
|
||||
If True, plot forecasts for short term interest rates
|
||||
start_date: str
|
||||
Start date of data, in YYYY-MM-DD format
|
||||
end_date: str
|
||||
End date of data, in YYYY-MM-DD format
|
||||
"""
|
||||
if short_term:
|
||||
df_short = get_interest_rate_data(
|
||||
f"short{'_forecast' if forecast else ''}",
|
||||
short_term,
|
||||
start_date if start_date is not None else "",
|
||||
end_date if end_date is not None else "",
|
||||
)
|
||||
if long_term:
|
||||
df_long = get_interest_rate_data(
|
||||
f"long{'_forecast' if forecast else ''}",
|
||||
long_term,
|
||||
start_date if start_date is not None else "",
|
||||
end_date if end_date is not None else "",
|
||||
)
|
||||
|
||||
df = pd.concat([df_short, df_long], axis=1)
|
||||
return df
|
||||
118
openbb_terminal/fixedincome/oecd_view.py
Normal file
118
openbb_terminal/fixedincome/oecd_view.py
Normal file
@@ -0,0 +1,118 @@
|
||||
""" OECD view """
|
||||
__docformat__ = "numpy"
|
||||
|
||||
import logging
|
||||
import os
|
||||
from typing import List, Optional
|
||||
|
||||
from matplotlib import pyplot as plt
|
||||
|
||||
from openbb_terminal.config_plot import PLOT_DPI
|
||||
from openbb_terminal.config_terminal import theme
|
||||
from openbb_terminal.decorators import log_start_end
|
||||
from openbb_terminal.fixedincome import oecd_model
|
||||
from openbb_terminal.helper_funcs import (
|
||||
export_data,
|
||||
is_valid_axes_count,
|
||||
plot_autoscale,
|
||||
print_rich_table,
|
||||
)
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# pylint: disable=too-many-arguments, too-many-function-args
|
||||
|
||||
|
||||
@log_start_end(log=logger)
|
||||
def plot_treasuries(
|
||||
short_term: Optional[list] = None,
|
||||
long_term: Optional[list] = None,
|
||||
forecast: bool = False,
|
||||
start_date: Optional[str] = None,
|
||||
end_date: Optional[str] = None,
|
||||
raw: bool = False,
|
||||
export: str = "",
|
||||
sheet_name: str = "",
|
||||
external_axes: Optional[List[plt.Axes]] = None,
|
||||
):
|
||||
"""Gets interest rates data from selected countries (3 month and 10 year)
|
||||
|
||||
Short-term interest rates are the rates at which short-term borrowings are effected between financial
|
||||
institutions or the rate at which short-term government paper is issued or traded in the market. Short-term
|
||||
interest rates are generally averages of daily rates, measured as a percentage. Short-term interest rates are
|
||||
based on three-month money market rates where available. Typical standardised names are "money market rate" and
|
||||
"treasury bill rate".
|
||||
|
||||
Long-term interest rates refer to government bonds maturing in ten years. Rates are mainly determined by the
|
||||
price charged by the lender, the risk from the borrower and the fall in the capital value. Long-term interest
|
||||
rates are generally averages of daily rates, measured as a percentage. These interest rates are implied by the
|
||||
prices at which the government bonds are traded on financial markets, not the interest rates at which the loans
|
||||
were issued. In all cases, they refer to bonds whose capital repayment is guaranteed by governments. Long-term
|
||||
interest rates are one of the determinants of business investment. Low long-term interest rates encourage
|
||||
investment in new equipment and high interest rates discourage it. Investment is, in turn, a major source of
|
||||
economic growth.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
short_term: list
|
||||
Countries you wish to plot the 3-month interest rate for
|
||||
long_term: list
|
||||
Countries you wish to plot the 10-year interest rate for
|
||||
forecast: bool
|
||||
If True, plot forecasts for short term interest rates
|
||||
start_date: str
|
||||
Start date of data, in YYYY-MM-DD format
|
||||
end_date: str
|
||||
End date of data, in YYYY-MM-DD format
|
||||
raw: bool
|
||||
If True, print raw data
|
||||
export: str
|
||||
Export data to csv or excel file
|
||||
external_axes: Optional[List[plt.Axes]]
|
||||
External axes (1 axis is expected in the list)
|
||||
"""
|
||||
df = oecd_model.get_treasury(short_term, long_term, forecast, start_date, end_date)
|
||||
|
||||
# This plot has 1 axis
|
||||
if not external_axes:
|
||||
_, ax = plt.subplots(figsize=plot_autoscale(), dpi=PLOT_DPI)
|
||||
elif is_valid_axes_count(external_axes, 1):
|
||||
(ax,) = external_axes
|
||||
else:
|
||||
return
|
||||
|
||||
ax.plot(df.index, df.values, linewidth=1)
|
||||
if short_term and long_term:
|
||||
title = f"Short and Long Term Interest Rates {' with forecasts' if forecast else ''}"
|
||||
elif short_term:
|
||||
title = f"Short Term Interest Rates {' with forecasts' if forecast else ''}"
|
||||
elif long_term:
|
||||
title = f"Long Term Interest Rates {' with forecasts' if forecast else ''}"
|
||||
ax.set_title(title)
|
||||
|
||||
style_countries = [country.replace("_", " ").title() for country in df.columns]
|
||||
ax.legend(style_countries)
|
||||
|
||||
ax.set_ylabel("Yield (%)")
|
||||
|
||||
theme.style_primary_axis(ax)
|
||||
|
||||
if external_axes is None:
|
||||
theme.visualize_output()
|
||||
|
||||
if raw:
|
||||
print_rich_table(
|
||||
df.iloc[-10:],
|
||||
headers=list(df.columns),
|
||||
show_index=True,
|
||||
title=title,
|
||||
floatfmt=".3f",
|
||||
)
|
||||
|
||||
export_data(
|
||||
export,
|
||||
os.path.dirname(os.path.abspath(__file__)),
|
||||
"treasury",
|
||||
df / 100,
|
||||
sheet_name,
|
||||
)
|
||||
77
openbb_terminal/fixedincome/yfinance_model.py
Normal file
77
openbb_terminal/fixedincome/yfinance_model.py
Normal file
@@ -0,0 +1,77 @@
|
||||
""" Yahoo Finance Model """
|
||||
__docformat__ = "numpy"
|
||||
|
||||
import logging
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
|
||||
import pandas as pd
|
||||
import yfinance as yf
|
||||
|
||||
from openbb_terminal.decorators import log_start_end
|
||||
from openbb_terminal.rich_config import console
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@log_start_end(log=logger)
|
||||
def get_series(
|
||||
series_id: str,
|
||||
interval: str = "1d",
|
||||
start_date: Optional[str] = None,
|
||||
end_date: Optional[str] = None,
|
||||
column: str = "Adj Close",
|
||||
) -> pd.Series:
|
||||
"""Obtain data on any index [Source: Yahoo Finance]
|
||||
|
||||
Parameters
|
||||
----------
|
||||
series_id: str
|
||||
The series you wish to collect data for.
|
||||
start_date : Optional[str]
|
||||
the selected country
|
||||
end_date : Optional[str]
|
||||
The currency you wish to convert the data to.
|
||||
interval : str
|
||||
Valid intervals: 1m, 2m, 5m, 15m, 30m, 60m, 90m, 1h, 1d, 5d, 1wk, 1mo or 3mo
|
||||
Intraday data cannot extend last 60 days
|
||||
column : str
|
||||
The column you wish to select, by default this is Adjusted Close.
|
||||
|
||||
Returns
|
||||
-------
|
||||
pd.Series
|
||||
A series with the requested index
|
||||
"""
|
||||
try:
|
||||
if start_date:
|
||||
datetime.strptime(str(start_date), "%Y-%m-%d")
|
||||
if end_date:
|
||||
datetime.strptime(str(end_date), "%Y-%m-%d")
|
||||
except ValueError:
|
||||
console.print("[red]Please format date as YYYY-MM-DD[/red]\n")
|
||||
return pd.Series(dtype="object")
|
||||
|
||||
index_data = yf.download(
|
||||
series_id,
|
||||
start=start_date,
|
||||
end=end_date,
|
||||
interval=interval,
|
||||
progress=False,
|
||||
show_errors=False,
|
||||
)
|
||||
|
||||
if column not in index_data.columns:
|
||||
console.print(
|
||||
f"The chosen column is not available for {series_id}. Please choose "
|
||||
f"between: {', '.join(index_data.columns)}\n"
|
||||
)
|
||||
return pd.Series(dtype="float64")
|
||||
if index_data.empty or len(index_data) < 2:
|
||||
console.print(
|
||||
f"The chosen index {series_id}, returns no data. Please check if "
|
||||
f"there is any data available.\n"
|
||||
)
|
||||
return pd.Series(dtype="float64")
|
||||
|
||||
return index_data[column]
|
||||
84
openbb_terminal/fixedincome/yfinance_view.py
Normal file
84
openbb_terminal/fixedincome/yfinance_view.py
Normal file
@@ -0,0 +1,84 @@
|
||||
""" Yahoo Finance view """
|
||||
__docformat__ = "numpy"
|
||||
|
||||
import logging
|
||||
import os
|
||||
from itertools import cycle
|
||||
from typing import List, Optional
|
||||
|
||||
import pandas as pd
|
||||
from matplotlib import pyplot as plt
|
||||
|
||||
from openbb_terminal.config_plot import PLOT_DPI
|
||||
from openbb_terminal.config_terminal import theme
|
||||
from openbb_terminal.decorators import check_api_key, log_start_end
|
||||
from openbb_terminal.fixedincome import yfinance_model
|
||||
from openbb_terminal.helper_funcs import (
|
||||
export_data,
|
||||
is_valid_axes_count,
|
||||
plot_autoscale,
|
||||
)
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
TY_TO_ID = {
|
||||
"5_year": "^FVX",
|
||||
"10_year": "^TNX",
|
||||
"30_year": "^TYX",
|
||||
}
|
||||
|
||||
|
||||
@log_start_end(log=logger)
|
||||
@check_api_key(["API_FRED_KEY"])
|
||||
def plot_ty(
|
||||
maturity: str = "3_month",
|
||||
start_date: Optional[str] = None,
|
||||
end_date: Optional[str] = None,
|
||||
export: str = "",
|
||||
external_axes: Optional[List[plt.Axes]] = None,
|
||||
):
|
||||
"""Plot Treasury Yield.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
maturity: str
|
||||
Maturity to plot, options: ['5_year', '10_year', '30_year']
|
||||
start_date: Optional[str]
|
||||
Start date, formatted YYYY-MM-DD
|
||||
end_date: Optional[str]
|
||||
End date, formatted YYYY-MM-DD
|
||||
export: str
|
||||
Export data to csv or excel file
|
||||
external_axes: Optional[List[plt.Axes]]
|
||||
External axes (1 axis is expected in the list)
|
||||
"""
|
||||
df = yfinance_model.get_series(
|
||||
TY_TO_ID[maturity], start_date=start_date, end_date=end_date
|
||||
)
|
||||
|
||||
# This plot has 1 axis
|
||||
if not external_axes:
|
||||
_, ax = plt.subplots(figsize=plot_autoscale(), dpi=PLOT_DPI)
|
||||
elif is_valid_axes_count(external_axes, 1):
|
||||
(ax,) = external_axes
|
||||
else:
|
||||
return
|
||||
|
||||
colors = cycle(theme.get_colors())
|
||||
ax.plot(
|
||||
df.index,
|
||||
df.values,
|
||||
color=next(colors, "#FCED00"),
|
||||
)
|
||||
ax.set_title(f"{maturity.replace('-', ' ')} Treasury Yield [Percent]")
|
||||
theme.style_primary_axis(ax)
|
||||
|
||||
if external_axes is None:
|
||||
theme.visualize_output()
|
||||
|
||||
export_data(
|
||||
export,
|
||||
os.path.dirname(os.path.abspath(__file__)),
|
||||
maturity,
|
||||
pd.DataFrame(df, columns=[maturity]) / 100,
|
||||
)
|
||||
BIN
openbb_terminal/fixedincome/~$ice_bofa_indices.xlsx
vendored
Normal file
BIN
openbb_terminal/fixedincome/~$ice_bofa_indices.xlsx
vendored
Normal file
Binary file not shown.
118
openbb_terminal/futures/databento_view.py
Normal file
118
openbb_terminal/futures/databento_view.py
Normal file
@@ -0,0 +1,118 @@
|
||||
"""DataBento view"""
|
||||
__docformat__ = "numpy"
|
||||
|
||||
import os
|
||||
from typing import List, Optional
|
||||
|
||||
import mplfinance as mpf
|
||||
from matplotlib import pyplot as plt
|
||||
|
||||
from openbb_terminal.config_terminal import theme
|
||||
from openbb_terminal.helper_funcs import (
|
||||
export_data,
|
||||
is_valid_axes_count,
|
||||
lambda_long_number_format_y_axis,
|
||||
plot_autoscale,
|
||||
print_rich_table,
|
||||
)
|
||||
from openbb_terminal.rich_config import console
|
||||
from openbb_terminal.stocks import databento_model
|
||||
|
||||
|
||||
def display_historical(
|
||||
symbol: str,
|
||||
start_date: Optional[str] = None,
|
||||
end_date: Optional[str] = None,
|
||||
raw: bool = False,
|
||||
export: str = "",
|
||||
sheet_name: Optional[str] = None,
|
||||
external_axes: Optional[List[plt.Axes]] = None,
|
||||
):
|
||||
"""Display historical futures [Source: DataBento]
|
||||
|
||||
Parameters
|
||||
----------
|
||||
symbol: List[str]
|
||||
Symbol to display
|
||||
start_date: Optional[str]
|
||||
Start date of the historical data with format YYYY-MM-DD
|
||||
end_date: Optional[str]
|
||||
End date of the historical data with format YYYY-MM-DD
|
||||
raw: bool
|
||||
Display futures timeseries in raw format
|
||||
sheet_name: str
|
||||
Optionally specify the name of the sheet the data is exported to.
|
||||
export: str
|
||||
Type of format to export data
|
||||
external_axes : Optional[List[plt.Axes]], optional
|
||||
External axes (1 axis is expected in the list), by default None
|
||||
"""
|
||||
data = databento_model.get_historical_futures(
|
||||
symbol.upper(), start_date=start_date, end_date=end_date
|
||||
)
|
||||
if data.empty:
|
||||
console.print(f"No data found for {symbol}.")
|
||||
return
|
||||
# We check if there's Volume data to avoid errors and empty subplots
|
||||
has_volume = False
|
||||
if "Volume" in data.columns:
|
||||
has_volume = bool(data["Volume"].sum() > 0)
|
||||
|
||||
candle_chart_kwargs = {
|
||||
"type": "candle",
|
||||
"style": theme.mpf_style,
|
||||
"volume": has_volume,
|
||||
"addplot": [],
|
||||
"xrotation": theme.xticks_rotation,
|
||||
"scale_padding": {"left": 0.3, "right": 1, "top": 0.8, "bottom": 0.8},
|
||||
"update_width_config": {
|
||||
"candle_linewidth": 0.6,
|
||||
"candle_width": 0.8,
|
||||
"volume_linewidth": 0.8,
|
||||
"volume_width": 0.8,
|
||||
},
|
||||
"warn_too_much_data": 10000,
|
||||
}
|
||||
if external_axes is None:
|
||||
candle_chart_kwargs["returnfig"] = True
|
||||
candle_chart_kwargs["figratio"] = (10, 7)
|
||||
candle_chart_kwargs["figscale"] = 1.10
|
||||
candle_chart_kwargs["figsize"] = plot_autoscale()
|
||||
candle_chart_kwargs["warn_too_much_data"] = 100_000
|
||||
|
||||
fig, ax = mpf.plot(data, **candle_chart_kwargs)
|
||||
|
||||
if has_volume:
|
||||
lambda_long_number_format_y_axis(data, "Volume", ax)
|
||||
|
||||
fig.suptitle(
|
||||
f"{symbol}",
|
||||
x=0.055,
|
||||
y=0.965,
|
||||
horizontalalignment="left",
|
||||
)
|
||||
theme.visualize_output(force_tight_layout=False)
|
||||
elif (has_volume and is_valid_axes_count(external_axes, 2)) or (
|
||||
not has_volume and is_valid_axes_count(external_axes, 1)
|
||||
):
|
||||
candle_chart_kwargs["ax"] = external_axes[0]
|
||||
if has_volume:
|
||||
candle_chart_kwargs["volume"] = external_axes[1]
|
||||
mpf.plot(data, **candle_chart_kwargs)
|
||||
|
||||
if raw:
|
||||
print_rich_table(
|
||||
data,
|
||||
headers=list(data.columns),
|
||||
show_index=True,
|
||||
title="Futures timeseries",
|
||||
)
|
||||
console.print()
|
||||
|
||||
export_data(
|
||||
export,
|
||||
os.path.dirname(os.path.abspath(__file__)),
|
||||
"historical_db",
|
||||
data,
|
||||
sheet_name,
|
||||
)
|
||||
@@ -11,7 +11,7 @@ from typing import List, Optional
|
||||
from openbb_terminal import feature_flags as obbff
|
||||
from openbb_terminal.custom_prompt_toolkit import NestedCompleter
|
||||
from openbb_terminal.decorators import log_start_end
|
||||
from openbb_terminal.futures import yfinance_model, yfinance_view
|
||||
from openbb_terminal.futures import databento_view, yfinance_model, yfinance_view
|
||||
from openbb_terminal.helper_funcs import (
|
||||
EXPORT_BOTH_RAW_DATA_AND_FIGURES,
|
||||
EXPORT_ONLY_RAW_DATA_ALLOWED,
|
||||
@@ -165,8 +165,8 @@ class FuturesController(BaseController):
|
||||
"--start",
|
||||
dest="start",
|
||||
type=valid_date,
|
||||
help="Initial date. Default: 3 years ago",
|
||||
default=(datetime.now() - timedelta(days=3 * 365)),
|
||||
help="Initial date. Default: 2 years ago",
|
||||
default=(datetime.now() - timedelta(days=2 * 365)),
|
||||
)
|
||||
parser.add_argument(
|
||||
"-e",
|
||||
@@ -193,17 +193,29 @@ class FuturesController(BaseController):
|
||||
raw=True,
|
||||
)
|
||||
if ns_parser:
|
||||
yfinance_view.display_historical(
|
||||
symbols=ns_parser.ticker.upper().split(","),
|
||||
expiry=ns_parser.expiry,
|
||||
start_date=ns_parser.start.strftime("%Y-%m-%d"),
|
||||
end_date=ns_parser.end.strftime("%Y-%m-%d"),
|
||||
raw=ns_parser.raw,
|
||||
export=ns_parser.export,
|
||||
sheet_name=" ".join(ns_parser.sheet_name)
|
||||
if ns_parser.sheet_name
|
||||
else None,
|
||||
)
|
||||
if ns_parser.source == "YahooFinance":
|
||||
yfinance_view.display_historical(
|
||||
symbols=ns_parser.ticker.upper().split(","),
|
||||
expiry=ns_parser.expiry,
|
||||
start_date=ns_parser.start.strftime("%Y-%m-%d"),
|
||||
end_date=ns_parser.end.strftime("%Y-%m-%d"),
|
||||
raw=ns_parser.raw,
|
||||
export=ns_parser.export,
|
||||
sheet_name=" ".join(ns_parser.sheet_name)
|
||||
if ns_parser.sheet_name
|
||||
else None,
|
||||
)
|
||||
if ns_parser.source == "DataBento":
|
||||
databento_view.display_historical(
|
||||
symbol=ns_parser.ticker,
|
||||
start_date=ns_parser.start.strftime("%Y-%m-%d"),
|
||||
end_date=ns_parser.end.strftime("%Y-%m-%d"),
|
||||
raw=ns_parser.raw,
|
||||
export=ns_parser.export,
|
||||
sheet_name=" ".join(ns_parser.sheet_name)
|
||||
if ns_parser.sheet_name
|
||||
else None,
|
||||
)
|
||||
|
||||
@log_start_end(log=logger)
|
||||
def call_curve(self, other_args: List[str]):
|
||||
|
||||
31
openbb_terminal/futures/sdk_helper.py
Normal file
31
openbb_terminal/futures/sdk_helper.py
Normal file
@@ -0,0 +1,31 @@
|
||||
"""SDK Helper Functions"""
|
||||
__docformat__ = "numpy"
|
||||
|
||||
from typing import List, Optional, Union
|
||||
|
||||
import pandas as pd
|
||||
|
||||
from openbb_terminal.futures import yfinance_model
|
||||
from openbb_terminal.stocks import databento_model
|
||||
|
||||
|
||||
def get_historical(
|
||||
symbols: Union[str, List[str]],
|
||||
start_date: str,
|
||||
end_date: str,
|
||||
source: Optional[str] = "YahooFinance",
|
||||
expiry: Optional[str] = "",
|
||||
) -> pd.DataFrame:
|
||||
"""Get historical futures data"""
|
||||
if source == "YahooFinance":
|
||||
if isinstance(symbols, str):
|
||||
symbols = [symbols]
|
||||
return yfinance_model.get_historical_futures(
|
||||
symbols, expiry, start_date, end_date
|
||||
)
|
||||
if source == "DataBento":
|
||||
if isinstance(symbols, list):
|
||||
print("DataBento only supports one symbol at a time. Using first symbol.")
|
||||
symbols = symbols[0]
|
||||
return databento_model.get_historical_futures(symbols, start_date, end_date)
|
||||
return pd.DataFrame()
|
||||
@@ -99,7 +99,7 @@ def get_historical_futures(
|
||||
Returns
|
||||
-------
|
||||
pd.DataFrame
|
||||
Dictionary with sector weightings allocation
|
||||
Historical futures data
|
||||
"""
|
||||
|
||||
if start_date is None:
|
||||
|
||||
@@ -44,10 +44,7 @@ from openbb_terminal import (
|
||||
config_terminal as cfg,
|
||||
feature_flags as obbff,
|
||||
)
|
||||
from openbb_terminal.core.config.paths import (
|
||||
HOME_DIRECTORY,
|
||||
USER_EXPORTS_DIRECTORY,
|
||||
)
|
||||
from openbb_terminal.core.config.paths import HOME_DIRECTORY, USER_EXPORTS_DIRECTORY
|
||||
from openbb_terminal.rich_config import console
|
||||
|
||||
try:
|
||||
@@ -1967,7 +1964,9 @@ def check_start_less_than_end(start_date: str, end_date: str) -> bool:
|
||||
|
||||
|
||||
# Write an abstract helper to make requests from a url with potential headers and params
|
||||
def request(url: str, method="GET", **kwargs) -> requests.Response:
|
||||
def request(
|
||||
url: str, method: str = "GET", timeout: int = 0, **kwargs
|
||||
) -> requests.Response:
|
||||
"""Abstract helper to make requests from a url with potential headers and params.
|
||||
|
||||
Parameters
|
||||
@@ -1990,15 +1989,15 @@ def request(url: str, method="GET", **kwargs) -> requests.Response:
|
||||
# We want to add a user agent to the request, so check if there are any headers
|
||||
# If there are headers, check if there is a user agent, if not add one.
|
||||
# Some requests seem to work only with a specific user agent, so we want to be able to override it.
|
||||
headers = kwargs.pop("headers") if "headers" in kwargs else {}
|
||||
headers = kwargs.pop("headers", {})
|
||||
timeout = timeout or cfg.REQUEST_TIMEOUT
|
||||
|
||||
if "User-Agent" not in headers:
|
||||
headers["User-Agent"] = get_user_agent()
|
||||
if method.upper() == "GET":
|
||||
return requests.get(url, headers=headers, timeout=cfg.REQUEST_TIMEOUT, **kwargs)
|
||||
return requests.get(url, headers=headers, timeout=timeout, **kwargs)
|
||||
if method.upper() == "POST":
|
||||
return requests.post(
|
||||
url, headers=headers, timeout=cfg.REQUEST_TIMEOUT, **kwargs
|
||||
)
|
||||
return requests.post(url, headers=headers, timeout=timeout, **kwargs)
|
||||
raise ValueError("Method must be GET or POST")
|
||||
|
||||
|
||||
|
||||
@@ -1140,6 +1140,34 @@ class KeysController(BaseController): # pylint: disable=too-many-public-methods
|
||||
key=ns_parser.key, persist=True, show_output=True
|
||||
)
|
||||
|
||||
@log_start_end(log=logger)
|
||||
def call_databento(self, other_args: List[str]):
|
||||
"""Process databento command"""
|
||||
parser = argparse.ArgumentParser(
|
||||
add_help=False,
|
||||
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
||||
prog="databento",
|
||||
description="Set DataBento API key.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"-k",
|
||||
"--key",
|
||||
type=str,
|
||||
dest="key",
|
||||
help="key",
|
||||
)
|
||||
if not other_args:
|
||||
console.print("For your API Key, https://databento.com")
|
||||
return
|
||||
|
||||
if other_args and "-" not in other_args[0][0]:
|
||||
other_args.insert(0, "-k")
|
||||
ns_parser = self.parse_simple_args(parser, other_args)
|
||||
if ns_parser:
|
||||
self.status_dict["databento"] = keys_model.set_databento_key(
|
||||
key=ns_parser.key, persist=True, show_output=True
|
||||
)
|
||||
|
||||
@log_start_end(log=logger)
|
||||
def call_openbb(self, other_args: List[str]):
|
||||
"""Process openbb command"""
|
||||
|
||||
@@ -58,6 +58,7 @@ API_DICT: Dict = {
|
||||
"quandl": "QUANDL",
|
||||
"polygon": "POLYGON",
|
||||
"intrinio": "INTRINIO",
|
||||
"databento": "DATABENTO",
|
||||
"fred": "FRED",
|
||||
"news": "NEWSAPI",
|
||||
"tradier": "TRADIER",
|
||||
@@ -2592,7 +2593,7 @@ def set_intrinio_key(key: str, persist: bool = False, show_output: bool = False)
|
||||
|
||||
|
||||
def check_intrinio_key(show_output: bool = False) -> str:
|
||||
"""Check Polygon key
|
||||
"""Check Intrinio key
|
||||
|
||||
Parameters
|
||||
----------
|
||||
@@ -2626,3 +2627,72 @@ def check_intrinio_key(show_output: bool = False) -> str:
|
||||
console.print(status.colorize())
|
||||
|
||||
return str(status)
|
||||
|
||||
|
||||
def set_databento_key(
|
||||
key: str, persist: bool = False, show_output: bool = False
|
||||
) -> str:
|
||||
"""Set DataBento key
|
||||
|
||||
Parameters
|
||||
----------
|
||||
key: str
|
||||
API key
|
||||
persist: bool, optional
|
||||
If False, api key change will be contained to where it was changed. For example, a Jupyter notebook session.
|
||||
If True, api key change will be global, i.e. it will affect terminal environment variables.
|
||||
By default, False.
|
||||
show_output: bool, optional
|
||||
Display status string or not. By default, False.
|
||||
|
||||
Returns
|
||||
-------
|
||||
str
|
||||
Status of key set
|
||||
|
||||
Examples
|
||||
--------
|
||||
>>> from openbb_terminal.sdk import openbb
|
||||
>>> openbb.keys.databento(key="example_key")
|
||||
"""
|
||||
|
||||
set_key("OPENBB_API_DATABENTO_KEY", key, persist)
|
||||
return check_databento_key(show_output)
|
||||
|
||||
|
||||
def check_databento_key(show_output: bool = False) -> str:
|
||||
"""Check DataBento key
|
||||
|
||||
Parameters
|
||||
----------
|
||||
show_output: bool
|
||||
Display status string or not. By default, False.
|
||||
|
||||
Returns
|
||||
-------
|
||||
str
|
||||
Status of key set
|
||||
"""
|
||||
|
||||
if cfg.API_DATABENTO_KEY == "REPLACE_ME":
|
||||
logger.info("DataBento key not defined")
|
||||
status = KeyStatus.NOT_DEFINED
|
||||
else:
|
||||
r = request(
|
||||
"https://hist.databento.com/v0/metadata.list_datasets",
|
||||
auth=(f"{cfg.API_DATABENTO_KEY}", ""),
|
||||
)
|
||||
if r.status_code in [403, 401, 429]:
|
||||
logger.warning("DataBento key defined, test failed")
|
||||
status = KeyStatus.DEFINED_TEST_FAILED
|
||||
elif r.status_code == 200:
|
||||
logger.info("DataBento key defined, test passed")
|
||||
status = KeyStatus.DEFINED_TEST_PASSED
|
||||
else:
|
||||
logger.warning("DataBento key defined, test inconclusive")
|
||||
status = KeyStatus.DEFINED_TEST_INCONCLUSIVE
|
||||
|
||||
if show_output:
|
||||
console.print(status.colorize())
|
||||
|
||||
return str(status)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"candle": [],
|
||||
"codes": ["Polygon"],
|
||||
"news": ["Feedparser", "NewsApi"],
|
||||
"load": ["YahooFinance", "AlphaVantage", "Polygon", "EODHD", "Intrinio"],
|
||||
"load": ["YahooFinance", "AlphaVantage", "Polygon", "EODHD", "Intrinio", "DataBento"],
|
||||
"th": {
|
||||
"symbol": ["FinanceDatabase"],
|
||||
"open": ["Bursa"],
|
||||
@@ -457,7 +457,6 @@
|
||||
"futures": ["WallStreetJournal", "Finviz"],
|
||||
"map": ["Finviz"],
|
||||
"bigmac": ["Nasdaq"],
|
||||
"ycrv": ["FRED"],
|
||||
"events": ["Nasdaq"],
|
||||
"edebt": ["Wikipedia"],
|
||||
"rtps": ["AlphaVantage"],
|
||||
@@ -489,9 +488,33 @@
|
||||
},
|
||||
"futures": {
|
||||
"search": ["YahooFinance"],
|
||||
"historical": ["YahooFinance"],
|
||||
"historical": ["YahooFinance", "DataBento"],
|
||||
"curve": ["YahooFinance"]
|
||||
},
|
||||
"fixedincome": {
|
||||
"estr": ["FRED", "ECB"],
|
||||
"sofr": ["FRED"],
|
||||
"sonia": ["FRED"],
|
||||
"ameribor": ["FRED"],
|
||||
"fed": ["FRED"],
|
||||
"iorb": ["FRED"],
|
||||
"projection": ["FRED"],
|
||||
"dwpcr": ["FRED"],
|
||||
"ecb": ["FRED"],
|
||||
"treasury": ["OECD"],
|
||||
"usrates": ["FRED"],
|
||||
"ycrv": ["FRED"],
|
||||
"ecbycrv": ["ECB"],
|
||||
"icebofa": ["FRED"],
|
||||
"moody": ["FRED"],
|
||||
"spot": ["FRED"],
|
||||
"cp": ["FRED"],
|
||||
"hqm": ["FRED"],
|
||||
"icespread": ["FRED"],
|
||||
"tmc": ["FRED"],
|
||||
"ffrmc": ["FRED"],
|
||||
"tbffr": ["FRED"]
|
||||
},
|
||||
"portfolio": {
|
||||
"po": {
|
||||
"maxsharpe": ["YahooFinance"],
|
||||
|
||||
28
openbb_terminal/miscellaneous/i18n/en.yml
vendored
28
openbb_terminal/miscellaneous/i18n/en.yml
vendored
@@ -784,6 +784,34 @@ en:
|
||||
economy/qa/raw: print raw data
|
||||
economy/qa/decompose: decomposition in cyclic-trend, season, and residuals of prices
|
||||
economy/qa/cusum: detects abrupt changes using cumulative sum algorithm of prices
|
||||
fixedincome/_reference_rates_: Reference rates
|
||||
fixedincome/estr: euro short-term rate (estr)
|
||||
fixedincome/sofr: secured overnight financing rate (sofr)
|
||||
fixedincome/sonia: sterling overnight index average (sonia)
|
||||
fixedincome/ameribor: american interbank offered rate (ameribor)
|
||||
fixedincome/_central_bank_rates_: Central bank rates
|
||||
fixedincome/fed: effective federal funds rate
|
||||
fixedincome/obfr: overnight bank funding rate (obfr)
|
||||
fixedincome/iorb: interest rate on reserve balances
|
||||
fixedincome/projection: the Federal Reserve's projection of the federal funds rate.
|
||||
fixedincome/dwpcr: discount window primary credit rate
|
||||
fixedincome/ecb: key ECB interest rates
|
||||
fixedincome/_government_bonds_: Government Bonds
|
||||
fixedincome/treasury: plot countries (including forecast) treasury rates
|
||||
fixedincome/usrates: plot U.S. secondary market, constant maturity or inflation protected treasuries
|
||||
fixedincome/ycrv: plot the yield curve based on constant maturity U.S. treasuries
|
||||
fixedincome/ecbycrv: plot the yield curve based on Euro Area treasuries
|
||||
fixedincome/_corporate_bonds_: Corporate Bonds
|
||||
fixedincome/icebofa: display ICE BofA Corporate Indices
|
||||
fixedincome/moody: display Moody's AAA and BAA Corporate indices
|
||||
fixedincome/cp: display short-term, promissory notes issued by corporations
|
||||
fixedincome/spot: display spot rates ranging from 1 year to a 100 years
|
||||
fixedincome/hqm: display the High Quality Market (HQM) corporate yield curve
|
||||
fixedincome/_spreads_: Spreads
|
||||
fixedincome/icespread: display spread between ICE BofA Corporate Indices and spot treasury curve
|
||||
fixedincome/tmc: 10-year treasury constant maturity minus selected treasury constant maturity
|
||||
fixedincome/ffrmc: selected treasury constant maturity minus federal funds rate
|
||||
fixedincome/tbffr: selected treasury bill minus federal funds rate
|
||||
forex/_ticker: Ticker
|
||||
forex/_from: From
|
||||
forex/_to: To
|
||||
|
||||
23
openbb_terminal/miscellaneous/integration_tests_scripts/fixedincome/test_fixedincome.openbb
vendored
Normal file
23
openbb_terminal/miscellaneous/integration_tests_scripts/fixedincome/test_fixedincome.openbb
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
fixedincome
|
||||
estr -s 2022-01-01 -e 2023-01-01
|
||||
sofr -s 2022-01-01 -e 2023-01-01
|
||||
sonia -s 2022-01-01 -e 2023-01-01
|
||||
ameribor -s 2022-01-01 -e 2023-01-01
|
||||
fed -s 2022-01-01 -e 2023-01-01
|
||||
iorb -s 2022-01-01 -e 2023-01-01
|
||||
projection
|
||||
dwpcr -s 2022-01-01 -e 2023-01-01
|
||||
ecb -s 2022-01-01 -e 2023-01-01
|
||||
treasury --short australia --long united_kingdom,united_states -s 2022-01-01 -e 2023-01-01
|
||||
usrates -s 2022-01-01 -e 2023-01-01
|
||||
ycrv -d 2023-02-17
|
||||
ecbycrv -d 2023-02-17
|
||||
icebofa -s 2022-01-01 -e 2023-01-01
|
||||
moody -s 2022-01-01 -e 2023-01-01
|
||||
cp -s 2022-01-01 -e 2023-01-01
|
||||
spot -s 2022-01-01 -e 2023-01-01
|
||||
hqm -d 2023-02-17
|
||||
icespread -s 2022-01-01 -e 2023-01-01
|
||||
tmc -s 2022-01-01 -e 2023-01-01
|
||||
ffrmc -s 2022-01-01 -e 2023-01-01
|
||||
tbffr -s 2022-01-01 -e 2023-01-01
|
||||
@@ -235,6 +235,14 @@ forex.oanda.order,openbb_terminal.forex.oanda.oanda_model.create_order_request,o
|
||||
forex.oanda.orderbook,openbb_terminal.forex.oanda.oanda_model.orderbook_plot_data_request,openbb_terminal.forex.oanda.oanda_view.get_order_book
|
||||
forex.oanda.pending,openbb_terminal.forex.oanda.oanda_model.pending_orders_request,openbb_terminal.forex.oanda.oanda_view.get_pending_orders
|
||||
forex.oanda.positionbook,openbb_terminal.forex.oanda.oanda_model.positionbook_plot_data_request,openbb_terminal.forex.oanda.oanda_view.get_position_book
|
||||
fixedincome.estr,openbb_terminal.fixedincome.ecb_model.get_series_data,openbb_terminal.fixedincome.ecb_view.plot_estr
|
||||
fixedincome.sonia,openbb_terminal.fixedincome.fred_model.get_series_data,openbb_terminal.fixedincome.fred_view.plot_sonia
|
||||
fixedincome.ameribor,openbb_terminal.fixedincome.fred_model.get_series_data,openbb_terminal.fixedincome.fred_view.plot_ameribor
|
||||
fixedincome.ffer,openbb_terminal.fixedincome.fred_model.get_series_data,openbb_terminal.fixedincome.fred_view.plot_ffer
|
||||
fixedincome.iorb,openbb_terminal.fixedincome.fred_model.get_series_data,openbb_terminal.fixedincome.fred_view.plot_iobr
|
||||
fixedincome.projection,openbb_terminal.fixedincome.fred_model.get_series_data,openbb_terminal.fixedincome.fred_view.plot_projection
|
||||
fixedincome.oldprojection,openbb_terminal.fixedincome.fred_model.get_series_data,openbb_terminal.fixedincome.fred_view.plot_oldprojection
|
||||
fixedincome.ycrv,openbb_terminal.fixedincome.fred_model.get_yield_curve,openbb_terminal.economy.fixedincome.display_yield_curve
|
||||
forex.oanda.price,openbb_terminal.forex.oanda.oanda_model.fx_price_request,openbb_terminal.forex.oanda.oanda_view.get_fx_price
|
||||
forex.oanda.summary,openbb_terminal.forex.oanda.oanda_model.account_summary_request,openbb_terminal.forex.oanda.oanda_view.get_account_summary
|
||||
forex.quote,openbb_terminal.forex.sdk_helpers.quote,
|
||||
|
||||
|
31
openbb_terminal/reports/templates/equity.ipynb
vendored
31
openbb_terminal/reports/templates/equity.ipynb
vendored
@@ -134,10 +134,15 @@
|
||||
"source": [
|
||||
"info = openbb.stocks.fa.info(symbol=symbol).transpose()\n",
|
||||
"\n",
|
||||
"if info[\"Long business summary\"][0] != \"NA\":\n",
|
||||
" overview = info[\"Long business summary\"][0]\n",
|
||||
"long_summary = \"Long business summary\"\n",
|
||||
"long_name = \"Long name\"\n",
|
||||
"\n",
|
||||
"if long_summary in info and info[long_summary][0] != \"NA\":\n",
|
||||
" overview = info[long_summary][0]\n",
|
||||
"elif long_name in info:\n",
|
||||
" overview = info[long_name][0]\n",
|
||||
"else:\n",
|
||||
" overview = info[\"Long name\"][0]"
|
||||
" overview = \"\""
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -181,7 +186,7 @@
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"tables = openbb.etf.news(info[\"Short name\"][0], 5)\n",
|
||||
"tables = openbb.etf.news(info[\"Short name\"][0], 5) if \"Short name\" in info else []\n",
|
||||
"for table in tables:\n",
|
||||
" table[0].loc[\"link\"] = (\n",
|
||||
" table[0].loc[\"link\"].apply(lambda x: f'<a href=\"{x}\">{x}</a>')\n",
|
||||
@@ -195,7 +200,7 @@
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"quote_data = openbb.stocks.quote_fmp(symbol)\n",
|
||||
"quote_data = openbb.stocks.quote(symbol)\n",
|
||||
"quote_data"
|
||||
]
|
||||
},
|
||||
@@ -240,9 +245,7 @@
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"df_sec_filings = openbb.stocks.fa.sec(symbol=symbol)[[\"Type\", \"Category\", \"Link\"]].head(\n",
|
||||
" 5\n",
|
||||
")\n",
|
||||
"df_sec_filings = openbb.stocks.fa.sec(symbol)[[\"Type\", \"Category\", \"Link\"]].head(5)\n",
|
||||
"df_sec_filings[\"Link\"] = df_sec_filings[\"Link\"].apply(\n",
|
||||
" lambda x: f'<a href=\"{x}\">{x}</a>'\n",
|
||||
")\n",
|
||||
@@ -1195,7 +1198,7 @@
|
||||
" \"Buffet Score is neutral\",\n",
|
||||
" \"Buffet Score is favourable\",\n",
|
||||
" ],\n",
|
||||
" float(score[\"Total Score\"], 2),\n",
|
||||
" float(round(score[\"Total Score\"], 2)),\n",
|
||||
" )\n",
|
||||
"if predictions:\n",
|
||||
" htmlcode += widgets.kpi(\n",
|
||||
@@ -1208,7 +1211,9 @@
|
||||
" )\n",
|
||||
"body += widgets.add_tab(\"SUMMARY\", htmlcode)\n",
|
||||
"\n",
|
||||
"htmlcode = widgets.row([widgets.h(3, \"Description\") + widgets.p(overview)])\n",
|
||||
"htmlcode=\"\"\n",
|
||||
"if overview:\n",
|
||||
" htmlcode += widgets.row([widgets.h(3, \"Description\") + widgets.p(overview)])\n",
|
||||
"htmlcode += widgets.row([widgets.h(3, \"Price Chart\") + price_chart])\n",
|
||||
"htmlcode += widgets.row([widgets.h(3, \"Quote\") + quote_data.to_html()])\n",
|
||||
"htmlcode += widgets.row([widgets.h(3, \"Latest News for \" + symbol)])\n",
|
||||
@@ -1466,7 +1471,7 @@
|
||||
"metadata": {
|
||||
"celltoolbar": "Tags",
|
||||
"kernelspec": {
|
||||
"display_name": "obb",
|
||||
"display_name": "Python 3",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
@@ -1480,11 +1485,11 @@
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.9.6"
|
||||
"version": "3.9.13"
|
||||
},
|
||||
"vscode": {
|
||||
"interpreter": {
|
||||
"hash": "100174a9203096c0c10fb537684ff280825ee9e252451beb8786068677204f06"
|
||||
"hash": "af870c0f9615f5bb08692efcc9bf540319fe60e6793056508a4dab09c9fa8dda"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -22,7 +22,6 @@ from openbb_terminal.sdk_core import (
|
||||
)
|
||||
from openbb_terminal import feature_flags as obbff
|
||||
from openbb_terminal.session.user import User
|
||||
from openbb_terminal.terminal_helper import is_auth_enabled
|
||||
|
||||
if User.is_guest():
|
||||
load_dotenv_and_reload_configs()
|
||||
@@ -49,14 +48,6 @@ class OpenBBSDK:
|
||||
self.logout = lib.sdk_session.logout
|
||||
self.news = lib.common_feedparser_model.get_news
|
||||
self.whoami = lib.sdk_session.whoami
|
||||
self._try_to_login()
|
||||
|
||||
def _try_to_login(self):
|
||||
if User.is_guest() and is_auth_enabled():
|
||||
try:
|
||||
self.login()
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
@property
|
||||
def alt(self):
|
||||
@@ -172,8 +163,6 @@ class OpenBBSDK:
|
||||
`treasury_maturities`: Get treasury maturity options [Source: EconDB]\n
|
||||
`usbonds`: Scrape data for us bonds\n
|
||||
`valuation`: Get group (sectors, industry or country) valuation data. [Source: Finviz]\n
|
||||
`ycrv`: Gets yield curve data from FRED\n
|
||||
`ycrv_chart`: Display yield curve based on US Treasury rates for a specified date.\n
|
||||
"""
|
||||
|
||||
return model.EconomyRoot()
|
||||
@@ -204,6 +193,17 @@ class OpenBBSDK:
|
||||
|
||||
return ctrl.EtfController()
|
||||
|
||||
@property
|
||||
def fixedincome(self):
|
||||
"""Fixedincome Submodule
|
||||
|
||||
Attributes:
|
||||
`ecbycrv`: Gets euro area yield curve data from ECB.\n
|
||||
`ycrv`: Gets yield curve data from FRED.\n
|
||||
"""
|
||||
|
||||
return model.FixedincomeRoot()
|
||||
|
||||
@property
|
||||
def forecast(self):
|
||||
"""Forecasting Submodule
|
||||
@@ -297,7 +297,7 @@ class OpenBBSDK:
|
||||
Attributes:
|
||||
`curve`: Get curve futures [Source: Yahoo Finance]\n
|
||||
`curve_chart`: Display curve futures [Source: Yahoo Finance]\n
|
||||
`historical`: Get historical futures [Source: Yahoo Finance]\n
|
||||
`historical`: Get historical futures data\n
|
||||
`historical_chart`: Display historical futures [Source: Yahoo Finance]\n
|
||||
`search`: Get search futures [Source: Yahoo Finance]\n
|
||||
"""
|
||||
@@ -316,6 +316,7 @@ class OpenBBSDK:
|
||||
`coinbase`: Set Coinbase key\n
|
||||
`coinglass`: Set Coinglass key.\n
|
||||
`cpanic`: Set Cpanic key.\n
|
||||
`databento`: Set DataBento key\n
|
||||
`degiro`: Set Degiro key\n
|
||||
`eodhd`: Set Eodhd key.\n
|
||||
`ethplorer`: Set Ethplorer key.\n
|
||||
|
||||
@@ -6,6 +6,7 @@ from .crypto_sdk_model import CryptoRoot
|
||||
from .econometrics_sdk_model import EconometricsRoot
|
||||
from .economy_sdk_model import EconomyRoot
|
||||
from .etf_sdk_model import EtfRoot
|
||||
from .fixedincome_sdk_model import FixedincomeRoot
|
||||
from .forecast_sdk_model import ForecastRoot
|
||||
from .forex_sdk_model import ForexRoot
|
||||
from .futures_sdk_model import FuturesRoot
|
||||
|
||||
@@ -41,8 +41,6 @@ class EconomyRoot(Category):
|
||||
`treasury_maturities`: Get treasury maturity options [Source: EconDB]\n
|
||||
`usbonds`: Scrape data for us bonds\n
|
||||
`valuation`: Get group (sectors, industry or country) valuation data. [Source: Finviz]\n
|
||||
`ycrv`: Gets yield curve data from FRED\n
|
||||
`ycrv_chart`: Display yield curve based on US Treasury rates for a specified date.\n
|
||||
"""
|
||||
|
||||
_location_path = "economy"
|
||||
@@ -82,5 +80,3 @@ class EconomyRoot(Category):
|
||||
self.treasury_maturities = lib.economy_econdb_model.get_treasury_maturities
|
||||
self.usbonds = lib.economy_wsj_model.us_bonds
|
||||
self.valuation = lib.economy_finviz_model.get_valuation_data
|
||||
self.ycrv = lib.economy_fred_model.get_yield_curve
|
||||
self.ycrv_chart = lib.economy_fred_view.display_yield_curve
|
||||
|
||||
40
openbb_terminal/sdk_core/models/fixedincome_sdk_model.py
Normal file
40
openbb_terminal/sdk_core/models/fixedincome_sdk_model.py
Normal file
@@ -0,0 +1,40 @@
|
||||
# flake8: noqa
|
||||
# pylint: disable=C0301,R0902,R0903
|
||||
from openbb_terminal.sdk_core.sdk_helpers import Category
|
||||
import openbb_terminal.sdk_core.sdk_init as lib
|
||||
|
||||
|
||||
class FixedincomeRoot(Category):
|
||||
"""Fixedincome Module
|
||||
|
||||
Attributes:
|
||||
`ecbycrv`: Gets euro area yield curve data from ECB.\n
|
||||
`ycrv`: Gets yield curve data from FRED.\n
|
||||
"""
|
||||
|
||||
_location_path = "fixedincome"
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.ameribor = lib.fixedincome_fred_model.get_ameribor
|
||||
self.cp = lib.fixedincome_fred_model.get_cp
|
||||
self.dwpcr = lib.fixedincome_fred_model.get_dwpcr
|
||||
self.ecb = lib.fixedincome_fred_model.get_ecb
|
||||
self.ecbycrv = lib.fixedincome_ecb_model.get_ecb_yield_curve
|
||||
self.estr = lib.fixedincome_fred_model.get_estr
|
||||
self.fed = lib.fixedincome_fred_model.get_fed
|
||||
self.ffrmc = lib.fixedincome_fred_model.get_ffrmc
|
||||
self.hqm = lib.fixedincome_fred_model.get_hqm
|
||||
self.icebofa = lib.fixedincome_fred_model.get_icebofa
|
||||
self.icespread = lib.fixedincome_fred_model.get_icespread
|
||||
self.iorb = lib.fixedincome_fred_model.get_iorb
|
||||
self.moody = lib.fixedincome_fred_model.get_moody
|
||||
self.projection = lib.fixedincome_fred_model.get_projection
|
||||
self.sofr = lib.fixedincome_fred_model.get_sofr
|
||||
self.sonia = lib.fixedincome_fred_model.get_sonia
|
||||
self.spot = lib.fixedincome_fred_model.get_spot
|
||||
self.tbffr = lib.fixedincome_fred_model.get_tbffr
|
||||
self.tmc = lib.fixedincome_fred_model.get_tmc
|
||||
self.treasury = lib.fixedincome_oecd_model.get_treasury
|
||||
self.usrates = lib.fixedincome_fred_model.get_usrates
|
||||
self.ycrv = lib.fixedincome_fred_model.get_yield_curve
|
||||
@@ -77,7 +77,6 @@ class ForecastRoot(Category):
|
||||
|
||||
if not lib.FORECASTING_TOOLKIT_ENABLED:
|
||||
# pylint: disable=C0415
|
||||
|
||||
from openbb_terminal.rich_config import console
|
||||
|
||||
console.print(lib.FORECASTING_TOOLKIT_WARNING)
|
||||
|
||||
@@ -10,7 +10,7 @@ class FuturesRoot(Category):
|
||||
Attributes:
|
||||
`curve`: Get curve futures [Source: Yahoo Finance]\n
|
||||
`curve_chart`: Display curve futures [Source: Yahoo Finance]\n
|
||||
`historical`: Get historical futures [Source: Yahoo Finance]\n
|
||||
`historical`: Get historical futures data\n
|
||||
`historical_chart`: Display historical futures [Source: Yahoo Finance]\n
|
||||
`search`: Get search futures [Source: Yahoo Finance]\n
|
||||
"""
|
||||
@@ -21,6 +21,6 @@ class FuturesRoot(Category):
|
||||
super().__init__()
|
||||
self.curve = lib.futures_yfinance_model.get_curve_futures
|
||||
self.curve_chart = lib.futures_yfinance_view.display_curve
|
||||
self.historical = lib.futures_yfinance_model.get_historical_futures
|
||||
self.historical = lib.futures_sdk_model.get_historical
|
||||
self.historical_chart = lib.futures_yfinance_view.display_historical
|
||||
self.search = lib.futures_yfinance_model.get_search_futures
|
||||
|
||||
@@ -15,6 +15,7 @@ class KeysRoot(Category):
|
||||
`coinbase`: Set Coinbase key\n
|
||||
`coinglass`: Set Coinglass key.\n
|
||||
`cpanic`: Set Cpanic key.\n
|
||||
`databento`: Set DataBento key\n
|
||||
`degiro`: Set Degiro key\n
|
||||
`eodhd`: Set Eodhd key.\n
|
||||
`ethplorer`: Set Ethplorer key.\n
|
||||
@@ -55,6 +56,7 @@ class KeysRoot(Category):
|
||||
self.coinbase = lib.keys_model.set_coinbase_key
|
||||
self.coinglass = lib.keys_model.set_coinglass_key
|
||||
self.cpanic = lib.keys_model.set_cpanic_key
|
||||
self.databento = lib.keys_model.set_databento_key
|
||||
self.degiro = lib.keys_model.set_degiro_key
|
||||
self.eodhd = lib.keys_model.set_eodhd_key
|
||||
self.ethplorer = lib.keys_model.set_ethplorer_key
|
||||
|
||||
@@ -177,7 +177,6 @@ class PortfolioPortfolioOptimization(Category):
|
||||
|
||||
if not lib.OPTIMIZATION_TOOLKIT_ENABLED:
|
||||
# pylint: disable=C0415
|
||||
|
||||
from openbb_terminal.rich_config import console
|
||||
|
||||
console.print(lib.OPTIMIZATION_TOOLKIT_WARNING)
|
||||
|
||||
@@ -211,6 +211,14 @@ from openbb_terminal.econometrics import (
|
||||
regression_view as econometrics_regression_view,
|
||||
)
|
||||
|
||||
# Fixedincome
|
||||
from openbb_terminal.fixedincome import (
|
||||
fred_model as fixedincome_fred_model,
|
||||
ecb_model as fixedincome_ecb_model,
|
||||
oecd_model as fixedincome_oecd_model,
|
||||
)
|
||||
|
||||
|
||||
# Economy
|
||||
from openbb_terminal.economy import (
|
||||
alphavantage_model as economy_alphavantage_model,
|
||||
@@ -252,6 +260,7 @@ from openbb_terminal.forex import (
|
||||
from openbb_terminal.futures import (
|
||||
yfinance_model as futures_yfinance_model,
|
||||
yfinance_view as futures_yfinance_view,
|
||||
sdk_helper as futures_sdk_model,
|
||||
)
|
||||
|
||||
# Stocks Helpers
|
||||
|
||||
1120
openbb_terminal/sdk_core/trail_map.csv
vendored
1120
openbb_terminal/sdk_core/trail_map.csv
vendored
File diff suppressed because it is too large
Load Diff
@@ -1,39 +1,39 @@
|
||||
trail,model,view
|
||||
forecast.anom,forecast_anom_model.get_anomaly_detection_data,forecast_anom_view.display_anomaly_detection
|
||||
forecast.atr,forecast_model.add_atr,
|
||||
forecast.autoarima,forecast_autoarima_model.get_autoarima_data,forecast_autoarima_view.display_autoarima_forecast
|
||||
forecast.autoces,forecast_autoces_model.get_autoces_data,forecast_autoces_view.display_autoces_forecast
|
||||
forecast.autoets,forecast_autoets_model.get_autoets_data,forecast_autoets_view.display_autoets_forecast
|
||||
forecast.autoselect,forecast_autoselect_model.get_autoselect_data,forecast_autoselect_view.display_autoselect_forecast
|
||||
forecast.brnn,forecast_brnn_model.get_brnn_data,forecast_brnn_view.display_brnn_forecast
|
||||
forecast.clean,forecast_model.clean,
|
||||
forecast.combine,forecast_model.combine_dfs,
|
||||
forecast.corr,forecast_model.corr_df,forecast_view.display_corr
|
||||
forecast.delete,forecast_model.delete_column,
|
||||
forecast.delta,forecast_model.add_delta,
|
||||
forecast.desc,forecast_model.describe_df,forecast_view.describe_df
|
||||
forecast.ema,forecast_model.add_ema,
|
||||
forecast.expo,forecast_expo_model.get_expo_data,forecast_expo_view.display_expo_forecast
|
||||
forecast.export,forecast_view.export_df,
|
||||
forecast.linregr,forecast_linregr_model.get_linear_regression_data,forecast_linregr_view.display_linear_regression
|
||||
forecast.load,common_model.load,
|
||||
forecast.mom,forecast_model.add_momentum,
|
||||
forecast.mstl,forecast_mstl_model.get_mstl_data,forecast_mstl_view.display_mstl_forecast
|
||||
forecast.nbeats,forecast_nbeats_model.get_NBEATS_data,forecast_nbeats_view.display_nbeats_forecast
|
||||
forecast.nhits,forecast_nhits_model.get_nhits_data,forecast_nhits_view.display_nhits_forecast
|
||||
forecast.plot,forecast_view.display_plot,forecast_view.display_plot
|
||||
forecast.regr,forecast_regr_model.get_regression_data,forecast_regr_view.display_regression
|
||||
forecast.rename,forecast_model.rename_column,
|
||||
forecast.rnn,forecast_rnn_model.get_rnn_data,forecast_rnn_view.display_rnn_forecast
|
||||
forecast.roc,forecast_model.add_roc,
|
||||
forecast.rsi,forecast_model.add_rsi,
|
||||
forecast.rwd,forecast_rwd_model.get_rwd_data,forecast_rwd_view.display_rwd_forecast
|
||||
forecast.season,,forecast_view.display_seasonality
|
||||
forecast.seasonalnaive,forecast_seasonalnaive_model.get_seasonalnaive_data,forecast_seasonalnaive_view.display_seasonalnaive_forecast
|
||||
forecast.show,forecast_view.show_df,
|
||||
forecast.signal,forecast_model.add_signal,
|
||||
forecast.sto,forecast_model.add_sto,
|
||||
forecast.tcn,forecast_tcn_model.get_tcn_data,forecast_tcn_view.display_tcn_forecast
|
||||
forecast.tft,forecast_tft_model.get_tft_data,forecast_tft_view.display_tft_forecast
|
||||
forecast.theta,forecast_theta_model.get_theta_data,forecast_theta_view.display_theta_forecast
|
||||
forecast.trans,forecast_trans_model.get_trans_data,forecast_trans_view.display_trans_forecast
|
||||
trail,model,view
|
||||
forecast.anom,forecast_anom_model.get_anomaly_detection_data,forecast_anom_view.display_anomaly_detection
|
||||
forecast.atr,forecast_model.add_atr,
|
||||
forecast.autoarima,forecast_autoarima_model.get_autoarima_data,forecast_autoarima_view.display_autoarima_forecast
|
||||
forecast.autoces,forecast_autoces_model.get_autoces_data,forecast_autoces_view.display_autoces_forecast
|
||||
forecast.autoets,forecast_autoets_model.get_autoets_data,forecast_autoets_view.display_autoets_forecast
|
||||
forecast.autoselect,forecast_autoselect_model.get_autoselect_data,forecast_autoselect_view.display_autoselect_forecast
|
||||
forecast.brnn,forecast_brnn_model.get_brnn_data,forecast_brnn_view.display_brnn_forecast
|
||||
forecast.clean,forecast_model.clean,
|
||||
forecast.combine,forecast_model.combine_dfs,
|
||||
forecast.corr,forecast_model.corr_df,forecast_view.display_corr
|
||||
forecast.delete,forecast_model.delete_column,
|
||||
forecast.delta,forecast_model.add_delta,
|
||||
forecast.desc,forecast_model.describe_df,forecast_view.describe_df
|
||||
forecast.ema,forecast_model.add_ema,
|
||||
forecast.expo,forecast_expo_model.get_expo_data,forecast_expo_view.display_expo_forecast
|
||||
forecast.export,forecast_view.export_df,
|
||||
forecast.linregr,forecast_linregr_model.get_linear_regression_data,forecast_linregr_view.display_linear_regression
|
||||
forecast.load,common_model.load,
|
||||
forecast.mom,forecast_model.add_momentum,
|
||||
forecast.mstl,forecast_mstl_model.get_mstl_data,forecast_mstl_view.display_mstl_forecast
|
||||
forecast.nbeats,forecast_nbeats_model.get_NBEATS_data,forecast_nbeats_view.display_nbeats_forecast
|
||||
forecast.nhits,forecast_nhits_model.get_nhits_data,forecast_nhits_view.display_nhits_forecast
|
||||
forecast.plot,forecast_view.display_plot,forecast_view.display_plot
|
||||
forecast.regr,forecast_regr_model.get_regression_data,forecast_regr_view.display_regression
|
||||
forecast.rename,forecast_model.rename_column,
|
||||
forecast.rnn,forecast_rnn_model.get_rnn_data,forecast_rnn_view.display_rnn_forecast
|
||||
forecast.roc,forecast_model.add_roc,
|
||||
forecast.rsi,forecast_model.add_rsi,
|
||||
forecast.rwd,forecast_rwd_model.get_rwd_data,forecast_rwd_view.display_rwd_forecast
|
||||
forecast.season,,forecast_view.display_seasonality
|
||||
forecast.seasonalnaive,forecast_seasonalnaive_model.get_seasonalnaive_data,forecast_seasonalnaive_view.display_seasonalnaive_forecast
|
||||
forecast.show,forecast_view.show_df,
|
||||
forecast.signal,forecast_model.add_signal,
|
||||
forecast.sto,forecast_model.add_sto,
|
||||
forecast.tcn,forecast_tcn_model.get_tcn_data,forecast_tcn_view.display_tcn_forecast
|
||||
forecast.tft,forecast_tft_model.get_tft_data,forecast_tft_view.display_tft_forecast
|
||||
forecast.theta,forecast_theta_model.get_theta_data,forecast_theta_view.display_theta_forecast
|
||||
forecast.trans,forecast_trans_model.get_trans_data,forecast_trans_view.display_trans_forecast
|
||||
|
||||
|
@@ -1,19 +1,19 @@
|
||||
trail,model,view
|
||||
portfolio.po.blacklitterman,portfolio_optimization_po_model.get_blacklitterman,
|
||||
portfolio.po.ef,portfolio_optimization_po_model.get_ef,portfolio_optimization_po_view.display_ef
|
||||
portfolio.po.file,portfolio_optimization_po_model.load_parameters_file,
|
||||
portfolio.po.herc,portfolio_optimization_po_model.get_herc,
|
||||
portfolio.po.hrp,portfolio_optimization_po_model.get_hrp,
|
||||
portfolio.po.load,portfolio_optimization_po_model.generate_portfolio,
|
||||
portfolio.po.load_bl_views,portfolio_optimization_excel_model.load_bl_views,
|
||||
portfolio.po.maxdecorr,portfolio_optimization_po_model.get_maxdecorr,
|
||||
portfolio.po.maxdiv,portfolio_optimization_po_model.get_maxdiv,
|
||||
portfolio.po.maxret,portfolio_optimization_po_model.get_maxret,
|
||||
portfolio.po.maxsharpe,portfolio_optimization_po_model.get_maxsharpe,
|
||||
portfolio.po.maxutil,portfolio_optimization_po_model.get_maxutil,
|
||||
portfolio.po.minrisk,portfolio_optimization_po_model.get_minrisk,
|
||||
portfolio.po.nco,portfolio_optimization_po_model.get_nco,
|
||||
portfolio.po.plot,portfolio_optimization_po_view.display_plot,portfolio_optimization_po_view.display_plot
|
||||
portfolio.po.relriskparity,portfolio_optimization_po_model.get_relriskparity,
|
||||
portfolio.po.riskparity,portfolio_optimization_po_model.get_riskparity,
|
||||
portfolio.po.show,portfolio_optimization_po_model.show,
|
||||
trail,model,view
|
||||
portfolio.po.blacklitterman,portfolio_optimization_po_model.get_blacklitterman,
|
||||
portfolio.po.ef,portfolio_optimization_po_model.get_ef,portfolio_optimization_po_view.display_ef
|
||||
portfolio.po.file,portfolio_optimization_po_model.load_parameters_file,
|
||||
portfolio.po.herc,portfolio_optimization_po_model.get_herc,
|
||||
portfolio.po.hrp,portfolio_optimization_po_model.get_hrp,
|
||||
portfolio.po.load,portfolio_optimization_po_model.generate_portfolio,
|
||||
portfolio.po.load_bl_views,portfolio_optimization_excel_model.load_bl_views,
|
||||
portfolio.po.maxdecorr,portfolio_optimization_po_model.get_maxdecorr,
|
||||
portfolio.po.maxdiv,portfolio_optimization_po_model.get_maxdiv,
|
||||
portfolio.po.maxret,portfolio_optimization_po_model.get_maxret,
|
||||
portfolio.po.maxsharpe,portfolio_optimization_po_model.get_maxsharpe,
|
||||
portfolio.po.maxutil,portfolio_optimization_po_model.get_maxutil,
|
||||
portfolio.po.minrisk,portfolio_optimization_po_model.get_minrisk,
|
||||
portfolio.po.nco,portfolio_optimization_po_model.get_nco,
|
||||
portfolio.po.plot,portfolio_optimization_po_view.display_plot,portfolio_optimization_po_view.display_plot
|
||||
portfolio.po.relriskparity,portfolio_optimization_po_model.get_relriskparity,
|
||||
portfolio.po.riskparity,portfolio_optimization_po_model.get_riskparity,
|
||||
portfolio.po.show,portfolio_optimization_po_model.show,
|
||||
|
||||
|
@@ -30,7 +30,7 @@ def get_similar(symbol: str, source="Finviz") -> List[str]:
|
||||
--------
|
||||
To get similar tickers to AAPL from Finviz:
|
||||
>>> from openbb_terminal.sdk import openbb
|
||||
>>> similar_tickers = openbb.stocks.ca.similar("AAPL)
|
||||
>>> similar_tickers = openbb.stocks.ca.similar("AAPL")
|
||||
|
||||
To use our custom TSNE model for similar tickers in the SP500:
|
||||
>>> similar_tickers = openbb.stocks.ca.similar("AAPL", source="TSNE")
|
||||
|
||||
154
openbb_terminal/stocks/databento_model.py
Normal file
154
openbb_terminal/stocks/databento_model.py
Normal file
@@ -0,0 +1,154 @@
|
||||
__docformat__ = "numpy"
|
||||
import logging
|
||||
from datetime import datetime, timedelta
|
||||
from io import StringIO
|
||||
|
||||
import pandas as pd
|
||||
import requests
|
||||
from pydantic import BaseModel
|
||||
|
||||
from openbb_terminal import config_terminal as cfg
|
||||
from openbb_terminal.decorators import check_api_key, log_start_end
|
||||
from openbb_terminal.helper_funcs import request
|
||||
from openbb_terminal.rich_config import console
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# pylint:disable=too-few-public-methods
|
||||
|
||||
|
||||
class DataBento(BaseModel):
|
||||
symbol: str
|
||||
exchange: str = "XNAS.ITCH"
|
||||
stype: str = "native"
|
||||
start: str = (datetime.now() - timedelta(days=365)).strftime("%Y-%m-%d")
|
||||
end: str = datetime.now().strftime("%Y-%m-%d")
|
||||
|
||||
class Config:
|
||||
arbitrary_types_allowed = True
|
||||
|
||||
def get_historical_stock(self):
|
||||
"""Gets historical EOD stock data from DataBento. Currnetly, just NASDAQ is supported.
|
||||
Note that only nonadjusted data is available."""
|
||||
self.exchange = "XNAS.ITCH"
|
||||
self.stype = "native"
|
||||
if not self.validate_symbol():
|
||||
return pd.DataFrame()
|
||||
return self.get_historical()
|
||||
|
||||
def validate_symbol(self):
|
||||
"""Validates the symbol is supported by DataBento. There is no API for this, so we will use their
|
||||
Symbology endpoint to see if something exists. Doing a long time range can make this request on the order of
|
||||
one minute, so try to keep smaller requests."""
|
||||
base_url = "https://hist.databento.com/v0/symbology.resolve"
|
||||
params = {
|
||||
"dataset": self.exchange,
|
||||
"symbols": self.symbol,
|
||||
"start_date": self.start,
|
||||
"end_date": self.end,
|
||||
"stype_in": "smart",
|
||||
"stype_out": "product_id",
|
||||
}
|
||||
auth = requests.auth.HTTPBasicAuth(cfg.API_DATABENTO_KEY, "")
|
||||
# This seems to only work for futures? Assume the user is entering correct stock ticker
|
||||
if self.exchange == "XNAS.ITCH":
|
||||
return True
|
||||
result = request(base_url, params=params, auth=auth, timeout=30)
|
||||
if "message" not in result.json():
|
||||
console.print(
|
||||
"Issue validating symbol in the date range. Please check with DataBento for symbology."
|
||||
)
|
||||
return False
|
||||
return result.json()["message"] != "Not found"
|
||||
|
||||
def get_historical_futures(self):
|
||||
"""Gets historical EODfutures data from DataBento. Currently, just CME is supported.
|
||||
Note this gets the highest volume contract each day"""
|
||||
self.exchange = "GLBX.MDP3"
|
||||
self.stype = "smart"
|
||||
if not self.validate_symbol():
|
||||
return pd.DataFrame()
|
||||
return self.get_historical()
|
||||
|
||||
@log_start_end(log=logger)
|
||||
@check_api_key(["API_DATABENTO_KEY"])
|
||||
def get_historical(self) -> pd.DataFrame:
|
||||
"""Prepares the request to be made. I am using their https interface instead of their python client.
|
||||
Their next update will change symbol.V.0 to symbol.C.0"""
|
||||
|
||||
base_url = "https://hist.databento.com/v0/timeseries.stream"
|
||||
symbol = self.symbol + ".V.0" if self.exchange == "GLBX.MDP3" else self.symbol
|
||||
params = {
|
||||
"dataset": self.exchange,
|
||||
"symbols": symbol,
|
||||
"schema": "ohlcv-1d",
|
||||
"start": self.start,
|
||||
"end": self.end,
|
||||
"stype_in": self.stype,
|
||||
"encoding": "csv",
|
||||
}
|
||||
auth = requests.auth.HTTPBasicAuth(cfg.API_DATABENTO_KEY, "")
|
||||
data = self.process_request(base_url, params, auth)
|
||||
if data.empty:
|
||||
console.print(f"No data found for symbol `{self.symbol}`.")
|
||||
return data
|
||||
|
||||
def process_request(self, base_url, params, auth) -> pd.DataFrame:
|
||||
"""Takes the request and returns the adjusted dataframe"""
|
||||
r = request(base_url, params=params, auth=auth)
|
||||
if r.status_code != 200:
|
||||
raise Exception(f"Error: Status Code {r.status_code}")
|
||||
df = pd.read_csv(StringIO(r.text))
|
||||
df["time"] = pd.to_datetime(df.ts_event, unit="ns")
|
||||
df[["open", "high", "low", "close"]] /= 1_000_000_000
|
||||
df = df.drop(columns=["ts_event", "publisher_id", "product_id"]).set_index(
|
||||
"time"
|
||||
)
|
||||
df = df.rename(
|
||||
columns={
|
||||
"open": "Open",
|
||||
"high": "High",
|
||||
"low": "Low",
|
||||
"close": "Close",
|
||||
"volume": "Volume",
|
||||
}
|
||||
)
|
||||
return df
|
||||
|
||||
|
||||
@log_start_end(log=logger)
|
||||
@check_api_key(["API_DATABENTO_KEY"])
|
||||
def get_historical_stock(symbol: str, start_date: str, end_date: str) -> pd.DataFrame:
|
||||
"""Gets historical EOD data from DataBento. Currently, just NASDAQ is supported.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
symbol : str
|
||||
Symbol to get data for
|
||||
start_date : str
|
||||
Start date of data
|
||||
end_date : str
|
||||
End date to get data for
|
||||
|
||||
"""
|
||||
db = DataBento(symbol=symbol, start=start_date, end=end_date)
|
||||
return db.get_historical_stock()
|
||||
|
||||
|
||||
@log_start_end(log=logger)
|
||||
@check_api_key(["API_DATABENTO_KEY"])
|
||||
def get_historical_futures(symbol: str, start_date: str, end_date: str) -> pd.DataFrame:
|
||||
"""Gets historical EODfutures data from DataBento. Currently, just CME is supported.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
symbol : str
|
||||
Symbol to get data for
|
||||
start_date : str
|
||||
Start date of data
|
||||
end_date : str
|
||||
End date to get data for
|
||||
|
||||
"""
|
||||
db = DataBento(symbol=symbol, start=start_date, end=end_date)
|
||||
return db.get_historical_futures()
|
||||
@@ -176,12 +176,12 @@ def option_expirations(symbol: str) -> List[str]:
|
||||
List of expiration dates
|
||||
"""
|
||||
df = get_full_option_chain(symbol)
|
||||
|
||||
if df.empty:
|
||||
return []
|
||||
|
||||
# get everything that is not an empty string
|
||||
exps = [exp for exp in list(df.expirygroup.unique()) if exp]
|
||||
# Convert 'January 11, 1993' into '1993-01-11'
|
||||
return [datetime.strptime(exp, "%B %d, %Y").strftime("%Y-%m-%d") for exp in exps]
|
||||
return [exp for exp in list(df.expiration.unique()) if exp]
|
||||
|
||||
|
||||
@log_start_end(log=logger)
|
||||
|
||||
@@ -56,6 +56,8 @@ from openbb_terminal.stocks.stocks_model import (
|
||||
load_stock_yf,
|
||||
)
|
||||
|
||||
from . import databento_model
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -335,6 +337,12 @@ def load(
|
||||
|
||||
elif source == "Intrinio":
|
||||
df_stock_candidate = load_stock_intrinio(symbol, start_date, end_date)
|
||||
|
||||
elif source == "DataBento":
|
||||
df_stock_candidate = databento_model.get_historical_stock(
|
||||
symbol, start_date.strftime("%Y-%m-%d"), end_date.strftime("%Y-%m-%d")
|
||||
)
|
||||
|
||||
else:
|
||||
console.print("[red]Invalid source for stock[/red]\n")
|
||||
return
|
||||
@@ -545,7 +553,7 @@ def display_candle(
|
||||
start_date = check_datetime(start_date)
|
||||
end_date = check_datetime(end_date, start=False)
|
||||
|
||||
if data is None:
|
||||
if data is None or data.empty:
|
||||
data = load(
|
||||
symbol,
|
||||
start_date,
|
||||
|
||||
@@ -105,6 +105,7 @@ class TerminalController(BaseController):
|
||||
"sources",
|
||||
"forecast",
|
||||
"futures",
|
||||
"fixedincome",
|
||||
"funds",
|
||||
]
|
||||
|
||||
@@ -193,6 +194,7 @@ class TerminalController(BaseController):
|
||||
mt.add_menu("economy")
|
||||
mt.add_menu("forex")
|
||||
mt.add_menu("futures")
|
||||
mt.add_menu("fixedincome")
|
||||
mt.add_menu("alternative")
|
||||
mt.add_menu("funds")
|
||||
mt.add_raw("\n")
|
||||
@@ -482,6 +484,14 @@ class TerminalController(BaseController):
|
||||
|
||||
self.queue = self.load_class(FuturesController, self.queue)
|
||||
|
||||
def call_fixedincome(self, _):
|
||||
"""Process fixedincome command."""
|
||||
from openbb_terminal.fixedincome.fixedincome_controller import (
|
||||
FixedIncomeController,
|
||||
)
|
||||
|
||||
self.queue = self.load_class(FixedIncomeController, self.queue)
|
||||
|
||||
def call_funds(self, _):
|
||||
"""Process etf command"""
|
||||
from openbb_terminal.mutual_funds.mutual_fund_controller import FundController
|
||||
|
||||
@@ -12,76 +12,53 @@ interactions:
|
||||
- Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML,
|
||||
like Gecko) Chrome/39.0.2171.95 Safari/537.36
|
||||
method: GET
|
||||
uri: https://query2.finance.yahoo.com/v8/finance/chart/%5EFCHI?period1=1262300400&period2=1454713200&interval=3mo&includePrePost=False&events=div%2Csplits
|
||||
uri: https://query2.finance.yahoo.com/v8/finance/chart/CAC40?range=1d&interval=1d
|
||||
response:
|
||||
body:
|
||||
string: !!binary |
|
||||
H4sIAAAAAAAAAO1WTW/cNhD9L3tesCSHQ3JyKxy3yaGBEbhAgcAFVK/ibLu7crXaNK6x/71vKNmi
|
||||
nEPbWw+9aEej4XA+3rzZx9Xtp6YfVq8eV317PO0gfXhc7duhUdXtqe/bw+3D6tXq8sf3q/Xq+LD/
|
||||
pdvh9efvLt68haL9gvOHu/Zds2+hvvpWrbaH49Cf9u1huH64V/Xbd68vf8KHj9v+OFz3zaZ93Qz4
|
||||
ECn6lIO1a9x+d9o1/Q9N/1s7XG/Vm4shZZaU8PluP3QfPx5bxEdR7QeY/Nkd1PvF5XUVyfX0YYro
|
||||
8tR39+03V02/Pa5eXHPVb281iujIcFqPpbjq28/b7nS82HVHfCShaIjWq3s1frM9IAK/nipTctke
|
||||
7q7afttttGL3fas/X0d32EwJBSnxH4dS9lr1Isfzc7R/4zFb/4893nfH4d+7m1Qv3cHfphma7/vm
|
||||
oGFuBwUK7Tuts7YCbxA/N7vt5r2+HwGuldtAx/pwxXK0j+XpHvDw+mB9OKvPh0GN982X1c157DtC
|
||||
29/Dl/Ms0SM0u3Y+JpI8iokpkC9iJi+TgTjHk4FkoVBEsjEnKbbkQvajAXkfZTIgyxzDKGa2LhYx
|
||||
xMB21HIgNxlEb8WPYrKW0mibkuTJIHPmyQC48gX6LljHqaAaorAfDYJLlCcDz7hhFImcldE2OMuT
|
||||
Qci4F+KNDt9me9sMXX/UPv9+6nTQMNO3I54/ILJsNM2QkS5KuCa2yTB8IjihBEUQa5IgA7FRDaKz
|
||||
JpBIQICqCA4KHLOSIheFtdFIZUGeo9H8n03IcTAokHPJ5XIJexOCCD9rrEvGuvpMwGRalDJmmkJj
|
||||
Tka7hLZKLKeSh82aJGTDiDmnPEUtRCbVpsELG7QI9SvOULFsLCxSqUNgJ6iDZB98CShQdka7PNUB
|
||||
JbDGZYTJ0wkEb0ISAC+UG1CSZHA/oDDmFCKyFMBGmKYTydRlCcQgn/DkAQ38tL37hD4htmwcfBd0
|
||||
jUXOUTPFNC5rLdGZKFUlg4ticrLze2CT/BxnsCjaslroqfFOJKHeJVQCqBbJKUSXCoaXXMGAGDEr
|
||||
VzylS0nI+EW+NnnjEb0ghFC64NRLXTMCdnwSkL8bzwRvFxkHBilnmhsn2cRQuWSLTs6N/apN4AWT
|
||||
ZiCwB/IWbUQxFg4lcXUAXcJSOeg0YV5rSBFY6MUsAUORRZx3k4mOW9UcioTBcAB+esId2MzEaKfs
|
||||
rQtG53zulU+APNcj7JBhPZAUQjBM9ZxYnw0t5h6egc05do4K3jlrSg4jCkyMYRFcmVgjkiSFmigw
|
||||
YGFZN3DmwqAgpm4+oRMVK6D3ASNWtRqhgXvmmWOkhKGcocxZF/Tc6whqAuOOSaJTn7vdSf8KfGAl
|
||||
g4RhBGNaQCon5Zq1OOsjxgeiLjoq6nUOLkfRE+uEFah6PQemFuyWwrresscH1SPgmHFfcZ0IBDou
|
||||
HcSJhjg1kUgovTZgHZlIXNlQQEYUVwhduXwy4OTQ/sjFAIl63IM4COQPdlKtgFgCl5gDK/OTitan
|
||||
WBYiRJCvlO0AkXRrqQddl9iUqgWGXNLgUaJd94diGR6N2BqqPmMzLPiX/EugpbzkAHTTROxi8VPH
|
||||
KIIE6vH1WZxxNeK9mlRjBBzhmgonHrxk6tUAXPsls6DqznBNPhxpyUYocYUNvGOqQZUzvsHN/vlz
|
||||
sBiqsu2ybhisWzHYvvNoYx6XacADsFiPasjgMt3wz+TmCSQ64x//fxc7h1A3E56H8uaM9jSbX5+2
|
||||
92P98v8q/0+v8vPNWbvX9n2Hv/D4i7w7n/8CslMmJ3ANAAA=
|
||||
string: '{"chart":{"result":null,"error":{"code":"Not Found","description":"No
|
||||
data found, symbol may be delisted"}}}'
|
||||
headers:
|
||||
Age:
|
||||
- '0'
|
||||
Cache-Control:
|
||||
- max-age=0, private
|
||||
Connection:
|
||||
- keep-alive
|
||||
Expect-CT:
|
||||
- max-age=31536000, report-uri="http://csp.yahoo.com/beacon/csp?src=yahoocom-expect-ct-report-only"
|
||||
Expires:
|
||||
- '-1'
|
||||
Referrer-Policy:
|
||||
- no-referrer-when-downgrade
|
||||
Strict-Transport-Security:
|
||||
- max-age=15552000
|
||||
- max-age=31536000
|
||||
X-Content-Type-Options:
|
||||
- nosniff
|
||||
X-Frame-Options:
|
||||
- SAMEORIGIN
|
||||
X-XSS-Protection:
|
||||
- 1; mode=block
|
||||
cache-control:
|
||||
- public, max-age=10, stale-while-revalidate=20
|
||||
content-encoding:
|
||||
- gzip
|
||||
content-length:
|
||||
- '1346'
|
||||
- '108'
|
||||
content-type:
|
||||
- application/json;charset=utf-8
|
||||
date:
|
||||
- Mon, 21 Mar 2022 11:04:33 GMT
|
||||
- Fri, 24 Feb 2023 16:00:33 GMT
|
||||
server:
|
||||
- ATS
|
||||
vary:
|
||||
- Origin,Accept-Encoding
|
||||
- Origin
|
||||
x-envoy-decorator-operation:
|
||||
- finance-chart-api--mtls-production-ir2.finance-k8s.svc.yahoo.local:4080/*
|
||||
- finance-chart-api--mtls-canary-production-bf1.finance-k8s.svc.yahoo.local:4080/*
|
||||
x-envoy-upstream-service-time:
|
||||
- '4'
|
||||
- '3'
|
||||
x-request-id:
|
||||
- f383d400-d576-47cd-8902-b1f3cb20505a
|
||||
- 7e200c20-47ba-491e-95e7-2a20fed8e68a
|
||||
x-yahoo-request-id:
|
||||
- 0ohs2v5h3gmu1
|
||||
- bi2i331hvhnp1
|
||||
y-rid:
|
||||
- 0ohs2v5h3gmu1
|
||||
- bi2i331hvhnp1
|
||||
status:
|
||||
code: 200
|
||||
message: OK
|
||||
code: 404
|
||||
message: Not Found
|
||||
version: 1
|
||||
|
||||
@@ -12,50 +12,53 @@ interactions:
|
||||
- Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML,
|
||||
like Gecko) Chrome/39.0.2171.95 Safari/537.36
|
||||
method: GET
|
||||
uri: https://query2.finance.yahoo.com/v8/finance/chart/%5EDJI?period1=1420066800&period2=1422831600&interval=1mo&includePrePost=False&events=div%2Csplits
|
||||
uri: https://query2.finance.yahoo.com/v8/finance/chart/DOWJONES?range=1d&interval=1d
|
||||
response:
|
||||
body:
|
||||
string: '{"chart":{"result":[{"meta":{"currency":"USD","symbol":"^DJI","exchangeName":"DJI","instrumentType":"INDEX","firstTradeDate":694362600,"regularMarketTime":1647637670,"gmtoffset":-14400,"timezone":"EDT","exchangeTimezoneName":"America/New_York","regularMarketPrice":34754.93,"chartPreviousClose":17823.07,"priceHint":2,"currentTradingPeriod":{"pre":{"timezone":"EDT","start":1647849600,"end":1647869400,"gmtoffset":-14400},"regular":{"timezone":"EDT","start":1647869400,"end":1647892800,"gmtoffset":-14400},"post":{"timezone":"EDT","start":1647892800,"end":1647907200,"gmtoffset":-14400}},"dataGranularity":"1mo","range":"","validRanges":["1d","5d","1mo","3mo","6mo","1y","2y","5y","10y","ytd","max"]},"timestamp":[1420088400,1422766800],"indicators":{"quote":[{"close":[17164.94921875,18132.69921875],"volume":[2173260000,1751250000],"open":[17823.0703125,17169.990234375],"low":[17136.30078125,17037.759765625],"high":[17951.779296875,18244.380859375]}],"adjclose":[{"adjclose":[17164.94921875,18132.69921875]}]}}],"error":null}}'
|
||||
string: '{"chart":{"result":null,"error":{"code":"Not Found","description":"No
|
||||
data found, symbol may be delisted"}}}'
|
||||
headers:
|
||||
Age:
|
||||
- '0'
|
||||
Cache-Control:
|
||||
- max-age=0, private
|
||||
Connection:
|
||||
- keep-alive
|
||||
Expect-CT:
|
||||
- max-age=31536000, report-uri="http://csp.yahoo.com/beacon/csp?src=yahoocom-expect-ct-report-only"
|
||||
Expires:
|
||||
- '-1'
|
||||
Referrer-Policy:
|
||||
- no-referrer-when-downgrade
|
||||
Strict-Transport-Security:
|
||||
- max-age=15552000
|
||||
- max-age=31536000
|
||||
X-Content-Type-Options:
|
||||
- nosniff
|
||||
X-Frame-Options:
|
||||
- SAMEORIGIN
|
||||
X-XSS-Protection:
|
||||
- 1; mode=block
|
||||
cache-control:
|
||||
- public, max-age=10, stale-while-revalidate=20
|
||||
content-length:
|
||||
- '1030'
|
||||
- '108'
|
||||
content-type:
|
||||
- application/json;charset=utf-8
|
||||
date:
|
||||
- Mon, 21 Mar 2022 11:04:33 GMT
|
||||
- Fri, 24 Feb 2023 16:00:33 GMT
|
||||
server:
|
||||
- ATS
|
||||
vary:
|
||||
- Origin,Accept-Encoding
|
||||
- Origin
|
||||
x-envoy-decorator-operation:
|
||||
- finance-chart-api--mtls-production-ir2.finance-k8s.svc.yahoo.local:4080/*
|
||||
- finance-chart-api--mtls-production-bf1.finance-k8s.svc.yahoo.local:4080/*
|
||||
x-envoy-upstream-service-time:
|
||||
- '2'
|
||||
- '3'
|
||||
x-request-id:
|
||||
- de69ead3-565b-4403-ba11-398acfad5c3d
|
||||
- c5f42423-f9ec-47e8-9c17-0ae2df60d59e
|
||||
x-yahoo-request-id:
|
||||
- 16dtef9h3gmu1
|
||||
- f0rn7qphvhnp1
|
||||
y-rid:
|
||||
- 16dtef9h3gmu1
|
||||
- f0rn7qphvhnp1
|
||||
status:
|
||||
code: 200
|
||||
message: OK
|
||||
code: 404
|
||||
message: Not Found
|
||||
version: 1
|
||||
|
||||
@@ -12,10 +12,69 @@ interactions:
|
||||
- Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML,
|
||||
like Gecko) Chrome/39.0.2171.95 Safari/537.36
|
||||
method: GET
|
||||
uri: https://query2.finance.yahoo.com/v8/finance/chart/%5EIXIC?period1=1591394400&period2=1594072800&interval=1wk&includePrePost=False&events=div%2Csplits
|
||||
uri: https://query2.finance.yahoo.com/v8/finance/chart/%5EIXIC?range=1d&interval=1d
|
||||
response:
|
||||
body:
|
||||
string: '{"chart":{"result":[{"meta":{"currency":"USD","symbol":"^IXIC","exchangeName":"NIM","instrumentType":"INDEX","firstTradeDate":34612200,"regularMarketTime":1647638159,"gmtoffset":-14400,"timezone":"EDT","exchangeTimezoneName":"America/New_York","regularMarketPrice":13893.837,"chartPreviousClose":9814.08,"priceHint":2,"currentTradingPeriod":{"pre":{"timezone":"EDT","end":1647869400,"start":1647849600,"gmtoffset":-14400},"regular":{"timezone":"EDT","end":1647892800,"start":1647869400,"gmtoffset":-14400},"post":{"timezone":"EDT","end":1647907200,"start":1647892800,"gmtoffset":-14400}},"dataGranularity":"1wk","range":"","validRanges":["1d","5d","1mo","3mo","6mo","1y","2y","5y","10y","ytd","max"]},"timestamp":[1590984000,1591588800,1592193600,1592798400,1593403200,1594008000],"indicators":{"quote":[{"volume":[6572850000,26190570000,23693060000,27718740000,17393620000,4529480000],"low":[9685.349609375,9413.6201171875,9403.0,9749.0703125,9663.6103515625,10354.98046875],"high":[9845.6904296875,10086.8896484375,10053.91015625,10221.849609375,10310.3603515625,10462.0498046875],"close":[9814.080078125,9588.8095703125,9946.1201171875,9757.2197265625,10207.6298828125,10433.650390625],"open":[9703.5400390625,9823.4404296875,9426.900390625,9945.490234375,9771.7197265625,10360.3798828125]}],"adjclose":[{"adjclose":[9814.080078125,9588.8095703125,9946.1201171875,9757.2197265625,10207.6298828125,10433.650390625]}]}}],"error":null}}'
|
||||
string: '{"chart":{"result":[{"meta":{"currency":"USD","symbol":"^IXIC","exchangeName":"NIM","instrumentType":"INDEX","firstTradeDate":34612200,"regularMarketTime":1677254424,"gmtoffset":-18000,"timezone":"EST","exchangeTimezoneName":"America/New_York","regularMarketPrice":11346.033,"chartPreviousClose":11590.401,"priceHint":2,"currentTradingPeriod":{"pre":{"timezone":"EST","start":1677229200,"end":1677249000,"gmtoffset":-18000},"regular":{"timezone":"EST","start":1677249000,"end":1677272400,"gmtoffset":-18000},"post":{"timezone":"EST","start":1677272400,"end":1677286800,"gmtoffset":-18000}},"dataGranularity":"1d","range":"1d","validRanges":["1d","5d","1mo","3mo","6mo","1y","2y","5y","10y","ytd","max"]},"timestamp":[1677254424],"indicators":{"quote":[{"volume":[1281909000],"close":[11346.033203125],"high":[11434.3642578125],"low":[11334.4658203125],"open":[11404.2001953125]}],"adjclose":[{"adjclose":[11346.033203125]}]}}],"error":null}}'
|
||||
headers:
|
||||
Age:
|
||||
- '4'
|
||||
Connection:
|
||||
- keep-alive
|
||||
Expect-CT:
|
||||
- max-age=31536000, report-uri="http://csp.yahoo.com/beacon/csp?src=yahoocom-expect-ct-report-only"
|
||||
Referrer-Policy:
|
||||
- no-referrer-when-downgrade
|
||||
Strict-Transport-Security:
|
||||
- max-age=31536000
|
||||
X-Content-Type-Options:
|
||||
- nosniff
|
||||
X-Frame-Options:
|
||||
- SAMEORIGIN
|
||||
X-XSS-Protection:
|
||||
- 1; mode=block
|
||||
cache-control:
|
||||
- public, max-age=10, stale-while-revalidate=20
|
||||
content-length:
|
||||
- '941'
|
||||
content-type:
|
||||
- application/json;charset=utf-8
|
||||
date:
|
||||
- Fri, 24 Feb 2023 16:00:29 GMT
|
||||
server:
|
||||
- ATS
|
||||
vary:
|
||||
- Origin,Accept-Encoding
|
||||
x-envoy-decorator-operation:
|
||||
- finance-chart-api--mtls-production-bf1.finance-k8s.svc.yahoo.local:4080/*
|
||||
x-envoy-upstream-service-time:
|
||||
- '2'
|
||||
x-request-id:
|
||||
- b0961b9f-ab9e-4e44-882e-d77971a49e58
|
||||
x-yahoo-request-id:
|
||||
- 2veavkhhvhnot
|
||||
y-rid:
|
||||
- 2veavkhhvhnot
|
||||
status:
|
||||
code: 200
|
||||
message: OK
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Accept:
|
||||
- '*/*'
|
||||
Accept-Encoding:
|
||||
- gzip, deflate
|
||||
Connection:
|
||||
- keep-alive
|
||||
User-Agent:
|
||||
- Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML,
|
||||
like Gecko) Chrome/39.0.2171.95 Safari/537.36
|
||||
method: GET
|
||||
uri: https://query2.finance.yahoo.com/v8/finance/chart/%5EIXIC?period1=1591416000&period2=1594094400&interval=1wk&includePrePost=False&events=div%2Csplits%2CcapitalGains
|
||||
response:
|
||||
body:
|
||||
string: '{"chart":{"result":[{"meta":{"currency":"USD","symbol":"^IXIC","exchangeName":"NIM","instrumentType":"INDEX","firstTradeDate":34612200,"regularMarketTime":1677254431,"gmtoffset":-18000,"timezone":"EST","exchangeTimezoneName":"America/New_York","regularMarketPrice":11346.06,"chartPreviousClose":9814.08,"priceHint":2,"currentTradingPeriod":{"pre":{"timezone":"EST","start":1677229200,"end":1677249000,"gmtoffset":-18000},"regular":{"timezone":"EST","start":1677249000,"end":1677272400,"gmtoffset":-18000},"post":{"timezone":"EST","start":1677272400,"end":1677286800,"gmtoffset":-18000}},"dataGranularity":"1wk","range":"","validRanges":["1d","5d","1mo","3mo","6mo","1y","2y","5y","10y","ytd","max"]},"timestamp":[1591588800,1592193600,1592798400,1593403200,1594008000],"indicators":{"quote":[{"close":[9588.8095703125,9946.1201171875,9757.2197265625,10207.6298828125,10343.8896484375],"high":[10086.8896484375,10053.91015625,10221.849609375,10310.3603515625,10518.98046875],"low":[9413.6201171875,9403.0,9749.0703125,9663.6103515625,10337.98046875],"volume":[26377480000,23854180000,27940280000,17509830000,8907390000],"open":[9823.4404296875,9426.900390625,9945.490234375,9771.7197265625,10360.3798828125]}],"adjclose":[{"adjclose":[9588.8095703125,9946.1201171875,9757.2197265625,10207.6298828125,10343.8896484375]}]}}],"error":null}}'
|
||||
headers:
|
||||
Age:
|
||||
- '0'
|
||||
@@ -26,7 +85,7 @@ interactions:
|
||||
Referrer-Policy:
|
||||
- no-referrer-when-downgrade
|
||||
Strict-Transport-Security:
|
||||
- max-age=15552000
|
||||
- max-age=31536000
|
||||
X-Content-Type-Options:
|
||||
- nosniff
|
||||
X-Frame-Options:
|
||||
@@ -36,25 +95,25 @@ interactions:
|
||||
cache-control:
|
||||
- public, max-age=10, stale-while-revalidate=20
|
||||
content-length:
|
||||
- '1436'
|
||||
- '1336'
|
||||
content-type:
|
||||
- application/json;charset=utf-8
|
||||
date:
|
||||
- Mon, 21 Mar 2022 11:04:33 GMT
|
||||
- Fri, 24 Feb 2023 16:00:33 GMT
|
||||
server:
|
||||
- ATS
|
||||
vary:
|
||||
- Origin,Accept-Encoding
|
||||
x-envoy-decorator-operation:
|
||||
- finance-chart-api--mtls-production-ir2.finance-k8s.svc.yahoo.local:4080/*
|
||||
- finance-chart-api--mtls-production-bf1.finance-k8s.svc.yahoo.local:4080/*
|
||||
x-envoy-upstream-service-time:
|
||||
- '2'
|
||||
- '8'
|
||||
x-request-id:
|
||||
- ce51e5cf-c2fa-49d8-a0a6-e21425fc0b95
|
||||
- 79fd3cef-06ee-4e5c-b10c-4f9bad009dca
|
||||
x-yahoo-request-id:
|
||||
- c4g1ttlh3gmu1
|
||||
- 7i1ddclhvhnp1
|
||||
y-rid:
|
||||
- c4g1ttlh3gmu1
|
||||
- 7i1ddclhvhnp1
|
||||
status:
|
||||
code: 200
|
||||
message: OK
|
||||
|
||||
@@ -12,30 +12,89 @@ interactions:
|
||||
- Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML,
|
||||
like Gecko) Chrome/39.0.2171.95 Safari/537.36
|
||||
method: GET
|
||||
uri: https://query2.finance.yahoo.com/v8/finance/chart/%5EGSPC?period1=1640991600&period2=1643756400&interval=1d&includePrePost=False&events=div%2Csplits
|
||||
uri: https://query2.finance.yahoo.com/v8/finance/chart/%5EGSPC?range=1d&interval=1d
|
||||
response:
|
||||
body:
|
||||
string: '{"chart":{"result":[{"meta":{"currency":"USD","symbol":"^GSPC","exchangeName":"SNP","instrumentType":"INDEX","firstTradeDate":-1325583000,"regularMarketTime":1677254431,"gmtoffset":-18000,"timezone":"EST","exchangeTimezoneName":"America/New_York","regularMarketPrice":3948.55,"chartPreviousClose":4012.32,"priceHint":2,"currentTradingPeriod":{"pre":{"timezone":"EST","end":1677249000,"start":1677229200,"gmtoffset":-18000},"regular":{"timezone":"EST","end":1677272400,"start":1677249000,"gmtoffset":-18000},"post":{"timezone":"EST","end":1677286800,"start":1677272400,"gmtoffset":-18000}},"dataGranularity":"1d","range":"1d","validRanges":["1d","5d","1mo","3mo","6mo","1y","2y","5y","10y","ytd","max"]},"timestamp":[1677254431],"indicators":{"quote":[{"high":[3973.239990234375],"low":[3943.080078125],"close":[3948.550048828125],"volume":[579373084],"open":[3973.239990234375]}],"adjclose":[{"adjclose":[3948.550048828125]}]}}],"error":null}}'
|
||||
headers:
|
||||
Age:
|
||||
- '1'
|
||||
Connection:
|
||||
- keep-alive
|
||||
Expect-CT:
|
||||
- max-age=31536000, report-uri="http://csp.yahoo.com/beacon/csp?src=yahoocom-expect-ct-report-only"
|
||||
Referrer-Policy:
|
||||
- no-referrer-when-downgrade
|
||||
Strict-Transport-Security:
|
||||
- max-age=31536000
|
||||
X-Content-Type-Options:
|
||||
- nosniff
|
||||
X-Frame-Options:
|
||||
- SAMEORIGIN
|
||||
X-XSS-Protection:
|
||||
- 1; mode=block
|
||||
cache-control:
|
||||
- public, max-age=10, stale-while-revalidate=20
|
||||
content-length:
|
||||
- '943'
|
||||
content-type:
|
||||
- application/json;charset=utf-8
|
||||
date:
|
||||
- Fri, 24 Feb 2023 16:00:32 GMT
|
||||
server:
|
||||
- ATS
|
||||
vary:
|
||||
- Origin,Accept-Encoding
|
||||
x-envoy-decorator-operation:
|
||||
- finance-chart-api--mtls-baseline-production-bf1.finance-k8s.svc.yahoo.local:4080/*
|
||||
x-envoy-upstream-service-time:
|
||||
- '3'
|
||||
x-request-id:
|
||||
- 1151c690-d755-4dcd-b01d-bce1dd80ca9c
|
||||
x-yahoo-request-id:
|
||||
- 3athbr5hvhnp1
|
||||
y-rid:
|
||||
- 3athbr5hvhnp1
|
||||
status:
|
||||
code: 200
|
||||
message: OK
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Accept:
|
||||
- '*/*'
|
||||
Accept-Encoding:
|
||||
- gzip, deflate
|
||||
Connection:
|
||||
- keep-alive
|
||||
User-Agent:
|
||||
- Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML,
|
||||
like Gecko) Chrome/39.0.2171.95 Safari/537.36
|
||||
method: GET
|
||||
uri: https://query2.finance.yahoo.com/v8/finance/chart/%5EGSPC?period1=1641013200&period2=1643778000&interval=1d&includePrePost=False&events=div%2Csplits%2CcapitalGains
|
||||
response:
|
||||
body:
|
||||
string: !!binary |
|
||||
H4sIAAAAAAAAAO1WwW4bNxD9F51VluSQQzK3Ig7SHmoYtQu0MNxia61tNZLWXa2cuIb+PW9WXIl0
|
||||
WuTWUy/UkBwO37x5w9XL7Pah6YfZm5dZ3253K1jXL7N1OzSydLvr+3Zz+zx7M/v58mw2n22f1390
|
||||
K0x/e3958RYL7Sec39y35826xfLl+QUWl5vt0O/W7Wa4en6U5R/Oz979go27Zb8drvpm0Z41Aza+
|
||||
MWS9j6S1nuP++92q6X9s+g/tcLWUeIZdYAocsH2/Hrq7u207yDHn5MQAp7+7jdzw7uyqQHOVNzKq
|
||||
79Ztv7xtvj1vP/7+a9d/mL267AK78HOOSRk7P1By0bdPy263fbvqtrIZmJWJ89mjOH+/3ACHuI4M
|
||||
jTktN/cXuKdbCHOPfSs/XyDcDiPbklh0iSWLdrPIC5zGtL7IdH/E+9WYOcQpZrLx32I+dtvhqwHz
|
||||
+WPApIP954CIuGiG5n3fbATqchDZmIWQLTXBBOZTs1oufpL5Fko7bHsZzLrDSOPI42ieMVgZvAxG
|
||||
y/g8iPO6+TS72R8EALDrR8QCOJ3YiJRgGmu1zSZp5slMNDkgFZdNzz5mM1o/OSRjJoeUQnawOroc
|
||||
15qgc1zrDU+rrO20yjHlYDYEn4ORJpcdyNgJL1kdJgebKN9GMHJcYprwUrCC90YabQFdD12/lTr+
|
||||
teukqdC/twfNXmfRahN8iMb6OZJm5XG9jz5RGBdICTRKmkcHrZVEz/4Mf+1S1I6juHMISlvQ4cHa
|
||||
6BC0sqk4b0hpTtGCn/FEsKwIpKbA+YRPr0KwVbH08LjE6BSZ7AGFJ6uCP+67iKlNJ1SUgkqUEqp6
|
||||
QOGMRienGHMA8qyc1yZ5OsxdwoGCFwJKf0KA0ryCZDxoOt3oHRe0oRRP3Wonj821xTNipO56LlXP
|
||||
JkFF2h/MQCRHxaRgbF61IcWQfUGdPphgkbMpYsvHPKXx0RSHiFkOZscXZTRjoBzMhfGkmMn5aEbT
|
||||
G2goB0sxiaRhOmRnQzYD1JcdiDXlVaEwZ5HYjSaS7x7bzSi34JXVCSiyuEJUKIkhDgcxgL+S5hBR
|
||||
t6QtudGdoUUQenJn1BW9O+nEe0WAm5051bGDjVDutA2Sa6HjO1LdBUlZd5z6GGtRehdq2ULZCklX
|
||||
kiJTCJ3Qa1wCcjoqV4ksVr1FJM1ZqhaqC0UvQTzI4XgFiF51Hw9t7dWYpAe/nNLUasEpqd9R5tgC
|
||||
guIGQFP21EjSeaEkoeKEKdbh8N6pUJSXfd37bNwIy3NU5TkIFLI4zQFUpbIbU1lYa63Ca2pMptHG
|
||||
V68BQUSh7H4NmuCXLHr8hA5JK11dGyGJU41B58Py/mHkM7KShioeyaqS0cQKUoAuK2KsV4VUgq7z
|
||||
40A1kgBo5fMUXKzud/U2o9zVvNYuG1O9TfgC1YS5hK6rmDCvxY0Q5dSTsuUDiyKUQnHyHuMDa1yu
|
||||
Gb5/Kpad6yENN3XbzR5cN4s/p8/SSzn5/xv1H32j9jd7qUPb9x3+R+I/2mq//wwCtIM0/wsAAA==
|
||||
H4sIAAAAAAAAAO1WTW/jNhD9Lzq7LMnh8GNvxWax7aGB0aRAiyAtVFtJ3LUtV5Kzmwb+7/soUTGZ
|
||||
bbGn3nqhhuRwPt68IfVcrR7qbqjePFdd0x+3kG6eq10z1HFpdey6Zr96qt5UP19dVIuqf9r90W4x
|
||||
/e391fItFppPOL+/by7rXYPlq8slFjf7fuiOu2Y/XD8d4vIPlxfvfsHG3abrh+uuXjcX9YCNbxRp
|
||||
Zk9SygX83x+3dfdj3X1ohutNtKesc5qNIb2o7ndDe3fXN0M85scTA5T+bvfRw7ur6yya67SRovpu
|
||||
13SbVf3tZfPx91/b7kP1ytkSu9CjYLxgt5ggWXbN46Y99m+3bY9N46wVyi+qQ1T+frNHHIhqQmjM
|
||||
abO/X8JPu47IHbomfr6IsB9GtMfEdNAxi2a/TgsmjGl9kenpJd6v2kwmzjax9G82D20/fNVgOn82
|
||||
6K3/Z4OwuK6H+n1X72OomyHSRq0j2LEmmEB8rLeb9U9x3oNp0zbHQe1ajDSOdhzVEwYdB46DknF8
|
||||
GqLyrv5U3Z4mAiDY3QG2lDVKaxkhjSJJa2cxjASLonHBJJEt+yR6zbNCUGpWCMElBS29SXa1cjLZ
|
||||
1azsvGqlnletD8mYdo6TMZJkkgIprZICaelmBR0oeSMIyS5ZmuMlNAIUbmN3rUHmoe36WLy/jm3s
|
||||
JDTtaiLqDXK0guGNPQdyvMACiRgJBWl1nEspojHnVZxa6EsTvDTWR3VUWUiN7BkgjQpOCh2y84qE
|
||||
tMFrwDGecNoKAobB2XSCwysTVgufazCcKBm8JT1FwaSF45d94zHV4RwVBScChYAiTlEYJYXSwftk
|
||||
gNgKw1IFpmluAg5I5TjlSYiSzxGgEq9CUgyYzh7Z2Aw2IN8emv0IsPMCUSiybsofR3LLziPUIDWZ
|
||||
EX4L+GHjrG6RCtg5Q8MsiIJPyjaUttFxKNa87YjK2loqfQFFdOw8Ze/LOrBxZaVQTEGuRJFUVlvC
|
||||
vWfzgIz0whS4+oJORPGizAsFoF1GH1YBOby4ALDb9uOIKwNXG8LMKmeEBldfKooteM4sIyShz5yJ
|
||||
JHN58gUWlnxpDp0snAzBygQllzS3yojRjvUiP8cEvWyOQEXIiRfygmqtBe4JpRJ82r8iPoE8Lie6
|
||||
BDzQCxp0PkeHpIUs3HpQ4VxbwPiwuX+YL4CiZF75IgYHAhZIaBYZJ5wsE7KOStcOseSt5/Bwxlfc
|
||||
zdNy21ou5yVJrVJF3+EyLREyAe1VpK5esxgm8imT0PnlAdRzZph41+CtUCYVCVe58HmLMrhg5rYC
|
||||
tI/t9hj/JW7Ik4pY4FaGbcJzMIreA/RJ1IG1n0TlFatJZIVJWkXnh0mUuOaSMTwnjiYRL4BJCkB2
|
||||
9AAR/IyvxegYPTg5xt9TUJOCDYBrcsEKFyEnBdB8OsbIV0+6LJFFSCKQTpF5ZcefMXl7Qs71+s/5
|
||||
TXnOJ/8/MP/NA3O6PUXYm65r8aOHn6jt6fQZST2vJ6ALAAA=
|
||||
headers:
|
||||
Age:
|
||||
- '0'
|
||||
@@ -46,7 +105,7 @@ interactions:
|
||||
Referrer-Policy:
|
||||
- no-referrer-when-downgrade
|
||||
Strict-Transport-Security:
|
||||
- max-age=15552000
|
||||
- max-age=31536000
|
||||
X-Content-Type-Options:
|
||||
- nosniff
|
||||
X-Frame-Options:
|
||||
@@ -58,25 +117,25 @@ interactions:
|
||||
content-encoding:
|
||||
- gzip
|
||||
content-length:
|
||||
- '1138'
|
||||
- '1118'
|
||||
content-type:
|
||||
- application/json;charset=utf-8
|
||||
date:
|
||||
- Mon, 21 Mar 2022 11:04:33 GMT
|
||||
- Fri, 24 Feb 2023 16:00:33 GMT
|
||||
server:
|
||||
- ATS
|
||||
vary:
|
||||
- Origin,Accept-Encoding
|
||||
x-envoy-decorator-operation:
|
||||
- finance-chart-api--mtls-production-ir2.finance-k8s.svc.yahoo.local:4080/*
|
||||
- finance-chart-api--mtls-production-bf1.finance-k8s.svc.yahoo.local:4080/*
|
||||
x-envoy-upstream-service-time:
|
||||
- '3'
|
||||
- '4'
|
||||
x-request-id:
|
||||
- cdf4cc2c-b308-4c63-ba32-08cb56153f0e
|
||||
- 98131962-ad56-459c-a7a0-05a51e54f38c
|
||||
x-yahoo-request-id:
|
||||
- 1bd3i4hh3gmu1
|
||||
- 47l9j5thvhnp1
|
||||
y-rid:
|
||||
- 1bd3i4hh3gmu1
|
||||
- 47l9j5thvhnp1
|
||||
status:
|
||||
code: 200
|
||||
message: OK
|
||||
|
||||
@@ -82,35 +82,6 @@ def test_load_data(func, kwargs_dict, recorder):
|
||||
recorder.capture(result_df)
|
||||
|
||||
|
||||
@pytest.mark.skip(reason="Date needs to be mocked.")
|
||||
@pytest.mark.vcr
|
||||
@pytest.mark.parametrize("date", ["2022-03-21"])
|
||||
def test_yield_curve(date, recorder):
|
||||
result_df, returned_date = fred_model.get_yield_curve(date)
|
||||
assert date == returned_date
|
||||
assert not result_df.empty
|
||||
recorder.capture(result_df)
|
||||
|
||||
|
||||
@pytest.mark.skip(reason="Date needs to be mocked.")
|
||||
@pytest.mark.vcr
|
||||
@pytest.mark.parametrize("date", ["2021-07-17"])
|
||||
def test_yield_curve_weekend(date):
|
||||
result_df, returned_date = fred_model.get_yield_curve(date)
|
||||
assert date == returned_date
|
||||
assert result_df.empty
|
||||
|
||||
|
||||
@pytest.mark.skip(reason="Date needs to be mocked.")
|
||||
@pytest.mark.vcr
|
||||
@pytest.mark.parametrize("date", [None])
|
||||
def test_yield_curve_none(date, recorder):
|
||||
result_df, returned_date = fred_model.get_yield_curve(date)
|
||||
assert returned_date.strftime("%Y-%m-%d") == "2022-03-21"
|
||||
assert not result_df.empty
|
||||
recorder.capture(result_df)
|
||||
|
||||
|
||||
@pytest.mark.vcr
|
||||
@pytest.mark.parametrize(
|
||||
"func, kwargs_dict",
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
futures display a futures and commodities overview [WallStreetJournal, Finviz]
|
||||
map S&P500 index stocks map [Finviz]
|
||||
bigmac The Economist Big Mac index [Nasdaq]
|
||||
ycrv show sovereign yield curves [FRED]
|
||||
events show economic calendar [Nasdaq]
|
||||
edebt show external debt statistics for various countries [Wikipedia]
|
||||
|
||||
|
||||
24042
tests/openbb_terminal/fixedincome/cassettes/test_ecb_model/test_get_ecb_yield_curve.yaml
vendored
Normal file
24042
tests/openbb_terminal/fixedincome/cassettes/test_ecb_model/test_get_ecb_yield_curve.yaml
vendored
Normal file
File diff suppressed because it is too large
Load Diff
479
tests/openbb_terminal/fixedincome/cassettes/test_ecb_model/test_get_series_data.yaml
vendored
Normal file
479
tests/openbb_terminal/fixedincome/cassettes/test_ecb_model/test_get_series_data.yaml
vendored
Normal file
@@ -0,0 +1,479 @@
|
||||
interactions:
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Connection:
|
||||
- close
|
||||
Host:
|
||||
- sdw.ecb.europa.eu
|
||||
User-Agent:
|
||||
- Python-urllib/3.9
|
||||
method: GET
|
||||
uri: https://sdw.ecb.europa.eu/quickviewexport.do?trans=N&start=2022-010&end=2022-013&SERIES_KEY=EST.B.EU000A2X2A25.WT&type=csv
|
||||
response:
|
||||
body:
|
||||
string: "Data Source in SDW: null\r\n,EST.B.EU000A2X2A25.WT\r\n,Euro short-term
|
||||
rate - Volume-weighted trimmed mean rate - Unsecured - Overnight - Borrowing
|
||||
- Financial corporations\r\nCollection:,Average of observations through period
|
||||
(A)\r\nPeriod\\Unit:,[Percent ]\r\n,,obs. status\r\n2023-02-20,2.400,Normal
|
||||
value (A)\r\n2023-02-17,2.398,Normal value (A)\r\n2023-02-16,2.400,Normal
|
||||
value (A)\r\n2023-02-15,2.405,Normal value (A)\r\n2023-02-14,2.400,Normal
|
||||
value (A)\r\n2023-02-13,2.400,Normal value (A)\r\n2023-02-10,2.401,Normal
|
||||
value (A)\r\n2023-02-09,2.401,Normal value (A)\r\n2023-02-08,2.401,Normal
|
||||
value (A)\r\n2023-02-07,1.902,Normal value (A)\r\n2023-02-06,1.901,Normal
|
||||
value (A)\r\n2023-02-03,1.898,Normal value (A)\r\n2023-02-02,1.902,Normal
|
||||
value (A)\r\n2023-02-01,1.901,Normal value (A)\r\n2023-01-31,1.894,Normal
|
||||
value (A)\r\n2023-01-30,1.904,Normal value (A)\r\n2023-01-27,1.906,Normal
|
||||
value (A)\r\n2023-01-26,1.904,Normal value (A)\r\n2023-01-25,1.904,Normal
|
||||
value (A)\r\n2023-01-24,1.904,Normal value (A)\r\n2023-01-23,1.902,Normal
|
||||
value (A)\r\n2023-01-20,1.903,Normal value (A)\r\n2023-01-19,1.903,Normal
|
||||
value (A)\r\n2023-01-18,1.902,Normal value (A)\r\n2023-01-17,1.901,Normal
|
||||
value (A)\r\n2023-01-16,1.902,Normal value (A)\r\n2023-01-13,1.901,Normal
|
||||
value (A)\r\n2023-01-12,1.900,Normal value (A)\r\n2023-01-11,1.900,Normal
|
||||
value (A)\r\n2023-01-10,1.900,Normal value (A)\r\n2023-01-09,1.900,Normal
|
||||
value (A)\r\n2023-01-06,1.898,Normal value (A)\r\n2023-01-05,1.900,Normal
|
||||
value (A)\r\n2023-01-04,1.904,Normal value (A)\r\n2023-01-03,1.904,Normal
|
||||
value (A)\r\n2023-01-02,1.906,Normal value (A)\r\n2022-12-30,1.890,Normal
|
||||
value (A)\r\n2022-12-29,1.905,Normal value (A)\r\n2022-12-28,1.906,Normal
|
||||
value (A)\r\n2022-12-27,1.906,Normal value (A)\r\n2022-12-23,1.907,Normal
|
||||
value (A)\r\n2022-12-22,1.904,Normal value (A)\r\n2022-12-21,1.902,Normal
|
||||
value (A)\r\n2022-12-20,1.403,Normal value (A)\r\n2022-12-19,1.403,Normal
|
||||
value (A)\r\n2022-12-16,1.402,Normal value (A)\r\n2022-12-15,1.403,Normal
|
||||
value (A)\r\n2022-12-14,1.402,Normal value (A)\r\n2022-12-13,1.400,Normal
|
||||
value (A)\r\n2022-12-12,1.400,Normal value (A)\r\n2022-12-09,1.400,Normal
|
||||
value (A)\r\n2022-12-08,1.400,Normal value (A)\r\n2022-12-07,1.399,Normal
|
||||
value (A)\r\n2022-12-06,1.406,Normal value (A)\r\n2022-12-05,1.398,Normal
|
||||
value (A)\r\n2022-12-02,1.400,Normal value (A)\r\n2022-12-01,1.400,Normal
|
||||
value (A)\r\n2022-11-30,1.391,Normal value (A)\r\n2022-11-29,1.402,Normal
|
||||
value (A)\r\n2022-11-28,1.403,Normal value (A)\r\n2022-11-25,1.403,Normal
|
||||
value (A)\r\n2022-11-24,1.405,Normal value (A)\r\n2022-11-23,1.405,Normal
|
||||
value (A)\r\n2022-11-22,1.404,Normal value (A)\r\n2022-11-21,1.403,Normal
|
||||
value (A)\r\n2022-11-18,1.403,Normal value (A)\r\n2022-11-17,1.402,Normal
|
||||
value (A)\r\n2022-11-16,1.401,Normal value (A)\r\n2022-11-15,1.400,Normal
|
||||
value (A)\r\n2022-11-14,1.401,Normal value (A)\r\n2022-11-11,1.404,Normal
|
||||
value (A)\r\n2022-11-10,1.402,Normal value (A)\r\n2022-11-09,1.400,Normal
|
||||
value (A)\r\n2022-11-08,1.400,Normal value (A)\r\n2022-11-07,1.400,Normal
|
||||
value (A)\r\n2022-11-04,1.401,Normal value (A)\r\n2022-11-03,1.403,Normal
|
||||
value (A)\r\n2022-11-02,1.403,Normal value (A)\r\n2022-11-01,0.659,Normal
|
||||
value (A)\r\n2022-10-31,0.648,Normal value (A)\r\n2022-10-28,0.656,Normal
|
||||
value (A)\r\n2022-10-27,0.657,Normal value (A)\r\n2022-10-26,0.656,Normal
|
||||
value (A)\r\n2022-10-25,0.656,Normal value (A)\r\n2022-10-24,0.658,Normal
|
||||
value (A)\r\n2022-10-21,0.657,Normal value (A)\r\n2022-10-20,0.656,Normal
|
||||
value (A)\r\n2022-10-19,0.656,Normal value (A)\r\n2022-10-18,0.657,Normal
|
||||
value (A)\r\n2022-10-17,0.658,Normal value (A)\r\n2022-10-14,0.657,Normal
|
||||
value (A)\r\n2022-10-13,0.658,Normal value (A)\r\n2022-10-12,0.658,Normal
|
||||
value (A)\r\n2022-10-11,0.657,Normal value (A)\r\n2022-10-10,0.655,Normal
|
||||
value (A)\r\n2022-10-07,0.656,Normal value (A)\r\n2022-10-06,0.655,Normal
|
||||
value (A)\r\n2022-10-05,0.652,Normal value (A)\r\n2022-10-04,0.657,Normal
|
||||
value (A)\r\n2022-10-03,0.656,Normal value (A)\r\n2022-09-30,0.642,Normal
|
||||
value (A)\r\n2022-09-29,0.661,Normal value (A)\r\n2022-09-28,0.662,Normal
|
||||
value (A)\r\n2022-09-27,0.662,Normal value (A)\r\n2022-09-26,0.663,Normal
|
||||
value (A)\r\n2022-09-23,0.662,Normal value (A)\r\n2022-09-22,0.661,Normal
|
||||
value (A)\r\n2022-09-21,0.661,Normal value (A)\r\n2022-09-20,0.659,Normal
|
||||
value (A)\r\n2022-09-19,0.657,Normal value (A)\r\n2022-09-16,0.660,Normal
|
||||
value (A)\r\n2022-09-15,0.660,Normal value (A)\r\n2022-09-14,0.662,Normal
|
||||
value (A)\r\n2022-09-13,-0.083,Normal value (A)\r\n2022-09-12,-0.086,Normal
|
||||
value (A)\r\n2022-09-09,-0.085,Normal value (A)\r\n2022-09-08,-0.086,Normal
|
||||
value (A)\r\n2022-09-07,-0.076,Normal value (A)\r\n2022-09-06,-0.085,Normal
|
||||
value (A)\r\n2022-09-05,-0.087,Normal value (A)\r\n2022-09-02,-0.083,Normal
|
||||
value (A)\r\n2022-09-01,-0.084,Normal value (A)\r\n2022-08-31,-0.091,Normal
|
||||
value (A)\r\n2022-08-30,-0.084,Normal value (A)\r\n2022-08-29,-0.081,Normal
|
||||
value (A)\r\n2022-08-26,-0.080,Normal value (A)\r\n2022-08-25,-0.080,Normal
|
||||
value (A)\r\n2022-08-24,-0.082,Normal value (A)\r\n2022-08-23,-0.080,Normal
|
||||
value (A)\r\n2022-08-22,-0.082,Normal value (A)\r\n2022-08-19,-0.084,Normal
|
||||
value (A)\r\n2022-08-18,-0.084,Normal value (A)\r\n2022-08-17,-0.087,Normal
|
||||
value (A)\r\n2022-08-16,-0.087,Normal value (A)\r\n2022-08-15,-0.088,Normal
|
||||
value (A)\r\n2022-08-12,-0.088,Normal value (A)\r\n2022-08-11,-0.085,Normal
|
||||
value (A)\r\n2022-08-10,-0.086,Normal value (A)\r\n2022-08-09,-0.085,Normal
|
||||
value (A)\r\n2022-08-08,-0.085,Normal value (A)\r\n2022-08-05,-0.085,Normal
|
||||
value (A)\r\n2022-08-04,-0.084,Normal value (A)\r\n2022-08-03,-0.087,Normal
|
||||
value (A)\r\n2022-08-02,-0.087,Normal value (A)\r\n2022-08-01,-0.088,Normal
|
||||
value (A)\r\n2022-07-29,-0.091,Normal value (A)\r\n2022-07-28,-0.087,Normal
|
||||
value (A)\r\n2022-07-27,-0.085,Normal value (A)\r\n2022-07-26,-0.581,Normal
|
||||
value (A)\r\n2022-07-25,-0.583,Normal value (A)\r\n2022-07-22,-0.582,Normal
|
||||
value (A)\r\n2022-07-21,-0.584,Normal value (A)\r\n2022-07-20,-0.582,Normal
|
||||
value (A)\r\n2022-07-19,-0.583,Normal value (A)\r\n2022-07-18,-0.582,Normal
|
||||
value (A)\r\n2022-07-15,-0.582,Normal value (A)\r\n2022-07-14,-0.582,Normal
|
||||
value (A)\r\n2022-07-13,-0.581,Normal value (A)\r\n2022-07-12,-0.580,Normal
|
||||
value (A)\r\n2022-07-11,-0.580,Normal value (A)\r\n2022-07-08,-0.579,Normal
|
||||
value (A)\r\n2022-07-07,-0.579,Normal value (A)\r\n2022-07-06,-0.580,Normal
|
||||
value (A)\r\n2022-07-05,-0.580,Normal value (A)\r\n2022-07-04,-0.580,Normal
|
||||
value (A)\r\n2022-07-01,-0.580,Normal value (A)\r\n2022-06-30,-0.591,Normal
|
||||
value (A)\r\n2022-06-29,-0.578,Normal value (A)\r\n2022-06-28,-0.581,Normal
|
||||
value (A)\r\n2022-06-27,-0.579,Normal value (A)\r\n2022-06-24,-0.580,Normal
|
||||
value (A)\r\n2022-06-23,-0.578,Normal value (A)\r\n2022-06-22,-0.579,Normal
|
||||
value (A)\r\n2022-06-21,-0.582,Normal value (A)\r\n2022-06-20,-0.581,Normal
|
||||
value (A)\r\n2022-06-17,-0.582,Normal value (A)\r\n2022-06-16,-0.582,Normal
|
||||
value (A)\r\n2022-06-15,-0.580,Normal value (A)\r\n2022-06-14,-0.578,Normal
|
||||
value (A)\r\n2022-06-13,-0.580,Normal value (A)\r\n2022-06-10,-0.581,Normal
|
||||
value (A)\r\n2022-06-09,-0.582,Normal value (A)\r\n2022-06-08,-0.582,Normal
|
||||
value (A)\r\n2022-06-07,-0.583,Normal value (A)\r\n2022-06-06,-0.590,Normal
|
||||
value (A)\r\n2022-06-03,-0.587,Normal value (A)\r\n2022-06-02,-0.585,Normal
|
||||
value (A)\r\n2022-06-01,-0.582,Normal value (A)\r\n2022-05-31,-0.589,Normal
|
||||
value (A)\r\n2022-05-30,-0.586,Normal value (A)\r\n2022-05-27,-0.585,Normal
|
||||
value (A)\r\n2022-05-26,-0.590,Normal value (A)\r\n2022-05-25,-0.587,Normal
|
||||
value (A)\r\n2022-05-24,-0.587,Normal value (A)\r\n2022-05-23,-0.586,Normal
|
||||
value (A)\r\n2022-05-20,-0.585,Normal value (A)\r\n2022-05-19,-0.585,Normal
|
||||
value (A)\r\n2022-05-18,-0.585,Normal value (A)\r\n2022-05-17,-0.585,Normal
|
||||
value (A)\r\n2022-05-16,-0.585,Normal value (A)\r\n2022-05-13,-0.586,Normal
|
||||
value (A)\r\n2022-05-12,-0.577,Normal value (A)\r\n2022-05-11,-0.584,Normal
|
||||
value (A)\r\n2022-05-10,-0.584,Normal value (A)\r\n2022-05-09,-0.586,Normal
|
||||
value (A)\r\n2022-05-06,-0.585,Normal value (A)\r\n2022-05-05,-0.585,Normal
|
||||
value (A)\r\n2022-05-04,-0.585,Normal value (A)\r\n2022-05-03,-0.579,Normal
|
||||
value (A)\r\n2022-05-02,-0.583,Normal value (A)\r\n2022-04-29,-0.586,Normal
|
||||
value (A)\r\n2022-04-28,-0.583,Normal value (A)\r\n2022-04-27,-0.583,Normal
|
||||
value (A)\r\n2022-04-26,-0.582,Normal value (A)\r\n2022-04-25,-0.585,Normal
|
||||
value (A)\r\n2022-04-22,-0.583,Normal value (A)\r\n2022-04-21,-0.585,Normal
|
||||
value (A)\r\n2022-04-20,-0.583,Normal value (A)\r\n2022-04-19,-0.580,Normal
|
||||
value (A)\r\n2022-04-14,-0.586,Normal value (A)\r\n2022-04-13,-0.585,Normal
|
||||
value (A)\r\n2022-04-12,-0.583,Normal value (A)\r\n2022-04-11,-0.584,Normal
|
||||
value (A)\r\n2022-04-08,-0.583,Normal value (A)\r\n2022-04-07,-0.582,Normal
|
||||
value (A)\r\n2022-04-06,-0.584,Normal value (A)\r\n2022-04-05,-0.586,Normal
|
||||
value (A)\r\n2022-04-04,-0.585,Normal value (A)\r\n2022-04-01,-0.582,Normal
|
||||
value (A)\r\n2022-03-31,-0.593,Normal value (A)\r\n2022-03-30,-0.579,Normal
|
||||
value (A)\r\n2022-03-29,-0.579,Normal value (A)\r\n2022-03-28,-0.580,Normal
|
||||
value (A)\r\n2022-03-25,-0.581,Normal value (A)\r\n2022-03-24,-0.579,Normal
|
||||
value (A)\r\n2022-03-23,-0.578,Normal value (A)\r\n2022-03-22,-0.578,Normal
|
||||
value (A)\r\n2022-03-21,-0.578,Normal value (A)\r\n2022-03-18,-0.578,Normal
|
||||
value (A)\r\n2022-03-17,-0.578,Normal value (A)\r\n2022-03-16,-0.577,Normal
|
||||
value (A)\r\n2022-03-15,-0.573,Normal value (A)\r\n2022-03-14,-0.577,Normal
|
||||
value (A)\r\n2022-03-11,-0.577,Normal value (A)\r\n2022-03-10,-0.576,Normal
|
||||
value (A)\r\n2022-03-09,-0.580,Normal value (A)\r\n2022-03-08,-0.579,Normal
|
||||
value (A)\r\n2022-03-07,-0.579,Normal value (A)\r\n2022-03-04,-0.577,Normal
|
||||
value (A)\r\n2022-03-03,-0.579,Normal value (A)\r\n2022-03-02,-0.578,Normal
|
||||
value (A)\r\n2022-03-01,-0.577,Normal value (A)\r\n2022-02-28,-0.580,Normal
|
||||
value (A)\r\n2022-02-25,-0.575,Normal value (A)\r\n2022-02-24,-0.576,Normal
|
||||
value (A)\r\n2022-02-23,-0.576,Normal value (A)\r\n2022-02-22,-0.575,Normal
|
||||
value (A)\r\n2022-02-21,-0.576,Normal value (A)\r\n2022-02-18,-0.576,Normal
|
||||
value (A)\r\n2022-02-17,-0.576,Normal value (A)\r\n2022-02-16,-0.576,Normal
|
||||
value (A)\r\n2022-02-15,-0.576,Normal value (A)\r\n2022-02-14,-0.578,Normal
|
||||
value (A)\r\n2022-02-11,-0.578,Normal value (A)\r\n2022-02-10,-0.572,Normal
|
||||
value (A)\r\n2022-02-09,-0.578,Normal value (A)\r\n2022-02-08,-0.574,Normal
|
||||
value (A)\r\n2022-02-07,-0.578,Normal value (A)\r\n2022-02-04,-0.578,Normal
|
||||
value (A)\r\n2022-02-03,-0.577,Normal value (A)\r\n2022-02-02,-0.578,Normal
|
||||
value (A)\r\n2022-02-01,-0.578,Normal value (A)\r\n2022-01-31,-0.579,Normal
|
||||
value (A)\r\n2022-01-28,-0.573,Normal value (A)\r\n2022-01-27,-0.573,Normal
|
||||
value (A)\r\n2022-01-26,-0.576,Normal value (A)\r\n2022-01-25,-0.578,Normal
|
||||
value (A)\r\n2022-01-24,-0.579,Normal value (A)\r\n2022-01-21,-0.579,Normal
|
||||
value (A)\r\n2022-01-20,-0.579,Normal value (A)\r\n2022-01-19,-0.578,Normal
|
||||
value (A)\r\n2022-01-18,-0.579,Normal value (A)\r\n2022-01-17,-0.578,Normal
|
||||
value (A)\r\n2022-01-14,-0.578,Normal value (A)\r\n2022-01-13,-0.578,Normal
|
||||
value (A)\r\n2022-01-12,-0.578,Normal value (A)\r\n2022-01-11,-0.579,Normal
|
||||
value (A)\r\n2022-01-10,-0.579,Normal value (A)\r\n2022-01-07,-0.580,Normal
|
||||
value (A)\r\n2022-01-06,-0.578,Normal value (A)\r\n2022-01-05,-0.578,Normal
|
||||
value (A)\r\n2022-01-04,-0.578,Normal value (A)\r\n2022-01-03,-0.578,Normal
|
||||
value (A)\r\n2021-12-31,-0.590,Normal value (A)\r\n2021-12-30,-0.580,Normal
|
||||
value (A)\r\n2021-12-29,-0.578,Normal value (A)\r\n2021-12-28,-0.575,Normal
|
||||
value (A)\r\n2021-12-27,-0.576,Normal value (A)\r\n2021-12-24,-0.580,Normal
|
||||
value (A)\r\n2021-12-23,-0.576,Normal value (A)\r\n2021-12-22,-0.574,Normal
|
||||
value (A)\r\n2021-12-21,-0.571,Normal value (A)\r\n2021-12-20,-0.576,Normal
|
||||
value (A)\r\n2021-12-17,-0.576,Normal value (A)\r\n2021-12-16,-0.577,Normal
|
||||
value (A)\r\n2021-12-15,-0.577,Normal value (A)\r\n2021-12-14,-0.577,Normal
|
||||
value (A)\r\n2021-12-13,-0.579,Normal value (A)\r\n2021-12-10,-0.577,Normal
|
||||
value (A)\r\n2021-12-09,-0.578,Normal value (A)\r\n2021-12-08,-0.577,Normal
|
||||
value (A)\r\n2021-12-07,-0.577,Normal value (A)\r\n2021-12-06,-0.578,Normal
|
||||
value (A)\r\n2021-12-03,-0.578,Normal value (A)\r\n2021-12-02,-0.575,Normal
|
||||
value (A)\r\n2021-12-01,-0.574,Normal value (A)\r\n2021-11-30,-0.575,Normal
|
||||
value (A)\r\n2021-11-29,-0.573,Normal value (A)\r\n2021-11-26,-0.573,Normal
|
||||
value (A)\r\n2021-11-25,-0.573,Normal value (A)\r\n2021-11-24,-0.570,Normal
|
||||
value (A)\r\n2021-11-23,-0.574,Normal value (A)\r\n2021-11-22,-0.573,Normal
|
||||
value (A)\r\n2021-11-19,-0.573,Normal value (A)\r\n2021-11-18,-0.571,Normal
|
||||
value (A)\r\n2021-11-17,-0.571,Normal value (A)\r\n2021-11-16,-0.571,Normal
|
||||
value (A)\r\n2021-11-15,-0.569,Normal value (A)\r\n2021-11-12,-0.572,Normal
|
||||
value (A)\r\n2021-11-11,-0.575,Normal value (A)\r\n2021-11-10,-0.576,Normal
|
||||
value (A)\r\n2021-11-09,-0.575,Normal value (A)\r\n2021-11-08,-0.575,Normal
|
||||
value (A)\r\n2021-11-05,-0.572,Normal value (A)\r\n2021-11-04,-0.573,Normal
|
||||
value (A)\r\n2021-11-03,-0.574,Normal value (A)\r\n2021-11-02,-0.569,Normal
|
||||
value (A)\r\n2021-11-01,-0.579,Normal value (A)\r\n2021-10-29,-0.578,Normal
|
||||
value (A)\r\n2021-10-28,-0.573,Normal value (A)\r\n2021-10-27,-0.573,Normal
|
||||
value (A)\r\n2021-10-26,-0.570,Normal value (A)\r\n2021-10-25,-0.571,Normal
|
||||
value (A)\r\n2021-10-22,-0.569,Normal value (A)\r\n2021-10-21,-0.573,Normal
|
||||
value (A)\r\n2021-10-20,-0.571,Normal value (A)\r\n2021-10-19,-0.573,Normal
|
||||
value (A)\r\n2021-10-18,-0.574,Normal value (A)\r\n2021-10-15,-0.572,Normal
|
||||
value (A)\r\n2021-10-14,-0.570,Normal value (A)\r\n2021-10-13,-0.569,Normal
|
||||
value (A)\r\n2021-10-12,-0.562,Normal value (A)\r\n2021-10-11,-0.570,Normal
|
||||
value (A)\r\n2021-10-08,-0.568,Normal value (A)\r\n2021-10-07,-0.568,Normal
|
||||
value (A)\r\n2021-10-06,-0.569,Normal value (A)\r\n2021-10-05,-0.569,Normal
|
||||
value (A)\r\n2021-10-04,-0.569,Normal value (A)\r\n2021-10-01,-0.571,Normal
|
||||
value (A)\r\n2021-09-30,-0.580,Normal value (A)\r\n2021-09-29,-0.572,Normal
|
||||
value (A)\r\n2021-09-28,-0.573,Normal value (A)\r\n2021-09-27,-0.571,Normal
|
||||
value (A)\r\n2021-09-24,-0.569,Normal value (A)\r\n2021-09-23,-0.570,Normal
|
||||
value (A)\r\n2021-09-22,-0.566,Normal value (A)\r\n2021-09-21,-0.571,Normal
|
||||
value (A)\r\n2021-09-20,-0.566,Normal value (A)\r\n2021-09-17,-0.571,Normal
|
||||
value (A)\r\n2021-09-16,-0.567,Normal value (A)\r\n2021-09-15,-0.573,Normal
|
||||
value (A)\r\n2021-09-14,-0.568,Normal value (A)\r\n2021-09-13,-0.571,Normal
|
||||
value (A)\r\n2021-09-10,-0.570,Normal value (A)\r\n2021-09-09,-0.570,Normal
|
||||
value (A)\r\n2021-09-08,-0.569,Normal value (A)\r\n2021-09-07,-0.569,Normal
|
||||
value (A)\r\n2021-09-06,-0.569,Normal value (A)\r\n2021-09-03,-0.568,Normal
|
||||
value (A)\r\n2021-09-02,-0.569,Normal value (A)\r\n2021-09-01,-0.569,Normal
|
||||
value (A)\r\n2021-08-31,-0.570,Normal value (A)\r\n2021-08-30,-0.568,Normal
|
||||
value (A)\r\n2021-08-27,-0.570,Normal value (A)\r\n2021-08-26,-0.570,Normal
|
||||
value (A)\r\n2021-08-25,-0.564,Normal value (A)\r\n2021-08-24,-0.567,Normal
|
||||
value (A)\r\n2021-08-23,-0.568,Normal value (A)\r\n2021-08-20,-0.567,Normal
|
||||
value (A)\r\n2021-08-19,-0.567,Normal value (A)\r\n2021-08-18,-0.567,Normal
|
||||
value (A)\r\n2021-08-17,-0.568,Normal value (A)\r\n2021-08-16,-0.569,Normal
|
||||
value (A)\r\n2021-08-13,-0.569,Normal value (A)\r\n2021-08-12,-0.568,Normal
|
||||
value (A)\r\n2021-08-11,-0.567,Normal value (A)\r\n2021-08-10,-0.567,Normal
|
||||
value (A)\r\n2021-08-09,-0.568,Normal value (A)\r\n2021-08-06,-0.569,Normal
|
||||
value (A)\r\n2021-08-05,-0.566,Normal value (A)\r\n2021-08-04,-0.570,Normal
|
||||
value (A)\r\n2021-08-03,-0.570,Normal value (A)\r\n2021-08-02,-0.565,Normal
|
||||
value (A)\r\n2021-07-30,-0.571,Normal value (A)\r\n2021-07-29,-0.567,Normal
|
||||
value (A)\r\n2021-07-28,-0.567,Normal value (A)\r\n2021-07-27,-0.563,Normal
|
||||
value (A)\r\n2021-07-26,-0.567,Normal value (A)\r\n2021-07-23,-0.567,Normal
|
||||
value (A)\r\n2021-07-22,-0.563,Normal value (A)\r\n2021-07-21,-0.568,Normal
|
||||
value (A)\r\n2021-07-20,-0.567,Normal value (A)\r\n2021-07-19,-0.566,Normal
|
||||
value (A)\r\n2021-07-16,-0.567,Normal value (A)\r\n2021-07-15,-0.566,Normal
|
||||
value (A)\r\n2021-07-14,-0.566,Normal value (A)\r\n2021-07-13,-0.566,Normal
|
||||
value (A)\r\n2021-07-12,-0.568,Normal value (A)\r\n2021-07-09,-0.566,Normal
|
||||
value (A)\r\n2021-07-08,-0.566,Normal value (A)\r\n2021-07-07,-0.565,Normal
|
||||
value (A)\r\n2021-07-06,-0.565,Normal value (A)\r\n2021-07-05,-0.566,Normal
|
||||
value (A)\r\n2021-07-02,-0.565,Normal value (A)\r\n2021-07-01,-0.565,Normal
|
||||
value (A)\r\n2021-06-30,-0.581,Normal value (A)\r\n2021-06-29,-0.568,Normal
|
||||
value (A)\r\n2021-06-28,-0.566,Normal value (A)\r\n2021-06-25,-0.565,Normal
|
||||
value (A)\r\n2021-06-24,-0.565,Normal value (A)\r\n2021-06-23,-0.563,Normal
|
||||
value (A)\r\n2021-06-22,-0.564,Normal value (A)\r\n2021-06-21,-0.564,Normal
|
||||
value (A)\r\n2021-06-18,-0.563,Normal value (A)\r\n2021-06-17,-0.563,Normal
|
||||
value (A)\r\n2021-06-16,-0.562,Normal value (A)\r\n2021-06-15,-0.561,Normal
|
||||
value (A)\r\n2021-06-14,-0.565,Normal value (A)\r\n2021-06-11,-0.566,Normal
|
||||
value (A)\r\n2021-06-10,-0.561,Normal value (A)\r\n2021-06-09,-0.564,Normal
|
||||
value (A)\r\n2021-06-08,-0.563,Normal value (A)\r\n2021-06-07,-0.564,Normal
|
||||
value (A)\r\n2021-06-04,-0.563,Normal value (A)\r\n2021-06-03,-0.563,Normal
|
||||
value (A)\r\n2021-06-02,-0.563,Normal value (A)\r\n2021-06-01,-0.564,Normal
|
||||
value (A)\r\n2021-05-31,-0.571,Normal value (A)\r\n2021-05-28,-0.566,Normal
|
||||
value (A)\r\n2021-05-27,-0.564,Normal value (A)\r\n2021-05-26,-0.565,Normal
|
||||
value (A)\r\n2021-05-25,-0.565,Normal value (A)\r\n2021-05-24,-0.566,Normal
|
||||
value (A)\r\n2021-05-21,-0.564,Normal value (A)\r\n2021-05-20,-0.563,Normal
|
||||
value (A)\r\n2021-05-19,-0.564,Normal value (A)\r\n2021-05-18,-0.558,Normal
|
||||
value (A)\r\n2021-05-17,-0.565,Normal value (A)\r\n2021-05-14,-0.564,Normal
|
||||
value (A)\r\n2021-05-13,-0.564,Normal value (A)\r\n2021-05-12,-0.564,Normal
|
||||
value (A)\r\n2021-05-11,-0.564,Normal value (A)\r\n2021-05-10,-0.567,Normal
|
||||
value (A)\r\n2021-05-07,-0.563,Normal value (A)\r\n2021-05-06,-0.565,Normal
|
||||
value (A)\r\n2021-05-05,-0.566,Normal value (A)\r\n2021-05-04,-0.564,Normal
|
||||
value (A)\r\n2021-05-03,-0.567,Normal value (A)\r\n2021-04-30,-0.569,Normal
|
||||
value (A)\r\n2021-04-29,-0.566,Normal value (A)\r\n2021-04-28,-0.566,Normal
|
||||
value (A)\r\n2021-04-27,-0.560,Normal value (A)\r\n2021-04-26,-0.567,Normal
|
||||
value (A)\r\n2021-04-23,-0.565,Normal value (A)\r\n2021-04-22,-0.565,Normal
|
||||
value (A)\r\n2021-04-21,-0.565,Normal value (A)\r\n2021-04-20,-0.567,Normal
|
||||
value (A)\r\n2021-04-19,-0.567,Normal value (A)\r\n2021-04-16,-0.565,Normal
|
||||
value (A)\r\n2021-04-15,-0.566,Normal value (A)\r\n2021-04-14,-0.560,Normal
|
||||
value (A)\r\n2021-04-13,-0.563,Normal value (A)\r\n2021-04-12,-0.567,Normal
|
||||
value (A)\r\n2021-04-09,-0.568,Normal value (A)\r\n2021-04-08,-0.570,Normal
|
||||
value (A)\r\n2021-04-07,-0.567,Normal value (A)\r\n2021-04-06,-0.567,Normal
|
||||
value (A)\r\n2021-04-01,-0.566,Normal value (A)\r\n2021-03-31,-0.574,Normal
|
||||
value (A)\r\n2021-03-30,-0.570,Normal value (A)\r\n2021-03-29,-0.570,Normal
|
||||
value (A)\r\n2021-03-26,-0.568,Normal value (A)\r\n2021-03-25,-0.564,Normal
|
||||
value (A)\r\n2021-03-24,-0.564,Normal value (A)\r\n2021-03-23,-0.563,Normal
|
||||
value (A)\r\n2021-03-22,-0.566,Normal value (A)\r\n2021-03-19,-0.565,Normal
|
||||
value (A)\r\n2021-03-18,-0.566,Normal value (A)\r\n2021-03-17,-0.561,Normal
|
||||
value (A)\r\n2021-03-16,-0.562,Normal value (A)\r\n2021-03-15,-0.564,Normal
|
||||
value (A)\r\n2021-03-12,-0.562,Normal value (A)\r\n2021-03-11,-0.561,Normal
|
||||
value (A)\r\n2021-03-10,-0.562,Normal value (A)\r\n2021-03-09,-0.560,Normal
|
||||
value (A)\r\n2021-03-08,-0.558,Normal value (A)\r\n2021-03-05,-0.562,Normal
|
||||
value (A)\r\n2021-03-04,-0.565,Normal value (A)\r\n2021-03-03,-0.565,Normal
|
||||
value (A)\r\n2021-03-02,-0.565,Normal value (A)\r\n2021-03-01,-0.563,Normal
|
||||
value (A)\r\n2021-02-26,-0.566,Normal value (A)\r\n2021-02-25,-0.564,Normal
|
||||
value (A)\r\n2021-02-24,-0.564,Normal value (A)\r\n2021-02-23,-0.565,Normal
|
||||
value (A)\r\n2021-02-22,-0.564,Normal value (A)\r\n2021-02-19,-0.563,Normal
|
||||
value (A)\r\n2021-02-18,-0.562,Normal value (A)\r\n2021-02-17,-0.563,Normal
|
||||
value (A)\r\n2021-02-16,-0.564,Normal value (A)\r\n2021-02-15,-0.563,Normal
|
||||
value (A)\r\n2021-02-12,-0.564,Normal value (A)\r\n2021-02-11,-0.565,Normal
|
||||
value (A)\r\n2021-02-10,-0.564,Normal value (A)\r\n2021-02-09,-0.564,Normal
|
||||
value (A)\r\n2021-02-08,-0.563,Normal value (A)\r\n2021-02-05,-0.565,Normal
|
||||
value (A)\r\n2021-02-04,-0.564,Normal value (A)\r\n2021-02-03,-0.558,Normal
|
||||
value (A)\r\n2021-02-02,-0.564,Normal value (A)\r\n2021-02-01,-0.566,Normal
|
||||
value (A)\r\n2021-01-29,-0.564,Normal value (A)\r\n2021-01-28,-0.561,Normal
|
||||
value (A)\r\n2021-01-27,-0.563,Normal value (A)\r\n2021-01-26,-0.558,Normal
|
||||
value (A)\r\n2021-01-25,-0.564,Normal value (A)\r\n2021-01-22,-0.561,Normal
|
||||
value (A)\r\n2021-01-21,-0.562,Normal value (A)\r\n2021-01-20,-0.564,Normal
|
||||
value (A)\r\n2021-01-19,-0.564,Normal value (A)\r\n2021-01-18,-0.565,Normal
|
||||
value (A)\r\n2021-01-15,-0.566,Normal value (A)\r\n2021-01-14,-0.564,Normal
|
||||
value (A)\r\n2021-01-13,-0.562,Normal value (A)\r\n2021-01-12,-0.563,Normal
|
||||
value (A)\r\n2021-01-11,-0.564,Normal value (A)\r\n2021-01-08,-0.562,Normal
|
||||
value (A)\r\n2021-01-07,-0.565,Normal value (A)\r\n2021-01-06,-0.566,Normal
|
||||
value (A)\r\n2021-01-05,-0.563,Normal value (A)\r\n2021-01-04,-0.566,Normal
|
||||
value (A)\r\n2020-12-31,-0.583,Normal value (A)\r\n2020-12-30,-0.555,Normal
|
||||
value (A)\r\n2020-12-29,-0.557,Normal value (A)\r\n2020-12-28,-0.553,Normal
|
||||
value (A)\r\n2020-12-24,-0.555,Normal value (A)\r\n2020-12-23,-0.559,Normal
|
||||
value (A)\r\n2020-12-22,-0.558,Normal value (A)\r\n2020-12-21,-0.557,Normal
|
||||
value (A)\r\n2020-12-18,-0.558,Normal value (A)\r\n2020-12-17,-0.556,Normal
|
||||
value (A)\r\n2020-12-16,-0.557,Normal value (A)\r\n2020-12-15,-0.551,Normal
|
||||
value (A)\r\n2020-12-14,-0.558,Normal value (A)\r\n2020-12-11,-0.557,Normal
|
||||
value (A)\r\n2020-12-10,-0.556,Normal value (A)\r\n2020-12-09,-0.556,Normal
|
||||
value (A)\r\n2020-12-08,-0.559,Normal value (A)\r\n2020-12-07,-0.555,Normal
|
||||
value (A)\r\n2020-12-04,-0.555,Normal value (A)\r\n2020-12-03,-0.556,Normal
|
||||
value (A)\r\n2020-12-02,-0.556,Normal value (A)\r\n2020-12-01,-0.557,Normal
|
||||
value (A)\r\n2020-11-30,-0.560,Normal value (A)\r\n2020-11-27,-0.557,Normal
|
||||
value (A)\r\n2020-11-26,-0.556,Normal value (A)\r\n2020-11-25,-0.554,Normal
|
||||
value (A)\r\n2020-11-24,-0.556,Normal value (A)\r\n2020-11-23,-0.557,Normal
|
||||
value (A)\r\n2020-11-20,-0.557,Normal value (A)\r\n2020-11-19,-0.557,Normal
|
||||
value (A)\r\n2020-11-18,-0.557,Normal value (A)\r\n2020-11-17,-0.557,Normal
|
||||
value (A)\r\n2020-11-16,-0.558,Normal value (A)\r\n2020-11-13,-0.556,Normal
|
||||
value (A)\r\n2020-11-12,-0.548,Normal value (A)\r\n2020-11-11,-0.558,Normal
|
||||
value (A)\r\n2020-11-10,-0.557,Normal value (A)\r\n2020-11-09,-0.558,Normal
|
||||
value (A)\r\n2020-11-06,-0.558,Normal value (A)\r\n2020-11-05,-0.556,Normal
|
||||
value (A)\r\n2020-11-04,-0.558,Normal value (A)\r\n2020-11-03,-0.553,Normal
|
||||
value (A)\r\n2020-11-02,-0.555,Normal value (A)\r\n2020-10-30,-0.557,Normal
|
||||
value (A)\r\n2020-10-29,-0.552,Normal value (A)\r\n2020-10-28,-0.555,Normal
|
||||
value (A)\r\n2020-10-27,-0.554,Normal value (A)\r\n2020-10-26,-0.552,Normal
|
||||
value (A)\r\n2020-10-23,-0.553,Normal value (A)\r\n2020-10-22,-0.554,Normal
|
||||
value (A)\r\n2020-10-21,-0.552,Normal value (A)\r\n2020-10-20,-0.553,Normal
|
||||
value (A)\r\n2020-10-19,-0.553,Normal value (A)\r\n2020-10-16,-0.553,Normal
|
||||
value (A)\r\n2020-10-15,-0.556,Normal value (A)\r\n2020-10-14,-0.556,Normal
|
||||
value (A)\r\n2020-10-13,-0.555,Normal value (A)\r\n2020-10-12,-0.556,Normal
|
||||
value (A)\r\n2020-10-09,-0.553,Normal value (A)\r\n2020-10-08,-0.553,Normal
|
||||
value (A)\r\n2020-10-07,-0.555,Normal value (A)\r\n2020-10-06,-0.556,Normal
|
||||
value (A)\r\n2020-10-05,-0.555,Normal value (A)\r\n2020-10-02,-0.555,Normal
|
||||
value (A)\r\n2020-10-01,-0.558,Normal value (A)\r\n2020-09-30,-0.570,Normal
|
||||
value (A)\r\n2020-09-29,-0.556,Normal value (A)\r\n2020-09-28,-0.555,Normal
|
||||
value (A)\r\n2020-09-25,-0.554,Normal value (A)\r\n2020-09-24,-0.553,Normal
|
||||
value (A)\r\n2020-09-23,-0.551,Normal value (A)\r\n2020-09-22,-0.552,Normal
|
||||
value (A)\r\n2020-09-21,-0.552,Normal value (A)\r\n2020-09-18,-0.552,Normal
|
||||
value (A)\r\n2020-09-17,-0.553,Normal value (A)\r\n2020-09-16,-0.556,Normal
|
||||
value (A)\r\n2020-09-15,-0.551,Normal value (A)\r\n2020-09-14,-0.555,Normal
|
||||
value (A)\r\n2020-09-11,-0.553,Normal value (A)\r\n2020-09-10,-0.554,Normal
|
||||
value (A)\r\n2020-09-09,-0.554,Normal value (A)\r\n2020-09-08,-0.553,Normal
|
||||
value (A)\r\n2020-09-07,-0.551,Normal value (A)\r\n2020-09-04,-0.552,Normal
|
||||
value (A)\r\n2020-09-03,-0.551,Normal value (A)\r\n2020-09-02,-0.555,Normal
|
||||
value (A)\r\n2020-09-01,-0.554,Normal value (A)\r\n2020-08-31,-0.557,Normal
|
||||
value (A)\r\n2020-08-28,-0.552,Normal value (A)\r\n2020-08-27,-0.552,Normal
|
||||
value (A)\r\n2020-08-26,-0.554,Normal value (A)\r\n2020-08-25,-0.553,Normal
|
||||
value (A)\r\n2020-08-24,-0.552,Normal value (A)\r\n2020-08-21,-0.554,Normal
|
||||
value (A)\r\n2020-08-20,-0.553,Normal value (A)\r\n2020-08-19,-0.553,Normal
|
||||
value (A)\r\n2020-08-18,-0.554,Normal value (A)\r\n2020-08-17,-0.553,Normal
|
||||
value (A)\r\n2020-08-14,-0.549,Normal value (A)\r\n2020-08-13,-0.552,Normal
|
||||
value (A)\r\n2020-08-12,-0.552,Normal value (A)\r\n2020-08-11,-0.552,Normal
|
||||
value (A)\r\n2020-08-10,-0.554,Normal value (A)\r\n2020-08-07,-0.553,Normal
|
||||
value (A)\r\n2020-08-06,-0.553,Normal value (A)\r\n2020-08-05,-0.552,Normal
|
||||
value (A)\r\n2020-08-04,-0.551,Normal value (A)\r\n2020-08-03,-0.552,Normal
|
||||
value (A)\r\n2020-07-31,-0.550,Normal value (A)\r\n2020-07-30,-0.552,Normal
|
||||
value (A)\r\n2020-07-29,-0.553,Normal value (A)\r\n2020-07-28,-0.551,Normal
|
||||
value (A)\r\n2020-07-27,-0.552,Normal value (A)\r\n2020-07-24,-0.551,Normal
|
||||
value (A)\r\n2020-07-23,-0.550,Normal value (A)\r\n2020-07-22,-0.550,Normal
|
||||
value (A)\r\n2020-07-21,-0.549,Normal value (A)\r\n2020-07-20,-0.551,Normal
|
||||
value (A)\r\n2020-07-17,-0.551,Normal value (A)\r\n2020-07-16,-0.541,Normal
|
||||
value (A)\r\n2020-07-15,-0.551,Normal value (A)\r\n2020-07-14,-0.551,Normal
|
||||
value (A)\r\n2020-07-13,-0.552,Normal value (A)\r\n2020-07-10,-0.549,Normal
|
||||
value (A)\r\n2020-07-09,-0.549,Normal value (A)\r\n2020-07-08,-0.549,Normal
|
||||
value (A)\r\n2020-07-07,-0.550,Normal value (A)\r\n2020-07-06,-0.550,Normal
|
||||
value (A)\r\n2020-07-03,-0.549,Normal value (A)\r\n2020-07-02,-0.548,Normal
|
||||
value (A)\r\n2020-07-01,-0.548,Normal value (A)\r\n2020-06-30,-0.555,Normal
|
||||
value (A)\r\n2020-06-29,-0.545,Normal value (A)\r\n2020-06-26,-0.547,Normal
|
||||
value (A)\r\n2020-06-25,-0.547,Normal value (A)\r\n2020-06-24,-0.546,Normal
|
||||
value (A)\r\n2020-06-23,-0.544,Normal value (A)\r\n2020-06-22,-0.545,Normal
|
||||
value (A)\r\n2020-06-19,-0.546,Normal value (A)\r\n2020-06-18,-0.544,Normal
|
||||
value (A)\r\n2020-06-17,-0.544,Normal value (A)\r\n2020-06-16,-0.546,Normal
|
||||
value (A)\r\n2020-06-15,-0.547,Normal value (A)\r\n2020-06-12,-0.546,Normal
|
||||
value (A)\r\n2020-06-11,-0.547,Normal value (A)\r\n2020-06-10,-0.548,Normal
|
||||
value (A)\r\n2020-06-09,-0.542,Normal value (A)\r\n2020-06-08,-0.547,Normal
|
||||
value (A)\r\n2020-06-05,-0.544,Normal value (A)\r\n2020-06-04,-0.545,Normal
|
||||
value (A)\r\n2020-06-03,-0.543,Normal value (A)\r\n2020-06-02,-0.542,Normal
|
||||
value (A)\r\n2020-06-01,-0.546,Normal value (A)\r\n2020-05-29,-0.540,Normal
|
||||
value (A)\r\n2020-05-28,-0.541,Normal value (A)\r\n2020-05-27,-0.541,Normal
|
||||
value (A)\r\n2020-05-26,-0.541,Normal value (A)\r\n2020-05-25,-0.540,Normal
|
||||
value (A)\r\n2020-05-22,-0.539,Normal value (A)\r\n2020-05-21,-0.545,Normal
|
||||
value (A)\r\n2020-05-20,-0.545,Normal value (A)\r\n2020-05-19,-0.542,Normal
|
||||
value (A)\r\n2020-05-18,-0.542,Normal value (A)\r\n2020-05-15,-0.543,Normal
|
||||
value (A)\r\n2020-05-14,-0.541,Normal value (A)\r\n2020-05-13,-0.542,Normal
|
||||
value (A)\r\n2020-05-12,-0.543,Normal value (A)\r\n2020-05-11,-0.544,Normal
|
||||
value (A)\r\n2020-05-08,-0.541,Normal value (A)\r\n2020-05-07,-0.541,Normal
|
||||
value (A)\r\n2020-05-06,-0.542,Normal value (A)\r\n2020-05-05,-0.539,Normal
|
||||
value (A)\r\n2020-05-04,-0.543,Normal value (A)\r\n2020-04-30,-0.531,Normal
|
||||
value (A)\r\n2020-04-29,-0.543,Normal value (A)\r\n2020-04-28,-0.541,Normal
|
||||
value (A)\r\n2020-04-27,-0.539,Normal value (A)\r\n2020-04-24,-0.539,Normal
|
||||
value (A)\r\n2020-04-23,-0.539,Normal value (A)\r\n2020-04-22,-0.539,Normal
|
||||
value (A)\r\n2020-04-21,-0.541,Normal value (A)\r\n2020-04-20,-0.541,Normal
|
||||
value (A)\r\n2020-04-17,-0.538,Normal value (A)\r\n2020-04-16,-0.534,Normal
|
||||
value (A)\r\n2020-04-15,-0.535,Normal value (A)\r\n2020-04-14,-0.534,Normal
|
||||
value (A)\r\n2020-04-09,-0.536,Normal value (A)\r\n2020-04-08,-0.535,Normal
|
||||
value (A)\r\n2020-04-07,-0.533,Normal value (A)\r\n2020-04-06,-0.533,Normal
|
||||
value (A)\r\n2020-04-03,-0.539,Normal value (A)\r\n2020-04-02,-0.534,Normal
|
||||
value (A)\r\n2020-04-01,-0.527,Normal value (A)\r\n2020-03-31,-0.522,Normal
|
||||
value (A)\r\n2020-03-30,-0.528,Normal value (A)\r\n2020-03-27,-0.530,Normal
|
||||
value (A)\r\n2020-03-26,-0.529,Normal value (A)\r\n2020-03-25,-0.527,Normal
|
||||
value (A)\r\n2020-03-24,-0.527,Normal value (A)\r\n2020-03-23,-0.525,Normal
|
||||
value (A)\r\n2020-03-20,-0.524,Normal value (A)\r\n2020-03-19,-0.526,Normal
|
||||
value (A)\r\n2020-03-18,-0.529,Normal value (A)\r\n2020-03-17,-0.531,Normal
|
||||
value (A)\r\n2020-03-16,-0.536,Normal value (A)\r\n2020-03-13,-0.541,Normal
|
||||
value (A)\r\n2020-03-12,-0.540,Normal value (A)\r\n2020-03-11,-0.543,Normal
|
||||
value (A)\r\n2020-03-10,-0.541,Normal value (A)\r\n2020-03-09,-0.539,Normal
|
||||
value (A)\r\n2020-03-06,-0.541,Normal value (A)\r\n2020-03-05,-0.540,Normal
|
||||
value (A)\r\n2020-03-04,-0.541,Normal value (A)\r\n2020-03-03,-0.542,Normal
|
||||
value (A)\r\n2020-03-02,-0.542,Normal value (A)\r\n2020-02-28,-0.540,Normal
|
||||
value (A)\r\n2020-02-27,-0.538,Normal value (A)\r\n2020-02-26,-0.539,Normal
|
||||
value (A)\r\n2020-02-25,-0.539,Normal value (A)\r\n2020-02-24,-0.540,Normal
|
||||
value (A)\r\n2020-02-21,-0.539,Normal value (A)\r\n2020-02-20,-0.538,Normal
|
||||
value (A)\r\n2020-02-19,-0.538,Normal value (A)\r\n2020-02-18,-0.536,Normal
|
||||
value (A)\r\n2020-02-17,-0.541,Normal value (A)\r\n2020-02-14,-0.538,Normal
|
||||
value (A)\r\n2020-02-13,-0.540,Normal value (A)\r\n2020-02-12,-0.541,Normal
|
||||
value (A)\r\n2020-02-11,-0.541,Normal value (A)\r\n2020-02-10,-0.537,Normal
|
||||
value (A)\r\n2020-02-07,-0.537,Normal value (A)\r\n2020-02-06,-0.535,Normal
|
||||
value (A)\r\n2020-02-05,-0.536,Normal value (A)\r\n2020-02-04,-0.536,Normal
|
||||
value (A)\r\n2020-02-03,-0.537,Normal value (A)\r\n2020-01-31,-0.539,Normal
|
||||
value (A)\r\n2020-01-30,-0.539,Normal value (A)\r\n2020-01-29,-0.540,Normal
|
||||
value (A)\r\n2020-01-28,-0.536,Normal value (A)\r\n2020-01-27,-0.538,Normal
|
||||
value (A)\r\n2020-01-24,-0.537,Normal value (A)\r\n2020-01-23,-0.537,Normal
|
||||
value (A)\r\n2020-01-22,-0.536,Normal value (A)\r\n2020-01-21,-0.535,Normal
|
||||
value (A)\r\n2020-01-20,-0.538,Normal value (A)\r\n2020-01-17,-0.537,Normal
|
||||
value (A)\r\n2020-01-16,-0.536,Normal value (A)\r\n2020-01-15,-0.538,Normal
|
||||
value (A)\r\n2020-01-14,-0.538,Normal value (A)\r\n2020-01-13,-0.537,Normal
|
||||
value (A)\r\n2020-01-10,-0.538,Normal value (A)\r\n2020-01-09,-0.539,Normal
|
||||
value (A)\r\n2020-01-08,-0.536,Normal value (A)\r\n2020-01-07,-0.540,Normal
|
||||
value (A)\r\n2020-01-06,-0.539,Normal value (A)\r\n2020-01-03,-0.537,Normal
|
||||
value (A)\r\n2020-01-02,-0.539,Normal value (A)\r\n2019-12-31,-0.531,Normal
|
||||
value (A)\r\n2019-12-30,-0.541,Normal value (A)\r\n2019-12-27,-0.542,Normal
|
||||
value (A)\r\n2019-12-24,-0.549,Normal value (A)\r\n2019-12-23,-0.545,Normal
|
||||
value (A)\r\n2019-12-20,-0.540,Normal value (A)\r\n2019-12-19,-0.540,Normal
|
||||
value (A)\r\n2019-12-18,-0.540,Normal value (A)\r\n2019-12-17,-0.536,Normal
|
||||
value (A)\r\n2019-12-16,-0.543,Normal value (A)\r\n2019-12-13,-0.543,Normal
|
||||
value (A)\r\n2019-12-12,-0.544,Normal value (A)\r\n2019-12-11,-0.544,Normal
|
||||
value (A)\r\n2019-12-10,-0.544,Normal value (A)\r\n2019-12-09,-0.541,Normal
|
||||
value (A)\r\n2019-12-06,-0.541,Normal value (A)\r\n2019-12-05,-0.540,Normal
|
||||
value (A)\r\n2019-12-04,-0.540,Normal value (A)\r\n2019-12-03,-0.539,Normal
|
||||
value (A)\r\n2019-12-02,-0.541,Normal value (A)\r\n2019-11-29,-0.532,Normal
|
||||
value (A)\r\n2019-11-28,-0.531,Normal value (A)\r\n2019-11-27,-0.533,Normal
|
||||
value (A)\r\n2019-11-26,-0.533,Normal value (A)\r\n2019-11-25,-0.533,Normal
|
||||
value (A)\r\n2019-11-22,-0.536,Normal value (A)\r\n2019-11-21,-0.542,Normal
|
||||
value (A)\r\n2019-11-20,-0.511,Normal value (A)\r\n2019-11-19,-0.542,Normal
|
||||
value (A)\r\n2019-11-18,-0.541,Normal value (A)\r\n2019-11-15,-0.541,Normal
|
||||
value (A)\r\n2019-11-14,-0.536,Normal value (A)\r\n2019-11-13,-0.531,Normal
|
||||
value (A)\r\n2019-11-12,-0.537,Normal value (A)\r\n2019-11-11,-0.541,Normal
|
||||
value (A)\r\n2019-11-08,-0.540,Normal value (A)\r\n2019-11-07,-0.537,Normal
|
||||
value (A)\r\n2019-11-06,-0.539,Normal value (A)\r\n2019-11-05,-0.541,Normal
|
||||
value (A)\r\n2019-11-04,-0.536,Normal value (A)\r\n2019-11-01,-0.549,Normal
|
||||
value (A)\r\n2019-10-31,-0.543,Normal value (A)\r\n2019-10-30,-0.545,Normal
|
||||
value (A)\r\n2019-10-29,-0.545,Normal value (A)\r\n2019-10-28,-0.548,Normal
|
||||
value (A)\r\n2019-10-25,-0.548,Normal value (A)\r\n2019-10-24,-0.548,Normal
|
||||
value (A)\r\n2019-10-23,-0.547,Normal value (A)\r\n2019-10-22,-0.548,Normal
|
||||
value (A)\r\n2019-10-21,-0.549,Normal value (A)\r\n2019-10-18,-0.547,Normal
|
||||
value (A)\r\n2019-10-17,-0.548,Normal value (A)\r\n2019-10-16,-0.548,Normal
|
||||
value (A)\r\n2019-10-15,-0.551,Normal value (A)\r\n2019-10-14,-0.549,Normal
|
||||
value (A)\r\n2019-10-11,-0.550,Normal value (A)\r\n2019-10-10,-0.552,Normal
|
||||
value (A)\r\n2019-10-09,-0.552,Normal value (A)\r\n2019-10-08,-0.552,Normal
|
||||
value (A)\r\n2019-10-07,-0.554,Normal value (A)\r\n2019-10-04,-0.553,Normal
|
||||
value (A)\r\n2019-10-03,-0.555,Normal value (A)\r\n2019-10-02,-0.551,Normal
|
||||
value (A)\r\n2019-10-01,-0.549,Normal value (A)"
|
||||
headers:
|
||||
Cache-Control:
|
||||
- no-transform, proxy-revalidate, public, max-age=30
|
||||
Connection:
|
||||
- close
|
||||
Content-Type:
|
||||
- text/csv
|
||||
Content-disposition:
|
||||
- attachment; filename=data.csv
|
||||
Date:
|
||||
- Tue, 21 Feb 2023 17:56:15 GMT
|
||||
Expires:
|
||||
- Tue, 21 Feb 2023 17:29:32 GMT
|
||||
Last-Modified:
|
||||
- Tue, 21 Feb 2023 07:04:00 GMT
|
||||
Server:
|
||||
- myracloud
|
||||
Transfer-Encoding:
|
||||
- chunked
|
||||
Vary:
|
||||
- accept, origin
|
||||
status:
|
||||
code: 200
|
||||
message: ''
|
||||
version: 1
|
||||
1058
tests/openbb_terminal/fixedincome/cassettes/test_fred_model/test_yield_curve[False].yaml
vendored
Normal file
1058
tests/openbb_terminal/fixedincome/cassettes/test_fred_model/test_yield_curve[False].yaml
vendored
Normal file
File diff suppressed because it is too large
Load Diff
482
tests/openbb_terminal/fixedincome/cassettes/test_fred_model/test_yield_curve[True].yaml
vendored
Normal file
482
tests/openbb_terminal/fixedincome/cassettes/test_fred_model/test_yield_curve[True].yaml
vendored
Normal file
@@ -0,0 +1,482 @@
|
||||
interactions:
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Connection:
|
||||
- close
|
||||
Host:
|
||||
- api.stlouisfed.org
|
||||
method: GET
|
||||
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&observation_start=2022-12-20&series_id=DFII5
|
||||
response:
|
||||
body:
|
||||
string: "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<observations realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" observation_start=\"2022-12-20\" observation_end=\"9999-12-31\"
|
||||
units=\"lin\" output_type=\"1\" file_type=\"xml\" order_by=\"observation_date\"
|
||||
sort_order=\"asc\" count=\"44\" offset=\"0\" limit=\"100000\">\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2022-12-20\"
|
||||
value=\"1.53\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2022-12-21\" value=\"1.47\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2022-12-22\" value=\"1.55\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2022-12-23\"
|
||||
value=\"1.57\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2022-12-26\" value=\".\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2022-12-27\" value=\"1.61\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2022-12-28\"
|
||||
value=\"1.64\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2022-12-29\" value=\"1.62\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2022-12-30\" value=\"1.66\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-02\"
|
||||
value=\".\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-03\" value=\"1.65\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-04\" value=\"1.64\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-05\"
|
||||
value=\"1.68\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-06\" value=\"1.51\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-09\" value=\"1.48\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-10\"
|
||||
value=\"1.52\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-11\" value=\"1.45\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-12\" value=\"1.32\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-13\"
|
||||
value=\"1.40\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-16\" value=\".\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-17\" value=\"1.42\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-18\"
|
||||
value=\"1.34\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-19\" value=\"1.27\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-20\" value=\"1.33\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-23\"
|
||||
value=\"1.33\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-24\" value=\"1.29\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-25\" value=\"1.26\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-26\"
|
||||
value=\"1.26\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-27\" value=\"1.29\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-30\" value=\"1.38\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-31\"
|
||||
value=\"1.36\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-02-01\" value=\"1.19\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-02-02\" value=\"1.23\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-02-03\"
|
||||
value=\"1.40\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-02-06\" value=\"1.48\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-02-07\" value=\"1.45\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-02-08\"
|
||||
value=\"1.36\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-02-09\" value=\"1.42\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-02-10\" value=\"1.46\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-02-13\"
|
||||
value=\"1.49\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-02-14\" value=\"1.55\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-02-15\" value=\"1.53\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-02-16\"
|
||||
value=\"1.54\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-02-17\" value=\"1.53\"/>\n</observations>\n\n\n\n"
|
||||
headers:
|
||||
Connection:
|
||||
- close
|
||||
Content-Length:
|
||||
- '4793'
|
||||
Content-Type:
|
||||
- text/xml; charset=UTF-8
|
||||
Date:
|
||||
- Wed, 22 Feb 2023 17:22:09 GMT
|
||||
Expires:
|
||||
- Wed, 22 Feb 2023 17:23:09 GMT
|
||||
Last-Modified:
|
||||
- Tue, 21 Feb 2023 21:20:14 GMT
|
||||
Vary:
|
||||
- Accept-Encoding
|
||||
x-rate-limit-limit:
|
||||
- '120'
|
||||
x-rate-limit-remaining:
|
||||
- '120'
|
||||
status:
|
||||
code: 200
|
||||
message: OK
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Connection:
|
||||
- close
|
||||
Host:
|
||||
- api.stlouisfed.org
|
||||
method: GET
|
||||
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&observation_start=2022-12-20&series_id=DFII7
|
||||
response:
|
||||
body:
|
||||
string: "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<observations realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" observation_start=\"2022-12-20\" observation_end=\"9999-12-31\"
|
||||
units=\"lin\" output_type=\"1\" file_type=\"xml\" order_by=\"observation_date\"
|
||||
sort_order=\"asc\" count=\"44\" offset=\"0\" limit=\"100000\">\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2022-12-20\"
|
||||
value=\"1.48\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2022-12-21\" value=\"1.43\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2022-12-22\" value=\"1.51\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2022-12-23\"
|
||||
value=\"1.56\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2022-12-26\" value=\".\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2022-12-27\" value=\"1.59\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2022-12-28\"
|
||||
value=\"1.62\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2022-12-29\" value=\"1.58\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2022-12-30\" value=\"1.61\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-02\"
|
||||
value=\".\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-03\" value=\"1.58\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-04\" value=\"1.54\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-05\"
|
||||
value=\"1.57\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-06\" value=\"1.41\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-09\" value=\"1.38\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-10\"
|
||||
value=\"1.43\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-11\" value=\"1.37\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-12\" value=\"1.26\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-13\"
|
||||
value=\"1.35\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-16\" value=\".\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-17\" value=\"1.38\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-18\"
|
||||
value=\"1.29\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-19\" value=\"1.22\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-20\" value=\"1.28\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-23\"
|
||||
value=\"1.28\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-24\" value=\"1.23\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-25\" value=\"1.21\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-26\"
|
||||
value=\"1.20\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-27\" value=\"1.23\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-30\" value=\"1.31\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-31\"
|
||||
value=\"1.31\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-02-01\" value=\"1.16\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-02-02\" value=\"1.20\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-02-03\"
|
||||
value=\"1.34\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-02-06\" value=\"1.42\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-02-07\" value=\"1.40\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-02-08\"
|
||||
value=\"1.32\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-02-09\" value=\"1.38\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-02-10\" value=\"1.43\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-02-13\"
|
||||
value=\"1.44\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-02-14\" value=\"1.49\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-02-15\" value=\"1.49\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-02-16\"
|
||||
value=\"1.51\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-02-17\" value=\"1.49\"/>\n</observations>\n\n\n\n"
|
||||
headers:
|
||||
Connection:
|
||||
- close
|
||||
Content-Length:
|
||||
- '4793'
|
||||
Content-Type:
|
||||
- text/xml; charset=UTF-8
|
||||
Date:
|
||||
- Wed, 22 Feb 2023 17:22:09 GMT
|
||||
Expires:
|
||||
- Wed, 22 Feb 2023 17:23:09 GMT
|
||||
Last-Modified:
|
||||
- Tue, 21 Feb 2023 21:20:15 GMT
|
||||
Vary:
|
||||
- Accept-Encoding
|
||||
x-rate-limit-limit:
|
||||
- '120'
|
||||
x-rate-limit-remaining:
|
||||
- '119'
|
||||
status:
|
||||
code: 200
|
||||
message: OK
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Connection:
|
||||
- close
|
||||
Host:
|
||||
- api.stlouisfed.org
|
||||
method: GET
|
||||
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&observation_start=2022-12-20&series_id=DFII10
|
||||
response:
|
||||
body:
|
||||
string: "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<observations realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" observation_start=\"2022-12-20\" observation_end=\"9999-12-31\"
|
||||
units=\"lin\" output_type=\"1\" file_type=\"xml\" order_by=\"observation_date\"
|
||||
sort_order=\"asc\" count=\"44\" offset=\"0\" limit=\"100000\">\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2022-12-20\"
|
||||
value=\"1.45\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2022-12-21\" value=\"1.41\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2022-12-22\" value=\"1.48\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2022-12-23\"
|
||||
value=\"1.55\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2022-12-26\" value=\".\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2022-12-27\" value=\"1.58\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2022-12-28\"
|
||||
value=\"1.60\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2022-12-29\" value=\"1.56\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2022-12-30\" value=\"1.58\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-02\"
|
||||
value=\".\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-03\" value=\"1.53\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-04\" value=\"1.47\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-05\"
|
||||
value=\"1.49\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-06\" value=\"1.34\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-09\" value=\"1.31\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-10\"
|
||||
value=\"1.37\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-11\" value=\"1.31\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-12\" value=\"1.22\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-13\"
|
||||
value=\"1.31\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-16\" value=\".\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-17\" value=\"1.36\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-18\"
|
||||
value=\"1.25\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-19\" value=\"1.19\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-20\" value=\"1.25\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-23\"
|
||||
value=\"1.24\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-24\" value=\"1.19\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-25\" value=\"1.17\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-26\"
|
||||
value=\"1.16\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-27\" value=\"1.19\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-30\" value=\"1.26\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-31\"
|
||||
value=\"1.28\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-02-01\" value=\"1.14\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-02-02\" value=\"1.18\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-02-03\"
|
||||
value=\"1.31\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-02-06\" value=\"1.38\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-02-07\" value=\"1.36\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-02-08\"
|
||||
value=\"1.29\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-02-09\" value=\"1.34\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-02-10\" value=\"1.41\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-02-13\"
|
||||
value=\"1.41\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-02-14\" value=\"1.46\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-02-15\" value=\"1.46\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-02-16\"
|
||||
value=\"1.49\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-02-17\" value=\"1.46\"/>\n</observations>\n\n\n\n"
|
||||
headers:
|
||||
Connection:
|
||||
- close
|
||||
Content-Length:
|
||||
- '4793'
|
||||
Content-Type:
|
||||
- text/xml; charset=UTF-8
|
||||
Date:
|
||||
- Wed, 22 Feb 2023 17:22:09 GMT
|
||||
Expires:
|
||||
- Wed, 22 Feb 2023 17:23:09 GMT
|
||||
Last-Modified:
|
||||
- Tue, 21 Feb 2023 21:20:12 GMT
|
||||
Vary:
|
||||
- Accept-Encoding
|
||||
x-rate-limit-limit:
|
||||
- '120'
|
||||
x-rate-limit-remaining:
|
||||
- '118'
|
||||
status:
|
||||
code: 200
|
||||
message: OK
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Connection:
|
||||
- close
|
||||
Host:
|
||||
- api.stlouisfed.org
|
||||
method: GET
|
||||
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&observation_start=2022-12-20&series_id=DFII20
|
||||
response:
|
||||
body:
|
||||
string: "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<observations realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" observation_start=\"2022-12-20\" observation_end=\"9999-12-31\"
|
||||
units=\"lin\" output_type=\"1\" file_type=\"xml\" order_by=\"observation_date\"
|
||||
sort_order=\"asc\" count=\"44\" offset=\"0\" limit=\"100000\">\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2022-12-20\"
|
||||
value=\"1.47\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2022-12-21\" value=\"1.44\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2022-12-22\" value=\"1.50\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2022-12-23\"
|
||||
value=\"1.57\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2022-12-26\" value=\".\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2022-12-27\" value=\"1.61\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2022-12-28\"
|
||||
value=\"1.63\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2022-12-29\" value=\"1.59\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2022-12-30\" value=\"1.62\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-02\"
|
||||
value=\".\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-03\" value=\"1.56\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-04\" value=\"1.51\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-05\"
|
||||
value=\"1.50\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-06\" value=\"1.37\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-09\" value=\"1.35\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-10\"
|
||||
value=\"1.41\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-11\" value=\"1.35\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-12\" value=\"1.27\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-13\"
|
||||
value=\"1.37\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-16\" value=\".\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-17\" value=\"1.42\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-18\"
|
||||
value=\"1.32\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-19\" value=\"1.27\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-20\" value=\"1.33\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-23\"
|
||||
value=\"1.32\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-24\" value=\"1.26\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-25\" value=\"1.25\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-26\"
|
||||
value=\"1.23\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-27\" value=\"1.26\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-30\" value=\"1.32\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-31\"
|
||||
value=\"1.36\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-02-01\" value=\"1.24\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-02-02\" value=\"1.28\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-02-03\"
|
||||
value=\"1.38\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-02-06\" value=\"1.42\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-02-07\" value=\"1.41\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-02-08\"
|
||||
value=\"1.35\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-02-09\" value=\"1.41\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-02-10\" value=\"1.47\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-02-13\"
|
||||
value=\"1.46\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-02-14\" value=\"1.49\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-02-15\" value=\"1.49\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-02-16\"
|
||||
value=\"1.52\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-02-17\" value=\"1.50\"/>\n</observations>\n\n\n\n"
|
||||
headers:
|
||||
Connection:
|
||||
- close
|
||||
Content-Length:
|
||||
- '4793'
|
||||
Content-Type:
|
||||
- text/xml; charset=UTF-8
|
||||
Date:
|
||||
- Wed, 22 Feb 2023 17:22:09 GMT
|
||||
Expires:
|
||||
- Wed, 22 Feb 2023 17:23:09 GMT
|
||||
Last-Modified:
|
||||
- Tue, 21 Feb 2023 21:20:13 GMT
|
||||
Vary:
|
||||
- Accept-Encoding
|
||||
x-rate-limit-limit:
|
||||
- '120'
|
||||
x-rate-limit-remaining:
|
||||
- '117'
|
||||
status:
|
||||
code: 200
|
||||
message: OK
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Connection:
|
||||
- close
|
||||
Host:
|
||||
- api.stlouisfed.org
|
||||
method: GET
|
||||
uri: https://api.stlouisfed.org/fred/series/observations?api_key=MOCK_API_KEY&observation_start=2022-12-20&series_id=DFII30
|
||||
response:
|
||||
body:
|
||||
string: "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<observations realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" observation_start=\"2022-12-20\" observation_end=\"9999-12-31\"
|
||||
units=\"lin\" output_type=\"1\" file_type=\"xml\" order_by=\"observation_date\"
|
||||
sort_order=\"asc\" count=\"44\" offset=\"0\" limit=\"100000\">\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2022-12-20\"
|
||||
value=\"1.50\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2022-12-21\" value=\"1.48\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2022-12-22\" value=\"1.53\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2022-12-23\"
|
||||
value=\"1.60\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2022-12-26\" value=\".\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2022-12-27\" value=\"1.65\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2022-12-28\"
|
||||
value=\"1.67\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2022-12-29\" value=\"1.63\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2022-12-30\" value=\"1.67\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-02\"
|
||||
value=\".\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-03\" value=\"1.61\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-04\" value=\"1.57\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-05\"
|
||||
value=\"1.55\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-06\" value=\"1.43\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-09\" value=\"1.41\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-10\"
|
||||
value=\"1.47\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-11\" value=\"1.41\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-12\" value=\"1.33\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-13\"
|
||||
value=\"1.44\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-16\" value=\".\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-17\" value=\"1.47\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-18\"
|
||||
value=\"1.40\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-19\" value=\"1.34\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-20\" value=\"1.42\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-23\"
|
||||
value=\"1.41\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-24\" value=\"1.34\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-25\" value=\"1.33\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-26\"
|
||||
value=\"1.30\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-01-27\" value=\"1.33\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-01-30\" value=\"1.39\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-01-31\"
|
||||
value=\"1.43\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-02-01\" value=\"1.33\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-02-02\" value=\"1.38\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-02-03\"
|
||||
value=\"1.46\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-02-06\" value=\"1.47\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-02-07\" value=\"1.47\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-02-08\"
|
||||
value=\"1.41\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-02-09\" value=\"1.47\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-02-10\" value=\"1.53\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-02-13\"
|
||||
value=\"1.51\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-02-14\" value=\"1.53\"/>\n <observation realtime_start=\"2023-02-22\"
|
||||
realtime_end=\"2023-02-22\" date=\"2023-02-15\" value=\"1.54\"/>\n <observation
|
||||
realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\" date=\"2023-02-16\"
|
||||
value=\"1.57\"/>\n <observation realtime_start=\"2023-02-22\" realtime_end=\"2023-02-22\"
|
||||
date=\"2023-02-17\" value=\"1.54\"/>\n</observations>\n\n\n\n"
|
||||
headers:
|
||||
Connection:
|
||||
- close
|
||||
Content-Length:
|
||||
- '4793'
|
||||
Content-Type:
|
||||
- text/xml; charset=UTF-8
|
||||
Date:
|
||||
- Wed, 22 Feb 2023 17:22:09 GMT
|
||||
Expires:
|
||||
- Wed, 22 Feb 2023 17:23:09 GMT
|
||||
Last-Modified:
|
||||
- Tue, 21 Feb 2023 21:20:14 GMT
|
||||
Vary:
|
||||
- Accept-Encoding
|
||||
x-rate-limit-limit:
|
||||
- '120'
|
||||
x-rate-limit-remaining:
|
||||
- '116'
|
||||
status:
|
||||
code: 200
|
||||
message: OK
|
||||
version: 1
|
||||
39
tests/openbb_terminal/fixedincome/cassettes/test_oecd_model/test_get_interest_rates[long].yaml
vendored
Normal file
39
tests/openbb_terminal/fixedincome/cassettes/test_oecd_model/test_get_interest_rates[long].yaml
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
interactions:
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Connection:
|
||||
- close
|
||||
Host:
|
||||
- stats.oecd.org
|
||||
User-Agent:
|
||||
- Python-urllib/3.9
|
||||
method: GET
|
||||
uri: https://stats.oecd.org/sdmx-json/data/DP_LIVE/.STINT.TOT.PC_PA.M/OECD?contentType=csv&detail=code&separator=comma&csv-lang=en&startPeriod=2022-01&endPeriod=2022-01
|
||||
response:
|
||||
body:
|
||||
string: "\uFEFF\"LOCATION\",\"INDICATOR\",\"SUBJECT\",\"MEASURE\",\"FREQUENCY\",\"TIME\",\"Value\",\"Flag
|
||||
Codes\"\r\n\"CHL\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",5.56,\r\n\"USA\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",0.22,\r\n\"NZL\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",1.03,\r\n\"DNK\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",-0.29,\r\n\"ISR\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",0.02,\r\n\"GBR\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",0.53,\r\n\"BEL\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",-0.5601,\r\n\"RUS\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",8.96,\r\n\"IDN\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",3.75,\r\n\"HUN\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",4.0645,\r\n\"FIN\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",-0.5601,\r\n\"LUX\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",-0.5601,\r\n\"ESP\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",-0.5601,\r\n\"NOR\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",1.1,\r\n\"JPN\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",-0.049,\r\n\"GRC\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",-0.5601,\r\n\"KOR\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",1.39,\r\n\"AUT\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",-0.5601,\r\n\"SVK\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",-0.5601,\r\n\"EST\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",-0.5601,\r\n\"SVN\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",-0.5601,\r\n\"CAN\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",0.4571955,\r\n\"DEU\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",-0.5601,\r\n\"PRT\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",-0.5601,\r\n\"ISL\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",2.71,\r\n\"AUS\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",0.07,\r\n\"IRL\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",-0.5601,\r\n\"NLD\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",-0.5601,\r\n\"CHE\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",-0.72,\r\n\"ZAF\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",3.87,\r\n\"CZE\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",4.21,\r\n\"POL\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",3.02,\r\n\"CHN\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",3.32,\r\n\"SWE\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",-0.16,\r\n\"MEX\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",5.87,\r\n\"FRA\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",-0.5601,\r\n\"ITA\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",-0.5601,\r\n\"COL\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",3.47,\r\n\"LVA\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",-0.5601,\r\n\"EA19\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",-0.5601,\r\n\"LTU\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",-0.5601,\r\n\"CRI\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",1.83,\r\n\"IND\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",3.63,\r\n\"BGR\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",0.0089,\r\n\"HRV\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",-0.5601,\r\n\"ROU\",\"STINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",3.0465,\r\n"
|
||||
headers:
|
||||
Access-Control-Allow-Headers:
|
||||
- Content-Type
|
||||
Access-Control-Allow-Methods:
|
||||
- POST,GET,OPTIONS
|
||||
Access-Control-Allow-Origin:
|
||||
- '*'
|
||||
Cache-Control:
|
||||
- private
|
||||
Connection:
|
||||
- close
|
||||
Content-Disposition:
|
||||
- attachment;filename=DP_LIVE_21022023190450184.csv
|
||||
Content-Type:
|
||||
- text/csv
|
||||
Date:
|
||||
- Tue, 21 Feb 2023 18:04:49 GMT
|
||||
Transfer-Encoding:
|
||||
- chunked
|
||||
status:
|
||||
code: 200
|
||||
message: OK
|
||||
version: 1
|
||||
@@ -0,0 +1,39 @@
|
||||
interactions:
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Connection:
|
||||
- close
|
||||
Host:
|
||||
- stats.oecd.org
|
||||
User-Agent:
|
||||
- Python-urllib/3.9
|
||||
method: GET
|
||||
uri: https://stats.oecd.org/sdmx-json/data/DP_LIVE/.STINTFORECAST.TOT.PC_PA.Q/OECD?contentType=csv&detail=code&separator=comma&csv-lang=en&startPeriod=2022-Q1&endPeriod=2022-Q1
|
||||
response:
|
||||
body:
|
||||
string: "\uFEFF\"LOCATION\",\"INDICATOR\",\"SUBJECT\",\"MEASURE\",\"FREQUENCY\",\"TIME\",\"Value\",\"Flag
|
||||
Codes\"\r\n\"AUS\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",0.103333333333333,\r\n\"AUT\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",-0.528866666666667,\r\n\"BEL\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",-0.528866666666667,\r\n\"CAN\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",0.651304655666667,\r\n\"CZE\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",4.58666666666667,\r\n\"DNK\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",-0.266666666666667,\r\n\"FIN\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",-0.528866666666667,\r\n\"FRA\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",-0.528866666666667,\r\n\"DEU\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",-0.528866666666667,\r\n\"GRC\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",-0.528866666666667,\r\n\"HUN\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",4.1475,\r\n\"ISL\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",3.25,\r\n\"IRL\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",-0.528866666666667,\r\n\"JPN\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",-0.0177644703243616,\r\n\"KOR\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",1.46333333333333,\r\n\"LUX\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",-0.528866666666667,\r\n\"MEX\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",6.29666666666667,\r\n\"NLD\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",-0.528866666666667,\r\n\"NZL\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",1.24333333333333,\r\n\"NOR\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",1.19666666666667,\r\n\"POL\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",3.81333333333333,\r\n\"PRT\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",-0.528866666666667,\r\n\"SVK\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",-0.528866666666667,\r\n\"ESP\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",-0.528866666666667,\r\n\"SWE\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",-0.0154079020013803,\r\n\"CHE\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",-0.655,\r\n\"GBR\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",0.776666666666667,\r\n\"USA\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",0.443333333333333,\r\n\"CHL\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",6.51692788129744,\r\n\"EST\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",-0.528866666666667,\r\n\"IND\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",4,\r\n\"IDN\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",3.07,\r\n\"ISR\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",0.03,\r\n\"SVN\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",-0.528866666666667,\r\n\"ITA\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",-0.528866666666667,\r\n\"CHN\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",4.35,\r\n\"LTU\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",-0.528866666666667,\r\n\"BRA\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",9.5,\r\n\"ZAF\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",4.45,\r\n\"LVA\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",-0.528866666666667,\r\n\"EA17\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",-0.528866666666666,\r\n\"BGR\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",-0.690425900371123,\r\n\"COL\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",4.25,\r\n\"CRI\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",1.73620024123188,\r\n\"HRV\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",0.0111111,\r\n\"PER\",\"STINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",3.2446316752019,\r\n"
|
||||
headers:
|
||||
Access-Control-Allow-Headers:
|
||||
- Content-Type
|
||||
Access-Control-Allow-Methods:
|
||||
- POST,GET,OPTIONS
|
||||
Access-Control-Allow-Origin:
|
||||
- '*'
|
||||
Cache-Control:
|
||||
- private
|
||||
Connection:
|
||||
- close
|
||||
Content-Disposition:
|
||||
- attachment;filename=DP_LIVE_21022023190450871.csv
|
||||
Content-Type:
|
||||
- text/csv
|
||||
Date:
|
||||
- Tue, 21 Feb 2023 18:04:49 GMT
|
||||
Transfer-Encoding:
|
||||
- chunked
|
||||
status:
|
||||
code: 200
|
||||
message: OK
|
||||
version: 1
|
||||
39
tests/openbb_terminal/fixedincome/cassettes/test_oecd_model/test_get_interest_rates[short].yaml
vendored
Normal file
39
tests/openbb_terminal/fixedincome/cassettes/test_oecd_model/test_get_interest_rates[short].yaml
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
interactions:
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Connection:
|
||||
- close
|
||||
Host:
|
||||
- stats.oecd.org
|
||||
User-Agent:
|
||||
- Python-urllib/3.9
|
||||
method: GET
|
||||
uri: https://stats.oecd.org/sdmx-json/data/DP_LIVE/.LTINT.TOT.PC_PA.M/OECD?contentType=csv&detail=code&separator=comma&csv-lang=en&startPeriod=2022-01&endPeriod=2022-01
|
||||
response:
|
||||
body:
|
||||
string: "\uFEFF\"LOCATION\",\"INDICATOR\",\"SUBJECT\",\"MEASURE\",\"FREQUENCY\",\"TIME\",\"Value\",\"Flag
|
||||
Codes\"\r\n\"IRL\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",0.3803,\r\n\"AUS\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",1.88,\r\n\"POL\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",4,\r\n\"CHE\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",0.045,\r\n\"NLD\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",-0.098,\r\n\"DEU\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",-0.1147619,\r\n\"ISL\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",4.48,\r\n\"PRT\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",0.58,\r\n\"CAN\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",1.759,\r\n\"ITA\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",1.346,\r\n\"FRA\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",0.31,\r\n\"CHL\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",5.886167,\r\n\"CZE\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",3.12,\r\n\"SWE\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",0.36,\r\n\"SVN\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",0.4,\r\n\"ZAF\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",9.83,\r\n\"USA\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",1.76,\r\n\"FIN\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",0.17909,\r\n\"NZL\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",2.56,\r\n\"ESP\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",0.6645238,\r\n\"HUN\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",4.71,\r\n\"LUX\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",-0.039,\r\n\"DNK\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",0.114,\r\n\"BEL\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",0.26,\r\n\"ISR\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",1.43,\r\n\"GBR\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",1.2051,\r\n\"AUT\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",0.1813,\r\n\"KOR\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",2.492,\r\n\"NOR\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",1.86,\r\n\"GRC\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",1.62,\r\n\"SVK\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",0.25235,\r\n\"JPN\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",0.17,\r\n\"LVA\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",0.38,\r\n\"EA19\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",0.5339,\r\n\"COL\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",9.26,\r\n\"LTU\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",0.16,\r\n\"CRI\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",8.33,\r\n\"IND\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",6.65,\r\n\"EST\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",0.31,\r\n\"IDN\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",6.413286,\r\n\"BRA\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",6.08,\r\n\"CHN\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",2.6997,\r\n\"BGR\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",0.57,\r\n\"HRV\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",0.7,\r\n\"ROU\",\"LTINT\",\"TOT\",\"PC_PA\",\"M\",\"2022-01\",5.37,\r\n"
|
||||
headers:
|
||||
Access-Control-Allow-Headers:
|
||||
- Content-Type
|
||||
Access-Control-Allow-Methods:
|
||||
- POST,GET,OPTIONS
|
||||
Access-Control-Allow-Origin:
|
||||
- '*'
|
||||
Cache-Control:
|
||||
- private
|
||||
Connection:
|
||||
- close
|
||||
Content-Disposition:
|
||||
- attachment;filename=DP_LIVE_21022023190448325.csv
|
||||
Content-Type:
|
||||
- text/csv
|
||||
Date:
|
||||
- Tue, 21 Feb 2023 18:04:47 GMT
|
||||
Transfer-Encoding:
|
||||
- chunked
|
||||
status:
|
||||
code: 200
|
||||
message: OK
|
||||
version: 1
|
||||
@@ -0,0 +1,39 @@
|
||||
interactions:
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Connection:
|
||||
- close
|
||||
Host:
|
||||
- stats.oecd.org
|
||||
User-Agent:
|
||||
- Python-urllib/3.9
|
||||
method: GET
|
||||
uri: https://stats.oecd.org/sdmx-json/data/DP_LIVE/.LTINTFORECAST.TOT.PC_PA.Q/OECD?contentType=csv&detail=code&separator=comma&csv-lang=en&startPeriod=2022-Q1&endPeriod=2022-Q1
|
||||
response:
|
||||
body:
|
||||
string: "\uFEFF\"LOCATION\",\"INDICATOR\",\"SUBJECT\",\"MEASURE\",\"FREQUENCY\",\"TIME\",\"Value\",\"Flag
|
||||
Codes\"\r\n\"AUS\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",2.16333333333333,\r\n\"AUT\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",0.480363333333333,\r\n\"BEL\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",0.546666666666667,\r\n\"CAN\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",1.923549199,\r\n\"CZE\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",3.22666666666667,\r\n\"DNK\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",0.379,\r\n\"FIN\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",0.468575797,\r\n\"FRA\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",0.59,\r\n\"DEU\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",0.105659075,\r\n\"GRC\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",2.23,\r\n\"HUN\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",5.16333333333333,\r\n\"ISL\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",4.69,\r\n\"IRL\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",0.6949,\r\n\"JPN\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",0.173341818495514,\r\n\"KOR\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",2.65533333333333,\r\n\"LUX\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",0.303333333333333,\r\n\"MEX\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",7.52092733885445,\r\n\"NLD\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",0.160666666666667,\r\n\"NZL\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",2.79,\r\n\"NOR\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",2.08666666666667,\r\n\"POL\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",4.26,\r\n\"PRT\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",0.933333333333333,\r\n\"SVK\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",0.65265,\r\n\"ESP\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",1.00067387866667,\r\n\"SWE\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",0.5956,\r\n\"CHE\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",0.329333333333333,\r\n\"GBR\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",1.4133,\r\n\"USA\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",1.94,\r\n\"CHL\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",5.93606380333333,\r\n\"IND\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",6.79327333333333,\r\n\"ISR\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",1.76666666666667,\r\n\"ITA\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",1.6646,\r\n\"ZAF\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",9.86,\r\n\"SVN\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",0.713333333333334,\r\n\"LVA\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",0.79,\r\n\"LTU\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",1.00589603174603,\r\n\"EA17\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",0.642850336674733,\r\n\"BGR\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",0.756666666666667,\r\n\"COL\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",9.71249107700806,\r\n\"HRV\",\"LTINTFORECAST\",\"TOT\",\"PC_PA\",\"Q\",\"2022-Q1\",1.33333333333333,\r\n"
|
||||
headers:
|
||||
Access-Control-Allow-Headers:
|
||||
- Content-Type
|
||||
Access-Control-Allow-Methods:
|
||||
- POST,GET,OPTIONS
|
||||
Access-Control-Allow-Origin:
|
||||
- '*'
|
||||
Cache-Control:
|
||||
- private
|
||||
Connection:
|
||||
- close
|
||||
Content-Disposition:
|
||||
- attachment;filename=DP_LIVE_21022023190449372.csv
|
||||
Content-Type:
|
||||
- text/csv
|
||||
Date:
|
||||
- Tue, 21 Feb 2023 18:04:48 GMT
|
||||
Transfer-Encoding:
|
||||
- chunked
|
||||
status:
|
||||
code: 200
|
||||
message: OK
|
||||
version: 1
|
||||
11
tests/openbb_terminal/fixedincome/csv/test_ecb_model/test_get_ecb_yield_curve.csv
vendored
Normal file
11
tests/openbb_terminal/fixedincome/csv/test_ecb_model/test_get_ecb_yield_curve.csv
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
,Maturity,Rate
|
||||
0,0.25,2.541376
|
||||
1,0.5,2.824729
|
||||
2,1.0,2.934256
|
||||
3,2.0,2.746707
|
||||
4,3.0,2.603793
|
||||
5,5.0,2.506521
|
||||
6,7.0,2.493358
|
||||
7,10.0,2.501264
|
||||
8,20.0,2.46916
|
||||
9,30.0,2.348783
|
||||
|
873
tests/openbb_terminal/fixedincome/csv/test_ecb_model/test_get_series_data.csv
vendored
Normal file
873
tests/openbb_terminal/fixedincome/csv/test_ecb_model/test_get_series_data.csv
vendored
Normal file
@@ -0,0 +1,873 @@
|
||||
,Unnamed: 1
|
||||
2019-10-01,-0.549
|
||||
2019-10-02,-0.551
|
||||
2019-10-03,-0.555
|
||||
2019-10-04,-0.553
|
||||
2019-10-07,-0.554
|
||||
2019-10-08,-0.552
|
||||
2019-10-09,-0.552
|
||||
2019-10-10,-0.552
|
||||
2019-10-11,-0.55
|
||||
2019-10-14,-0.549
|
||||
2019-10-15,-0.551
|
||||
2019-10-16,-0.548
|
||||
2019-10-17,-0.548
|
||||
2019-10-18,-0.547
|
||||
2019-10-21,-0.549
|
||||
2019-10-22,-0.548
|
||||
2019-10-23,-0.547
|
||||
2019-10-24,-0.548
|
||||
2019-10-25,-0.548
|
||||
2019-10-28,-0.548
|
||||
2019-10-29,-0.545
|
||||
2019-10-30,-0.545
|
||||
2019-10-31,-0.543
|
||||
2019-11-01,-0.549
|
||||
2019-11-04,-0.536
|
||||
2019-11-05,-0.541
|
||||
2019-11-06,-0.539
|
||||
2019-11-07,-0.537
|
||||
2019-11-08,-0.54
|
||||
2019-11-11,-0.541
|
||||
2019-11-12,-0.537
|
||||
2019-11-13,-0.531
|
||||
2019-11-14,-0.536
|
||||
2019-11-15,-0.541
|
||||
2019-11-18,-0.541
|
||||
2019-11-19,-0.542
|
||||
2019-11-20,-0.511
|
||||
2019-11-21,-0.542
|
||||
2019-11-22,-0.536
|
||||
2019-11-25,-0.533
|
||||
2019-11-26,-0.533
|
||||
2019-11-27,-0.533
|
||||
2019-11-28,-0.531
|
||||
2019-11-29,-0.532
|
||||
2019-12-02,-0.541
|
||||
2019-12-03,-0.539
|
||||
2019-12-04,-0.54
|
||||
2019-12-05,-0.54
|
||||
2019-12-06,-0.541
|
||||
2019-12-09,-0.541
|
||||
2019-12-10,-0.544
|
||||
2019-12-11,-0.544
|
||||
2019-12-12,-0.544
|
||||
2019-12-13,-0.543
|
||||
2019-12-16,-0.543
|
||||
2019-12-17,-0.536
|
||||
2019-12-18,-0.54
|
||||
2019-12-19,-0.54
|
||||
2019-12-20,-0.54
|
||||
2019-12-23,-0.545
|
||||
2019-12-24,-0.549
|
||||
2019-12-27,-0.542
|
||||
2019-12-30,-0.541
|
||||
2019-12-31,-0.531
|
||||
2020-01-02,-0.539
|
||||
2020-01-03,-0.537
|
||||
2020-01-06,-0.539
|
||||
2020-01-07,-0.54
|
||||
2020-01-08,-0.536
|
||||
2020-01-09,-0.539
|
||||
2020-01-10,-0.538
|
||||
2020-01-13,-0.537
|
||||
2020-01-14,-0.538
|
||||
2020-01-15,-0.538
|
||||
2020-01-16,-0.536
|
||||
2020-01-17,-0.537
|
||||
2020-01-20,-0.538
|
||||
2020-01-21,-0.535
|
||||
2020-01-22,-0.536
|
||||
2020-01-23,-0.537
|
||||
2020-01-24,-0.537
|
||||
2020-01-27,-0.538
|
||||
2020-01-28,-0.536
|
||||
2020-01-29,-0.54
|
||||
2020-01-30,-0.539
|
||||
2020-01-31,-0.539
|
||||
2020-02-03,-0.537
|
||||
2020-02-04,-0.536
|
||||
2020-02-05,-0.536
|
||||
2020-02-06,-0.535
|
||||
2020-02-07,-0.537
|
||||
2020-02-10,-0.537
|
||||
2020-02-11,-0.541
|
||||
2020-02-12,-0.541
|
||||
2020-02-13,-0.54
|
||||
2020-02-14,-0.538
|
||||
2020-02-17,-0.541
|
||||
2020-02-18,-0.536
|
||||
2020-02-19,-0.538
|
||||
2020-02-20,-0.538
|
||||
2020-02-21,-0.539
|
||||
2020-02-24,-0.54
|
||||
2020-02-25,-0.539
|
||||
2020-02-26,-0.539
|
||||
2020-02-27,-0.538
|
||||
2020-02-28,-0.54
|
||||
2020-03-02,-0.542
|
||||
2020-03-03,-0.542
|
||||
2020-03-04,-0.541
|
||||
2020-03-05,-0.54
|
||||
2020-03-06,-0.541
|
||||
2020-03-09,-0.539
|
||||
2020-03-10,-0.541
|
||||
2020-03-11,-0.543
|
||||
2020-03-12,-0.54
|
||||
2020-03-13,-0.541
|
||||
2020-03-16,-0.536
|
||||
2020-03-17,-0.531
|
||||
2020-03-18,-0.529
|
||||
2020-03-19,-0.526
|
||||
2020-03-20,-0.524
|
||||
2020-03-23,-0.525
|
||||
2020-03-24,-0.527
|
||||
2020-03-25,-0.527
|
||||
2020-03-26,-0.529
|
||||
2020-03-27,-0.53
|
||||
2020-03-30,-0.528
|
||||
2020-03-31,-0.522
|
||||
2020-04-01,-0.527
|
||||
2020-04-02,-0.534
|
||||
2020-04-03,-0.539
|
||||
2020-04-06,-0.533
|
||||
2020-04-07,-0.533
|
||||
2020-04-08,-0.535
|
||||
2020-04-09,-0.536
|
||||
2020-04-14,-0.534
|
||||
2020-04-15,-0.535
|
||||
2020-04-16,-0.534
|
||||
2020-04-17,-0.538
|
||||
2020-04-20,-0.541
|
||||
2020-04-21,-0.541
|
||||
2020-04-22,-0.539
|
||||
2020-04-23,-0.539
|
||||
2020-04-24,-0.539
|
||||
2020-04-27,-0.539
|
||||
2020-04-28,-0.541
|
||||
2020-04-29,-0.543
|
||||
2020-04-30,-0.531
|
||||
2020-05-04,-0.543
|
||||
2020-05-05,-0.539
|
||||
2020-05-06,-0.542
|
||||
2020-05-07,-0.541
|
||||
2020-05-08,-0.541
|
||||
2020-05-11,-0.544
|
||||
2020-05-12,-0.543
|
||||
2020-05-13,-0.542
|
||||
2020-05-14,-0.541
|
||||
2020-05-15,-0.543
|
||||
2020-05-18,-0.542
|
||||
2020-05-19,-0.542
|
||||
2020-05-20,-0.545
|
||||
2020-05-21,-0.545
|
||||
2020-05-22,-0.539
|
||||
2020-05-25,-0.54
|
||||
2020-05-26,-0.541
|
||||
2020-05-27,-0.541
|
||||
2020-05-28,-0.541
|
||||
2020-05-29,-0.54
|
||||
2020-06-01,-0.546
|
||||
2020-06-02,-0.542
|
||||
2020-06-03,-0.543
|
||||
2020-06-04,-0.545
|
||||
2020-06-05,-0.544
|
||||
2020-06-08,-0.547
|
||||
2020-06-09,-0.542
|
||||
2020-06-10,-0.548
|
||||
2020-06-11,-0.547
|
||||
2020-06-12,-0.546
|
||||
2020-06-15,-0.547
|
||||
2020-06-16,-0.546
|
||||
2020-06-17,-0.544
|
||||
2020-06-18,-0.544
|
||||
2020-06-19,-0.546
|
||||
2020-06-22,-0.545
|
||||
2020-06-23,-0.544
|
||||
2020-06-24,-0.546
|
||||
2020-06-25,-0.547
|
||||
2020-06-26,-0.547
|
||||
2020-06-29,-0.545
|
||||
2020-06-30,-0.555
|
||||
2020-07-01,-0.548
|
||||
2020-07-02,-0.548
|
||||
2020-07-03,-0.549
|
||||
2020-07-06,-0.55
|
||||
2020-07-07,-0.55
|
||||
2020-07-08,-0.549
|
||||
2020-07-09,-0.549
|
||||
2020-07-10,-0.549
|
||||
2020-07-13,-0.552
|
||||
2020-07-14,-0.551
|
||||
2020-07-15,-0.551
|
||||
2020-07-16,-0.541
|
||||
2020-07-17,-0.551
|
||||
2020-07-20,-0.551
|
||||
2020-07-21,-0.549
|
||||
2020-07-22,-0.55
|
||||
2020-07-23,-0.55
|
||||
2020-07-24,-0.551
|
||||
2020-07-27,-0.552
|
||||
2020-07-28,-0.551
|
||||
2020-07-29,-0.553
|
||||
2020-07-30,-0.552
|
||||
2020-07-31,-0.55
|
||||
2020-08-03,-0.552
|
||||
2020-08-04,-0.551
|
||||
2020-08-05,-0.552
|
||||
2020-08-06,-0.553
|
||||
2020-08-07,-0.553
|
||||
2020-08-10,-0.554
|
||||
2020-08-11,-0.552
|
||||
2020-08-12,-0.552
|
||||
2020-08-13,-0.552
|
||||
2020-08-14,-0.549
|
||||
2020-08-17,-0.553
|
||||
2020-08-18,-0.554
|
||||
2020-08-19,-0.553
|
||||
2020-08-20,-0.553
|
||||
2020-08-21,-0.554
|
||||
2020-08-24,-0.552
|
||||
2020-08-25,-0.553
|
||||
2020-08-26,-0.554
|
||||
2020-08-27,-0.552
|
||||
2020-08-28,-0.552
|
||||
2020-08-31,-0.557
|
||||
2020-09-01,-0.554
|
||||
2020-09-02,-0.555
|
||||
2020-09-03,-0.551
|
||||
2020-09-04,-0.552
|
||||
2020-09-07,-0.551
|
||||
2020-09-08,-0.553
|
||||
2020-09-09,-0.554
|
||||
2020-09-10,-0.554
|
||||
2020-09-11,-0.553
|
||||
2020-09-14,-0.555
|
||||
2020-09-15,-0.551
|
||||
2020-09-16,-0.556
|
||||
2020-09-17,-0.553
|
||||
2020-09-18,-0.552
|
||||
2020-09-21,-0.552
|
||||
2020-09-22,-0.552
|
||||
2020-09-23,-0.551
|
||||
2020-09-24,-0.553
|
||||
2020-09-25,-0.554
|
||||
2020-09-28,-0.555
|
||||
2020-09-29,-0.556
|
||||
2020-09-30,-0.57
|
||||
2020-10-01,-0.558
|
||||
2020-10-02,-0.555
|
||||
2020-10-05,-0.555
|
||||
2020-10-06,-0.556
|
||||
2020-10-07,-0.555
|
||||
2020-10-08,-0.553
|
||||
2020-10-09,-0.553
|
||||
2020-10-12,-0.556
|
||||
2020-10-13,-0.555
|
||||
2020-10-14,-0.556
|
||||
2020-10-15,-0.556
|
||||
2020-10-16,-0.553
|
||||
2020-10-19,-0.553
|
||||
2020-10-20,-0.553
|
||||
2020-10-21,-0.552
|
||||
2020-10-22,-0.554
|
||||
2020-10-23,-0.553
|
||||
2020-10-26,-0.552
|
||||
2020-10-27,-0.554
|
||||
2020-10-28,-0.555
|
||||
2020-10-29,-0.552
|
||||
2020-10-30,-0.557
|
||||
2020-11-02,-0.555
|
||||
2020-11-03,-0.553
|
||||
2020-11-04,-0.558
|
||||
2020-11-05,-0.556
|
||||
2020-11-06,-0.558
|
||||
2020-11-09,-0.558
|
||||
2020-11-10,-0.557
|
||||
2020-11-11,-0.558
|
||||
2020-11-12,-0.548
|
||||
2020-11-13,-0.556
|
||||
2020-11-16,-0.558
|
||||
2020-11-17,-0.557
|
||||
2020-11-18,-0.557
|
||||
2020-11-19,-0.557
|
||||
2020-11-20,-0.557
|
||||
2020-11-23,-0.557
|
||||
2020-11-24,-0.556
|
||||
2020-11-25,-0.554
|
||||
2020-11-26,-0.556
|
||||
2020-11-27,-0.557
|
||||
2020-11-30,-0.56
|
||||
2020-12-01,-0.557
|
||||
2020-12-02,-0.556
|
||||
2020-12-03,-0.556
|
||||
2020-12-04,-0.555
|
||||
2020-12-07,-0.555
|
||||
2020-12-08,-0.559
|
||||
2020-12-09,-0.556
|
||||
2020-12-10,-0.556
|
||||
2020-12-11,-0.557
|
||||
2020-12-14,-0.558
|
||||
2020-12-15,-0.551
|
||||
2020-12-16,-0.557
|
||||
2020-12-17,-0.556
|
||||
2020-12-18,-0.558
|
||||
2020-12-21,-0.557
|
||||
2020-12-22,-0.558
|
||||
2020-12-23,-0.559
|
||||
2020-12-24,-0.555
|
||||
2020-12-28,-0.553
|
||||
2020-12-29,-0.557
|
||||
2020-12-30,-0.555
|
||||
2020-12-31,-0.583
|
||||
2021-01-04,-0.566
|
||||
2021-01-05,-0.563
|
||||
2021-01-06,-0.566
|
||||
2021-01-07,-0.565
|
||||
2021-01-08,-0.562
|
||||
2021-01-11,-0.564
|
||||
2021-01-12,-0.563
|
||||
2021-01-13,-0.562
|
||||
2021-01-14,-0.564
|
||||
2021-01-15,-0.566
|
||||
2021-01-18,-0.565
|
||||
2021-01-19,-0.564
|
||||
2021-01-20,-0.564
|
||||
2021-01-21,-0.562
|
||||
2021-01-22,-0.561
|
||||
2021-01-25,-0.564
|
||||
2021-01-26,-0.558
|
||||
2021-01-27,-0.563
|
||||
2021-01-28,-0.561
|
||||
2021-01-29,-0.564
|
||||
2021-02-01,-0.566
|
||||
2021-02-02,-0.564
|
||||
2021-02-03,-0.558
|
||||
2021-02-04,-0.564
|
||||
2021-02-05,-0.565
|
||||
2021-02-08,-0.563
|
||||
2021-02-09,-0.564
|
||||
2021-02-10,-0.564
|
||||
2021-02-11,-0.565
|
||||
2021-02-12,-0.564
|
||||
2021-02-15,-0.563
|
||||
2021-02-16,-0.564
|
||||
2021-02-17,-0.563
|
||||
2021-02-18,-0.562
|
||||
2021-02-19,-0.563
|
||||
2021-02-22,-0.564
|
||||
2021-02-23,-0.565
|
||||
2021-02-24,-0.564
|
||||
2021-02-25,-0.564
|
||||
2021-02-26,-0.566
|
||||
2021-03-01,-0.563
|
||||
2021-03-02,-0.565
|
||||
2021-03-03,-0.565
|
||||
2021-03-04,-0.565
|
||||
2021-03-05,-0.562
|
||||
2021-03-08,-0.558
|
||||
2021-03-09,-0.56
|
||||
2021-03-10,-0.562
|
||||
2021-03-11,-0.561
|
||||
2021-03-12,-0.562
|
||||
2021-03-15,-0.564
|
||||
2021-03-16,-0.562
|
||||
2021-03-17,-0.561
|
||||
2021-03-18,-0.566
|
||||
2021-03-19,-0.565
|
||||
2021-03-22,-0.566
|
||||
2021-03-23,-0.563
|
||||
2021-03-24,-0.564
|
||||
2021-03-25,-0.564
|
||||
2021-03-26,-0.568
|
||||
2021-03-29,-0.57
|
||||
2021-03-30,-0.57
|
||||
2021-03-31,-0.574
|
||||
2021-04-01,-0.566
|
||||
2021-04-06,-0.567
|
||||
2021-04-07,-0.567
|
||||
2021-04-08,-0.57
|
||||
2021-04-09,-0.568
|
||||
2021-04-12,-0.567
|
||||
2021-04-13,-0.563
|
||||
2021-04-14,-0.56
|
||||
2021-04-15,-0.566
|
||||
2021-04-16,-0.565
|
||||
2021-04-19,-0.567
|
||||
2021-04-20,-0.567
|
||||
2021-04-21,-0.565
|
||||
2021-04-22,-0.565
|
||||
2021-04-23,-0.565
|
||||
2021-04-26,-0.567
|
||||
2021-04-27,-0.56
|
||||
2021-04-28,-0.566
|
||||
2021-04-29,-0.566
|
||||
2021-04-30,-0.569
|
||||
2021-05-03,-0.567
|
||||
2021-05-04,-0.564
|
||||
2021-05-05,-0.566
|
||||
2021-05-06,-0.565
|
||||
2021-05-07,-0.563
|
||||
2021-05-10,-0.567
|
||||
2021-05-11,-0.564
|
||||
2021-05-12,-0.564
|
||||
2021-05-13,-0.564
|
||||
2021-05-14,-0.564
|
||||
2021-05-17,-0.565
|
||||
2021-05-18,-0.558
|
||||
2021-05-19,-0.564
|
||||
2021-05-20,-0.563
|
||||
2021-05-21,-0.564
|
||||
2021-05-24,-0.566
|
||||
2021-05-25,-0.565
|
||||
2021-05-26,-0.565
|
||||
2021-05-27,-0.564
|
||||
2021-05-28,-0.566
|
||||
2021-05-31,-0.571
|
||||
2021-06-01,-0.564
|
||||
2021-06-02,-0.563
|
||||
2021-06-03,-0.563
|
||||
2021-06-04,-0.563
|
||||
2021-06-07,-0.564
|
||||
2021-06-08,-0.563
|
||||
2021-06-09,-0.564
|
||||
2021-06-10,-0.561
|
||||
2021-06-11,-0.566
|
||||
2021-06-14,-0.565
|
||||
2021-06-15,-0.561
|
||||
2021-06-16,-0.562
|
||||
2021-06-17,-0.563
|
||||
2021-06-18,-0.563
|
||||
2021-06-21,-0.564
|
||||
2021-06-22,-0.564
|
||||
2021-06-23,-0.563
|
||||
2021-06-24,-0.565
|
||||
2021-06-25,-0.565
|
||||
2021-06-28,-0.566
|
||||
2021-06-29,-0.568
|
||||
2021-06-30,-0.581
|
||||
2021-07-01,-0.565
|
||||
2021-07-02,-0.565
|
||||
2021-07-05,-0.566
|
||||
2021-07-06,-0.565
|
||||
2021-07-07,-0.565
|
||||
2021-07-08,-0.566
|
||||
2021-07-09,-0.566
|
||||
2021-07-12,-0.568
|
||||
2021-07-13,-0.566
|
||||
2021-07-14,-0.566
|
||||
2021-07-15,-0.566
|
||||
2021-07-16,-0.567
|
||||
2021-07-19,-0.566
|
||||
2021-07-20,-0.567
|
||||
2021-07-21,-0.568
|
||||
2021-07-22,-0.563
|
||||
2021-07-23,-0.567
|
||||
2021-07-26,-0.567
|
||||
2021-07-27,-0.563
|
||||
2021-07-28,-0.567
|
||||
2021-07-29,-0.567
|
||||
2021-07-30,-0.571
|
||||
2021-08-02,-0.565
|
||||
2021-08-03,-0.57
|
||||
2021-08-04,-0.57
|
||||
2021-08-05,-0.566
|
||||
2021-08-06,-0.569
|
||||
2021-08-09,-0.568
|
||||
2021-08-10,-0.567
|
||||
2021-08-11,-0.567
|
||||
2021-08-12,-0.568
|
||||
2021-08-13,-0.569
|
||||
2021-08-16,-0.569
|
||||
2021-08-17,-0.568
|
||||
2021-08-18,-0.567
|
||||
2021-08-19,-0.567
|
||||
2021-08-20,-0.567
|
||||
2021-08-23,-0.568
|
||||
2021-08-24,-0.567
|
||||
2021-08-25,-0.564
|
||||
2021-08-26,-0.57
|
||||
2021-08-27,-0.57
|
||||
2021-08-30,-0.568
|
||||
2021-08-31,-0.57
|
||||
2021-09-01,-0.569
|
||||
2021-09-02,-0.569
|
||||
2021-09-03,-0.568
|
||||
2021-09-06,-0.569
|
||||
2021-09-07,-0.569
|
||||
2021-09-08,-0.569
|
||||
2021-09-09,-0.57
|
||||
2021-09-10,-0.57
|
||||
2021-09-13,-0.571
|
||||
2021-09-14,-0.568
|
||||
2021-09-15,-0.573
|
||||
2021-09-16,-0.567
|
||||
2021-09-17,-0.571
|
||||
2021-09-20,-0.566
|
||||
2021-09-21,-0.571
|
||||
2021-09-22,-0.566
|
||||
2021-09-23,-0.57
|
||||
2021-09-24,-0.569
|
||||
2021-09-27,-0.571
|
||||
2021-09-28,-0.573
|
||||
2021-09-29,-0.572
|
||||
2021-09-30,-0.58
|
||||
2021-10-01,-0.571
|
||||
2021-10-04,-0.569
|
||||
2021-10-05,-0.569
|
||||
2021-10-06,-0.569
|
||||
2021-10-07,-0.568
|
||||
2021-10-08,-0.568
|
||||
2021-10-11,-0.57
|
||||
2021-10-12,-0.562
|
||||
2021-10-13,-0.569
|
||||
2021-10-14,-0.57
|
||||
2021-10-15,-0.572
|
||||
2021-10-18,-0.574
|
||||
2021-10-19,-0.573
|
||||
2021-10-20,-0.571
|
||||
2021-10-21,-0.573
|
||||
2021-10-22,-0.569
|
||||
2021-10-25,-0.571
|
||||
2021-10-26,-0.57
|
||||
2021-10-27,-0.573
|
||||
2021-10-28,-0.573
|
||||
2021-10-29,-0.578
|
||||
2021-11-01,-0.579
|
||||
2021-11-02,-0.569
|
||||
2021-11-03,-0.574
|
||||
2021-11-04,-0.573
|
||||
2021-11-05,-0.572
|
||||
2021-11-08,-0.575
|
||||
2021-11-09,-0.575
|
||||
2021-11-10,-0.576
|
||||
2021-11-11,-0.575
|
||||
2021-11-12,-0.572
|
||||
2021-11-15,-0.569
|
||||
2021-11-16,-0.571
|
||||
2021-11-17,-0.571
|
||||
2021-11-18,-0.571
|
||||
2021-11-19,-0.573
|
||||
2021-11-22,-0.573
|
||||
2021-11-23,-0.574
|
||||
2021-11-24,-0.57
|
||||
2021-11-25,-0.573
|
||||
2021-11-26,-0.573
|
||||
2021-11-29,-0.573
|
||||
2021-11-30,-0.575
|
||||
2021-12-01,-0.574
|
||||
2021-12-02,-0.575
|
||||
2021-12-03,-0.578
|
||||
2021-12-06,-0.578
|
||||
2021-12-07,-0.577
|
||||
2021-12-08,-0.577
|
||||
2021-12-09,-0.578
|
||||
2021-12-10,-0.577
|
||||
2021-12-13,-0.579
|
||||
2021-12-14,-0.577
|
||||
2021-12-15,-0.577
|
||||
2021-12-16,-0.577
|
||||
2021-12-17,-0.576
|
||||
2021-12-20,-0.576
|
||||
2021-12-21,-0.571
|
||||
2021-12-22,-0.574
|
||||
2021-12-23,-0.576
|
||||
2021-12-24,-0.58
|
||||
2021-12-27,-0.576
|
||||
2021-12-28,-0.575
|
||||
2021-12-29,-0.578
|
||||
2021-12-30,-0.58
|
||||
2021-12-31,-0.59
|
||||
2022-01-03,-0.578
|
||||
2022-01-04,-0.578
|
||||
2022-01-05,-0.578
|
||||
2022-01-06,-0.578
|
||||
2022-01-07,-0.58
|
||||
2022-01-10,-0.579
|
||||
2022-01-11,-0.579
|
||||
2022-01-12,-0.578
|
||||
2022-01-13,-0.578
|
||||
2022-01-14,-0.578
|
||||
2022-01-17,-0.578
|
||||
2022-01-18,-0.579
|
||||
2022-01-19,-0.578
|
||||
2022-01-20,-0.579
|
||||
2022-01-21,-0.579
|
||||
2022-01-24,-0.579
|
||||
2022-01-25,-0.578
|
||||
2022-01-26,-0.576
|
||||
2022-01-27,-0.573
|
||||
2022-01-28,-0.573
|
||||
2022-01-31,-0.579
|
||||
2022-02-01,-0.578
|
||||
2022-02-02,-0.578
|
||||
2022-02-03,-0.577
|
||||
2022-02-04,-0.578
|
||||
2022-02-07,-0.578
|
||||
2022-02-08,-0.574
|
||||
2022-02-09,-0.578
|
||||
2022-02-10,-0.572
|
||||
2022-02-11,-0.578
|
||||
2022-02-14,-0.578
|
||||
2022-02-15,-0.576
|
||||
2022-02-16,-0.576
|
||||
2022-02-17,-0.576
|
||||
2022-02-18,-0.576
|
||||
2022-02-21,-0.576
|
||||
2022-02-22,-0.575
|
||||
2022-02-23,-0.576
|
||||
2022-02-24,-0.576
|
||||
2022-02-25,-0.575
|
||||
2022-02-28,-0.58
|
||||
2022-03-01,-0.577
|
||||
2022-03-02,-0.578
|
||||
2022-03-03,-0.579
|
||||
2022-03-04,-0.577
|
||||
2022-03-07,-0.579
|
||||
2022-03-08,-0.579
|
||||
2022-03-09,-0.58
|
||||
2022-03-10,-0.576
|
||||
2022-03-11,-0.577
|
||||
2022-03-14,-0.577
|
||||
2022-03-15,-0.573
|
||||
2022-03-16,-0.577
|
||||
2022-03-17,-0.578
|
||||
2022-03-18,-0.578
|
||||
2022-03-21,-0.578
|
||||
2022-03-22,-0.578
|
||||
2022-03-23,-0.578
|
||||
2022-03-24,-0.579
|
||||
2022-03-25,-0.581
|
||||
2022-03-28,-0.58
|
||||
2022-03-29,-0.579
|
||||
2022-03-30,-0.579
|
||||
2022-03-31,-0.593
|
||||
2022-04-01,-0.582
|
||||
2022-04-04,-0.585
|
||||
2022-04-05,-0.586
|
||||
2022-04-06,-0.584
|
||||
2022-04-07,-0.582
|
||||
2022-04-08,-0.583
|
||||
2022-04-11,-0.584
|
||||
2022-04-12,-0.583
|
||||
2022-04-13,-0.585
|
||||
2022-04-14,-0.586
|
||||
2022-04-19,-0.58
|
||||
2022-04-20,-0.583
|
||||
2022-04-21,-0.585
|
||||
2022-04-22,-0.583
|
||||
2022-04-25,-0.585
|
||||
2022-04-26,-0.582
|
||||
2022-04-27,-0.583
|
||||
2022-04-28,-0.583
|
||||
2022-04-29,-0.586
|
||||
2022-05-02,-0.583
|
||||
2022-05-03,-0.579
|
||||
2022-05-04,-0.585
|
||||
2022-05-05,-0.585
|
||||
2022-05-06,-0.585
|
||||
2022-05-09,-0.586
|
||||
2022-05-10,-0.584
|
||||
2022-05-11,-0.584
|
||||
2022-05-12,-0.577
|
||||
2022-05-13,-0.586
|
||||
2022-05-16,-0.585
|
||||
2022-05-17,-0.585
|
||||
2022-05-18,-0.585
|
||||
2022-05-19,-0.585
|
||||
2022-05-20,-0.585
|
||||
2022-05-23,-0.586
|
||||
2022-05-24,-0.587
|
||||
2022-05-25,-0.587
|
||||
2022-05-26,-0.59
|
||||
2022-05-27,-0.585
|
||||
2022-05-30,-0.586
|
||||
2022-05-31,-0.589
|
||||
2022-06-01,-0.582
|
||||
2022-06-02,-0.585
|
||||
2022-06-03,-0.587
|
||||
2022-06-06,-0.59
|
||||
2022-06-07,-0.583
|
||||
2022-06-08,-0.582
|
||||
2022-06-09,-0.582
|
||||
2022-06-10,-0.581
|
||||
2022-06-13,-0.58
|
||||
2022-06-14,-0.578
|
||||
2022-06-15,-0.58
|
||||
2022-06-16,-0.582
|
||||
2022-06-17,-0.582
|
||||
2022-06-20,-0.581
|
||||
2022-06-21,-0.582
|
||||
2022-06-22,-0.579
|
||||
2022-06-23,-0.578
|
||||
2022-06-24,-0.58
|
||||
2022-06-27,-0.579
|
||||
2022-06-28,-0.581
|
||||
2022-06-29,-0.578
|
||||
2022-06-30,-0.591
|
||||
2022-07-01,-0.58
|
||||
2022-07-04,-0.58
|
||||
2022-07-05,-0.58
|
||||
2022-07-06,-0.58
|
||||
2022-07-07,-0.579
|
||||
2022-07-08,-0.579
|
||||
2022-07-11,-0.58
|
||||
2022-07-12,-0.58
|
||||
2022-07-13,-0.581
|
||||
2022-07-14,-0.582
|
||||
2022-07-15,-0.582
|
||||
2022-07-18,-0.582
|
||||
2022-07-19,-0.583
|
||||
2022-07-20,-0.582
|
||||
2022-07-21,-0.584
|
||||
2022-07-22,-0.582
|
||||
2022-07-25,-0.583
|
||||
2022-07-26,-0.581
|
||||
2022-07-27,-0.085
|
||||
2022-07-28,-0.087
|
||||
2022-07-29,-0.091
|
||||
2022-08-01,-0.088
|
||||
2022-08-02,-0.087
|
||||
2022-08-03,-0.087
|
||||
2022-08-04,-0.084
|
||||
2022-08-05,-0.085
|
||||
2022-08-08,-0.085
|
||||
2022-08-09,-0.085
|
||||
2022-08-10,-0.086
|
||||
2022-08-11,-0.085
|
||||
2022-08-12,-0.088
|
||||
2022-08-15,-0.088
|
||||
2022-08-16,-0.087
|
||||
2022-08-17,-0.087
|
||||
2022-08-18,-0.084
|
||||
2022-08-19,-0.084
|
||||
2022-08-22,-0.082
|
||||
2022-08-23,-0.08
|
||||
2022-08-24,-0.082
|
||||
2022-08-25,-0.08
|
||||
2022-08-26,-0.08
|
||||
2022-08-29,-0.081
|
||||
2022-08-30,-0.084
|
||||
2022-08-31,-0.091
|
||||
2022-09-01,-0.084
|
||||
2022-09-02,-0.083
|
||||
2022-09-05,-0.087
|
||||
2022-09-06,-0.085
|
||||
2022-09-07,-0.076
|
||||
2022-09-08,-0.086
|
||||
2022-09-09,-0.085
|
||||
2022-09-12,-0.086
|
||||
2022-09-13,-0.083
|
||||
2022-09-14,0.662
|
||||
2022-09-15,0.66
|
||||
2022-09-16,0.66
|
||||
2022-09-19,0.657
|
||||
2022-09-20,0.659
|
||||
2022-09-21,0.661
|
||||
2022-09-22,0.661
|
||||
2022-09-23,0.662
|
||||
2022-09-26,0.663
|
||||
2022-09-27,0.662
|
||||
2022-09-28,0.662
|
||||
2022-09-29,0.661
|
||||
2022-09-30,0.642
|
||||
2022-10-03,0.656
|
||||
2022-10-04,0.657
|
||||
2022-10-05,0.652
|
||||
2022-10-06,0.655
|
||||
2022-10-07,0.656
|
||||
2022-10-10,0.655
|
||||
2022-10-11,0.657
|
||||
2022-10-12,0.658
|
||||
2022-10-13,0.658
|
||||
2022-10-14,0.657
|
||||
2022-10-17,0.658
|
||||
2022-10-18,0.657
|
||||
2022-10-19,0.656
|
||||
2022-10-20,0.656
|
||||
2022-10-21,0.657
|
||||
2022-10-24,0.658
|
||||
2022-10-25,0.656
|
||||
2022-10-26,0.656
|
||||
2022-10-27,0.657
|
||||
2022-10-28,0.656
|
||||
2022-10-31,0.648
|
||||
2022-11-01,0.659
|
||||
2022-11-02,1.403
|
||||
2022-11-03,1.403
|
||||
2022-11-04,1.401
|
||||
2022-11-07,1.4
|
||||
2022-11-08,1.4
|
||||
2022-11-09,1.4
|
||||
2022-11-10,1.402
|
||||
2022-11-11,1.404
|
||||
2022-11-14,1.401
|
||||
2022-11-15,1.4
|
||||
2022-11-16,1.401
|
||||
2022-11-17,1.402
|
||||
2022-11-18,1.403
|
||||
2022-11-21,1.403
|
||||
2022-11-22,1.404
|
||||
2022-11-23,1.405
|
||||
2022-11-24,1.405
|
||||
2022-11-25,1.403
|
||||
2022-11-28,1.403
|
||||
2022-11-29,1.402
|
||||
2022-11-30,1.391
|
||||
2022-12-01,1.4
|
||||
2022-12-02,1.4
|
||||
2022-12-05,1.398
|
||||
2022-12-06,1.406
|
||||
2022-12-07,1.399
|
||||
2022-12-08,1.4
|
||||
2022-12-09,1.4
|
||||
2022-12-12,1.4
|
||||
2022-12-13,1.4
|
||||
2022-12-14,1.402
|
||||
2022-12-15,1.403
|
||||
2022-12-16,1.402
|
||||
2022-12-19,1.403
|
||||
2022-12-20,1.403
|
||||
2022-12-21,1.902
|
||||
2022-12-22,1.904
|
||||
2022-12-23,1.907
|
||||
2022-12-27,1.906
|
||||
2022-12-28,1.906
|
||||
2022-12-29,1.905
|
||||
2022-12-30,1.89
|
||||
2023-01-02,1.906
|
||||
2023-01-03,1.904
|
||||
2023-01-04,1.904
|
||||
2023-01-05,1.9
|
||||
2023-01-06,1.898
|
||||
2023-01-09,1.9
|
||||
2023-01-10,1.9
|
||||
2023-01-11,1.9
|
||||
2023-01-12,1.9
|
||||
2023-01-13,1.901
|
||||
2023-01-16,1.902
|
||||
2023-01-17,1.901
|
||||
2023-01-18,1.902
|
||||
2023-01-19,1.903
|
||||
2023-01-20,1.903
|
||||
2023-01-23,1.902
|
||||
2023-01-24,1.904
|
||||
2023-01-25,1.904
|
||||
2023-01-26,1.904
|
||||
2023-01-27,1.906
|
||||
2023-01-30,1.904
|
||||
2023-01-31,1.894
|
||||
2023-02-01,1.901
|
||||
2023-02-02,1.902
|
||||
2023-02-03,1.898
|
||||
2023-02-06,1.901
|
||||
2023-02-07,1.902
|
||||
2023-02-08,2.401
|
||||
2023-02-09,2.401
|
||||
2023-02-10,2.401
|
||||
2023-02-13,2.4
|
||||
2023-02-14,2.4
|
||||
2023-02-15,2.405
|
||||
2023-02-16,2.4
|
||||
2023-02-17,2.398
|
||||
2023-02-20,2.4
|
||||
|
12
tests/openbb_terminal/fixedincome/csv/test_fred_model/test_yield_curve[False].csv
vendored
Normal file
12
tests/openbb_terminal/fixedincome/csv/test_fred_model/test_yield_curve[False].csv
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
,Maturity,Rate
|
||||
0,0.08333333333333333,4.64
|
||||
1,0.25,4.72
|
||||
2,0.5,4.88
|
||||
3,1.0,4.87
|
||||
4,2.0,4.45
|
||||
5,3.0,4.08
|
||||
6,5.0,3.82
|
||||
7,7.0,3.75
|
||||
8,10.0,3.63
|
||||
9,20.0,3.86
|
||||
10,30.0,3.7
|
||||
|
6
tests/openbb_terminal/fixedincome/csv/test_fred_model/test_yield_curve[True].csv
vendored
Normal file
6
tests/openbb_terminal/fixedincome/csv/test_fred_model/test_yield_curve[True].csv
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
,Maturity,Rate
|
||||
0,5,1.36
|
||||
1,7,1.32
|
||||
2,10,1.29
|
||||
3,20,1.35
|
||||
4,30,1.41
|
||||
|
2
tests/openbb_terminal/fixedincome/csv/test_oecd_model/test_get_interest_rates[long].csv
vendored
Normal file
2
tests/openbb_terminal/fixedincome/csv/test_oecd_model/test_get_interest_rates[long].csv
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
,united_states (10 year),canada (10 year)
|
||||
2022-01-01,0.22,0.4571955
|
||||
|
@@ -0,0 +1,2 @@
|
||||
,united_states (10 year with forecast),canada (10 year with forecast)
|
||||
2022-01-01,0.443333333333333,0.651304655666667
|
||||
|
2
tests/openbb_terminal/fixedincome/csv/test_oecd_model/test_get_interest_rates[short].csv
vendored
Normal file
2
tests/openbb_terminal/fixedincome/csv/test_oecd_model/test_get_interest_rates[short].csv
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
,united_states (3 month),canada (3 month)
|
||||
2022-01-01,1.76,1.759
|
||||
|
@@ -0,0 +1,2 @@
|
||||
,united_states (3 month with forecast),canada (3 month with forecast)
|
||||
2022-01-01,1.94,1.923549199
|
||||
|
28
tests/openbb_terminal/fixedincome/test_ecb_model.py
Normal file
28
tests/openbb_terminal/fixedincome/test_ecb_model.py
Normal file
@@ -0,0 +1,28 @@
|
||||
import pandas as pd
|
||||
import pytest
|
||||
|
||||
from openbb_terminal.fixedincome import ecb_model
|
||||
|
||||
|
||||
@pytest.mark.vcr
|
||||
def test_get_series_data(recorder):
|
||||
"""Test get_series_data"""
|
||||
data = ecb_model.get_series_data(
|
||||
"EST.B.EU000A2X2A25.WT", start_date="2022-01-01", end_date="2022-01-31"
|
||||
)
|
||||
assert isinstance(data, pd.DataFrame)
|
||||
recorder.capture(data)
|
||||
|
||||
|
||||
@pytest.mark.vcr
|
||||
def test_get_ecb_yield_curve(recorder):
|
||||
"""Test get_ecb_yield_curve"""
|
||||
data = ecb_model.get_ecb_yield_curve(
|
||||
date="2023-02-15",
|
||||
yield_type="spot_rate",
|
||||
return_date=True,
|
||||
detailed=False,
|
||||
any_rating=True,
|
||||
)
|
||||
assert isinstance(data, tuple)
|
||||
recorder.capture(data[0])
|
||||
602
tests/openbb_terminal/fixedincome/test_fixedincome_controller.py
Normal file
602
tests/openbb_terminal/fixedincome/test_fixedincome_controller.py
Normal file
@@ -0,0 +1,602 @@
|
||||
import os
|
||||
from datetime import datetime
|
||||
|
||||
import pytest
|
||||
|
||||
from openbb_terminal.fixedincome import fixedincome_controller
|
||||
|
||||
MOCK_START = datetime.strptime("2022-01-01", "%Y-%m-%d")
|
||||
MOCK_END = datetime.strptime("2022-01-31", "%Y-%m-%d")
|
||||
|
||||
|
||||
@pytest.mark.vcr(record_mode="none")
|
||||
@pytest.mark.parametrize(
|
||||
"queue, expected",
|
||||
[
|
||||
(["load", "help"], ["help"]),
|
||||
(["quit", "help"], ["help"]),
|
||||
],
|
||||
)
|
||||
def test_menu_with_queue(expected, mocker, queue):
|
||||
path_controller = "openbb_terminal.fixedincome.fixedincome_controller"
|
||||
|
||||
# MOCK SWITCH
|
||||
mocker.patch(
|
||||
target=f"{path_controller}.FixedIncomeController.switch",
|
||||
return_value=["quit"],
|
||||
)
|
||||
result_menu = fixedincome_controller.FixedIncomeController(queue=queue).menu()
|
||||
|
||||
assert result_menu == expected
|
||||
|
||||
|
||||
@pytest.mark.vcr(record_mode="none")
|
||||
def test_menu_without_queue_completion(mocker):
|
||||
path_controller = "openbb_terminal.fixedincome.fixedincome_controller"
|
||||
|
||||
# ENABLE AUTO-COMPLETION : HELPER_FUNCS.MENU
|
||||
mocker.patch(
|
||||
target="openbb_terminal.feature_flags.USE_PROMPT_TOOLKIT",
|
||||
new=True,
|
||||
)
|
||||
mocker.patch(
|
||||
target="openbb_terminal.parent_classes.session",
|
||||
)
|
||||
mocker.patch(
|
||||
target="openbb_terminal.parent_classes.session.prompt",
|
||||
return_value="quit",
|
||||
)
|
||||
|
||||
# DISABLE AUTO-COMPLETION : CONTROLLER.COMPLETER
|
||||
mocker.patch.object(
|
||||
target=fixedincome_controller.obbff,
|
||||
attribute="USE_PROMPT_TOOLKIT",
|
||||
new=True,
|
||||
)
|
||||
mocker.patch(
|
||||
target=f"{path_controller}.session",
|
||||
)
|
||||
mocker.patch(
|
||||
target=f"{path_controller}.session.prompt",
|
||||
return_value="quit",
|
||||
)
|
||||
|
||||
result_menu = fixedincome_controller.FixedIncomeController(queue=None).menu()
|
||||
|
||||
assert result_menu == ["help"]
|
||||
|
||||
|
||||
@pytest.mark.vcr(record_mode="none")
|
||||
@pytest.mark.parametrize(
|
||||
"mock_input",
|
||||
["help", "homee help", "home help", "mock"],
|
||||
)
|
||||
def test_menu_without_queue_sys_exit(mock_input, mocker):
|
||||
path_controller = "openbb_terminal.fixedincome.fixedincome_controller"
|
||||
|
||||
# DISABLE AUTO-COMPLETION
|
||||
mocker.patch.object(
|
||||
target=fixedincome_controller.obbff,
|
||||
attribute="USE_PROMPT_TOOLKIT",
|
||||
new=False,
|
||||
)
|
||||
mocker.patch(
|
||||
target=f"{path_controller}.session",
|
||||
return_value=None,
|
||||
)
|
||||
|
||||
# MOCK USER INPUT
|
||||
mocker.patch("builtins.input", return_value=mock_input)
|
||||
|
||||
# MOCK SWITCH
|
||||
class SystemExitSideEffect:
|
||||
def __init__(self):
|
||||
self.first_call = True
|
||||
|
||||
def __call__(self, *args, **kwargs):
|
||||
if self.first_call:
|
||||
self.first_call = False
|
||||
raise SystemExit()
|
||||
return ["quit"]
|
||||
|
||||
mock_switch = mocker.Mock(side_effect=SystemExitSideEffect())
|
||||
mocker.patch(
|
||||
target=f"{path_controller}.FixedIncomeController.switch",
|
||||
new=mock_switch,
|
||||
)
|
||||
|
||||
result_menu = fixedincome_controller.FixedIncomeController(queue=None).menu()
|
||||
|
||||
assert result_menu == ["help"]
|
||||
|
||||
|
||||
@pytest.mark.vcr(record_mode="none")
|
||||
@pytest.mark.record_stdout
|
||||
def test_print_help():
|
||||
controller = fixedincome_controller.FixedIncomeController(queue=None)
|
||||
controller.print_help()
|
||||
|
||||
|
||||
@pytest.mark.vcr(record_mode="none")
|
||||
@pytest.mark.parametrize(
|
||||
"an_input, expected_queue",
|
||||
[
|
||||
("", []),
|
||||
("/help", ["home", "help"]),
|
||||
("help/help", ["help", "help"]),
|
||||
("q", ["quit"]),
|
||||
("h", []),
|
||||
(
|
||||
"r",
|
||||
[
|
||||
"quit",
|
||||
"reset",
|
||||
"fixedincome",
|
||||
],
|
||||
),
|
||||
],
|
||||
)
|
||||
def test_switch(an_input, expected_queue):
|
||||
controller = fixedincome_controller.FixedIncomeController(queue=None)
|
||||
queue = controller.switch(an_input=an_input)
|
||||
|
||||
assert queue == expected_queue
|
||||
|
||||
|
||||
@pytest.mark.vcr(record_mode="none")
|
||||
def test_call_cls(mocker):
|
||||
mocker.patch("os.system")
|
||||
|
||||
controller = fixedincome_controller.FixedIncomeController(queue=None)
|
||||
controller.call_cls([])
|
||||
|
||||
assert controller.queue == []
|
||||
os.system.assert_called_once_with("cls||clear")
|
||||
|
||||
|
||||
@pytest.mark.vcr(record_mode="none")
|
||||
@pytest.mark.parametrize(
|
||||
"func, queue, expected_queue",
|
||||
[
|
||||
(
|
||||
"call_exit",
|
||||
[],
|
||||
["quit", "quit"],
|
||||
),
|
||||
("call_exit", ["help"], ["quit", "quit", "help"]),
|
||||
("call_home", [], ["quit"]),
|
||||
("call_help", [], []),
|
||||
("call_quit", [], ["quit"]),
|
||||
("call_quit", ["help"], ["quit", "help"]),
|
||||
(
|
||||
"call_reset",
|
||||
[],
|
||||
[
|
||||
"quit",
|
||||
"reset",
|
||||
"fixedincome",
|
||||
],
|
||||
),
|
||||
(
|
||||
"call_reset",
|
||||
["help"],
|
||||
[
|
||||
"quit",
|
||||
"reset",
|
||||
"fixedincome",
|
||||
"help",
|
||||
],
|
||||
),
|
||||
],
|
||||
)
|
||||
def test_call_func_expect_queue(expected_queue, func, queue):
|
||||
controller = fixedincome_controller.FixedIncomeController(queue=queue)
|
||||
result = getattr(controller, func)([])
|
||||
|
||||
assert result is None
|
||||
assert controller.queue == expected_queue
|
||||
|
||||
|
||||
@pytest.mark.vcr(record_mode="none")
|
||||
@pytest.mark.parametrize(
|
||||
"tested_func, other_args, mocked_func, called_args, called_kwargs",
|
||||
[
|
||||
(
|
||||
"call_estr",
|
||||
[
|
||||
"-p=total_volume",
|
||||
"-s=2022-01-01",
|
||||
"-e=2022-01-31",
|
||||
"--export=csv",
|
||||
],
|
||||
"fred_view.plot_estr",
|
||||
[],
|
||||
dict(
|
||||
parameter="total_volume",
|
||||
start_date=MOCK_START,
|
||||
end_date=MOCK_END,
|
||||
export="csv",
|
||||
sheet_name=None,
|
||||
),
|
||||
),
|
||||
(
|
||||
"call_estr",
|
||||
[
|
||||
"--source=ECB",
|
||||
"-p=total_volume",
|
||||
"-s=2022-01-01",
|
||||
"-e=2022-01-31",
|
||||
"--export=csv",
|
||||
],
|
||||
"ecb_view.plot_estr",
|
||||
[],
|
||||
dict(
|
||||
parameter="total_volume",
|
||||
start_date=MOCK_START,
|
||||
end_date=MOCK_END,
|
||||
export="csv",
|
||||
sheet_name=None,
|
||||
),
|
||||
),
|
||||
(
|
||||
"call_sofr",
|
||||
[
|
||||
"-p=180_day_average",
|
||||
"-s=2022-01-01",
|
||||
"-e=2022-01-31",
|
||||
"--export=csv",
|
||||
],
|
||||
"fred_view.plot_sofr",
|
||||
[],
|
||||
dict(
|
||||
parameter="180_day_average",
|
||||
start_date=MOCK_START,
|
||||
end_date=MOCK_END,
|
||||
export="csv",
|
||||
sheet_name=None,
|
||||
),
|
||||
),
|
||||
(
|
||||
"call_sonia",
|
||||
[
|
||||
"-p=index",
|
||||
"-s=2022-01-01",
|
||||
"-e=2022-01-31",
|
||||
"--export=csv",
|
||||
],
|
||||
"fred_view.plot_sonia",
|
||||
[],
|
||||
dict(
|
||||
parameter="index",
|
||||
start_date=MOCK_START,
|
||||
end_date=MOCK_END,
|
||||
export="csv",
|
||||
sheet_name=None,
|
||||
),
|
||||
),
|
||||
(
|
||||
"call_ameribor",
|
||||
[
|
||||
"-p=2_year_term_structure",
|
||||
"-s=2022-01-01",
|
||||
"-e=2022-01-31",
|
||||
"--export=csv",
|
||||
],
|
||||
"fred_view.plot_ameribor",
|
||||
[],
|
||||
dict(
|
||||
parameter="2_year_term_structure",
|
||||
start_date=MOCK_START,
|
||||
end_date=MOCK_END,
|
||||
export="csv",
|
||||
sheet_name=None,
|
||||
),
|
||||
),
|
||||
(
|
||||
"call_fed",
|
||||
[
|
||||
"-p=monthly",
|
||||
"--overnight",
|
||||
"-s=2022-01-01",
|
||||
"-e=2022-01-31",
|
||||
"--export=csv",
|
||||
],
|
||||
"fred_view.plot_fed",
|
||||
[],
|
||||
dict(
|
||||
parameter="monthly",
|
||||
start_date=MOCK_START,
|
||||
end_date=MOCK_END,
|
||||
export="csv",
|
||||
sheet_name=None,
|
||||
overnight=True,
|
||||
quantiles=False,
|
||||
target=False,
|
||||
raw=False,
|
||||
),
|
||||
),
|
||||
(
|
||||
"call_iorb",
|
||||
[
|
||||
"-s=2022-01-01",
|
||||
"-e=2022-01-31",
|
||||
"--export=csv",
|
||||
],
|
||||
"fred_view.plot_iorb",
|
||||
[],
|
||||
dict(
|
||||
start_date=MOCK_START,
|
||||
end_date=MOCK_END,
|
||||
export="csv",
|
||||
sheet_name=None,
|
||||
),
|
||||
),
|
||||
(
|
||||
"call_dwpcr",
|
||||
[
|
||||
"-p=annual",
|
||||
"-s=2022-01-01",
|
||||
"-e=2022-01-31",
|
||||
"--export=csv",
|
||||
],
|
||||
"fred_view.plot_dwpcr",
|
||||
[],
|
||||
dict(
|
||||
parameter="annual",
|
||||
start_date=MOCK_START,
|
||||
end_date=MOCK_END,
|
||||
export="csv",
|
||||
sheet_name=None,
|
||||
),
|
||||
),
|
||||
(
|
||||
"call_ecb",
|
||||
[
|
||||
"-s=2022-01-01",
|
||||
"-e=2022-01-31",
|
||||
"--export=csv",
|
||||
],
|
||||
"fred_view.plot_ecb",
|
||||
[],
|
||||
dict(
|
||||
interest_type=None,
|
||||
raw=False,
|
||||
start_date=MOCK_START,
|
||||
end_date=MOCK_END,
|
||||
export="csv",
|
||||
sheet_name=None,
|
||||
),
|
||||
),
|
||||
(
|
||||
"call_treasury",
|
||||
[
|
||||
"--short=united_kingdom",
|
||||
"--long=united_states,canada",
|
||||
"--forecast",
|
||||
"-s=2022-01-01",
|
||||
"-e=2022-01-31",
|
||||
"--export=csv",
|
||||
],
|
||||
"oecd_view.plot_treasuries",
|
||||
[],
|
||||
dict(
|
||||
forecast=True,
|
||||
raw=False,
|
||||
long_term=["united_states", "canada"],
|
||||
short_term=["united_kingdom"],
|
||||
start_date=MOCK_START,
|
||||
end_date=MOCK_END,
|
||||
export="csv",
|
||||
sheet_name=None,
|
||||
),
|
||||
),
|
||||
(
|
||||
"call_usrates",
|
||||
[
|
||||
"-m=7_year",
|
||||
"-p=tips",
|
||||
"--forecast",
|
||||
"-s=2022-01-01",
|
||||
"-e=2022-01-31",
|
||||
"--export=csv",
|
||||
"--raw",
|
||||
],
|
||||
"fred_view.plot_usrates",
|
||||
[],
|
||||
dict(
|
||||
parameter="tips",
|
||||
maturity="7_year",
|
||||
start_date=MOCK_START,
|
||||
end_date=MOCK_END,
|
||||
export="csv",
|
||||
sheet_name=None,
|
||||
raw=True,
|
||||
),
|
||||
),
|
||||
(
|
||||
"call_ycrv",
|
||||
["-d=2022-01-01", "--raw"],
|
||||
"fred_view.display_yield_curve",
|
||||
[],
|
||||
dict(
|
||||
date="2022-01-01",
|
||||
inflation_adjusted=False,
|
||||
export="",
|
||||
sheet_name=None,
|
||||
raw=True,
|
||||
),
|
||||
),
|
||||
(
|
||||
"call_ecbycrv",
|
||||
["-d=2022-01-01", "--raw", "-p=spot_rate"],
|
||||
"ecb_view.display_ecb_yield_curve",
|
||||
[],
|
||||
dict(
|
||||
date="2022-01-01",
|
||||
yield_type="spot_rate",
|
||||
export="",
|
||||
detailed=False,
|
||||
any_rating=False,
|
||||
sheet_name=None,
|
||||
raw=True,
|
||||
),
|
||||
),
|
||||
(
|
||||
"call_tmc",
|
||||
[
|
||||
"-s=2022-01-01",
|
||||
"-e=2022-01-31",
|
||||
],
|
||||
"fred_view.plot_tmc",
|
||||
[],
|
||||
dict(
|
||||
parameter="3_month",
|
||||
start_date=MOCK_START,
|
||||
end_date=MOCK_END,
|
||||
sheet_name=None,
|
||||
export="",
|
||||
),
|
||||
),
|
||||
(
|
||||
"call_ffrmc",
|
||||
[
|
||||
"-s=2022-01-01",
|
||||
"-e=2022-01-31",
|
||||
],
|
||||
"fred_view.plot_ffrmc",
|
||||
[],
|
||||
dict(
|
||||
parameter="10_year",
|
||||
start_date=MOCK_START,
|
||||
end_date=MOCK_END,
|
||||
sheet_name=None,
|
||||
export="",
|
||||
),
|
||||
),
|
||||
(
|
||||
"call_tbffr",
|
||||
[
|
||||
"-s=2022-01-01",
|
||||
"-e=2022-01-31",
|
||||
],
|
||||
"fred_view.plot_tbffr",
|
||||
[],
|
||||
dict(
|
||||
parameter="3_month",
|
||||
start_date=MOCK_START,
|
||||
end_date=MOCK_END,
|
||||
sheet_name=None,
|
||||
export="",
|
||||
),
|
||||
),
|
||||
(
|
||||
"call_icebofa",
|
||||
[
|
||||
"-t=yield",
|
||||
"-a=us",
|
||||
"-g=aaa",
|
||||
"-s=2022-01-01",
|
||||
"-e=2022-01-31",
|
||||
],
|
||||
"fred_view.plot_icebofa",
|
||||
[],
|
||||
dict(
|
||||
data_type="yield",
|
||||
category="all",
|
||||
grade="aaa",
|
||||
area="us",
|
||||
raw=False,
|
||||
options=False,
|
||||
description=False,
|
||||
start_date=MOCK_START,
|
||||
end_date=MOCK_END,
|
||||
sheet_name=None,
|
||||
export="",
|
||||
),
|
||||
),
|
||||
(
|
||||
"call_moody",
|
||||
[
|
||||
"-t=aaa",
|
||||
"--spread=fed_funds",
|
||||
"-s=2022-01-01",
|
||||
"-e=2022-01-31",
|
||||
],
|
||||
"fred_view.plot_moody",
|
||||
[],
|
||||
dict(
|
||||
data_type="aaa",
|
||||
spread="fed_funds",
|
||||
raw=False,
|
||||
start_date=MOCK_START,
|
||||
end_date=MOCK_END,
|
||||
sheet_name=None,
|
||||
export="",
|
||||
),
|
||||
),
|
||||
(
|
||||
"call_cp",
|
||||
[
|
||||
"-m=overnight",
|
||||
"-c=non_financial",
|
||||
"-s=2022-01-01",
|
||||
"-e=2022-01-31",
|
||||
],
|
||||
"fred_view.plot_cp",
|
||||
[],
|
||||
dict(
|
||||
maturity="overnight",
|
||||
category="non_financial",
|
||||
grade="aa",
|
||||
description=False,
|
||||
raw=False,
|
||||
options=False,
|
||||
start_date=MOCK_START,
|
||||
end_date=MOCK_END,
|
||||
sheet_name=None,
|
||||
export="",
|
||||
),
|
||||
),
|
||||
(
|
||||
"call_spot",
|
||||
[
|
||||
"-s=2022-01-01",
|
||||
"-e=2022-01-31",
|
||||
],
|
||||
"fred_view.plot_spot",
|
||||
[],
|
||||
dict(
|
||||
maturity=["10y"],
|
||||
category=["spot_rate"],
|
||||
description=False,
|
||||
raw=False,
|
||||
start_date=MOCK_START,
|
||||
end_date=MOCK_END,
|
||||
sheet_name=None,
|
||||
export="",
|
||||
),
|
||||
),
|
||||
],
|
||||
)
|
||||
def test_call_cmd(
|
||||
tested_func, mocked_func, other_args, called_args, called_kwargs, mocker
|
||||
):
|
||||
path_controller = "openbb_terminal.fixedincome.fixedincome_controller"
|
||||
|
||||
if mocked_func:
|
||||
mock = mocker.Mock()
|
||||
mocker.patch(
|
||||
target=f"{path_controller}.{mocked_func}",
|
||||
new=mock,
|
||||
)
|
||||
|
||||
controller = fixedincome_controller.FixedIncomeController(queue=None)
|
||||
getattr(controller, tested_func)(other_args)
|
||||
|
||||
if called_args or called_kwargs:
|
||||
mock.assert_called_once_with(*called_args, **called_kwargs)
|
||||
else:
|
||||
mock.assert_called_once()
|
||||
else:
|
||||
controller = fixedincome_controller.FixedIncomeController(queue=None)
|
||||
getattr(controller, tested_func)(other_args)
|
||||
23
tests/openbb_terminal/fixedincome/test_fred_model.py
Normal file
23
tests/openbb_terminal/fixedincome/test_fred_model.py
Normal file
@@ -0,0 +1,23 @@
|
||||
import pandas as pd
|
||||
import pytest
|
||||
|
||||
from openbb_terminal.fixedincome import fred_model
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def vcr_config():
|
||||
return {
|
||||
"filter_headers": [("User-Agent", None)],
|
||||
"filter_query_parameters": [
|
||||
("api_key", "MOCK_API_KEY"),
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
@pytest.mark.vcr
|
||||
@pytest.mark.parametrize("inflation", [True, False])
|
||||
def test_yield_curve(recorder, inflation):
|
||||
data = fred_model.get_yield_curve(date="2023-02-08", inflation_adjusted=inflation)
|
||||
|
||||
assert isinstance(data, pd.DataFrame)
|
||||
recorder.capture(data)
|
||||
20
tests/openbb_terminal/fixedincome/test_oecd_model.py
Normal file
20
tests/openbb_terminal/fixedincome/test_oecd_model.py
Normal file
@@ -0,0 +1,20 @@
|
||||
from datetime import datetime
|
||||
|
||||
import pandas as pd
|
||||
import pytest
|
||||
|
||||
from openbb_terminal.fixedincome import oecd_model
|
||||
|
||||
|
||||
@pytest.mark.vcr
|
||||
@pytest.mark.parametrize("data", ["short", "short_forecast", "long", "long_forecast"])
|
||||
def test_get_interest_rates(recorder, data):
|
||||
"""Test get_interest_rates"""
|
||||
data = oecd_model.get_interest_rate_data(
|
||||
data=data,
|
||||
countries=["united_states", "canada"],
|
||||
start_date=datetime.strptime("2022-01-01", "%Y-%m-%d"),
|
||||
end_date=datetime.strptime("2022-01-31", "%Y-%m-%d"),
|
||||
)
|
||||
assert isinstance(data, pd.DataFrame)
|
||||
recorder.capture(data)
|
||||
32
tests/openbb_terminal/fixedincome/txt/test_fixedincome_controller/test_print_help.txt
vendored
Normal file
32
tests/openbb_terminal/fixedincome/txt/test_fixedincome_controller/test_print_help.txt
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
Reference rates:
|
||||
estr euro short-term rate (estr) [FRED, ECB]
|
||||
sofr secured overnight financing rate (sofr) [FRED]
|
||||
sonia sterling overnight index average (sonia) [FRED]
|
||||
ameribor american interbank offered rate (ameribor) [FRED]
|
||||
|
||||
Central bank rates:
|
||||
fed effective federal funds rate [FRED]
|
||||
projection the Federal Reserve's projection of the federal funds rate. [FRED]
|
||||
iorb interest rate on reserve balances [FRED]
|
||||
dwpcr discount window primary credit rate [FRED]
|
||||
ecb key ECB interest rates [FRED]
|
||||
|
||||
Government Bonds:
|
||||
treasury plot countries (including forecast) treasury rates [OECD]
|
||||
usrates plot U.S. secondary market, constant maturity or inflation protected treasuries [FRED]
|
||||
ycrv plot the yield curve based on constant maturity U.S. treasuries [FRED]
|
||||
ecbycrv plot the yield curve based on Euro Area treasuries [ECB]
|
||||
|
||||
Corporate Bonds:
|
||||
icebofa display ICE BofA Corporate Indices [FRED]
|
||||
moody display Moody's AAA and BAA Corporate indices [FRED]
|
||||
cp display short-term, promissory notes issued by corporations [FRED]
|
||||
spot display spot rates ranging from 1 year to a 100 years [FRED]
|
||||
hqm display the High Quality Market (HQM) corporate yield curve [FRED]
|
||||
|
||||
Spreads:
|
||||
icespread display spread between ICE BofA Corporate Indices and spot treasury curve [FRED]
|
||||
tmc 10-year treasury constant maturity minus selected treasury constant maturity [FRED]
|
||||
ffrmc selected treasury constant maturity minus federal funds rate [FRED]
|
||||
tbffr selected treasury bill minus federal funds rate [FRED]
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
search search for a future based on category or exchange [YahooFinance]
|
||||
|
||||
historical get historical timeseries [YahooFinance]
|
||||
historical get historical timeseries [YahooFinance, DataBento]
|
||||
curve get futures curves [YahooFinance]
|
||||
|
||||
|
||||
118
tests/openbb_terminal/stocks/cassettes/test_databento_model/test_stock_load.yaml
vendored
Normal file
118
tests/openbb_terminal/stocks/cassettes/test_databento_model/test_stock_load.yaml
vendored
Normal file
@@ -0,0 +1,118 @@
|
||||
interactions:
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Accept:
|
||||
- '*/*'
|
||||
Accept-Encoding:
|
||||
- gzip, deflate
|
||||
Authorization:
|
||||
- MOCK_AUTHORIZATION
|
||||
Connection:
|
||||
- keep-alive
|
||||
method: GET
|
||||
uri: https://hist.databento.com/v0/timeseries.stream?dataset=XNAS.ITCH&symbols=AAPL&schema=ohlcv-1d&start=2022-08-01&end=2022-12-01&stype_in=native&encoding=csv
|
||||
response:
|
||||
body:
|
||||
string: 'ts_event,publisher_id,product_id,open,high,low,close,volume
|
||||
|
||||
1659312000000000000,2,27,162200000000,163590000000,160830000000,161400000000,10045637
|
||||
|
||||
1659398400000000000,2,27,160730000000,162410000000,159550000000,160010000000,10065910
|
||||
|
||||
1659484800000000000,2,27,160060000000,166595000000,159850000000,165840000000,13326012
|
||||
|
||||
1659571200000000000,2,27,165830000000,167190000000,164430000000,165850000000,9578445
|
||||
|
||||
1659657600000000000,2,27,166000000000,166230000000,162790000000,164920000000,9683719
|
||||
|
||||
1659916800000000000,2,27,166080000000,167800000000,164200000000,165150000000,9135766
|
||||
|
||||
1660003200000000000,2,29,164990000000,165810000000,163460000000,164970000000,9230005
|
||||
|
||||
1660089600000000000,2,29,165010000000,169310000000,164560000000,169130000000,11638513
|
||||
|
||||
1660176000000000000,2,29,169240000000,170990000000,168190000000,168800000000,9732568
|
||||
|
||||
1660262400000000000,2,29,169180000000,172170000000,168650000000,171850000000,11916663
|
||||
|
||||
1660521600000000000,2,29,171140000000,173390000000,170740000000,173150000000,8485815
|
||||
|
||||
1660608000000000000,2,29,172830000000,174080000000,171670000000,173700000000,9979182
|
||||
|
||||
1660694400000000000,2,29,172670000000,176150000000,172140000000,173320000000,13581411
|
||||
|
||||
1660780800000000000,2,29,173200000000,174890000000,173130000000,174090000000,11175367
|
||||
|
||||
1660867200000000000,2,29,173600000000,173730000000,170700000000,170790000000,11296793
|
||||
|
||||
1661126400000000000,2,29,169400000000,169860000000,167135000000,167950000000,13070702
|
||||
|
||||
1661212800000000000,2,29,167610000000,168700000000,166650000000,167130000000,10629743
|
||||
|
||||
1661299200000000000,2,29,166930000000,168410000000,166245000000,167910000000,9482192
|
||||
|
||||
1661385600000000000,2,29,169270000000,170340000000,168230000000,170200000000,9874644
|
||||
|
||||
1661472000000000000,2,29,169900000000,171130000000,162300000000,162450000000,14062181
|
||||
|
||||
1661731200000000000,2,29,161790000000,162910000000,159830000000,161780000000,12363097
|
||||
|
||||
1661817600000000000,2,29,162600000000,163340000000,157730000000,158960000000,11853126
|
||||
|
||||
1661904000000000000,2,29,159650000000,160570000000,155770000000,156000000000,13343001
|
||||
|
||||
1661990400000000000,2,29,155890000000,158690000000,154675000000,158620000000,13016463
|
||||
|
||||
1662076800000000000,2,29,157710000000,160360000000,154965000000,155650000000,12975036
|
||||
|
||||
1662422400000000000,2,29,156790000000,157390000000,153730000000,154490000000,14840703
|
||||
|
||||
1662508800000000000,2,29,154800000000,156660000000,153610000000,155960000000,13205605
|
||||
|
||||
1662595200000000000,2,29,155950000000,156430000000,152680000000,154620000000,14072194
|
||||
|
||||
1662681600000000000,2,29,155260000000,157805000000,154760000000,157520000000,10213517
|
||||
|
||||
1662940800000000000,2,29,158000000000,164260000000,158000000000,164100000000,15959461
|
||||
|
||||
1663027200000000000,2,29,164150000000,164900000000,153385000000,154250000000,19181953
|
||||
|
||||
1663113600000000000,2,29,154470000000,157100000000,153250000000,156000000000,15250245
|
||||
|
||||
1663200000000000000,2,29,155960000000,156040000000,151100000000,151270000000,13929824
|
||||
|
||||
1663286400000000000,2,29,151350000000,151510000000,148360000000,151290000000,19608708
|
||||
|
||||
1663545600000000000,2,29,149820000000,155000000000,148700000000,155000000000,13024172
|
||||
|
||||
1663632000000000000,2,29,154270000000,158080000000,153090000000,156480000000,16126729
|
||||
|
||||
1663718400000000000,2,29,156580000000,158740000000,152240000000,152400000000,16938650
|
||||
|
||||
1663804800000000000,2,29,153530000000,154960000000,150920000000,153090000000,14902502
|
||||
|
||||
1663891200000000000,2,29,152250000000,152550000000,148560000000,150570000000,16074945
|
||||
|
||||
1664150400000000000,2,29,150420000000,153770000000,149140000000,151100000000,14918149
|
||||
|
||||
1664236800000000000,2,29,152840000000,154690000000,149950000000,151870000000,14873042
|
||||
|
||||
1664323200000000000,2,29,148500000000,150640000000,144840000000,149370000000,24532649
|
||||
|
||||
1664409600000000000,2,29,148000000000,148180000000,140680000000,142410000000,21075773
|
||||
|
||||
1664496000000000000,2,29,143160000000,143580000000,137220000000,137540000000,20801834
|
||||
|
||||
'
|
||||
headers:
|
||||
date:
|
||||
- Tue, 21 Feb 2023 14:37:29 GMT
|
||||
server:
|
||||
- uvicorn
|
||||
transfer-encoding:
|
||||
- chunked
|
||||
status:
|
||||
code: 200
|
||||
message: OK
|
||||
version: 1
|
||||
45
tests/openbb_terminal/stocks/csv/test_databento_model/test_stock_load.csv
vendored
Normal file
45
tests/openbb_terminal/stocks/csv/test_databento_model/test_stock_load.csv
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
time,Open,High,Low,Close,Volume
|
||||
2022-08-01,162.2,163.59,160.83,161.4,10045637
|
||||
2022-08-02,160.73,162.41,159.55,160.01,10065910
|
||||
2022-08-03,160.06,166.595,159.85,165.84,13326012
|
||||
2022-08-04,165.83,167.19,164.43,165.85,9578445
|
||||
2022-08-05,166.0,166.23,162.79,164.92,9683719
|
||||
2022-08-08,166.08,167.8,164.2,165.15,9135766
|
||||
2022-08-09,164.99,165.81,163.46,164.97,9230005
|
||||
2022-08-10,165.01,169.31,164.56,169.13,11638513
|
||||
2022-08-11,169.24,170.99,168.19,168.8,9732568
|
||||
2022-08-12,169.18,172.17,168.65,171.85,11916663
|
||||
2022-08-15,171.14,173.39,170.74,173.15,8485815
|
||||
2022-08-16,172.83,174.08,171.67,173.7,9979182
|
||||
2022-08-17,172.67,176.15,172.14,173.32,13581411
|
||||
2022-08-18,173.2,174.89,173.13,174.09,11175367
|
||||
2022-08-19,173.6,173.73,170.7,170.79,11296793
|
||||
2022-08-22,169.4,169.86,167.135,167.95,13070702
|
||||
2022-08-23,167.61,168.7,166.65,167.13,10629743
|
||||
2022-08-24,166.93,168.41,166.245,167.91,9482192
|
||||
2022-08-25,169.27,170.34,168.23,170.2,9874644
|
||||
2022-08-26,169.9,171.13,162.3,162.45,14062181
|
||||
2022-08-29,161.79,162.91,159.83,161.78,12363097
|
||||
2022-08-30,162.6,163.34,157.73,158.96,11853126
|
||||
2022-08-31,159.65,160.57,155.77,156.0,13343001
|
||||
2022-09-01,155.89,158.69,154.675,158.62,13016463
|
||||
2022-09-02,157.71,160.36,154.965,155.65,12975036
|
||||
2022-09-06,156.79,157.39,153.73,154.49,14840703
|
||||
2022-09-07,154.8,156.66,153.61,155.96,13205605
|
||||
2022-09-08,155.95,156.43,152.68,154.62,14072194
|
||||
2022-09-09,155.26,157.805,154.76,157.52,10213517
|
||||
2022-09-12,158.0,164.26,158.0,164.1,15959461
|
||||
2022-09-13,164.15,164.9,153.385,154.25,19181953
|
||||
2022-09-14,154.47,157.1,153.25,156.0,15250245
|
||||
2022-09-15,155.96,156.04,151.1,151.27,13929824
|
||||
2022-09-16,151.35,151.51,148.36,151.29,19608708
|
||||
2022-09-19,149.82,155.0,148.7,155.0,13024172
|
||||
2022-09-20,154.27,158.08,153.09,156.48,16126729
|
||||
2022-09-21,156.58,158.74,152.24,152.4,16938650
|
||||
2022-09-22,153.53,154.96,150.92,153.09,14902502
|
||||
2022-09-23,152.25,152.55,148.56,150.57,16074945
|
||||
2022-09-26,150.42,153.77,149.14,151.1,14918149
|
||||
2022-09-27,152.84,154.69,149.95,151.87,14873042
|
||||
2022-09-28,148.5,150.64,144.84,149.37,24532649
|
||||
2022-09-29,148.0,148.18,140.68,142.41,21075773
|
||||
2022-09-30,143.16,143.58,137.22,137.54,20801834
|
||||
|
35
tests/openbb_terminal/stocks/test_databento_model.py
Normal file
35
tests/openbb_terminal/stocks/test_databento_model.py
Normal file
@@ -0,0 +1,35 @@
|
||||
import pytest
|
||||
|
||||
from openbb_terminal.stocks import databento_model
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def vcr_config():
|
||||
return {
|
||||
"filter_headers": [
|
||||
("User-Agent", None),
|
||||
("Authorization", "MOCK_AUTHORIZATION"),
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
def test_databento_model():
|
||||
"""Tests the DataBento model."""
|
||||
model = databento_model.DataBento(
|
||||
symbol="AAPL", start="2021-08-10", end="2021-08-11"
|
||||
)
|
||||
assert model.symbol == "AAPL"
|
||||
assert model.exchange == "XNAS.ITCH"
|
||||
assert model.stype == "native"
|
||||
assert model.start == "2021-08-10"
|
||||
assert model.end == "2021-08-11"
|
||||
|
||||
|
||||
@pytest.mark.vcr
|
||||
def test_stock_load(recorder):
|
||||
"""Tests the stock load function."""
|
||||
result = databento_model.get_historical_stock(
|
||||
symbol="AAPL", start_date="2022-08-01", end_date="2022-12-01"
|
||||
)
|
||||
assert result.empty is False
|
||||
recorder.capture(result)
|
||||
@@ -1,5 +1,5 @@
|
||||
search search a specific stock ticker for analysis [FinanceDatabase]
|
||||
load load a specific stock ticker and additional info for analysis [YahooFinance, AlphaVantage, Polygon, EODHD, Intrinio]
|
||||
load load a specific stock ticker and additional info for analysis [YahooFinance, AlphaVantage, Polygon, EODHD, Intrinio, DataBento]
|
||||
|
||||
Stock:
|
||||
|
||||
|
||||
235
website/content/sdk/guides/intros/fixedincome.md
vendored
Normal file
235
website/content/sdk/guides/intros/fixedincome.md
vendored
Normal file
@@ -0,0 +1,235 @@
|
||||
---
|
||||
title: Fixed Income
|
||||
keywords: [fixed income, government bonds, bonds, corporate bonds, fixed, income, interest, rates, inflation, central bank, reference, rates, sofr, sonia, ester, estr]
|
||||
description: The Fixed Income menu is the high-level menu for the Fixed Income asset class. It contains reference rates, central bank rates, government bonds, yield curves, corporate bond benchmarks and more.
|
||||
---
|
||||
|
||||
The Fixed Income module is the high-level menu for the Fixed Income asset class. It contains reference rates (ESTER, SOFR, SONIA and Ameribor), central bank rates (FRED, FOMC projections and ECB key interest rates), government bonds (treasury rates for any country, us-specific rates, yield curves), corporate bonds (ICE BofA Corporate Indices, Moody's AAA and BAA Corporate Indices, Commercial Paper, Spot Rates and HQM Corporate Yield Curve) and spread (ICE BofA spreads, constant maturity spreads, and federal funds rate)
|
||||
|
||||
## How to Use
|
||||
|
||||
The examples provided below will assume that the following import block is included at the beginning of the Python script or Notebook file:
|
||||
|
||||
|
||||
```python
|
||||
from openbb_terminal.sdk import openbb
|
||||
import pandas as pd
|
||||
```
|
||||
|
||||
Below is a brief description of each function within the Fixed Income module:
|
||||
|
||||
|Path |Type |Description |
|
||||
|:---------|:---------:|------------------------------:|
|
||||
|openbb.fixedincome.ameribor |Function | Obtain data for American Interbank Offered Rate (AMERIBOR) |
|
||||
|openbb.fixedincome.cp | Function | Obtain Commercial Paper data |
|
||||
|openbb.fixedincome.dwpcr |Function | Obtain data for the Discount Window Primary Credit Rate |
|
||||
|openbb.fixedincome.ecb |Function | Obtain data for ECB interest rates |
|
||||
|openbb.fixedincome.ecbycrv |Function | Gets euro area yield curve data from ECB |
|
||||
|openbb.fixedincome.estr |Function | Obtain data for Euro Short-Term Rate (ESTR) |
|
||||
|openbb.fixedincome.fed |Function | Obtain data for Effective Federal Funds Rate |
|
||||
|openbb.fixedincome.ffrmc |Function | Get data for Selected Treasury Constant Maturity Minus Federal Funds Rate |
|
||||
|openbb.fixedincome.hqm |Function | Obtain the HQM yield curve |
|
||||
|openbb.fixedincome.icebofa |Function | Get data for ICE BofA US Corporate Bond Indices |
|
||||
|openbb.fixedincome.icespread |Function | Get data for ICE BofA US Corporate Bond Spreads |
|
||||
|openbb.fixedincome.iorb |Function | Obtain data for Interest Rate on Reserve Balances. |
|
||||
|openbb.fixedincome.moody |Function | Get data for Moody Corporate Bond Index |
|
||||
|openbb.fixedincome.projection |Function | Obtain data for the Federal Reserve's projection of the federal funds rate |
|
||||
|openbb.fixedincome.sofr |Function | Obtain data for Secured Overnight Financing Rate (SOFR)|
|
||||
|openbb.fixedincome.sonia |Function | Obtain data for Sterling Overnight Index Average (SONIA) |
|
||||
|openbb.fixedincome.spot |Function | Obtain HQM spot rate data |
|
||||
|openbb.fixedincome.tbffr |Function | Get data for Selected Treasury Bill Minus Federal Funds Rate |
|
||||
|openbb.fixedincome.tmc |Function | Get data for 10-Year Treasury Constant Maturity Minus Selected Treasury Constant Maturity |
|
||||
|openbb.fixedincome.treasury |Function | Obtain 3-month or 10-year treasury rates for any country |
|
||||
|openbb.fixedincome.usrates |Function | Plot various treasury rates from the United States |
|
||||
|openbb.fixedincome.ycrv |Function | Gets yield curve data from FRED |
|
||||
|
||||
Alteratively you can print the contents of the Fixed Income SDK with:
|
||||
|
||||
```python
|
||||
help(openbb.fixedincome)
|
||||
```
|
||||
|
||||
## Examples
|
||||
Starting off by calling some reference rates, these can be either `estr`, `sofr`, `sonia` or `ameribor`. For example the 1 year term structure of Ameribor is plotted with `openbb.fixedincome.ameribor('1_year_term_structure')` as shown below, showing only the last 10 periods in this example:
|
||||
|
||||
|
||||
| | AMERIBOR|
|
||||
|:--------------------|--------:|
|
||||
| 2023-02-12 00:00:00 | 5.13275 |
|
||||
| 2023-02-13 00:00:00 | 5.15549 |
|
||||
| 2023-02-14 00:00:00 | 5.22839 |
|
||||
| 2023-02-15 00:00:00 | 5.20813 |
|
||||
| 2023-02-16 00:00:00 | 5.20832 |
|
||||
| 2023-02-17 00:00:00 | 5.2491 |
|
||||
| 2023-02-19 00:00:00 | 5.2491 |
|
||||
| 2023-02-20 00:00:00 | 5.2491 |
|
||||
| 2023-02-21 00:00:00 | 5.32425 |
|
||||
| 2023-02-22 00:00:00 | 5.32988 |
|
||||
|
||||
|
||||
The two most prominent central bank rates, those of the Federal Reserve and the European Central Bank can be obtained with `openbb.fixedincome.fed` and `openbb.fixedincome.ecb` respectively. For instance `openbb.fixedincome.fed` shows the monthly Federal Funds Rate, showing only the last 10 periods in this example:
|
||||
|
||||
| | FED |
|
||||
|:--------------------|-----:|
|
||||
| 2022-04-01 00:00:00 | 0.33 |
|
||||
| 2022-05-01 00:00:00 | 0.77 |
|
||||
| 2022-06-01 00:00:00 | 1.21 |
|
||||
| 2022-07-01 00:00:00 | 1.68 |
|
||||
| 2022-08-01 00:00:00 | 2.33 |
|
||||
| 2022-09-01 00:00:00 | 2.56 |
|
||||
| 2022-10-01 00:00:00 | 3.08 |
|
||||
| 2022-11-01 00:00:00 | 3.78 |
|
||||
| 2022-12-01 00:00:00 | 4.1 |
|
||||
| 2023-01-01 00:00:00 | 4.33 |
|
||||
|
||||
This can be accompanied with the projections, officially published by the FOMC. Here the long run expectations are plotted, which also backtracks several years, with `openbb.fixedincome.projection(long_run=True)`, showing only the last 5 periods in this example:
|
||||
|
||||
| | Range High | Central tendency High | Median | Range Midpoint | Central tendency Midpoint | Range Low | Central tendency Low |
|
||||
|:-----------|-------------:|------------------------:|---------:|-----------------:|----------------------------:|------------:|-----------------------:|
|
||||
| 2021-12-15 | 3 | 2.5 | 2.5 | 2.5 | 2.4 | 2 | 2.3 |
|
||||
| 2022-03-16 | 3 | 2.5 | 2.4 | 2.5 | 2.4 | 2 | 2.3 |
|
||||
| 2022-06-15 | 3 | 2.5 | 2.5 | 2.5 | 2.4 | 2 | 2.3 |
|
||||
| 2022-09-21 | 3 | 2.5 | 2.5 | 2.65 | 2.4 | 2.3 | 2.3 |
|
||||
| 2022-12-14 | 3.3 | 2.5 | 2.5 | 2.8 | 2.4 | 2.3 | 2.3 |
|
||||
|
||||
The European Central Bank rates can be shown with `openbb.fixedincome.ecb`. The ECB publishes three different rates that can be shown separately with `openbb.fixedincome.ecb('deposit)` for example or plotted together with `openbb.fixedincome.ecb` as shown below, showing only the last 10 periods in this example:
|
||||
|
||||
| | Deposit | Lending | Refinancing |
|
||||
|:-----------|----------:|----------:|--------------:|
|
||||
| 2023-02-14 | 2.5 | 3.25 | 3 |
|
||||
| 2023-02-15 | 2.5 | 3.25 | 3 |
|
||||
| 2023-02-16 | 2.5 | 3.25 | 3 |
|
||||
| 2023-02-17 | 2.5 | 3.25 | 3 |
|
||||
| 2023-02-18 | 2.5 | 3.25 | 3 |
|
||||
| 2023-02-19 | 2.5 | 3.25 | 3 |
|
||||
| 2023-02-20 | 2.5 | 3.25 | 3 |
|
||||
| 2023-02-21 | 2.5 | 3.25 | 3 |
|
||||
| 2023-02-22 | 2.5 | 3.25 | 3 |
|
||||
| 2023-02-23 | 2.5 | 3.25 | 3 |
|
||||
|
||||
In terms of government bonds, any combination of short term (3 month) and long term (10 year) government bonds for any country can be plotted with `openbb.fixedincome.treasury` for example `openbb.fixedincome.treasury(short_term=['canada', 'united_states'], long_term=['canada', 'united_states'])` as shown below, showing only the last 10 periods in this example:
|
||||
|
||||
| | canada (3 month) | united_states (3 month) | canada (10 year) | united_states (10 year) |
|
||||
|:-----------|-------------------:|--------------------------:|-------------------:|--------------------------:|
|
||||
| 2022-04-01 | 2.704 | 2.75 | 1.34664 | 0.91 |
|
||||
| 2022-05-01 | 2.91857 | 2.9 | 1.78189 | 1.33 |
|
||||
| 2022-06-01 | 3.31545 | 3.14 | 2.24735 | 1.87 |
|
||||
| 2022-07-01 | 3.04316 | 2.9 | 3.01411 | 2.5 |
|
||||
| 2022-08-01 | 2.85909 | 2.9 | 3.38221 | 2.76 |
|
||||
| 2022-09-01 | 3.1479 | 3.52 | 3.79193 | 3.21 |
|
||||
| 2022-10-01 | 3.38053 | 3.98 | 4.23083 | 3.85 |
|
||||
| 2022-11-01 | 3.16619 | 3.89 | 4.37634 | 4.46 |
|
||||
| 2022-12-01 | 2.9415 | 3.62 | 4.55302 | 4.51 |
|
||||
| 2023-01-01 | 2.93762 | 3.53 | 4.7638 | 4.61 |
|
||||
|
||||
|
||||
For both the United States and the Eurozone, it is possible to see the current government bond yield curve. For the Eurozone, it is an aggregation of countries that match a specific credit rating, by default AAA, as shown with `openbb.fixedincome.ecbycrv`.
|
||||
|
||||
| | Maturity | Rate |
|
||||
|---:|-----------:|--------:|
|
||||
| 0 | 0.25 | 2.61446 |
|
||||
| 1 | 0.5 | 2.86441 |
|
||||
| 2 | 1 | 2.97514 |
|
||||
| 3 | 2 | 2.82012 |
|
||||
| 4 | 3 | 2.68811 |
|
||||
| 5 | 5 | 2.58939 |
|
||||
| 6 | 7 | 2.57123 |
|
||||
| 7 | 10 | 2.57545 |
|
||||
| 8 | 20 | 2.55717 |
|
||||
| 9 | 30 | 2.45648 |
|
||||
|
||||
When it comes to Corporate Bonds, the major indices are included. These are the ICE BofA indices and the Moody's Aaa and Baa indices. Based on a query, specific benchmarks can be found. For example a collection of indices matching a variety of bond maturities with `openbb.fixedincome.icebofa(category='duration')`, showing only the last 5 periods in this example:
|
||||
|
||||
| | ICE BofA 1-3 Year US Corporate Index Effective Yield | ICE BofA 3-5 Year US Corporate Index Effective Yield | ICE BofA 5-7 Year US Corporate Index Effective Yield | ICE BofA 7-10 Year US Corporate Index Effective Yield | ICE BofA 10-15 Year US Corporate Index Effective Yield | ICE BofA 15+ Year US Corporate Index Effective Yield |
|
||||
|:-----------|-------------------------------------------------------:|-------------------------------------------------------:|-------------------------------------------------------:|--------------------------------------------------------:|---------------------------------------------------------:|-------------------------------------------------------:|
|
||||
| 2023-02-09 | 5.22 | 5.04 | 5.12 | 5.2 | 5.34 | 5.32 |
|
||||
| 2023-02-10 | 5.27 | 5.11 | 5.21 | 5.3 | 5.43 | 5.41 |
|
||||
| 2023-02-13 | 5.28 | 5.14 | 5.2 | 5.28 | 5.41 | 5.38 |
|
||||
| 2023-02-14 | 5.36 | 5.23 | 5.28 | 5.32 | 5.44 | 5.39 |
|
||||
| 2023-02-15 | 5.36 | 5.26 | 5.31 | 5.36 | 5.48 | 5.43 |
|
||||
| 2023-02-16 | 5.38 | 5.29 | 5.35 | 5.42 | 5.54 | 5.52 |
|
||||
| 2023-02-17 | 5.37 | 5.26 | 5.33 | 5.42 | 5.53 | 5.5 |
|
||||
| 2023-02-20 | 5.39 | 5.27 | 5.33 | 5.42 | 5.53 | 5.5 |
|
||||
| 2023-02-21 | 5.49 | 5.41 | 5.49 | 5.58 | 5.68 | 5.63 |
|
||||
| 2023-02-22 | 5.49 | 5.4 | 5.48 | 5.56 | 5.65 | 5.59 |
|
||||
|
||||
The Moody's Aaa is often referred to as a great alternative to the federal ten-year Treasury bill as an indicator for interest rates and can be plotted with `openbb.fixedincome.moody`, showing only the last 5 periods in this example:
|
||||
|
||||
| | aaa_index |
|
||||
|:-----------|------------:|
|
||||
| 2023-02-15 | 4.59 |
|
||||
| 2023-02-16 | 4.64 |
|
||||
| 2023-02-17 | 4.65 |
|
||||
| 2023-02-21 | 4.76 |
|
||||
| 2023-02-22 | 4.71 |
|
||||
|
||||
Next to that, there are spot rates available for the High Quality Market (HQM) ranging from 1 year to a 100 years through `openbb.fixedincome.spot`. With this, it is also possible to plot the yield curve with `openbb.fixedincome.hqm` for any date in the past. For example `openbb.fixedincome.hqm(date='2020-01-01')` as shown below:
|
||||
|
||||
| Maturity | spot |
|
||||
|-----------:|-------:|
|
||||
| 0.5 | 1.76 |
|
||||
| 1 | 1.8 |
|
||||
| 2 | 1.86 |
|
||||
| 3 | 1.91 |
|
||||
| 5 | 2.07 |
|
||||
| 7 | 2.35 |
|
||||
| 10 | 2.79 |
|
||||
| 20 | 3.35 |
|
||||
| 30 | 3.48 |
|
||||
| 50 | 3.6 |
|
||||
| 75 | 3.65 |
|
||||
| 100 | 3.68 |
|
||||
|
||||
Furthermore, it is possible to see spreads between a variety of assets. For example the Emerging Markets spread can be shown with `openbb.fixedincome.icespread(category='all', area='emea')`. This is based on the spot treasury curve. Showing only the last 5 periods in this example:
|
||||
|
||||
| | ICE BofA EMEA Emerging Markets Corporate Plus Index Option-Adjusted Spread |
|
||||
|:-----------|-----------------------------------------------------------------------------:|
|
||||
| 2023-02-16 | 2.66 |
|
||||
| 2023-02-17 | 2.75 |
|
||||
| 2023-02-20 | 2.75 |
|
||||
| 2023-02-21 | 2.74 |
|
||||
| 2023-02-22 | 2.77 |
|
||||
|
||||
For both `openbb.fixedincome.icebofa` and `openbb.fixedincome.icespread` it is possible to see all the options with `options`. Find an example for `openbb.fixedincome.icespread(options=True)` below.
|
||||
|
||||
|
||||
| | Type | Category | Area | Grade | Title |
|
||||
|----:|:-------|:-----------|:--------------|:---------------|:------------------------------------------------------------------------------------------------------|
|
||||
| 2 | spread | duration | us | non_sovereign | ICE BofA 1-3 Year US Corporate Index Option-Adjusted Spread |
|
||||
| 6 | spread | duration | us | non_sovereign | ICE BofA 3-5 Year US Corporate Index Option-Adjusted Spread |
|
||||
| 10 | spread | duration | us | non_sovereign | ICE BofA 5-7 Year US Corporate Index Option-Adjusted Spread |
|
||||
| 14 | spread | duration | us | non_sovereign | ICE BofA 7-10 Year US Corporate Index Option-Adjusted Spread |
|
||||
| 18 | spread | duration | us | non_sovereign | ICE BofA 10-15 Year US Corporate Index Option-Adjusted Spread |
|
||||
| 22 | spread | duration | us | non_sovereign | ICE BofA 15+ Year US Corporate Index Option-Adjusted Spread |
|
||||
| 26 | spread | all | us | non_sovereign | ICE BofA US Corporate Index Option-Adjusted Spread |
|
||||
| 30 | spread | usd | us | high_yield | ICE BofA US High Yield Index Option-Adjusted Spread |
|
||||
| 34 | spread | eur | eu | high_yield | ICE BofA Euro High Yield Index Option-Adjusted Spread |
|
||||
| 38 | spread | all | ex_g10 | non_sovereign | ICE BofA Emerging Markets Corporate Plus Index Option-Adjusted Spread |
|
||||
| 42 | spread | all | ex_g10 | private_sector | ICE BofA Private Sector Financial Emerging Markets Corporate Plus Index Option-Adjusted Spread |
|
||||
| 46 | spread | usd | ex_g10 | non_sovereign | ICE BofA US Emerging Markets Corporate Plus Index Option-Adjusted Spread |
|
||||
| 50 | spread | eur | ex_g10 | non_sovereign | ICE BofA Euro Emerging Markets Corporate Plus Index Option-Adjusted Spread |
|
||||
| 54 | spread | usd | ex_g10 | non_sovereign | ICE BofA US Emerging Markets Liquid Corporate Plus Index Option-Adjusted Spread |
|
||||
| 58 | spread | usd | ex_g10 | non_financial | ICE BofA Non-Financial US Emerging Markets Liquid Corporate Plus Index Option-Adjusted Spread |
|
||||
| 62 | spread | usd | ex_g10 | public_sector | ICE BofA Public Sector Issuers US Emerging Markets Liquid Corporate Plus Index Option-Adjusted Spread |
|
||||
| 66 | spread | all | emea | non_sovereign | ICE BofA EMEA Emerging Markets Corporate Plus Index Option-Adjusted Spread |
|
||||
| 70 | spread | usd | emea | non_sovereign | ICE BofA EMEA US Emerging Markets Liquid Corporate Plus Index Option-Adjusted Spread |
|
||||
| 74 | spread | all | asia | non_sovereign | ICE BofA Asia Emerging Markets Corporate Plus Index Option-Adjusted Spread |
|
||||
| 78 | spread | usd | asia | non_sovereign | ICE BofA Asia US Emerging Markets Liquid Corporate Plus Index Option-Adjusted Spread |
|
||||
| 82 | spread | all | latin_america | non_sovereign | ICE BofA Latin America Emerging Markets Corporate Plus Index Option-Adjusted Spread |
|
||||
| 86 | spread | usd | latin_america | non_sovereign | ICE BofA Latin America US Emerging Markets Liquid Corporate Plus Index Option-Adjusted Spread |
|
||||
| 90 | spread | all | ex_g10 | aaa | ICE BofA AAA-A Emerging Markets Corporate Plus Index Option-Adjusted Spread |
|
||||
| 94 | spread | usd | ex_g10 | aaa | ICE BofA AAA-A US Emerging Markets Liquid Corporate Plus Index Option-Adjusted Spread |
|
||||
| 98 | spread | all | ex_g10 | high_grade | ICE BofA High Grade Emerging Markets Corporate Plus Index Option-Adjusted Spread |
|
||||
| 102 | spread | all | ex_g10 | bbb | ICE BofA BBB Emerging Markets Corporate Plus Index Option-Adjusted Spread |
|
||||
| 106 | spread | usd | ex_g10 | bbb | ICE BofA BBB US Emerging Markets Liquid Corporate Plus Index Option-Adjusted Spread |
|
||||
| 110 | spread | all | ex_g10 | crossover | ICE BofA Crossover Emerging Markets Corporate Plus Index Option-Adjusted Spread |
|
||||
| 114 | spread | all | ex_g10 | bb | ICE BofA BB Emerging Markets Corporate Plus Index Option-Adjusted Spread |
|
||||
| 118 | spread | all | ex_g10 | high_yield | ICE BofA High Yield Emerging Markets Corporate Plus Index Option-Adjusted Spread |
|
||||
| 122 | spread | all | ex_g10 | b | ICE BofA B & Lower Emerging Markets Corporate Plus Index Option-Adjusted Spread |
|
||||
| 126 | spread | usd | us | aaa | ICE BofA AAA US Corporate Index Option-Adjusted Spread |
|
||||
| 130 | spread | usd | us | aa | ICE BofA AA US Corporate Index Option-Adjusted Spread |
|
||||
| 134 | spread | usd | us | a | ICE BofA Single-A US Corporate Index Option-Adjusted Spread |
|
||||
| 138 | spread | usd | us | bbb | ICE BofA BBB US Corporate Index Option-Adjusted Spread |
|
||||
| 142 | spread | usd | us | bb | ICE BofA BB US High Yield Index Option-Adjusted Spread |
|
||||
| 146 | spread | usd | us | b | ICE BofA Single-B US High Yield Index Option-Adjusted Spread |
|
||||
| 150 | spread | usd | us | ccc | ICE BofA CCC & Lower US High Yield Index Option-Adjusted Spread |
|
||||
171
website/content/terminal/guides/intros/fixedincome.md
vendored
Normal file
171
website/content/terminal/guides/intros/fixedincome.md
vendored
Normal file
@@ -0,0 +1,171 @@
|
||||
---
|
||||
title: Fixed Income
|
||||
keywords: [fixed income, government bonds, bonds, corporate bonds, fixed, income, interest, rates, inflation, central bank, reference, rates, sofr, sonia, ester, estr]
|
||||
description: The Fixed Income menu is the high-level menu for the Fixed Income asset class. It contains reference rates, central bank rates, government bonds, yield curves, corporate bond benchmarks and more.
|
||||
---
|
||||
|
||||
The Fixed Income menu is the high-level menu for the Fixed Income asset class. It contains reference rates (ESTER, SOFR, SONIA and Ameribor), central bank rates (FRED, FOMC projections and ECB key interest rates), government bonds (treasury rates for any country, us-specific rates, yield curves), corporate bonds (ICE BofA Corporate Indices, Moody's AAA and BAA Corporate Indices, Commercial Paper, Spot Rates and HQM Corporate Yield Curve) and spread (ICE BofA spreads, constant maturity spreads, and federal funds rate)
|
||||
|
||||
## How to Use
|
||||
|
||||
The Fixed Income menu can be accessed directly from the `home` screen by typing `fixedincome`. This opens the menu as shown below. The menu heavily relies on FRED to obtain the data as seen below, please refer to the [API keys guide](https://docs.openbb.co/terminal/guides/advanced/api-keys) for information on how to obtain and set a key for FRED.
|
||||
|
||||

|
||||
|
||||
## Examples
|
||||
Starting off by calling some reference rates, these can be either `estr`, `sofr`, `sonia` or `ameribor`. For example the 1 year term structure of Ameribor is plotted with ` ameribor --parameter 1_year_term_structure` as shown below.
|
||||
|
||||

|
||||
|
||||
The two most prominent central bank rates, those of the Federal Reserve and the European Central Bank can be plotted with `fed` and `ecb` respectively. For instance `fed` plots the monthly Federal Funds Rate.
|
||||
|
||||

|
||||
|
||||
This can be accompanied with the projections, officially published by the FOMC. Here the long run expectations are plotted, which also backtracks several years, with `projection --long-run`:
|
||||
|
||||

|
||||
|
||||
The European Central Bank rates can be shown with `ecb`. The ECB publishes three different rates that can be shown separately with ` ecb --type deposit` for example or plotted together with `ecb` as shown below.
|
||||
|
||||

|
||||
|
||||
In terms of government bonds, any combination of short term (3 month) and long term (10 year) government bonds for any country can be plotted with `treasury` for example `treasury --short canada,united_states --long canada,united_states` as shown below.
|
||||
|
||||

|
||||
|
||||
With all of these functionalities, it is always possible to `--export` to Excel or show the raw data with `--raw` as shown below:
|
||||
|
||||
```
|
||||
(🦋) /fixedincome/ $ treasury --short canada,united_states --long canada,united_states --raw
|
||||
|
||||
Short and Long Term Interest Rates
|
||||
┏━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||
┃ ┃ canada (3 month) ┃ united_states (3 month) ┃ canada (10 year) ┃ united_states (10 year) ┃
|
||||
┡━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||
│ 2022-04-01 │ 2.704 │ 2.750 │ 1.347 │ 0.910 │
|
||||
├────────────┼──────────────────┼─────────────────────────┼──────────────────┼─────────────────────────┤
|
||||
│ 2022-05-01 │ 2.919 │ 2.900 │ 1.782 │ 1.330 │
|
||||
├────────────┼──────────────────┼─────────────────────────┼──────────────────┼─────────────────────────┤
|
||||
│ 2022-06-01 │ 3.315 │ 3.140 │ 2.247 │ 1.870 │
|
||||
├────────────┼──────────────────┼─────────────────────────┼──────────────────┼─────────────────────────┤
|
||||
│ 2022-07-01 │ 3.043 │ 2.900 │ 3.014 │ 2.500 │
|
||||
├────────────┼──────────────────┼─────────────────────────┼──────────────────┼─────────────────────────┤
|
||||
│ 2022-08-01 │ 2.859 │ 2.900 │ 3.382 │ 2.760 │
|
||||
├────────────┼──────────────────┼─────────────────────────┼──────────────────┼─────────────────────────┤
|
||||
│ 2022-09-01 │ 3.148 │ 3.520 │ 3.792 │ 3.210 │
|
||||
├────────────┼──────────────────┼─────────────────────────┼──────────────────┼─────────────────────────┤
|
||||
│ 2022-10-01 │ 3.381 │ 3.980 │ 4.231 │ 3.850 │
|
||||
├────────────┼──────────────────┼─────────────────────────┼──────────────────┼─────────────────────────┤
|
||||
│ 2022-11-01 │ 3.166 │ 3.890 │ 4.376 │ 4.460 │
|
||||
├────────────┼──────────────────┼─────────────────────────┼──────────────────┼─────────────────────────┤
|
||||
│ 2022-12-01 │ 2.942 │ 3.620 │ 4.553 │ 4.510 │
|
||||
├────────────┼──────────────────┼─────────────────────────┼──────────────────┼─────────────────────────┤
|
||||
│ 2023-01-01 │ 2.938 │ 3.530 │ 4.764 │ 4.610 │
|
||||
└────────────┴──────────────────┴─────────────────────────┴──────────────────┴─────────────────────────┘
|
||||
```
|
||||
|
||||
For both the United States and the Eurozone, it is possible to see the current government bond yield curve. For the Eurozone, it is an aggregation of countries that match a specific credit rating, by default AAA, as shown with `ecbycrv`.
|
||||
|
||||

|
||||
|
||||
When it comes to Corporate Bonds, the major indices are included. These are the ICE BofA indices and the Moody's Aaa and Baa indices. Based on a query, specific benchmarks can be found. For example a collection of indices matching a variety of bond maturities with `icebofa --duration`.
|
||||
|
||||

|
||||
|
||||
The Moody's Aaa is often referred to as a great alternative to the federal ten-year Treasury bill as an indicator for interest rates and can be plotted with `moody`:
|
||||
|
||||

|
||||
|
||||
Next to that, there are spot rates available for the High Quality Market (HQM) ranging from 1 year to a 100 years through `spot`. With this, it is also possible to plot the yield curve with `hqm` for any date in the past. For example `hqm --date 2020-01-01` as shown below:
|
||||
|
||||

|
||||
|
||||
Furthermore, it is possible to see spreads between a variety of assets. For example the Emerging Markets spread can be shown with `icespread --category all --area emea`. This is based on the spot treasury curve.
|
||||
|
||||

|
||||
|
||||
For both `icebofa` and `icespread` it is possible to see all the options with `--options`. Find an example for `icespread` below.
|
||||
|
||||
```
|
||||
(🦋) /fixedincome/ $ icespread --options
|
||||
|
||||
┏━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
||||
┃ Type ┃ Category ┃ Area ┃ Grade ┃ Title ┃
|
||||
┡━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
|
||||
│ spread │ duration │ us │ non_sovereign │ ICE BofA 1-3 Year US Corporate Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ duration │ us │ non_sovereign │ ICE BofA 3-5 Year US Corporate Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ duration │ us │ non_sovereign │ ICE BofA 5-7 Year US Corporate Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ duration │ us │ non_sovereign │ ICE BofA 7-10 Year US Corporate Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ duration │ us │ non_sovereign │ ICE BofA 10-15 Year US Corporate Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ duration │ us │ non_sovereign │ ICE BofA 15+ Year US Corporate Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ all │ us │ non_sovereign │ ICE BofA US Corporate Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ usd │ us │ high_yield │ ICE BofA US High Yield Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ eur │ eu │ high_yield │ ICE BofA Euro High Yield Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ all │ ex_g10 │ non_sovereign │ ICE BofA Emerging Markets Corporate Plus Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ all │ ex_g10 │ private_sector │ ICE BofA Private Sector Financial Emerging Markets Corporate Plus Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ usd │ ex_g10 │ non_sovereign │ ICE BofA US Emerging Markets Corporate Plus Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ eur │ ex_g10 │ non_sovereign │ ICE BofA Euro Emerging Markets Corporate Plus Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ usd │ ex_g10 │ non_sovereign │ ICE BofA US Emerging Markets Liquid Corporate Plus Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ usd │ ex_g10 │ non_financial │ ICE BofA Non-Financial US Emerging Markets Liquid Corporate Plus Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ usd │ ex_g10 │ public_sector │ ICE BofA Public Sector Issuers US Emerging Markets Liquid Corporate Plus Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ all │ emea │ non_sovereign │ ICE BofA EMEA Emerging Markets Corporate Plus Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ usd │ emea │ non_sovereign │ ICE BofA EMEA US Emerging Markets Liquid Corporate Plus Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ all │ asia │ non_sovereign │ ICE BofA Asia Emerging Markets Corporate Plus Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ usd │ asia │ non_sovereign │ ICE BofA Asia US Emerging Markets Liquid Corporate Plus Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ all │ latin_america │ non_sovereign │ ICE BofA Latin America Emerging Markets Corporate Plus Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ usd │ latin_america │ non_sovereign │ ICE BofA Latin America US Emerging Markets Liquid Corporate Plus Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ all │ ex_g10 │ aaa │ ICE BofA AAA-A Emerging Markets Corporate Plus Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ usd │ ex_g10 │ aaa │ ICE BofA AAA-A US Emerging Markets Liquid Corporate Plus Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ all │ ex_g10 │ high_grade │ ICE BofA High Grade Emerging Markets Corporate Plus Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ all │ ex_g10 │ bbb │ ICE BofA BBB Emerging Markets Corporate Plus Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ usd │ ex_g10 │ bbb │ ICE BofA BBB US Emerging Markets Liquid Corporate Plus Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ all │ ex_g10 │ crossover │ ICE BofA Crossover Emerging Markets Corporate Plus Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ all │ ex_g10 │ bb │ ICE BofA BB Emerging Markets Corporate Plus Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ all │ ex_g10 │ high_yield │ ICE BofA High Yield Emerging Markets Corporate Plus Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ all │ ex_g10 │ b │ ICE BofA B & Lower Emerging Markets Corporate Plus Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ usd │ us │ aaa │ ICE BofA AAA US Corporate Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ usd │ us │ aa │ ICE BofA AA US Corporate Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ usd │ us │ a │ ICE BofA Single-A US Corporate Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ usd │ us │ bbb │ ICE BofA BBB US Corporate Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ usd │ us │ bb │ ICE BofA BB US High Yield Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ usd │ us │ b │ ICE BofA Single-B US High Yield Index Option-Adjusted Spread │
|
||||
├────────┼──────────┼───────────────┼────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────┤
|
||||
│ spread │ usd │ us │ ccc │ ICE BofA CCC & Lower US High Yield Index Option-Adjusted Spread │
|
||||
└────────┴──────────┴───────────────┴────────────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
Reference in New Issue
Block a user