[V5] Remove openbb-alpha-vantage (#7522)

* delete alpha vantage

* more files

---------

Co-authored-by: Theodore Aptekarev <aptekarev@gmail.com>
This commit is contained in:
Danglewood
2026-06-01 09:09:05 -07:00
committed by GitHub
parent 481af13cbd
commit de62b673ee
23 changed files with 1 additions and 3231 deletions

View File

@@ -1,18 +1,4 @@
[
{
"packageName": "openbb-alpha-vantage",
"optional": true,
"reprName": "Alpha Vantage",
"description": "Alpha Vantage provides realtime and historical\nfinancial market data through a set of powerful and developer-friendly data APIs\nand spreadsheets. From traditional asset classes (e.g., stocks, ETFs, mutual funds)\nto economic indicators, from foreign exchange rates to commodities,\nfrom fundamental data to technical indicators, Alpha Vantage\nis your one-stop-shop for enterprise-grade global market data delivered through\ncloud-based APIs, Excel, and Google Sheets. ",
"credentials": [
"alpha_vantage_api_key"
],
"deprecatedCredentials": {
"API_KEY_ALPHAVANTAGE": "alpha_vantage_api_key"
},
"website": "https://www.alphavantage.co",
"instructions": "Go to: https://www.alphavantage.co/support/#api-key\n\n![AlphaVantage](https://user-images.githubusercontent.com/46355364/207820936-46c2ba00-81ff-4cd3-98a4-4fa44412996f.png)\n\nFill out the form, pass Captcha, and click on, \"GET FREE API KEY\"."
},
{
"packageName": "openbb-benzinga",
"optional": false,

View File

@@ -54,7 +54,6 @@ openbb-regulators = { path = "./extensions/regulators", develop = true }
openbb-mcp-server = { path = "./extensions/mcp_server", develop = true, markers = "python_version >= '3.10'" }
# Community dependencies
openbb-alpha-vantage = { path = "./providers/alpha_vantage", optional = true, develop = true }
openbb-cboe = { path = "./providers/cboe", optional = true, develop = true }
openbb-deribit = { path = "./providers/deribit", optional = true, develop = true }
openbb-ecb = { path = "./providers/ecb", optional = true, develop = true }

View File

@@ -1097,17 +1097,6 @@ def test_equity_compare_groups(params, headers):
@pytest.mark.parametrize(
"params",
[
(
{
"adjustment": "unadjusted",
"extended_hours": True,
"provider": "alpha_vantage",
"symbol": "AAPL",
"start_date": "2023-01-01",
"end_date": "2023-06-06",
"interval": "15m",
}
),
(
{
"provider": "cboe",
@@ -1880,17 +1869,7 @@ def test_equity_market_snapshots(params, headers):
@pytest.mark.parametrize(
"params",
[
({"symbol": "AAPL", "limit": 5, "provider": "fmp"}),
(
{
"symbol": "AAPL",
"period": "quarter",
"limit": 5,
"provider": "alpha_vantage",
}
),
],
[({"symbol": "AAPL", "limit": 5, "provider": "fmp"})],
)
@pytest.mark.integration
def test_equity_fundamental_historical_eps(params, headers):

View File

@@ -1038,17 +1038,6 @@ def test_equity_compare_groups(params, obb):
@pytest.mark.parametrize(
"params",
[
(
{
"adjustment": "unadjusted",
"extended_hours": True,
"provider": "alpha_vantage",
"symbol": "AAPL",
"start_date": "2023-01-01",
"end_date": "2023-06-06",
"interval": "15m",
}
),
(
{
"provider": "cboe",
@@ -1769,14 +1758,6 @@ def test_equity_market_snapshots(params, obb):
"params",
[
({"symbol": "AAPL", "limit": 5, "provider": "fmp"}),
(
{
"symbol": "AAPL",
"period": "quarter",
"limit": 5,
"provider": "alpha_vantage",
}
),
],
)
@pytest.mark.integration

View File

@@ -55,17 +55,6 @@ def test_etf_search(params, headers):
@pytest.mark.parametrize(
"params",
[
(
{
"adjustment": "unadjusted",
"extended_hours": True,
"provider": "alpha_vantage",
"symbol": "SPY",
"start_date": "2023-01-01",
"end_date": "2023-06-06",
"interval": "15m",
}
),
(
{
"provider": "cboe",

View File

@@ -52,17 +52,6 @@ def test_etf_search(params, obb):
@pytest.mark.parametrize(
"params",
[
(
{
"adjustment": "unadjusted",
"extended_hours": True,
"provider": "alpha_vantage",
"symbol": "SPY",
"start_date": "2023-01-01",
"end_date": "2023-06-06",
"interval": "15m",
}
),
(
{
"provider": "cboe",

View File

@@ -1,13 +0,0 @@
# OpenBB Alpha Vantage Provider
This extension integrates the [Alpha Vantage](https://www.alphavantage.co/) data provider into the OpenBB Platform.
## Installation
To install the extension:
```bash
pip install openbb-alpha-vantage
```
Documentation available [here](https://docs.openbb.co/platform/developer_guide/contributing).

View File

@@ -1 +0,0 @@
"""Alpha Vantage Provider."""

View File

@@ -1,26 +0,0 @@
"""Alpha Vantage Provider module."""
from openbb_alpha_vantage.models.equity_historical import AVEquityHistoricalFetcher
from openbb_alpha_vantage.models.historical_eps import AVHistoricalEpsFetcher
from openbb_core.provider.abstract.provider import Provider
alpha_vantage_provider = Provider(
name="alpha_vantage",
website="https://www.alphavantage.co",
description="""Alpha Vantage provides realtime and historical
financial market data through a set of powerful and developer-friendly data APIs
and spreadsheets. From traditional asset classes (e.g., stocks, ETFs, mutual funds)
to economic indicators, from foreign exchange rates to commodities,
from fundamental data to technical indicators, Alpha Vantage
is your one-stop-shop for enterprise-grade global market data delivered through
cloud-based APIs, Excel, and Google Sheets. """,
credentials=["api_key"],
fetcher_dict={
"EquityHistorical": AVEquityHistoricalFetcher,
"HistoricalEps": AVHistoricalEpsFetcher,
"EtfHistorical": AVEquityHistoricalFetcher,
},
repr_name="Alpha Vantage",
deprecated_credentials={"API_KEY_ALPHAVANTAGE": "alpha_vantage_api_key"},
instructions='Go to: https://www.alphavantage.co/support/#api-key\n\n![AlphaVantage](https://user-images.githubusercontent.com/46355364/207820936-46c2ba00-81ff-4cd3-98a4-4fa44412996f.png)\n\nFill out the form, pass Captcha, and click on, "GET FREE API KEY".', # noqa: E501 pylint: disable=line-too-long
)

View File

@@ -1 +0,0 @@
"""Alpha Vantage models."""

View File

@@ -1,308 +0,0 @@
"""Alpha Vantage Equity Historical Price Model."""
# pylint: disable=unused-argument
from datetime import datetime
from typing import Any, Literal
from warnings import warn
from openbb_core.provider.abstract.fetcher import Fetcher
from openbb_core.provider.standard_models.equity_historical import (
EquityHistoricalData,
EquityHistoricalQueryParams,
)
from openbb_core.provider.utils.descriptions import (
DATA_DESCRIPTIONS,
QUERY_DESCRIPTIONS,
)
from pydantic import (
Field,
NonNegativeFloat,
PositiveFloat,
)
class AVEquityHistoricalQueryParams(EquityHistoricalQueryParams):
"""Alpha Vantage Equity Historical Price Query.
Source: https://www.alphavantage.co/documentation/#time-series-data
"""
__json_schema_extra__ = {
"symbol": {"multiple_items_allowed": True},
"interval": {"choices": ["1m", "5m", "15m", "30m", "60m", "1d", "1W", "1M"]},
}
interval: Literal["1m", "5m", "15m", "30m", "60m", "1d", "1W", "1M"] = Field(
default="1d",
description=QUERY_DESCRIPTIONS.get("interval", ""),
)
adjustment: Literal["splits_only", "splits_and_dividends", "unadjusted"] = Field(
description="The adjustment factor to apply. 'splits_only' is not supported for intraday data.",
default="splits_only",
)
extended_hours: bool = Field(
description="Include Pre and Post market data.",
default=False,
)
class AVEquityHistoricalData(EquityHistoricalData):
"""Alpha Vantage Equity Historical Price Data."""
__alias_dict__ = {
"adj_close": "adjusted_close",
"dividend": "dividend_amount",
"split_ratio": "split_factor",
}
adj_close: PositiveFloat | None = Field(
default=None, description=DATA_DESCRIPTIONS.get("adj_close", "")
)
dividend: NonNegativeFloat | None = Field(
default=None,
description="Dividend amount, if a dividend was paid.",
)
split_ratio: NonNegativeFloat | None = Field(
default=None,
description="Split coefficient, if a split occurred.",
)
class AVEquityHistoricalFetcher(
Fetcher[
AVEquityHistoricalQueryParams,
list[AVEquityHistoricalData],
]
):
"""Transform the query, extract and transform the data from the AlphaVantage endpoints."""
@staticmethod
def transform_query(params: dict[str, Any]) -> AVEquityHistoricalQueryParams:
"""Transform the query."""
# pylint: disable=import-outside-toplevel
from dateutil.relativedelta import relativedelta
transformed_params = params
now = datetime.now().date()
if params.get("start_date") is None:
transformed_params["start_date"] = now - relativedelta(years=1)
if params.get("end_date") is None:
transformed_params["end_date"] = now
return AVEquityHistoricalQueryParams(**transformed_params)
@staticmethod
async def aextract_data(
query: AVEquityHistoricalQueryParams,
credentials: dict[str, str] | None,
**kwargs: Any,
) -> list[dict]:
"""Return the raw data from the Alpha Vantage endpoint."""
# pylint: disable=import-outside-toplevel
import asyncio # noqa
from io import BytesIO # noqa
from openbb_alpha_vantage.utils.helpers import ( # noqa
INTERVALS_DICT,
calculate_adjusted_prices,
get_interval,
)
from openbb_core.provider.utils.helpers import ( # noqa
amake_request,
amake_requests,
get_querystring,
)
from pandas import date_range, read_csv, to_datetime # noqa
api_key = credentials.get("alpha_vantage_api_key") if credentials else ""
intraday = False
interval = get_interval(query.interval)
query_str = get_querystring(
query.model_dump(by_alias=True),
[
"start_date",
"end_date",
"interval",
"symbol",
"adjustment",
"extended_hours",
],
)
function = INTERVALS_DICT[query.interval[-1]]
if query.adjustment != "unadjusted":
function += "_ADJUSTED"
query_str += f"&function={function}&outputsize=full&datatype=csv"
if "INTRADAY" in function:
query_str += f"&interval={interval}&extended_hours={str(query.extended_hours).lower()}"
intraday = True
results = []
async def callback(response, _):
"""Use callback function to process the response."""
try:
result = await response.json()
if "Information" in result:
warn(str(result.get("Information")))
except Exception as _:
# TODO: This is hacky, find a better solution.
return await response.read()
return await response.read()
async def intraday_callback(response, _):
"""Use callback function to process the intraday response."""
symbol = response.url.query.get("symbol", None)
data = await response.read()
if data:
df = read_csv(BytesIO(data))
if len(df) > 0:
df.rename(
columns={
"timestamp": "date",
},
inplace=True,
)
if len(query.symbol.split(",")) > 1:
df["symbol"] = symbol
results.extend(df.to_dict("records"))
if not data:
warn(f"Symbol Error: No data found for {symbol}")
return results
async def get_one(symbol, intraday: bool = False):
"""Get data for one symbol."""
if intraday is True:
adjusted = query.adjustment != "unadjusted"
if query.adjustment == "splits_only":
warn(
"Intraday does not support 'splits_only'. Using 'splits_and_dividends' instead."
)
url = (
f"https://www.alphavantage.co/query?{query_str.replace('_ADJUSTED', '')}"
f"&symbol={symbol}&adjusted={str(adjusted).lower()}"
)
dates = (
date_range(start=query.start_date, end=query.end_date)
.strftime("%Y-%m")
.unique()
.tolist()
)
urls = [f"{url}&month={date}&apikey={api_key}" for date in dates]
return await amake_requests(urls, response_callback=intraday_callback)
# We will resample the intervals ourselves to get the correct data.
url = (
f"https://www.alphavantage.co/query?{query_str.replace('MONTHLY', 'DAILY').replace('WEEKLY', 'DAILY')}"
f"&symbol={symbol}&apikey={api_key}"
)
result = await amake_request(url, response_callback=callback)
if not result:
warn(f"Symbol Error: No data found for {symbol}")
if result:
data = read_csv(BytesIO(result)) # type: ignore
if len(data) > 0:
data.rename(
columns={
"timestamp": "date",
"dividend_amount": "dividend",
"adjusted close": "adj_close",
"dividend amount": "dividend",
"adjusted_close": "adj_close",
"split_coefficient": "split_factor",
},
inplace=True,
)
if "date" in data.columns:
data["date"] = data["date"].apply(to_datetime)
data.set_index("date", inplace=True)
# The returned data when 'adjusted=true' from the API does not return a usable OHLCV data set.
# We need to calculate the adjusted prices manually.
if query.adjustment != "unadjusted":
temp = data.copy()
temp["dividend_factor"] = (
temp["close"] - temp["dividend"]
) / temp["close"]
temp["volume_factor"] = temp["split_factor"]
temp["split_factor"] = 1 / temp["split_factor"]
adj_cols = ["open", "high", "low", "close", "volume"]
divs = query.adjustment == "splits_and_dividends"
for col in adj_cols:
divs = False if col == "volume" else divs
if col in temp.columns:
temp = calculate_adjusted_prices(temp, col, divs)
temp["adj_dividend"] = (
temp["adj_close"] * (1 - temp["dividend_factor"])
if query.adjustment == "splits_only"
else temp["close"] * (1 - temp["dividend_factor"])
)
data["open"] = round(temp["adj_open"], 4)
data["high"] = round(temp["adj_high"], 4)
data["low"] = round(temp["adj_low"], 4)
data["close"] = round(temp["adj_close"], 4)
data["volume"] = round(temp["adj_volume"]).astype(int)
data["dividend"] = round(temp["adj_dividend"], 4)
data.drop(columns=["adj_close"], inplace=True)
# Resample the daily data for the interval requested.
freq = ""
agg_dict = {
"open": "first",
"high": "max",
"low": "min",
"close": "last",
"volume": "sum",
"dividend": "sum",
"split_factor": "prod",
}
if query.adjustment == "unadjusted":
agg_dict.pop("dividend")
agg_dict.pop("split_factor")
if query.interval == "1M":
freq = "M"
if query.interval == "1W":
freq = "W-FRI"
if freq in ["M", "W-FRI"]:
data = data.resample(freq).agg({**agg_dict})
if len(query.symbol.split(",")) > 1:
data["symbol"] = symbol
data = data.reset_index()
if intraday is False:
data["date"] = data["date"].dt.date
results.extend(data.to_dict("records"))
return results
tasks = [get_one(symbol, intraday) for symbol in query.symbol.split(",")]
await asyncio.gather(*tasks)
return results
@staticmethod
def transform_data(
query: AVEquityHistoricalQueryParams, data: list[dict], **kwargs: Any
) -> list[AVEquityHistoricalData]:
"""Transform the data to the standard format."""
# pylint: disable=import-outside-toplevel
from pandas import to_datetime
if data == []:
return []
if "{" in data[0]:
warn(str(data[0]["{"].strip()))
return []
return [
AVEquityHistoricalData.model_validate(d)
for d in sorted(
data,
key=(
lambda x: (x["date"], x["symbol"]) if "symbol" in x else x["date"]
),
)
if query.start_date <= to_datetime(d["date"]).date() <= query.end_date
]

View File

@@ -1,164 +0,0 @@
"""AlphaVantage Historical EPS Model."""
# pylint: disable=unused-argument
from datetime import date as dateType
from typing import Any, Literal
from warnings import warn
from openbb_core.provider.abstract.fetcher import Fetcher
from openbb_core.provider.standard_models.historical_eps import (
HistoricalEpsData,
HistoricalEpsQueryParams,
)
from openbb_core.provider.utils.descriptions import QUERY_DESCRIPTIONS
from openbb_core.provider.utils.errors import EmptyDataError
from pydantic import Field, field_validator
class AlphaVantageHistoricalEpsQueryParams(HistoricalEpsQueryParams):
"""
AlphaVantage Historical EPS Query Params.
Source: https://www.alphavantage.co/documentation/#earnings
"""
__json_schema_extra__ = {"symbol": {"multiple_items_allowed": True}}
period: Literal["annual", "quarter"] = Field(
default="quarter", description=QUERY_DESCRIPTIONS.get("period", "")
)
limit: int | None = Field(
default=None, description=QUERY_DESCRIPTIONS.get("limit", "")
)
class AlphaVantageHistoricalEpsData(HistoricalEpsData):
"""AlphaVantage Historical EPS Data."""
__alias_dict__ = {
"date": "fiscalDateEnding",
"eps_actual": "reportedEPS",
"eps_estimated": "estimatedEPS",
"surprise_percent": "surprisePercentage",
"reported_date": "reportedDate",
}
surprise: float | None = Field(
default=None,
description="Surprise in EPS (Actual - Estimated).",
)
surprise_percent: float | str | None = Field(
default=None,
description="EPS surprise as a normalized percent.",
json_schema_extra={"x-unit_measurement": "percent", "x-frontend_multiply": 100},
)
reported_date: dateType | None = Field(
default=None,
description="Date of the earnings report.",
)
report_time: str | None = Field(
default=None,
description="Time of day when the earnings report was released, e.g., 'post-market'.",
)
@field_validator(
"eps_estimated",
"eps_actual",
"surprise",
mode="before",
check_fields=False,
)
@classmethod
def validate_null(cls, v):
"""Clean None returned as a string."""
return None if str(v).strip() == "None" or str(v) == "0" else v
@field_validator("surprise_percent", mode="before", check_fields=False)
@classmethod
def normalize_percent(cls, v):
"""Normalize percent values."""
if isinstance(v, str) and v == "None" or str(v) == "0":
return None
return float(v) / 100
class AVHistoricalEpsFetcher(
Fetcher[AlphaVantageHistoricalEpsQueryParams, list[AlphaVantageHistoricalEpsData]]
):
"""AlphaVantage Historical EPS Fetcher."""
@staticmethod
def transform_query(params: dict[str, Any]) -> AlphaVantageHistoricalEpsQueryParams:
"""Transform the query params."""
return AlphaVantageHistoricalEpsQueryParams(**params)
@staticmethod
async def aextract_data(
query: AlphaVantageHistoricalEpsQueryParams,
credentials: dict[str, str] | None,
**kwargs: Any,
) -> list[dict]:
"""Return the raw data from the AlphaVantage endpoint."""
# pylint: disable=import-outside-toplevel
from openbb_core.provider.utils.helpers import (
ClientResponse,
ClientSession,
amake_requests,
)
api_key = credentials.get("alpha_vantage_api_key") if credentials else ""
BASE_URL = "https://www.alphavantage.co/query?function=EARNINGS&"
# We are allowing multiple symbols to be passed in the query, so we need to handle that.
symbols = query.symbol.split(",")
urls = [f"{BASE_URL}symbol={symbol}&apikey={api_key}" for symbol in symbols]
results: list = []
messages: list = []
# We need to make a custom callback function for this async request.
async def response_callback(response: ClientResponse, _: ClientSession):
"""Response callback function."""
symbol = response.url.query.get("symbol", None)
data = await response.json()
target = (
"annualEarnings" if query.period == "annual" else "quarterlyEarnings"
)
message = data.get("Information", "") # type: ignore
if message:
messages.append(message)
warn(f"Symbol Error for {symbol}: {message}")
result: list = []
# If data is returned, append it to the results list.
if data:
result = [
{
"symbol": symbol,
**d,
}
for d in data.get(target, []) # type: ignore
]
if query.limit is not None:
results.extend(result[: query.limit])
else:
results.extend(result)
# If no data is returned, raise a warning and move on to the next symbol.
if not data:
warn(f"Symbol Error: No data found for {symbol}")
await amake_requests(urls, response_callback, **kwargs) # type: ignore
if not results:
raise EmptyDataError(f"No data was returned -> \n{messages[-1]}")
return results
@staticmethod
def transform_data(
query: AlphaVantageHistoricalEpsQueryParams,
data: list[dict],
**kwargs: Any,
) -> list[AlphaVantageHistoricalEpsData]:
"""Transform the raw data into the standard model."""
if not data:
raise EmptyDataError("No data found.")
return [AlphaVantageHistoricalEpsData.model_validate(d) for d in data]

View File

@@ -1 +0,0 @@
"""Alpha Vantage utilities."""

View File

@@ -1,99 +0,0 @@
"""Alpha Vantage Helpers Module."""
from datetime import datetime
from typing import TYPE_CHECKING, Any
if TYPE_CHECKING:
from pandas import DataFrame
INTERVALS_DICT = {
"m": "TIME_SERIES_INTRADAY",
"d": "TIME_SERIES_DAILY",
"W": "TIME_SERIES_WEEKLY",
"M": "TIME_SERIES_MONTHLY",
}
def get_interval(value: str) -> str:
"""Get the intervals for the Alpha Vantage API."""
intervals = {
"m": "min",
"d": "day",
"W": "week",
"M": "month",
}
return f"{value[:-1]}{intervals[value[-1]]}"
def extract_key_name(key):
"""Extract the alphabetical part of the key using regex."""
# pylint: disable=import-outside-toplevel
import re
match = re.search(r"\d+\.\s+([a-z]+)", key, re.I)
return match.group(1) if match else key
def filter_by_dates(
data: list[dict[str, Any]], start_date: datetime, end_date: datetime
) -> list[dict[str, Any]]:
"""Filter the data by start and end dates."""
return list(
filter(
lambda x: start_date
<= datetime.strptime(x["date"], "%Y-%m-%d").date()
<= end_date,
data,
)
)
def calculate_adjusted_prices(
df: "DataFrame", column: str, dividends: bool = False
) -> "DataFrame":
"""Calculate the split-adjusted prices, or split and dividend adjusted prices.
Parameters
----------
df: DataFrame
DataFrame with unadjusted OHLCV values + split_factor + dividend
column: str
The column name to adjust.
dividends: bool
Whether to adjust for both splits and dividends. Default is split-adjusted only.
Returns
-------
DataFrame
DataFrame with adjusted prices.
"""
# pylint: disable=import-outside-toplevel
from numpy import zeros
df = df.copy()
adj_column = "adj_" + column
# Reverse the DataFrame order, sorting by date in descending order
df.sort_index(ascending=False, inplace=True)
price_col = df[column]
split_col = df["volume_factor"] if column == "volume" else df["split_factor"]
dividend_col = df["dividend"] if dividends else zeros(len(price_col))
adj_price_col = zeros(len(df.index))
adj_price_col[0] = price_col.iloc[0]
for i in range(1, len(price_col)):
adj_price_col[i] = adj_price_col[i - 1] + adj_price_col[i - 1] * (
(
(price_col.iloc[i] * split_col.iloc[i - 1])
- price_col.iloc[i - 1]
- dividend_col[i - 1]
)
/ price_col.iloc[i - 1]
)
df[adj_column] = adj_price_col
# Change the DataFrame order back to dates ascending
df.sort_index(ascending=True, inplace=True)
return df

File diff suppressed because it is too large Load Diff

View File

@@ -1,19 +0,0 @@
[tool.poetry]
name = "openbb-alpha-vantage"
version = "1.6.1"
description = "Alpha Vantage extension for OpenBB"
authors = ["OpenBB Team <hello@openbb.co>"]
license = "AGPL-3.0-only"
readme = "README.md"
packages = [{ include = "openbb_alpha_vantage" }]
[tool.poetry.dependencies]
python = ">=3.10,<4"
openbb-core = "^1.6.10"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
[tool.poetry.plugins."openbb_provider_extension"]
alpha_vantage = "openbb_alpha_vantage:alpha_vantage_provider"

View File

@@ -1 +0,0 @@
"""Alpha Vantage tests."""

View File

@@ -1,316 +0,0 @@
interactions:
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://www.alphavantage.co/query?adjusted=true&apikey=MOCK_API_KEY&datatype=csv&extended_hours=false&function=TIME_SERIES_INTRADAY&interval=15min&month=2023-01&outputsize=full&symbol=AAPL
response:
body:
string: "timestamp,open,high,low,close,volume\r\n2023-01-31 15:45:00,142.4710,143.3640,142.1380,143.3200,6111148\r\n2023-01-31
15:30:00,142.3220,142.6090,142.3120,142.4800,1466236\r\n2023-01-31 15:15:00,142.7790,142.7980,142.2770,142.3310,1409505\r\n2023-01-31
15:00:00,142.8880,143.0660,142.6600,142.7730,1206452\r\n2023-01-31 14:45:00,142.9580,143.0260,142.8230,142.8830,852602\r\n2023-01-31
14:30:00,142.8490,143.0160,142.8040,142.9720,856467\r\n2023-01-31 14:15:00,142.7340,142.9170,142.6250,142.8480,705206\r\n2023-01-31
14:00:00,142.6450,142.9370,142.5450,142.7440,951014\r\n2023-01-31 13:45:00,142.4610,142.7680,142.4160,142.6540,909265\r\n2023-01-31
13:30:00,142.4410,142.5590,142.3170,142.4650,611083\r\n2023-01-31 13:15:00,142.4560,142.4700,142.1780,142.4410,1006968\r\n2023-01-31
13:00:00,142.5610,142.6360,142.3270,142.4550,655584\r\n2023-01-31 12:45:00,142.5460,142.6880,142.4560,142.5600,630828\r\n2023-01-31
12:30:00,142.5410,142.6680,142.4160,142.5550,590808\r\n2023-01-31 12:15:00,142.3220,142.6680,142.2620,142.5600,974220\r\n2023-01-31
12:00:00,142.2820,142.3950,141.9990,142.3070,929554\r\n2023-01-31 11:45:00,142.3520,142.5140,142.1780,142.2850,844479\r\n2023-01-31
11:30:00,142.5560,142.6680,142.2970,142.3260,969895\r\n2023-01-31 11:15:00,142.2330,142.6190,142.1280,142.5500,1187882\r\n2023-01-31
11:00:00,142.1930,142.4600,142.0090,142.2470,1107755\r\n2023-01-31 10:45:00,142.1600,142.3210,141.8200,142.1870,1388137\r\n2023-01-31
10:30:00,142.2130,142.3800,141.9790,142.1670,1226566\r\n2023-01-31 10:15:00,142.1040,142.3700,141.6520,142.1970,1825953\r\n2023-01-31
10:00:00,141.6770,142.2110,141.4330,142.1080,2150277\r\n2023-01-31 09:45:00,141.7070,142.7780,141.4030,141.6760,2822577\r\n2023-01-31
09:30:00,141.7160,142.4800,141.3040,141.7110,4394928\r\n2023-01-30 15:45:00,142.4070,142.5490,141.8700,142.0580,4775426\r\n2023-01-30
15:30:00,142.0840,142.4600,141.9990,142.4110,1792886\r\n2023-01-30 15:15:00,142.0840,142.1620,141.9490,142.0830,1765526\r\n2023-01-30
15:00:00,142.2130,142.4900,142.0490,142.0780,1650201\r\n2023-01-30 14:45:00,142.2280,142.2810,141.9010,142.2170,1669205\r\n2023-01-30
14:30:00,142.1780,142.5460,142.0890,142.2320,1432781\r\n2023-01-30 14:15:00,142.4070,142.4350,142.0490,142.1770,1464175\r\n2023-01-30
14:00:00,142.3920,142.6190,142.2970,142.4110,998241\r\n2023-01-30 13:45:00,142.1930,142.4500,142.0790,142.4010,1198176\r\n2023-01-30
13:30:00,142.5110,142.5190,142.0290,142.1970,1309283\r\n2023-01-30 13:15:00,142.5110,142.8470,142.4260,142.5230,1064570\r\n2023-01-30
13:00:00,142.4310,142.6780,142.3270,142.5200,875111\r\n2023-01-30 12:45:00,142.6400,142.6490,142.1880,142.4410,1400651\r\n2023-01-30
12:30:00,142.6950,142.8120,142.4960,142.6440,1181401\r\n2023-01-30 12:15:00,142.9780,142.9910,142.4910,142.6990,1609852\r\n2023-01-30
12:00:00,143.1960,143.2840,142.1680,142.9820,1400170\r\n2023-01-30 11:45:00,142.8780,143.2150,142.5160,143.2090,1185883\r\n2023-01-30
11:30:00,142.8880,143.2540,142.7840,142.8840,1110391\r\n2023-01-30 11:15:00,142.9680,143.3440,142.7240,142.9020,1375517\r\n2023-01-30
11:00:00,143.0080,143.1850,142.7440,142.9770,1391660\r\n2023-01-30 10:45:00,142.6300,143.0560,142.5850,143.0170,1923936\r\n2023-01-30
10:30:00,143.2060,143.2540,142.3860,142.6560,2033741\r\n2023-01-30 10:15:00,143.6230,143.6520,142.8630,143.2100,2312830\r\n2023-01-30
10:00:00,144.1890,144.3670,143.5290,143.6180,1980967\r\n2023-01-30 09:45:00,143.7520,144.2870,143.1820,144.1990,2799333\r\n2023-01-30
09:30:00,143.9660,144.5650,143.5190,143.7380,4153218\r\n2023-01-27 15:45:00,145.6890,145.7180,144.8000,144.9780,4867213\r\n2023-01-27
15:30:00,145.9470,146.2340,145.6640,145.7230,2420991\r\n2023-01-27 15:15:00,145.8880,145.9760,145.6140,145.9620,1956807\r\n2023-01-27
15:00:00,145.8930,146.1650,145.8130,145.8920,1674321\r\n2023-01-27 14:45:00,145.6790,146.0260,145.6350,145.9020,1811395\r\n2023-01-27
14:30:00,145.7780,145.8470,145.5050,145.6830,1394494\r\n2023-01-27 14:15:00,145.5150,145.9560,145.5050,145.7740,1614957\r\n2023-01-27
14:00:00,145.3510,145.5340,145.2470,145.5190,1092587\r\n2023-01-27 13:45:00,145.3610,145.4300,145.1870,145.3560,913236\r\n2023-01-27
13:30:00,145.2020,145.5690,145.1570,145.3680,1454188\r\n2023-01-27 13:15:00,145.3170,145.3300,144.9880,145.1920,957452\r\n2023-01-27
13:00:00,145.3610,145.4730,145.0930,145.3260,1005769\r\n2023-01-27 12:45:00,145.5600,145.6480,145.3420,145.3760,1052779\r\n2023-01-27
12:30:00,145.3790,145.8320,145.1670,145.5560,1618834\r\n2023-01-27 12:15:00,145.3710,145.8960,145.3360,145.3680,2099327\r\n2023-01-27
12:00:00,145.0530,145.4790,144.9190,145.3760,1804374\r\n2023-01-27 11:45:00,144.8910,145.2010,144.7600,145.0580,1691657\r\n2023-01-27
11:30:00,144.2690,145.1020,144.1740,144.8990,2256364\r\n2023-01-27 11:15:00,143.9210,144.3670,143.9060,144.2630,1467439\r\n2023-01-27
11:00:00,143.7130,144.1090,143.6180,143.9250,1730147\r\n2023-01-27 10:45:00,143.9460,143.9660,143.3900,143.6970,1896399\r\n2023-01-27
10:30:00,144.4380,144.5410,143.8560,143.9450,1922267\r\n2023-01-27 10:15:00,144.1700,144.5160,143.8150,144.4420,2081938\r\n2023-01-27
10:00:00,143.7230,144.4960,143.3990,144.1700,2810931\r\n2023-01-27 09:45:00,143.0670,144.2280,143.0620,143.7170,3425862\r\n2023-01-27
09:30:00,142.2030,143.5720,142.0980,143.0810,3713990\r\n2023-01-26 15:45:00,142.4960,143.0660,142.3370,142.9420,4251294\r\n2023-01-26
15:30:00,142.5360,142.6980,142.4360,142.4990,1378195\r\n2023-01-26 15:15:00,142.4530,142.7380,142.4060,142.5450,1175706\r\n2023-01-26
15:00:00,142.5510,142.6190,142.2670,142.4550,962291\r\n2023-01-26 14:45:00,142.6000,142.7380,142.2970,142.5450,1092977\r\n2023-01-26
14:30:00,142.5560,142.7880,142.4760,142.6000,1073885\r\n2023-01-26 14:15:00,142.4710,142.8600,142.3670,142.5550,1332790\r\n2023-01-26
14:00:00,142.1730,142.5240,141.9490,142.4800,1239469\r\n2023-01-26 13:45:00,142.2530,142.4600,142.0390,142.1770,937106\r\n2023-01-26
13:30:00,141.8950,142.3700,141.8900,142.2580,1131056\r\n2023-01-26 13:15:00,141.7460,141.9430,141.5720,141.8890,584464\r\n2023-01-26
13:00:00,141.8450,142.0330,141.5130,141.7500,944902\r\n2023-01-26 12:45:00,141.7810,142.0530,141.6120,141.8400,985075\r\n2023-01-26
12:30:00,141.8850,142.1120,141.7410,141.7800,744875\r\n2023-01-26 12:15:00,142.0240,142.0630,141.8300,141.8990,806807\r\n2023-01-26
12:00:00,141.7060,142.3010,141.6810,142.0190,1289752\r\n2023-01-26 11:45:00,141.7360,141.7740,141.4980,141.7100,1008489\r\n2023-01-26
11:30:00,141.3790,141.8240,141.2150,141.7400,1161425\r\n2023-01-26 11:15:00,141.6090,141.8940,140.9270,141.3930,1742592\r\n2023-01-26
11:00:00,141.4180,141.7550,141.2440,141.6210,1386633\r\n2023-01-26 10:45:00,142.1950,142.4250,141.2840,141.4230,1650420\r\n2023-01-26
10:30:00,142.5460,142.6780,141.9890,142.1870,1349288\r\n2023-01-26 10:15:00,142.1430,143.0160,142.1080,142.5500,2312979\r\n2023-01-26
10:00:00,142.2820,142.4500,141.6910,142.1480,2328421\r\n2023-01-26 09:45:00,142.5410,142.8270,141.9490,142.2770,2821276\r\n2023-01-26
09:30:00,142.1930,143.2740,141.8010,142.5540,4245796\r\n2023-01-25 15:45:00,140.6340,140.9200,140.3060,140.8860,3237880\r\n2023-01-25
15:30:00,140.8680,140.9900,140.5490,140.6380,1771140\r\n2023-01-25 15:15:00,141.2690,141.3470,140.5590,140.8660,1936429\r\n2023-01-25
15:00:00,140.8320,141.4670,140.8180,141.2690,2421977\r\n2023-01-25 14:45:00,140.6590,141.0100,140.5390,140.8270,1470841\r\n2023-01-25
14:30:00,140.6340,140.7220,140.4000,140.6580,1164244\r\n2023-01-25 14:15:00,140.5690,141.0100,140.4900,140.6380,1611771\r\n2023-01-25
14:00:00,140.1170,140.6120,139.9940,140.5680,1191679\r\n2023-01-25 13:45:00,140.0080,140.3720,139.9230,140.1210,1563186\r\n2023-01-25
13:30:00,140.1170,140.2150,139.8840,140.0120,1159314\r\n2023-01-25 13:15:00,139.8730,140.1650,139.8440,140.1210,1254572\r\n2023-01-25
13:00:00,139.4820,139.9170,139.4460,139.8830,1183834\r\n2023-01-25 12:45:00,139.5010,139.5600,139.3180,139.4860,627376\r\n2023-01-25
12:30:00,139.2730,139.6790,139.1890,139.5060,851021\r\n2023-01-25 12:15:00,139.4020,139.5450,139.1690,139.2670,942255\r\n2023-01-25
12:00:00,139.5230,139.7580,139.1590,139.4060,1523908\r\n2023-01-25 11:45:00,139.2090,139.8870,139.0590,139.5260,1828568\r\n2023-01-25
11:30:00,139.1440,139.4800,138.9400,139.2080,1836959\r\n2023-01-25 11:15:00,138.8360,139.4800,138.6520,139.1480,2337626\r\n2023-01-25
11:00:00,138.3640,138.8670,138.1950,138.8250,2253429\r\n2023-01-25 10:45:00,138.0370,138.5170,137.9170,138.3680,1814184\r\n2023-01-25
10:30:00,138.8760,139.0530,137.8580,138.0380,2898756\r\n2023-01-25 10:15:00,138.7960,139.1520,138.5030,138.8700,1978515\r\n2023-01-25
10:00:00,138.7670,139.5100,138.6720,138.8130,2455229\r\n2023-01-25 09:45:00,139.1540,139.8480,138.7420,138.7650,2785027\r\n2023-01-25
09:30:00,139.9290,140.1360,138.5230,139.1680,5433804\r\n2023-01-24 15:45:00,141.1110,141.7550,140.9760,141.5320,3648415\r\n2023-01-24
15:30:00,141.4580,141.4960,140.9320,141.1160,1630244\r\n2023-01-24 15:15:00,141.2730,141.5160,141.2290,141.4530,1194031\r\n2023-01-24
15:00:00,141.4780,141.5960,141.2150,141.2840,1237871\r\n2023-01-24 14:45:00,141.5370,141.6450,141.3240,141.4770,1127294\r\n2023-01-24
14:30:00,141.6970,141.8340,141.4930,141.5420,1114856\r\n2023-01-24 14:15:00,141.3870,141.7450,141.3440,141.6910,1147658\r\n2023-01-24
14:00:00,141.6770,141.6950,141.2240,141.3890,1588811\r\n2023-01-24 13:45:00,142.1040,142.1720,141.6620,141.6860,1196879\r\n2023-01-24
13:30:00,141.9450,142.1920,141.8020,142.1070,1808716\r\n2023-01-24 13:15:00,141.4530,141.9530,141.3340,141.9390,1330135\r\n2023-01-24
13:00:00,141.4980,141.6160,141.0740,141.4520,1142190\r\n2023-01-24 12:45:00,141.3790,141.6840,141.3140,141.5020,946467\r\n2023-01-24
12:30:00,141.7260,141.7350,141.3140,141.3930,1023572\r\n2023-01-24 12:15:00,141.5900,141.9040,141.5040,141.7350,1803709\r\n2023-01-24
12:00:00,141.1250,141.6060,140.8370,141.5960,1393518\r\n2023-01-24 11:45:00,141.0810,141.2780,140.9760,141.1350,849995\r\n2023-01-24
11:30:00,141.4880,141.5340,140.9360,141.0850,1372549\r\n2023-01-24 11:15:00,141.0410,141.5060,140.7880,141.4860,1584463\r\n2023-01-24
11:00:00,141.2890,141.4370,140.9360,141.0450,1732817\r\n2023-01-24 10:45:00,140.7700,141.3470,140.6480,141.2880,1605822\r\n2023-01-24
10:30:00,140.9370,141.2480,140.3160,140.7570,1972197\r\n2023-01-24 10:15:00,140.9220,141.3080,140.6580,140.9460,2067111\r\n2023-01-24
10:00:00,140.4950,140.9800,140.1220,140.9510,2593950\r\n2023-01-24 09:45:00,140.8920,141.1690,140.4000,140.4840,2829536\r\n2023-01-24
09:30:00,139.3480,140.9700,139.3380,140.9260,4358939\r\n2023-01-23 15:45:00,139.8190,140.3040,139.7350,140.1410,4645025\r\n2023-01-23
15:30:00,139.6310,139.8960,139.4370,139.8240,1884649\r\n2023-01-23 15:15:00,139.7500,139.8620,139.3970,139.6300,1818166\r\n2023-01-23
15:00:00,140.0180,140.0760,139.5260,139.7490,1990630\r\n2023-01-23 14:45:00,140.3450,140.3540,139.6490,140.0220,2453913\r\n2023-01-23
14:30:00,140.8130,140.9900,140.2910,140.3450,1559522\r\n2023-01-23 14:15:00,140.8420,141.0200,140.6800,140.7970,1560035\r\n2023-01-23
14:00:00,140.9910,141.0200,140.5390,140.8470,1642722\r\n2023-01-23 13:45:00,141.0860,141.3470,140.9070,140.9860,1484231\r\n2023-01-23
13:30:00,141.2990,141.3670,141.0160,141.0880,1461935\r\n2023-01-23 13:15:00,141.1500,141.3970,141.1250,141.3030,1420401\r\n2023-01-23
13:00:00,141.1800,141.5260,141.0260,141.1590,1908956\r\n2023-01-23 12:45:00,141.3990,141.5360,140.9660,141.1940,2187698\r\n2023-01-23
12:30:00,141.4880,141.5560,141.2640,141.4080,1232067\r\n2023-01-23 12:15:00,141.3190,141.5960,141.2340,141.4850,1623032\r\n2023-01-23
12:00:00,141.9250,141.9330,141.1850,141.3270,2063424\r\n2023-01-23 11:45:00,141.7060,142.3460,141.4630,141.9290,3303263\r\n2023-01-23
11:30:00,141.3690,141.9040,141.2750,141.7010,2377490\r\n2023-01-23 11:15:00,141.1800,141.8340,141.0460,141.3730,3140109\r\n2023-01-23
11:00:00,140.2460,141.4760,140.1520,141.1840,3848507\r\n2023-01-23 10:45:00,139.8890,140.5230,139.7890,140.2560,2573732\r\n2023-01-23
10:30:00,139.5070,140.0810,139.5010,139.8930,2673807\r\n2023-01-23 10:15:00,138.7670,139.6890,138.7220,139.5130,2817622\r\n2023-01-23
10:00:00,138.9260,139.3010,138.6130,138.7630,2921125\r\n2023-01-23 09:45:00,138.3790,139.0530,138.2450,138.9200,3265100\r\n2023-01-23
09:30:00,137.1870,138.7000,136.9540,138.3730,5056958\r\n2023-01-20 15:45:00,136.5220,137.0860,136.3680,136.9030,6716655\r\n2023-01-20
15:30:00,136.5420,136.6990,136.3190,136.5260,1999873\r\n2023-01-20 15:15:00,136.7900,136.9570,136.4180,136.5410,1923821\r\n2023-01-20
15:00:00,136.2340,136.8380,136.1930,136.7940,1984953\r\n2023-01-20 14:45:00,136.3090,136.3320,135.9510,136.2380,1357015\r\n2023-01-20
14:30:00,136.0110,136.3510,136.0010,136.3170,1573283\r\n2023-01-20 14:15:00,135.7180,136.0630,135.7130,136.0150,1156358\r\n2023-01-20
14:00:00,135.9060,135.9640,135.7030,135.7200,1389922\r\n2023-01-20 13:45:00,135.2160,135.9240,135.2110,135.9000,1939879\r\n2023-01-20
13:30:00,134.7740,135.3580,134.7640,135.2250,1584364\r\n2023-01-20 13:15:00,134.8830,134.9210,134.4510,134.7680,1119167\r\n2023-01-20
13:00:00,134.8430,135.1400,134.5310,134.8820,1816572\r\n2023-01-20 12:45:00,134.7350,135.0300,134.7050,134.8480,1029414\r\n2023-01-20
12:30:00,134.7170,134.9200,134.6500,134.7380,894106\r\n2023-01-20 12:15:00,134.5160,134.8420,134.5110,134.7230,1007840\r\n2023-01-20
12:00:00,134.3870,134.6930,134.3770,134.5190,1156870\r\n2023-01-20 11:45:00,134.2130,134.5640,134.1730,134.3870,1349757\r\n2023-01-20
11:30:00,134.6150,134.7540,134.1140,134.2120,1643713\r\n2023-01-20 11:15:00,134.5260,134.6530,134.2530,134.6190,1431922\r\n2023-01-20
11:00:00,134.0990,134.6030,134.0740,134.5490,1798442\r\n2023-01-20 10:45:00,134.1970,134.4150,134.0440,134.0930,1654390\r\n2023-01-20
10:30:00,134.1380,134.5730,134.0240,134.2020,2212750\r\n2023-01-20 10:15:00,133.8720,134.2850,133.6620,134.1320,2023685\r\n2023-01-20
10:00:00,133.6920,134.1070,133.3990,133.8790,2329429\r\n2023-01-20 09:45:00,133.8900,134.2850,133.4510,133.6870,2681150\r\n2023-01-20
09:30:00,134.3470,134.3750,133.2990,133.8920,8775063\r\n2023-01-19 15:45:00,134.6050,134.7820,134.1730,134.3630,3781028\r\n2023-01-19
15:30:00,134.7840,134.9110,134.5380,134.6190,1423205\r\n2023-01-19 15:15:00,134.7140,134.9510,134.5800,134.7880,1394818\r\n2023-01-19
15:00:00,135.0120,135.1300,134.6400,134.7130,1353232\r\n2023-01-19 14:45:00,135.1420,135.3280,134.8290,135.0010,1167922\r\n2023-01-19
14:30:00,134.9530,135.3280,134.7390,135.1360,1746550\r\n2023-01-19 14:15:00,134.5700,135.1300,134.4860,134.9620,1472276\r\n2023-01-19
14:00:00,134.3470,134.6330,134.1330,134.5690,1224657\r\n2023-01-19 13:45:00,134.3170,134.4150,134.0940,134.3610,1026564\r\n2023-01-19
13:30:00,133.8400,134.6330,133.8360,134.3190,1605626\r\n2023-01-19 13:15:00,133.9700,134.1960,133.7060,133.8340,1227478\r\n2023-01-19
13:00:00,133.6820,134.0770,133.6640,133.9740,1131186\r\n2023-01-19 12:45:00,133.5750,133.6900,133.4280,133.6840,776887\r\n2023-01-19
12:30:00,133.5240,133.7390,133.3490,133.5860,848018\r\n2023-01-19 12:15:00,133.6720,133.9180,133.4280,133.5270,1023364\r\n2023-01-19
12:00:00,133.4730,133.8190,133.4280,133.6770,1147155\r\n2023-01-19 11:45:00,133.4630,133.7690,133.3490,133.4870,1169913\r\n2023-01-19
11:30:00,133.5620,133.6500,133.2690,133.4670,1339811\r\n2023-01-19 11:15:00,134.2530,134.2850,133.4680,133.5760,1994443\r\n2023-01-19
11:00:00,133.1950,134.4740,133.1300,134.2580,2519967\r\n2023-01-19 10:45:00,133.5430,133.5500,132.8520,133.1890,1615427\r\n2023-01-19
10:30:00,133.5590,133.7690,133.1700,133.5350,1652092\r\n2023-01-19 10:15:00,133.4930,134.1550,133.2510,133.5560,1873714\r\n2023-01-19
10:00:00,134.1290,134.1360,133.3690,133.4960,2281444\r\n2023-01-19 09:45:00,133.5230,134.4100,133.0920,134.1420,2975242\r\n2023-01-19
09:30:00,133.1750,134.2760,132.9420,133.5270,3892475\r\n2023-01-18 15:45:00,134.5260,134.6330,134.1040,134.2810,3752501\r\n2023-01-18
15:30:00,134.8340,134.9010,134.4310,134.5250,1498963\r\n2023-01-18 15:15:00,134.9580,135.1100,134.7090,134.8390,1230618\r\n2023-01-18
15:00:00,134.8730,135.1890,134.7440,134.9670,1312264\r\n2023-01-18 14:45:00,135.0320,135.1140,134.7890,134.8820,946124\r\n2023-01-18
14:30:00,135.1320,135.2390,134.9280,135.0410,1066617\r\n2023-01-18 14:15:00,134.9970,135.1890,134.7190,135.1460,1014389\r\n2023-01-18
14:00:00,135.1420,135.1640,134.7390,135.0130,1097723\r\n2023-01-18 13:45:00,134.7540,135.3480,134.7290,135.1360,1695408\r\n2023-01-18
13:30:00,134.8040,134.8520,134.4510,134.7630,1103844\r\n2023-01-18 13:15:00,134.5260,134.8410,134.4020,134.7980,1099141\r\n2023-01-18
13:00:00,134.7740,135.0400,134.4310,134.5300,1319586\r\n2023-01-18 12:45:00,134.6650,134.8910,134.6200,134.7780,1085836\r\n2023-01-18
12:30:00,134.6550,134.9060,134.4910,134.6790,1143111\r\n2023-01-18 12:15:00,135.0120,135.2040,134.5110,134.6620,1499372\r\n2023-01-18
12:00:00,135.2290,135.3580,134.5310,135.0060,1697851\r\n2023-01-18 11:45:00,135.0420,135.2890,134.8680,135.2310,1642756\r\n2023-01-18
11:30:00,135.7470,135.8050,134.9780,135.0560,2083783\r\n2023-01-18 11:15:00,136.0060,136.0530,135.4640,135.7510,1994107\r\n2023-01-18
11:00:00,136.1150,136.4410,135.6930,136.0100,1869131\r\n2023-01-18 10:45:00,135.9660,136.1810,135.6130,136.1240,2004550\r\n2023-01-18
10:30:00,137.0480,137.0670,135.8910,135.9710,2364947\r\n2023-01-18 10:15:00,136.8360,137.1450,136.2690,137.0440,2611453\r\n2023-01-18
10:00:00,137.0390,137.6720,136.6760,136.8340,4058899\r\n2023-01-18 09:45:00,136.2340,137.0670,136.0600,137.0430,3768402\r\n2023-01-18
09:30:00,135.8860,136.6590,135.7420,136.2510,5413109\r\n2023-01-17 15:45:00,134.8140,135.0800,134.6800,135.0060,3661056\r\n2023-01-17
15:30:00,134.7690,135.0200,134.7390,134.8180,1396688\r\n2023-01-17 15:15:00,134.8540,134.9210,134.6700,134.7830,1085677\r\n2023-01-17
15:00:00,134.9680,135.1600,134.7790,134.8530,1015091\r\n2023-01-17 14:45:00,135.1120,135.1490,134.8580,134.9840,847545\r\n2023-01-17
14:30:00,134.7390,135.1600,134.7340,135.1260,1158455\r\n2023-01-17 14:15:00,134.7440,134.8520,134.4710,134.7390,1141209\r\n2023-01-17
14:00:00,135.1320,135.1690,134.5710,134.7480,1023901\r\n2023-01-17 13:45:00,135.3880,135.4770,135.0670,135.1310,820502\r\n2023-01-17
13:30:00,135.1320,135.4180,134.9980,135.3940,823247\r\n2023-01-17 13:15:00,135.0570,135.2190,134.9970,135.1260,830634\r\n2023-01-17
13:00:00,135.3100,135.3880,134.9780,135.0610,1181279\r\n2023-01-17 12:45:00,134.8580,135.3580,134.7690,135.3240,1478105\r\n2023-01-17
12:30:00,134.6650,135.0300,134.6300,134.8630,942795\r\n2023-01-17 12:15:00,134.6450,134.7310,134.3820,134.6690,1127715\r\n2023-01-17
12:00:00,134.9430,135.0400,134.6200,134.6490,1002075\r\n2023-01-17 11:45:00,134.9810,135.1890,134.7690,134.9370,909778\r\n2023-01-17
11:30:00,134.4660,135.2190,134.4320,134.9870,1983101\r\n2023-01-17 11:15:00,133.9050,134.6030,133.8960,134.4750,1919804\r\n2023-01-17
11:00:00,134.6100,134.7520,133.7560,133.9040,2282180\r\n2023-01-17 10:45:00,134.7440,134.9910,134.4120,134.6190,2035772\r\n2023-01-17
10:30:00,135.7670,135.8750,134.4910,134.7480,2918185\r\n2023-01-17 10:15:00,135.3300,136.3610,135.2310,135.7610,3519018\r\n2023-01-17
10:00:00,134.2680,135.6360,134.2630,135.3390,3639677\r\n2023-01-17 09:45:00,133.9550,134.6930,133.9500,134.2710,2644061\r\n2023-01-17
09:30:00,133.9100,134.6130,133.2100,133.9540,5496289\r\n2023-01-13 15:45:00,133.8950,133.9180,133.5380,133.7850,3746397\r\n2023-01-13
15:30:00,133.6870,134.0070,133.6120,133.9090,2118978\r\n2023-01-13 15:15:00,133.3830,133.6990,133.3590,133.6900,1403037\r\n2023-01-13
15:00:00,133.2250,133.4810,133.1500,133.3830,1302750\r\n2023-01-13 14:45:00,133.2150,133.3420,133.1200,133.2200,1038935\r\n2023-01-13
14:30:00,133.3340,133.5110,133.1900,133.2290,1223800\r\n2023-01-13 14:15:00,133.1550,133.3720,133.0310,133.3340,1228248\r\n2023-01-13
14:00:00,133.2250,133.3220,132.9710,133.1500,1205640\r\n2023-01-13 13:45:00,133.2550,133.4710,133.1400,133.2250,1246043\r\n2023-01-13
13:30:00,132.7480,133.4210,132.7130,133.2630,1761614\r\n2023-01-13 13:15:00,132.5690,132.8060,132.4250,132.7370,1035880\r\n2023-01-13
13:00:00,132.6290,132.7060,132.3860,132.5680,852197\r\n2023-01-13 12:45:00,132.5100,132.6960,132.3760,132.6320,1047491\r\n2023-01-13
12:30:00,132.6090,132.6270,132.2470,132.5140,911447\r\n2023-01-13 12:15:00,132.3810,132.6960,132.2860,132.6030,900112\r\n2023-01-13
12:00:00,132.3010,132.4780,132.2170,132.3940,926455\r\n2023-01-13 11:45:00,132.1820,132.3490,131.8440,132.3080,1375165\r\n2023-01-13
11:30:00,132.1320,132.2690,131.8700,132.1910,1106358\r\n2023-01-13 11:15:00,132.5340,132.5670,132.0580,132.1360,1778202\r\n2023-01-13
11:00:00,132.8370,133.0540,132.4650,132.5380,1838158\r\n2023-01-13 10:45:00,132.7480,133.0490,132.5740,132.8410,1750994\r\n2023-01-13
10:30:00,132.5990,133.0640,132.3260,132.7370,2121920\r\n2023-01-13 10:15:00,132.4000,132.6470,132.0880,132.6030,2077111\r\n2023-01-13
10:00:00,131.6360,132.5570,131.4920,132.3990,2886214\r\n2023-01-13 09:45:00,131.2730,131.7920,131.0250,131.6640,2642394\r\n2023-01-13
09:30:00,131.0500,132.0340,130.7570,131.2820,4253768\r\n2023-01-12 15:45:00,132.2220,132.6570,131.8590,132.4790,3432538\r\n2023-01-12
15:30:00,132.2810,132.5270,132.1680,132.2250,1620731\r\n2023-01-12 15:15:00,132.0630,132.4830,131.9190,132.2800,1587928\r\n2023-01-12
15:00:00,132.4450,132.5270,131.9980,132.0740,1307882\r\n2023-01-12 14:45:00,132.4600,132.6560,132.1070,132.4440,1363280\r\n2023-01-12
14:30:00,132.2890,132.6170,132.0980,132.4630,1472133\r\n2023-01-12 14:15:00,132.7880,132.8450,132.2270,132.2930,1239464\r\n2023-01-12
14:00:00,133.1060,133.2030,132.6650,132.7970,1375847\r\n2023-01-12 13:45:00,132.7130,133.2820,132.6640,133.1140,1518268\r\n2023-01-12
13:30:00,131.8940,132.7660,131.5120,132.7220,2435122\r\n2023-01-12 13:15:00,132.8030,133.0640,131.8490,131.9080,1607829\r\n2023-01-12
13:00:00,132.8030,133.0440,132.4850,132.8110,1395646\r\n2023-01-12 12:45:00,133.0260,133.2130,132.7930,132.8110,1155360\r\n2023-01-12
12:30:00,133.0960,133.3120,132.9320,133.0400,1572799\r\n2023-01-12 12:15:00,132.3810,133.1780,132.3460,133.0990,1890439\r\n2023-01-12
12:00:00,132.1720,132.5570,131.9040,132.3850,1373934\r\n2023-01-12 11:45:00,131.9340,132.2700,131.6110,132.1760,1321383\r\n2023-01-12
11:30:00,131.5160,132.0210,131.1640,131.9470,1416688\r\n2023-01-12 11:15:00,131.8440,131.8820,131.2630,131.5150,1249922\r\n2023-01-12
11:00:00,131.5460,131.8420,131.0850,131.8380,1809483\r\n2023-01-12 10:45:00,131.7050,132.0470,131.4620,131.5450,1951060\r\n2023-01-12
10:30:00,132.0730,132.5270,131.5910,131.6990,2217902\r\n2023-01-12 10:15:00,132.4550,132.8900,131.9290,132.0670,2758195\r\n2023-01-12
10:00:00,131.3970,132.7460,131.2430,132.4540,3312376\r\n2023-01-12 09:45:00,131.2500,131.6240,130.5380,131.4010,3848820\r\n2023-01-12
09:30:00,132.9370,133.3520,131.2240,131.2320,5781275\r\n2023-01-11 15:45:00,132.0230,132.6070,131.8690,132.5730,5987351\r\n2023-01-11
15:30:00,132.0230,132.0610,131.7500,132.0320,1705148\r\n2023-01-11 15:15:00,131.8990,132.1600,131.8890,132.0190,1463953\r\n2023-01-11
15:00:00,131.6260,132.0210,131.5860,131.9080,1612124\r\n2023-01-11 14:45:00,131.8980,131.9220,131.4920,131.6290,1128502\r\n2023-01-11
14:30:00,131.5050,131.9710,131.4120,131.8990,1342064\r\n2023-01-11 14:15:00,131.4770,131.7530,131.4420,131.5050,1185374\r\n2023-01-11
14:00:00,131.5070,131.5540,131.2580,131.4760,1155058\r\n2023-01-11 13:45:00,131.5660,131.6040,131.3030,131.5010,1085825\r\n2023-01-11
13:30:00,131.9020,131.9760,131.5310,131.5700,1208250\r\n2023-01-11 13:15:00,132.1770,132.2000,131.5020,131.8980,1413961\r\n2023-01-11
13:00:00,131.8540,132.3390,131.8260,132.1730,1760838\r\n2023-01-11 12:45:00,131.6900,132.0310,131.6700,131.8480,1149297\r\n2023-01-11
12:30:00,131.8940,132.0210,131.6010,131.6990,1778715\r\n2023-01-11 12:15:00,131.6650,131.9610,131.5760,131.8980,1762701\r\n2023-01-11
12:00:00,131.3970,131.7330,131.3220,131.6690,1552365\r\n2023-01-11 11:45:00,131.1390,131.4750,131.0750,131.3910,1619366\r\n2023-01-11
11:30:00,130.7820,131.1760,130.5680,131.1380,1610293\r\n2023-01-11 11:15:00,130.7390,130.8990,130.6970,130.7900,1310190\r\n2023-01-11
11:00:00,130.5830,130.7990,130.4740,130.7440,1602640\r\n2023-01-11 10:45:00,130.3840,130.8190,130.3300,130.5820,2102564\r\n2023-01-11
10:30:00,131.1190,131.1770,130.1910,130.3980,2607748\r\n2023-01-11 10:15:00,130.4740,131.2150,130.2700,131.1230,3144073\r\n2023-01-11
10:00:00,130.0020,130.6010,129.5950,130.4680,2645272\r\n2023-01-11 09:45:00,129.9770,130.6400,129.6740,129.9890,2976233\r\n2023-01-11
09:30:00,130.3450,130.7000,129.5650,129.9910,4522200\r\n2023-01-10 15:45:00,129.2120,129.8660,129.1410,129.8620,3453530\r\n2023-01-10
15:30:00,129.2520,129.4880,129.1180,129.2160,1458131\r\n2023-01-10 15:15:00,129.1330,129.3690,129.1080,129.2660,1355369\r\n2023-01-10
15:00:00,129.2270,129.2550,128.8700,129.1420,1511889\r\n2023-01-10 14:45:00,129.2170,129.3190,129.0880,129.2310,1185254\r\n2023-01-10
14:30:00,129.4800,129.5380,129.1580,129.2210,1117021\r\n2023-01-10 14:15:00,129.5450,129.6520,129.2870,129.4750,1402732\r\n2023-01-10
14:00:00,129.3410,129.8060,129.3370,129.5540,1898998\r\n2023-01-10 13:45:00,128.9190,129.3890,128.9050,129.3400,1924753\r\n2023-01-10
13:30:00,128.7650,129.1310,128.6810,128.9280,1215419\r\n2023-01-10 13:15:00,128.7750,128.9020,128.5320,128.7790,1378739\r\n2023-01-10
13:00:00,128.8450,129.1210,128.7210,128.7840,1838773\r\n2023-01-10 12:45:00,128.6860,128.9820,128.5820,128.8490,1003492\r\n2023-01-10
12:30:00,128.2290,128.9420,128.1660,128.7000,1493521\r\n2023-01-10 12:15:00,128.2690,128.3660,128.0850,128.2430,1271746\r\n2023-01-10
12:00:00,127.9910,128.3660,127.5690,128.2820,1736393\r\n2023-01-10 11:45:00,128.0400,128.2070,127.7770,128.0040,1613180\r\n2023-01-10
11:30:00,128.1400,128.3160,127.8870,128.0490,1312371\r\n2023-01-10 11:15:00,128.1500,128.3560,127.8470,128.1530,1892243\r\n2023-01-10
11:00:00,128.2190,128.3260,127.9160,128.1430,1987704\r\n2023-01-10 10:45:00,127.3450,128.3260,127.2410,128.2130,2569791\r\n2023-01-10
10:30:00,128.5170,128.5250,127.3520,127.3600,2983706\r\n2023-01-10 10:15:00,129.4520,129.9520,128.4430,128.5310,2795482\r\n2023-01-10
10:00:00,129.1030,129.7870,128.7210,129.4540,2942621\r\n2023-01-10 09:45:00,129.2070,129.5280,128.6220,129.1070,3409102\r\n2023-01-10
09:30:00,129.3910,130.3760,128.9050,129.2160,4395905\r\n2023-01-09 15:45:00,129.6190,129.6370,128.9990,129.3050,3582553\r\n2023-01-09
15:30:00,129.5600,129.6870,129.2670,129.6130,1778658\r\n2023-01-09 15:15:00,129.4770,129.8160,129.4460,129.5590,1566557\r\n2023-01-09
15:00:00,129.7880,129.9350,129.4660,129.4840,1533054\r\n2023-01-09 14:45:00,130.1960,130.2730,129.6940,129.7820,1401037\r\n2023-01-09
14:30:00,130.5930,130.6770,130.0520,130.1990,1517874\r\n2023-01-09 14:15:00,130.5680,130.7690,130.3990,130.6020,1619617\r\n2023-01-09
14:00:00,130.4930,130.8350,130.3410,130.5770,2115867\r\n2023-01-09 13:45:00,130.7220,130.7350,130.2900,130.5020,1882895\r\n2023-01-09
13:30:00,131.5910,131.6140,130.6670,130.7260,1901786\r\n2023-01-09 13:15:00,131.5170,131.6720,131.4420,131.5950,1053537\r\n2023-01-09
13:00:00,131.5560,131.7430,131.3530,131.5200,1217802\r\n2023-01-09 12:45:00,131.3580,131.6340,131.3480,131.5590,1062284\r\n2023-01-09
12:30:00,131.8340,131.9320,131.3430,131.3610,1151819\r\n2023-01-09 12:15:00,131.9040,131.9430,131.6900,131.8430,1207244\r\n2023-01-09
12:00:00,132.0330,132.0560,131.6610,131.9180,1424082\r\n2023-01-09 11:45:00,132.0610,132.2200,131.8990,132.0420,1413133\r\n2023-01-09
11:30:00,132.1820,132.2790,131.8890,132.0670,1784388\r\n2023-01-09 11:15:00,132.3210,132.5080,132.0580,132.1810,2077028\r\n2023-01-09
11:00:00,131.8340,132.4380,131.7600,132.3050,2311810\r\n2023-01-09 10:45:00,131.8240,132.2390,131.7500,131.8380,2441800\r\n2023-01-09
10:30:00,131.6700,131.9390,131.5550,131.8330,2233026\r\n2023-01-09 10:15:00,131.2430,131.8370,131.0550,131.6640,3068089\r\n2023-01-09
10:00:00,131.1090,131.7330,131.0660,131.2320,3445151\r\n2023-01-09 09:45:00,130.1560,131.1670,130.1470,131.1180,3518419\r\n2023-01-09
09:30:00,129.5900,130.5510,129.5700,130.1600,5025104\r\n2023-01-06 15:45:00,128.9140,129.0910,128.4530,128.6200,6354069\r\n2023-01-06
15:30:00,128.9290,129.1700,128.8650,128.9180,2525589\r\n2023-01-06 15:15:00,129.1130,129.2350,128.8100,128.9280,2147402\r\n2023-01-06
15:00:00,128.9640,129.4090,128.9190,129.1120,2938553\r\n2023-01-06 14:45:00,128.8940,129.1110,128.7210,128.9670,2026129\r\n2023-01-06
14:30:00,128.4570,128.9820,128.4180,128.8880,2234996\r\n2023-01-06 14:15:00,128.2790,128.6740,128.2290,128.4560,2248827\r\n2023-01-06
14:00:00,127.9710,128.3660,127.9000,128.2810,1971350\r\n2023-01-06 13:45:00,127.7470,128.0080,127.6480,127.9700,1230499\r\n2023-01-06
13:30:00,127.3650,127.8890,127.3600,127.7560,1691721\r\n2023-01-06 13:15:00,127.3100,127.5310,127.1810,127.3790,1132078\r\n2023-01-06
13:00:00,127.0870,127.4320,127.0130,127.3180,1332157\r\n2023-01-06 12:45:00,127.2250,127.3330,126.9030,127.0910,1294385\r\n2023-01-06
12:30:00,127.4460,127.5220,127.1520,127.2250,1443007\r\n2023-01-06 12:15:00,127.3100,127.6110,127.1320,127.4580,1651090\r\n2023-01-06
12:00:00,127.0170,127.4920,127.0030,127.3090,1931796\r\n2023-01-06 11:45:00,126.4910,127.1540,126.4370,127.0110,2060642\r\n2023-01-06
11:30:00,126.3820,126.8260,126.1390,126.4850,2155018\r\n2023-01-06 11:15:00,126.5160,126.7830,126.2880,126.3800,1787798\r\n2023-01-06
11:00:00,126.5750,127.1740,126.4370,126.5150,2734482\r\n2023-01-06 10:45:00,126.1930,126.6470,126.1640,126.5440,2136941\r\n2023-01-06
10:30:00,125.5130,126.6380,125.4730,126.1870,2610878\r\n2023-01-06 10:15:00,125.9250,126.4890,125.3840,125.5160,2660372\r\n2023-01-06
10:00:00,124.9420,126.3890,124.9370,125.9240,4373930\r\n2023-01-06 09:45:00,124.1070,125.8330,124.0630,124.9450,3777542\r\n2023-01-06
09:30:00,125.1400,126.3300,124.0330,124.1210,6070023\r\n2023-01-05 15:45:00,124.2270,124.4230,123.9040,124.1810,5635648\r\n2023-01-05
15:30:00,124.3160,124.4520,124.1420,124.2250,2448840\r\n2023-01-05 15:15:00,124.3090,124.5120,124.1720,124.3100,2082922\r\n2023-01-05
15:00:00,124.6290,124.6810,124.1720,124.3150,2384281\r\n2023-01-05 14:45:00,125.0610,125.2870,124.6140,124.6270,2445827\r\n2023-01-05
14:30:00,125.0310,125.5250,125.0160,125.0740,1644570\r\n2023-01-05 14:15:00,125.2000,125.3660,124.9470,125.0330,1147697\r\n2023-01-05
14:00:00,125.4180,125.6150,125.1550,125.1940,1344445\r\n2023-01-05 13:45:00,125.6670,125.7040,125.3140,125.4120,1195432\r\n2023-01-05
13:30:00,125.6270,126.1810,125.5830,125.6620,1881027\r\n2023-01-05 13:15:00,124.9520,126.0120,124.9370,125.6210,2540822\r\n2023-01-05
13:00:00,125.3840,125.4140,124.9470,124.9630,1339449\r\n2023-01-05 12:45:00,125.4880,125.6190,125.3140,125.3900,931652\r\n2023-01-05
12:30:00,125.6370,125.9420,125.4340,125.4920,1089572\r\n2023-01-05 12:15:00,125.6960,125.7730,125.3340,125.6440,1292385\r\n2023-01-05
12:00:00,125.8160,126.0960,125.6320,125.7000,1352333\r\n2023-01-05 11:45:00,126.0490,126.2200,125.7510,125.8190,1653343\r\n2023-01-05
11:30:00,125.6870,126.0910,125.5630,126.0530,2128183\r\n2023-01-05 11:15:00,125.9350,126.0810,125.4530,125.7000,1723457\r\n2023-01-05
11:00:00,125.5570,126.1410,125.2850,125.9340,2088956\r\n2023-01-05 10:45:00,126.0140,126.1710,125.4140,125.5610,2108908\r\n2023-01-05
10:30:00,125.9050,126.0910,125.2950,126.0180,2943035\r\n2023-01-05 10:15:00,126.2230,126.3400,125.7710,125.8990,2681010\r\n2023-01-05
10:00:00,126.5010,126.9060,126.0390,126.2460,3669287\r\n2023-01-05 09:45:00,124.9910,126.6270,124.5990,126.5150,4995536\r\n2023-01-05
09:30:00,126.2630,126.3000,124.4600,125.0050,5613002\r\n2023-01-04 15:45:00,124.5150,125.6240,124.4210,125.5210,4882683\r\n2023-01-04
15:30:00,124.9610,125.0880,124.4210,124.5180,2596098\r\n2023-01-04 15:15:00,125.4880,125.6840,124.9570,124.9850,2132671\r\n2023-01-04
15:00:00,125.6070,125.9920,125.3740,125.4950,1965013\r\n2023-01-04 14:45:00,124.9520,125.6540,124.8380,125.6140,2090591\r\n2023-01-04
14:30:00,124.8620,125.2470,124.5200,124.9470,2788347\r\n2023-01-04 14:15:00,125.8450,126.4790,124.7580,124.8710,3016051\r\n2023-01-04
14:00:00,126.3020,127.0050,125.4140,125.8590,3477195\r\n2023-01-04 13:45:00,126.5410,126.6180,126.1980,126.3270,1069981\r\n2023-01-04
13:30:00,126.3970,126.6260,126.3570,126.5510,964507\r\n2023-01-04 13:15:00,126.3520,126.6380,126.3080,126.3950,1030293\r\n2023-01-04
13:00:00,126.3670,126.4390,126.0590,126.3560,1376606\r\n2023-01-04 12:45:00,127.0460,127.0540,126.3570,126.3660,1270344\r\n2023-01-04
12:30:00,127.2010,127.3530,126.8840,127.0510,1124897\r\n2023-01-04 12:15:00,127.2160,127.7850,127.1520,127.1950,1844230\r\n2023-01-04
12:00:00,126.8980,127.3030,126.8440,127.2160,1512221\r\n2023-01-04 11:45:00,127.2460,127.2730,126.8640,126.9020,1749357\r\n2023-01-04
11:30:00,126.5210,127.5710,126.5060,127.2500,3407396\r\n2023-01-04 11:15:00,126.2230,126.6380,126.0990,126.5150,2253557\r\n2023-01-04
11:00:00,126.0940,126.2550,125.6320,126.2230,2088713\r\n2023-01-04 10:45:00,125.7350,126.1610,125.7170,126.1270,2471002\r\n2023-01-04
10:30:00,125.1300,125.8830,124.4740,125.7400,2750473\r\n2023-01-04 10:15:00,124.8820,125.1480,124.6090,125.1420,2828869\r\n2023-01-04
10:00:00,125.7760,126.4790,124.2220,124.8660,5121969\r\n2023-01-04 09:45:00,125.3040,125.9990,125.0760,125.7990,4056481\r\n2023-01-04
09:30:00,126.0240,126.6920,125.2650,125.3070,8179169\r\n2023-01-03 15:45:00,124.1370,124.5720,123.9540,124.2000,6493878\r\n2023-01-03
15:30:00,123.7800,124.1540,123.7700,124.1310,2933961\r\n2023-01-03 15:15:00,123.8590,124.1840,123.6860,123.7730,2645981\r\n2023-01-03
15:00:00,123.7800,123.9760,123.5470,123.8530,2165456\r\n2023-01-03 14:45:00,123.9680,124.4820,123.5860,123.7820,3196386\r\n2023-01-03
14:30:00,123.7280,124.0150,123.3180,123.9620,2152954\r\n2023-01-03 14:15:00,123.8190,123.9760,123.5660,123.7240,1509326\r\n2023-01-03
14:00:00,123.9680,124.1540,123.7650,123.8230,1688964\r\n2023-01-03 13:45:00,123.7600,123.9960,123.3380,123.9670,2134910\r\n2023-01-03
13:30:00,123.8190,123.9860,123.6560,123.7730,1525935\r\n2023-01-03 13:15:00,123.4420,123.8960,123.3380,123.8030,1892722\r\n2023-01-03
13:00:00,123.7500,123.9160,123.3580,123.4410,1700993\r\n2023-01-03 12:45:00,123.8040,123.8560,123.4970,123.7440,1995756\r\n2023-01-03
12:30:00,123.8090,124.0950,123.7060,123.8130,1632983\r\n2023-01-03 12:15:00,124.1270,124.1400,123.4960,123.8130,2260197\r\n2023-01-03
12:00:00,123.8990,124.2090,123.8350,124.1310,2027857\r\n2023-01-03 11:45:00,124.1070,124.1450,123.6360,123.8950,3044469\r\n2023-01-03
11:30:00,124.4950,124.5220,123.9740,124.1170,2546604\r\n2023-01-03 11:15:00,123.9780,124.6110,123.9050,124.4930,2773011\r\n2023-01-03
11:00:00,124.7380,125.0190,123.8740,123.9790,4858972\r\n2023-01-03 10:45:00,124.5140,124.8750,124.3710,124.7420,3326033\r\n2023-01-03
10:30:00,124.6040,124.9290,124.1920,124.4980,4825857\r\n2023-01-03 10:15:00,125.0610,125.2020,124.3710,124.6080,4607743\r\n2023-01-03
10:00:00,126.0740,126.4390,124.9170,125.0590,4751302\r\n2023-01-03 09:45:00,128.9940,129.2500,126.0100,126.0710,6031150\r\n2023-01-03
09:30:00,129.3610,130.0150,128.5520,129.0030,7092582\r\n"
headers:
Allow:
- GET, HEAD, OPTIONS
CF-Cache-Status:
- DYNAMIC
CF-RAY:
- 89a4a7dcad090b38-AMS
Connection:
- keep-alive
Content-Disposition:
- attachment; filename=intraday_15min_AAPL.csv
Content-Length:
- '33793'
Content-Type:
- application/x-download
Cross-Origin-Opener-Policy:
- same-origin
Date:
- Thu, 27 Jun 2024 10:11:55 GMT
Nel:
- '{"report_to":"heroku-nel","max_age":3600,"success_fraction":0.005,"failure_fraction":0.05,"response_headers":["Via"]}'
Referrer-Policy:
- same-origin
Report-To:
- '{"group":"heroku-nel","max_age":3600,"endpoints":[{"url":"https://nel.heroku.com/reports?ts=1719483115&sid=1b10b0ff-8a76-4548-befa-353fc6c6c045&s=I%2Fdorp9afZLGsHjST0hUutGGulH8RfOo3mqJP0ca6cw%3D"}]}'
Reporting-Endpoints:
- heroku-nel=https://nel.heroku.com/reports?ts=1719483115&sid=1b10b0ff-8a76-4548-befa-353fc6c6c045&s=I%2Fdorp9afZLGsHjST0hUutGGulH8RfOo3mqJP0ca6cw%3D
Server:
- cloudflare
Vary:
- Cookie, Origin
Via:
- 1.1 vegur
X-Content-Type-Options:
- nosniff
X-Frame-Options:
- DENY
status:
code: 200
message: OK
version: 1

View File

@@ -1,195 +0,0 @@
interactions:
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://www.alphavantage.co/query?apikey=MOCK_API_KEY&function=EARNINGS&symbol=AAPL
response:
body:
string: !!binary |
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
mObT8/J6AwAA//8DAMRmGsH/jQAA
headers:
Allow:
- GET, HEAD, OPTIONS
CF-Cache-Status:
- DYNAMIC
CF-RAY:
- 89a4a7e3dd980e10-AMS
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Cross-Origin-Opener-Policy:
- same-origin
Date:
- Thu, 27 Jun 2024 10:11:56 GMT
Nel:
- '{"report_to":"heroku-nel","max_age":3600,"success_fraction":0.005,"failure_fraction":0.05,"response_headers":["Via"]}'
Referrer-Policy:
- same-origin
Report-To:
- '{"group":"heroku-nel","max_age":3600,"endpoints":[{"url":"https://nel.heroku.com/reports?ts=1719483116&sid=1b10b0ff-8a76-4548-befa-353fc6c6c045&s=VvE1FMSjgc8ZK9stjN0j9fAim74NZBpZJko2Ddrcx%2BM%3D"}]}'
Reporting-Endpoints:
- heroku-nel=https://nel.heroku.com/reports?ts=1719483116&sid=1b10b0ff-8a76-4548-befa-353fc6c6c045&s=VvE1FMSjgc8ZK9stjN0j9fAim74NZBpZJko2Ddrcx%2BM%3D
Server:
- cloudflare
Transfer-Encoding:
- chunked
Vary:
- Cookie, Origin
Via:
- 1.1 vegur
X-Content-Type-Options:
- nosniff
X-Frame-Options:
- DENY
status:
code: 200
message: OK
- request:
body: null
headers:
Accept:
- application/json
Accept-Encoding:
- gzip, deflate
Connection:
- keep-alive
method: GET
uri: https://www.alphavantage.co/query?apikey=MOCK_API_KEY&function=EARNINGS&symbol=MSFT
response:
body:
string: !!binary |
H4sIAAAAAAAAA7yYTU/bQBCG7/0VUc54NR/7ybn0VgkJblUPLrgoamKobQ4I9b9XMYgiVLJvGeqc
Imfkx/t45l079x9Wq9VqPd7tvl1v18er9eezT+fro4ejbd/fttuTdug3/dW4Pl59mY/vP/dP3+bK
75vxot1+bKfupL/c9Ff7MwmJb0gb5cfzPVUP3c31MHWXJ6dn+8Lsclw/Vfw6+keINhQbpQqkuMwG
iIAQMTAYYiRXkgFCECS4FN4O4QJBvA2SIYi6nA2QBELU0FwcIYi4ZBgTDiDEcks8yIhqgCgKMYwJ
C3pLLCthdCXFACEQYmhgwuadneGOUAYZlnGnBEK84Y5QBCFi0RVAiKF/yaMLMeQWKQghQ3ARNu7k
ikUXoxDLKBIIyW9uLi6lgJDEBkgGIT4aIAmEqBogEYQIP+/h+dvXx0fxn7ftMHXD9u7/PY3v6/9U
+kZCdc8o/mVJN06bXfu8JsvLmvF2uBk2Y/ewaH7199NuuOj6qb3qHp4WJQT9+yWdb3Zzzc31ODW7
dvjRTaYXChbYEyN7a9G6p5QrngLmKTgtIS3jicqB1T/zpA1TI77uqdQ9xXDYk3rME4vLSrKQqIiK
ooQMXgREhYoo9mhD+bKYJzCgFAwoH+qeRA97EjCgissxhCU8CRxQug8oYPBUAE/lsCdScPDca5f+
3pbQeJI5nurdpEA3VZqJwBQXx0nLQpoiqmkfTrGqSdTaTA05ipioRlwUWqqhwHiSOZ4AU8DY8fuN
XSyLdBTD8SRzPAExnoHB48p2lzBPyWkouownNKB4Diign1LdE6XKdofudjFyXkhTRDXtAyrV/+qq
amJXKq8tAgY5qyOhpUSB+cRzPqXqfyol1EVV31sS2lAhUFzCE8H5xHM+1eeOtO4p+sp7SwGfDNSl
TGEZUWhA0RxQ9YbKUhcVKqIkg5OXHWdLRP0GAAD//+SdPW40NxBEc5/CF1iif8gm5zAOfQHnvrsx
M4kFrcEnb6Ox0pcpUKIHslisrqF+zxqqfQB1SpTtA+bYg/Kek6ysdoxhRZygQsmlUMee0x6TRc49
WLWpaoXT1AMrlFwKtec0FKynXVIHFUp786Pk8nIOmplCnUjlYb6fhyywonbJCrXk0noRpaCUZD7+
SzP/TQk4KNsZ8sAOysyL9h3Up/M3+z5Y0Sfi8glUkjqVrKRFhekEpGRsB3RJdjdgZYjOydoswkRl
aaFknKwjacfuoOPGaY4iTEExnbq0P+YUGHFZORFdb2FHFHGCsrRQ8CTgYidt7U45bJtm9IqBlE6s
TutSJ91zCsApsjiFzaOGE5WniYInaQvI00waBGu0iChaUFSg5nWvA92OBUBtLIHBRMVXE1tWBAoq
1ETRk5zFuj2onGS8N1slE3MNLFATJU9w4x05B140t0NrOFGBikugQBMJCHnsjMF6uxMvsEAFclAC
mgXSxi7yVWw0j5qR+fnnQ4GKS6D21iAMrKi+m3LCM+/hTa0E1MASFZdErf3WSzjyBA8R1jishhOV
qHFJlO0X1AQ770iSKG+jZsq5++7gA6jTQ4GdBzhtPLl0OgzWbkcRJihQ4xIo32NSwElz7i5HC5kV
oxbtWJ8GtFBzJOgT7tKFexEnqk8dJePyZC73mVNPspoqzaRrEaigoMjsTp4UL584g50xgKAeq7n7
Tsj/+jOFExSojrLxZ377CaekPt1sh8cowITL43qVx8G+I/5pd3VRPLmbMo4STFSeWHec+fFdtQDb
p96W9lXDKSgnMrqTFsA+zbGTJzgKfqjVQILSdPXGAaRpCXEB9gRrWS/AhGvjymrjLFWZI2d6p1UH
He6N69UbB6tp+Ks3lgdPMx+j+ZhaAyooKBg+gStwWI4jWE2ijxpMUJ2u2jjBBJZTUjY+moVXaDgu
jetVGgeUUO60ywlgPnc+aaBRgomKk8JkPF63l7B+UYMnKB4YNr1dHp7ECWrSXRVfOWlTZEn3Yati
t+GmuN5NcTDWnAnG8uDFOR9ewomq0l0UXzm3uZEzNFBr02YRp6CcYNYEtl2PtFBuxVGz76g83T3x
PacOMrluOZ4JDQ0SMAmuiavQWV1/fQZFHyqw0br5LOEE5UkOmIUDTLs2Pc2abNQQCkroFKY9IQeX
FI/vYSsF98LlgMM5B7bSj2+CB7fC5WqFE7mer86avlKu6E1Wxe1NcC9cFhUicHvrMyeBs6Y2Zw2m
oJjOYGlvu3u8iunBOT0qQUFdWnAmhzZez/FJ0ZaugmxJcC9cFgy+R4Lr7vSyG/v3nHIoUXGa6L0U
Zrp91xigX4mN5qtHDaegnFjs/aPMAK6Cy4Qfq/QjYbdhTRqmFbsNV8FlokdS5Ml3zp8x7d66wo/J
eJPuo4QTVaWA36o4UaWkvpdaO6RifiK4CS4BP1VxEC15jrP0otmu4Bq4BPxOxUFQ6Z7lLL2JSwUo
XAOXgDVL91dBvdEhh9vfMtDLKD9zt+Hqt9DqN9ptmoXJbKwaTFCUBhzGIUz2TfYabnzLgEM45AA8
pxkQTUKiBBOVpLvwrb+kJOG2t9C2t4EEbv/aJTcAva8iUFCUOhzBeX8V1BdGlbNZ14JSpeC+t3SY
fRNOnnQ9Kdt3uO8tDpNvT1hNWJ2KNh1ue4vD4NsIpp6lTr3p/mWGJFBQne7GN0hP5qugvpCeWKuI
TnDfW66+t0YOpCxtms0P9RJOVJvuwvfM8QRJnzx7mYbjvrcY/BbF9GVO73NPwT1vMfgVioF7yuYt
wvfBgwveche8Zw6erCD3aNJnlHCiaqTw8xMDaYDl3Ha1ZiVRHVI4gEOEkmKl3mboUYMJ6pHC705+
JCbc8Zar4032W09wSRiT97lKMFFZEipLnrCa8H8rGOZFmIJigh7pZ246qk13wVt+rUPu+heLVJYk
U5Y06YaL3tTL4YR06SYq5JRTUDfRmbSU0FNxSZyCcoKmCWBaaZjA0/tJmIgw3b+JhAktp6T2Enm5
OYMSLHzflNDHugoSEx05lExKEFFdWvBDXfIEuGYdceiN3SROQTmdurQPKdUTOCkt51Zkb/cfD3Vp
wXHcj8Q0sTDdTe/9EFxBRJnkvkt85cS6NKEuCTjg5Fu0l/f/D/wDHjaBe3n9vBUcKEJXtTsHjiR5
SKswRoH1Z8KQW8DITSJJgMpO/cAqFLCsJPEyp/fZaIFVKGBLScCsRL7FKOn+o6EOBZy0odWT9JDZ
/7p+XD/98dvf/wAAAP//AwCb9eTasI0AAA==
headers:
Allow:
- GET, HEAD, OPTIONS
CF-Cache-Status:
- DYNAMIC
CF-RAY:
- 89a4a7e3df059fa0-AMS
Connection:
- keep-alive
Content-Encoding:
- gzip
Content-Type:
- application/json
Cross-Origin-Opener-Policy:
- same-origin
Date:
- Thu, 27 Jun 2024 10:11:56 GMT
Nel:
- '{"report_to":"heroku-nel","max_age":3600,"success_fraction":0.005,"failure_fraction":0.05,"response_headers":["Via"]}'
Referrer-Policy:
- same-origin
Report-To:
- '{"group":"heroku-nel","max_age":3600,"endpoints":[{"url":"https://nel.heroku.com/reports?ts=1719483116&sid=1b10b0ff-8a76-4548-befa-353fc6c6c045&s=VvE1FMSjgc8ZK9stjN0j9fAim74NZBpZJko2Ddrcx%2BM%3D"}]}'
Reporting-Endpoints:
- heroku-nel=https://nel.heroku.com/reports?ts=1719483116&sid=1b10b0ff-8a76-4548-befa-353fc6c6c045&s=VvE1FMSjgc8ZK9stjN0j9fAim74NZBpZJko2Ddrcx%2BM%3D
Server:
- cloudflare
Transfer-Encoding:
- chunked
Vary:
- Cookie, Origin
Via:
- 1.1 vegur
X-Content-Type-Options:
- nosniff
X-Frame-Options:
- DENY
status:
code: 200
message: OK
version: 1

View File

@@ -1,48 +0,0 @@
"""Test the Alpha Vantage fetchers."""
from datetime import date
import pytest
from openbb_alpha_vantage.models.equity_historical import AVEquityHistoricalFetcher
from openbb_alpha_vantage.models.historical_eps import AVHistoricalEpsFetcher
from openbb_core.app.service.user_service import UserService
test_credentials = UserService().default_user_settings.credentials.model_dump(
mode="json"
)
@pytest.fixture(scope="module")
def vcr_config():
"""VCR configuration."""
return {
"filter_headers": [("User-Agent", None)],
"filter_query_parameters": [
("apikey", "MOCK_API_KEY"),
],
}
@pytest.mark.record_http
def test_av_equity_historical_fetcher(credentials=test_credentials):
"""Test the Alpha Vantage Equity Historical fetcher."""
params = {
"symbol": "AAPL",
"start_date": date(2023, 1, 1),
"end_date": date(2023, 1, 10),
"interval": "15m",
}
fetcher = AVEquityHistoricalFetcher()
result = fetcher.test(params, credentials)
assert result is None
@pytest.mark.record_http
def test_av_historical_eps_fetcher(credentials=test_credentials):
"""Test the Alpha Vantage Historical Earnings fetcher."""
params = {"symbol": "AAPL,MSFT", "period": "quarter", "limit": 4}
fetcher = AVHistoricalEpsFetcher()
result = fetcher.test(params, credentials)
assert result is None

View File

@@ -2,7 +2,6 @@
test_credentials: dict[str, tuple[str, str]] = {
"benzinga": ("token", "MOCK_TOKEN"),
"alpha_vantage": ("apikey", "MOCK_API_KEY"),
"fmp": ("apikey", "MOCK_API_KEY"),
"nasdaq": ("x-api-token", "MOCK_API_KEY"),
"fred": ("api_key", "MOCK_API_KEY"),

View File

@@ -64,7 +64,6 @@ openbb-technical = { version = "^1.6.2", optional = true }
openbb-mcp-server = { version = "^1.4.1", optional = true }
[tool.poetry.extras]
alpha_vantage = ["openbb-alpha-vantage"]
cboe = ["openbb-cboe"]
charting = ["openbb-charting"]
deribit = ["openbb-deribit"]