Compare commits
83 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
41c6a4bae2 | ||
|
|
56cfbd5828 | ||
|
|
27cb8aa2a2 | ||
|
|
bf94ae937b | ||
|
|
496d238bfa | ||
|
|
ce4c07be1f | ||
|
|
f984876b35 | ||
|
|
8d6188c926 | ||
|
|
12e1951f80 | ||
|
|
47a8f64ff7 | ||
|
|
0f1d091ac8 | ||
|
|
42411d44df | ||
|
|
b0e855e7ec | ||
|
|
ea455c16a5 | ||
|
|
3e33a75230 | ||
|
|
0df671b566 | ||
|
|
03ec05d286 | ||
|
|
5c7b41d510 | ||
|
|
d12c4b3c8c | ||
|
|
d1c69e1d38 | ||
|
|
6d07669ba1 | ||
|
|
bed8959381 | ||
|
|
7fba9cff58 | ||
|
|
b0cae4dce1 | ||
|
|
a6e26a8802 | ||
|
|
906d6f12c3 | ||
|
|
d1aa6befe2 | ||
|
|
7ce5bab562 | ||
|
|
fcb951bf71 | ||
|
|
0e157d5928 | ||
|
|
50bf706ce8 | ||
|
|
5d9f73222f | ||
|
|
4f38ecfea0 | ||
|
|
d2ebd0e642 | ||
|
|
39c2f76c1a | ||
|
|
428919b701 | ||
|
|
70d9b44af9 | ||
|
|
ec5f1c2470 | ||
|
|
ebdfbb7d18 | ||
|
|
3d92f04f47 | ||
|
|
f484539920 | ||
|
|
01c9bd13d8 | ||
|
|
d48230938d | ||
|
|
146a2a3957 | ||
|
|
fc0bde214a | ||
|
|
173ab2d811 | ||
|
|
8cca819fd6 | ||
|
|
bc67252d4b | ||
|
|
f2d617b948 | ||
|
|
4e4b0af3ef | ||
|
|
04ba66083e | ||
|
|
bd327694c5 | ||
|
|
99b2db69e0 | ||
|
|
5a6efdf773 | ||
|
|
4ff80a57d4 | ||
|
|
441ae8d677 | ||
|
|
8b71e6cc05 | ||
|
|
bc40e84461 | ||
|
|
ead4ed7ee7 | ||
|
|
2e0ad642c1 | ||
|
|
54b37a403c | ||
|
|
a04a4ea475 | ||
|
|
9f0d3fd12d | ||
|
|
3596924fe2 | ||
|
|
4259760bea | ||
|
|
9a6c82aea6 | ||
|
|
bdb2fecf1e | ||
|
|
0b0b60e535 | ||
|
|
733091ad6c | ||
|
|
ea4dc2d22a | ||
|
|
b29cc269c6 | ||
|
|
8db46f2b12 | ||
|
|
f8e75b3aaf | ||
|
|
8f04f91e2b | ||
|
|
4a1e1a9fb2 | ||
|
|
a05a759852 | ||
|
|
9b7f53689b | ||
|
|
31109b2a2a | ||
|
|
8e88aec77d | ||
|
|
068e6b04db | ||
|
|
90575a029f | ||
|
|
5bbd3d096c | ||
|
|
b8b04b5345 |
12
.github/ISSUE_TEMPLATE/bug_report.yaml
vendored
12
.github/ISSUE_TEMPLATE/bug_report.yaml
vendored
@@ -18,7 +18,15 @@ body:
|
||||
|
||||
Are you spelling symbol *exactly* same as Yahoo?
|
||||
|
||||
Then visit `finance.yahoo.com` and confirm they have the data you want. Maybe your symbol was delisted, or your expectations of `yfinance` are wrong.
|
||||
Then visit `finance.yahoo.com` and confirm they have the data you want. Maybe your symbol was delisted.
|
||||
|
||||
### Data is wrong
|
||||
|
||||
**yfinance is not affiliated with Yahoo**. If Yahoo Finance website data is bad, tell Yahoo: https://help.yahoo.com/kb/finance-for-web/report-problems-feedback-ideas-yahoo-finance-sln28397.html.
|
||||
|
||||
But if yfinance is creating error during processing, then finish this form.
|
||||
|
||||
For price errors, try price repair: https://ranaroussi.github.io/yfinance/advanced/price_repair.html
|
||||
|
||||
### Are you spamming Yahoo?
|
||||
|
||||
@@ -63,7 +71,7 @@ body:
|
||||
id: bad-data-proof
|
||||
attributes:
|
||||
label: "Bad data proof"
|
||||
description: "If `yfinance` returning bad data, show proof of good data here. Best proof is screenshot of finance.yahoo.com"
|
||||
description: "If yfinance returning bad data, show proof of good data on Yahoo Finance website here."
|
||||
validations:
|
||||
required: false
|
||||
|
||||
|
||||
12
.github/workflows/auto_close_default_issues.yml
vendored
12
.github/workflows/auto_close_default_issues.yml
vendored
@@ -13,18 +13,24 @@ jobs:
|
||||
script: |
|
||||
const issue = context.payload.issue;
|
||||
const body = issue.body || '';
|
||||
const title = issue.title || '';
|
||||
const textToCheck = (title + ' ' + body).toLowerCase();
|
||||
|
||||
// Check for specific fields from your custom form
|
||||
// Adjust these patterns based on your form structure
|
||||
const hasCustomFields = body.includes('### Describe bug') ||
|
||||
body.includes('### Simple code that reproduces');
|
||||
|
||||
if (!hasCustomFields) {
|
||||
// Check for bug-related keywords
|
||||
const bugKeywords = ['bug', 'problem', 'broken'];
|
||||
const looksBugReport = bugKeywords.some(keyword => textToCheck.includes(keyword));
|
||||
|
||||
// Only close if it looks like a bug report but doesn't use the template
|
||||
if (!hasCustomFields && looksBugReport) {
|
||||
await github.rest.issues.createComment({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
issue_number: issue.number,
|
||||
body: 'This issue appears to use the default template. Stop that. Use our custom bug report form.'
|
||||
body: 'This issue appears to be a bug report but doesn\'t use our bug report template. Resubmit with our custom bug report form..'
|
||||
});
|
||||
|
||||
await github.rest.issues.update({
|
||||
|
||||
2
.github/workflows/ruff.yml
vendored
2
.github/workflows/ruff.yml
vendored
@@ -12,4 +12,4 @@ jobs:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: astral-sh/ruff-action@v3
|
||||
with:
|
||||
args: check . --exclude yfinance/pricing_pb2.py
|
||||
args: check --ignore E702 . --exclude yfinance/pricing_pb2.py
|
||||
|
||||
@@ -1,6 +1,41 @@
|
||||
Change Log
|
||||
===========
|
||||
|
||||
1.0
|
||||
---
|
||||
yfinance been stable a long time now, time to grow up
|
||||
|
||||
No breaking changes, but some deprecation warnings.
|
||||
|
||||
Features:
|
||||
- New config class yf.config / Improve exception handling #2524
|
||||
- Feature: Earning Calendar (& other calendars) #2615 @ianmihura
|
||||
- Add optional retry mechanism for transient network errors #2627 @axisrow
|
||||
Fixes:
|
||||
- 'Industry' column names #2613 @danchev
|
||||
- Correct 30m interval alignment and filtering for NSE/early-open markets #2642 @biplavbarua
|
||||
- Screener's sector industry mapping #2648 @ericpien
|
||||
- Set period default to None in multi #2650 @evanreynolds9
|
||||
- price-div-repair dropping NaN rows #2651
|
||||
- Block curl_cffi version 0.14 #2653
|
||||
|
||||
|
||||
0.2.66
|
||||
------
|
||||
Screener: add Swiss exchange and industry field
|
||||
Support MIC #2579
|
||||
Fixes:
|
||||
- parse epoch dt #2573
|
||||
- earnings_dates #2591
|
||||
- merge intraday prices with divs/splits #2595
|
||||
- exceptions missing detail #2599
|
||||
|
||||
0.2.65
|
||||
------
|
||||
Financials: ensure dtype float #2563
|
||||
Prices: fix handling arguments start/end/period #2561 #2562
|
||||
Price repair: when changing FX, update metadata #2558
|
||||
|
||||
0.2.64
|
||||
------
|
||||
Prices:
|
||||
|
||||
@@ -6,11 +6,11 @@
|
||||
<a target="new" href="https://pypi.python.org/pypi/yfinance"><img border=0 src="https://img.shields.io/badge/python-2.7,%203.6+-blue.svg?style=flat" alt="Python version"></a>
|
||||
<a target="new" href="https://pypi.python.org/pypi/yfinance"><img border=0 src="https://img.shields.io/pypi/v/yfinance.svg?maxAge=60%" alt="PyPi version"></a>
|
||||
<a target="new" href="https://pypi.python.org/pypi/yfinance"><img border=0 src="https://img.shields.io/pypi/status/yfinance.svg?maxAge=60" alt="PyPi status"></a>
|
||||
<a target="new" href="https://pypi.python.org/pypi/yfinance"><img border=0 src="https://img.shields.io/pypi/dm/yfinance.svg?maxAge=2592000&label=installs&color=%2327B1FF" alt="PyPi downloads"></a>
|
||||
<a target="new" href="https://pypi.python.org/pypi/yfinance"><img border=0 src="https://img.shields.io/pypi/dm/yfinance.svg?maxAge=86400&label=installs&color=%2327B1FF" alt="PyPi downloads"></a>
|
||||
<a target="new" href="https://github.com/ranaroussi/yfinance"><img border=0 src="https://img.shields.io/github/stars/ranaroussi/yfinance.svg?style=social&label=Star&maxAge=60" alt="Star this repo"></a>
|
||||
<a target="new" href="https://x.com/intent/follow?screen_name=aroussi"><img border=0 src="https://img.shields.io/twitter/follow/aroussi.svg?style=social&label=Follow&maxAge=60" alt="Follow me on twitter"></a>
|
||||
|
||||
|
||||
<a href="https://trendshift.io/repositories/4578" target="_blank"><img src="https://trendshift.io/api/badge/repositories/4578" alt="ranaroussi%2Fyfinance | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>
|
||||
|
||||
**yfinance** offers a Pythonic way to fetch financial & market data from [Yahoo!Ⓡ finance](https://finance.yahoo.com).
|
||||
|
||||
@@ -53,7 +53,7 @@ Install `yfinance` from PYPI using `pip`:
|
||||
$ pip install yfinance
|
||||
```
|
||||
|
||||
### [yfinance relies on the community to investigate bugs and contribute code. Here's how you can help.](CONTRIBUTING.md)
|
||||
### [yfinance relies on the community to investigate bugs and contribute code. Here's how you can help.](https://github.com/ranaroussi/yfinance/blob/main/CONTRIBUTING.md)
|
||||
|
||||
---
|
||||
|
||||
@@ -64,7 +64,7 @@ $ pip install yfinance
|
||||
### Legal Stuff
|
||||
|
||||
**yfinance** is distributed under the **Apache Software License**. See
|
||||
the [LICENSE.txt](./LICENSE.txt) file in the release for details.
|
||||
the [LICENSE.txt](https://github.com/ranaroussi/yfinance/blob/main/LICENSE.txt) file in the release for details.
|
||||
|
||||
AGAIN - yfinance is **not** affiliated, endorsed, or vetted by Yahoo, Inc. It's
|
||||
an open-source tool that uses Yahoo's publicly available APIs, and is
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
.. currentmodule:: {{ module }}
|
||||
|
||||
.. autoclass:: {{ objname }}
|
||||
:exclude-members: {% for item in attributes %}{{ item }}{% if not loop.last %}, {% endif %}{% endfor %}
|
||||
|
||||
{% block attributes %}
|
||||
{% if attributes %}
|
||||
|
||||
@@ -2,14 +2,55 @@
|
||||
Config
|
||||
******
|
||||
|
||||
`yfinance` has a new global config for sharing common values.
|
||||
|
||||
Proxy
|
||||
-----
|
||||
|
||||
Set proxy once in config, affects all yfinance data fetches.
|
||||
`yfinance` has a new global config for sharing common values:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
import yfinance as yf
|
||||
yf.set_config(proxy="PROXY_SERVER")
|
||||
>>> import yfinance as yf
|
||||
>>> yf.config
|
||||
{
|
||||
"network": {
|
||||
"proxy": null,
|
||||
"retries": 0
|
||||
},
|
||||
"debug": {
|
||||
"hide_exceptions": true,
|
||||
"logging": false
|
||||
}
|
||||
}
|
||||
>>> yf.config.network
|
||||
{
|
||||
"proxy": null,
|
||||
"retries": 0
|
||||
}
|
||||
|
||||
|
||||
Network
|
||||
-------
|
||||
|
||||
* **proxy** - Set proxy for all yfinance data fetches.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
yf.config.network.proxy = "PROXY_SERVER"
|
||||
|
||||
* **retries** - Configure automatic retry for transient network errors. The retry mechanism uses exponential backoff (1s, 2s, 4s...).
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
yf.config.network.retries = 2
|
||||
|
||||
Debug
|
||||
-----
|
||||
|
||||
* **hide_exceptions** - Set to `False` to stop yfinance hiding exceptions.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
yf.config.debug.hide_exceptions = False
|
||||
|
||||
* **logging** - Set to `True` to enable verbose debug logging.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
yf.config.debug.logging = True
|
||||
|
||||
@@ -111,6 +111,7 @@ Fix errors in dividends:
|
||||
2. duplicate dividend (within 7 days)
|
||||
3. dividend 100x too big/small for the ex-dividend price drop
|
||||
4. ex-div date wrong (price drop is few days/weeks after)
|
||||
5. **NEW: capital gains double-counted**
|
||||
|
||||
Most errors I've seen are on London stock exchange (£/pence mixup), but no exchange is safe.
|
||||
|
||||
@@ -275,3 +276,27 @@ TETY.ST
|
||||
2022-06-21 00:00:00+02:00 71.599998 60.007881 0.0
|
||||
2022-06-20 00:00:00+02:00 71.800003 60.175503 0.0
|
||||
2022-06-17 00:00:00+02:00 71.000000 59.505021 0.0
|
||||
|
||||
|
||||
Capital-gains double-counted
|
||||
----------------------------
|
||||
|
||||
Clue: price drop matches dividend better than dividend+capital gains.
|
||||
|
||||
DODFX
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
# ORIGINAL:
|
||||
Close Adj Close Dividends Capital Gains
|
||||
Date
|
||||
2025-12-18 00:00:00-05:00 16.219999 16.219999 0.837 0.417
|
||||
2025-12-17 00:00:00-05:00 16.920000 15.665999 0.000 0.000
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
# REPAIRED:
|
||||
Close Adj Close Dividends Capital Gains
|
||||
Date
|
||||
2025-12-18 00:00:00-05:00 16.219999 16.219999 0.42 0.417
|
||||
2025-12-17 00:00:00-05:00 16.920000 16.083000 0.00 0.000
|
||||
|
||||
38
doc/source/reference/examples/calendars.py
Normal file
38
doc/source/reference/examples/calendars.py
Normal file
@@ -0,0 +1,38 @@
|
||||
import yfinance as yf
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
# Default init (today + 7 days)
|
||||
calendar = yf.Calendars()
|
||||
|
||||
# Today's events: calendar of 1 day
|
||||
tomorrow = datetime.now() + timedelta(days=1)
|
||||
calendar = yf.Calendars(end=tomorrow)
|
||||
|
||||
# Default calendar queries - accessing the properties will fetch the data from YF
|
||||
calendar.earnings_calendar
|
||||
calendar.ipo_info_calendar
|
||||
calendar.splits_calendar
|
||||
calendar.economic_events_calendar
|
||||
|
||||
# Manual queries
|
||||
calendar.get_earnings_calendar()
|
||||
calendar.get_ipo_info_calendar()
|
||||
calendar.get_splits_calendar()
|
||||
calendar.get_economic_events_calendar()
|
||||
|
||||
# Earnings calendar custom filters
|
||||
calendar.get_earnings_calendar(
|
||||
market_cap=100_000_000, # filter out small-cap
|
||||
filter_most_active=True, # show only actively traded. Uses: `screen(query="MOST_ACTIVES")`
|
||||
)
|
||||
|
||||
# Example of real use case:
|
||||
# Get inminent unreported earnings events
|
||||
today = datetime.now()
|
||||
is_friday = today.weekday() == 4
|
||||
day_after_tomorrow = today + timedelta(days=4 if is_friday else 2)
|
||||
|
||||
calendar = yf.Calendars(today, day_after_tomorrow)
|
||||
df = calendar.get_earnings_calendar(limit=100)
|
||||
|
||||
unreported_df = df[df["Reported EPS"].isnull()]
|
||||
@@ -16,6 +16,7 @@ The following are the publicly available classes, and functions exposed by the `
|
||||
- :attr:`Ticker <yfinance.Ticker>`: Class for accessing single ticker data.
|
||||
- :attr:`Tickers <yfinance.Tickers>`: Class for handling multiple tickers.
|
||||
- :attr:`Market <yfinance.Market>`: Class for accessing market summary.
|
||||
- :attr:`Calendars <yfinance.Calendars>`: Class for accessing calendar events data.
|
||||
- :attr:`download <yfinance.download>`: Function to download market data for multiple tickers.
|
||||
- :attr:`Search <yfinance.Search>`: Class for accessing search results.
|
||||
- :attr:`Lookup <yfinance.Lookup>`: Class for looking up tickers.
|
||||
@@ -23,7 +24,6 @@ The following are the publicly available classes, and functions exposed by the `
|
||||
- :class:`AsyncWebSocket <yfinance.AsyncWebSocket>`: Class for asynchronously streaming live market data.
|
||||
- :attr:`Sector <yfinance.Sector>`: Domain class for accessing sector information.
|
||||
- :attr:`Industry <yfinance.Industry>`: Domain class for accessing industry information.
|
||||
- :attr:`Market <yfinance.Market>`: Class for accessing market status & summary.
|
||||
- :attr:`EquityQuery <yfinance.EquityQuery>`: Class to build equity query filters.
|
||||
- :attr:`FundQuery <yfinance.FundQuery>`: Class to build fund query filters.
|
||||
- :attr:`screen <yfinance.screen>`: Run equity/fund queries.
|
||||
@@ -38,9 +38,9 @@ The following are the publicly available classes, and functions exposed by the `
|
||||
yfinance.ticker_tickers
|
||||
yfinance.stock
|
||||
yfinance.market
|
||||
yfinance.calendars
|
||||
yfinance.financials
|
||||
yfinance.analysis
|
||||
yfinance.market
|
||||
yfinance.search
|
||||
yfinance.lookup
|
||||
yfinance.websocket
|
||||
|
||||
21
doc/source/reference/yfinance.calendars.rst
Normal file
21
doc/source/reference/yfinance.calendars.rst
Normal file
@@ -0,0 +1,21 @@
|
||||
=====================
|
||||
Calendars
|
||||
=====================
|
||||
|
||||
.. currentmodule:: yfinance
|
||||
|
||||
|
||||
Class
|
||||
------------
|
||||
The `Calendars` class allows you to get information about upcoming events, for example, earning events.
|
||||
|
||||
.. autosummary::
|
||||
:toctree: api/
|
||||
|
||||
Calendars
|
||||
|
||||
Sample Code
|
||||
------------------
|
||||
|
||||
.. literalinclude:: examples/calendars.py
|
||||
:language: python
|
||||
@@ -1,5 +1,5 @@
|
||||
{% set name = "yfinance" %}
|
||||
{% set version = "0.2.64" %}
|
||||
{% set version = "1.0" %}
|
||||
|
||||
package:
|
||||
name: "{{ name|lower }}"
|
||||
@@ -15,6 +15,7 @@ build:
|
||||
script: "{{ PYTHON }} -m pip install . --no-deps --ignore-installed -vv "
|
||||
|
||||
requirements:
|
||||
# curl_cffi 0.14 has major problems, see their Github
|
||||
host:
|
||||
- pandas >=1.3.0
|
||||
- numpy >=1.16.5
|
||||
@@ -26,7 +27,7 @@ requirements:
|
||||
- frozendict >=2.3.4
|
||||
- beautifulsoup4 >=4.11.1
|
||||
- html5lib >=1.1
|
||||
- curl_cffi >=0.7
|
||||
- curl_cffi >=0.7,<0.14
|
||||
- peewee >=3.16.2
|
||||
- pip
|
||||
- python
|
||||
@@ -42,7 +43,7 @@ requirements:
|
||||
- frozendict >=2.3.4
|
||||
- beautifulsoup4 >=4.11.1
|
||||
- html5lib >=1.1
|
||||
- curl_cffi >=0.7
|
||||
- curl_cffi >=0.7,<0.14
|
||||
- peewee >=3.16.2
|
||||
- python
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ peewee>=3.16.2
|
||||
requests_cache>=1.0
|
||||
requests_ratelimiter>=0.3.1
|
||||
scipy>=1.6.3
|
||||
curl_cffi>=0.7
|
||||
# curl_cffi 0.14 has major problems, see their Github
|
||||
curl_cffi>=0.7,<0.14
|
||||
protobuf>=3.19.0
|
||||
websockets>=13.0
|
||||
|
||||
3
setup.py
3
setup.py
@@ -59,11 +59,12 @@ setup(
|
||||
platforms=['any'],
|
||||
keywords='pandas, yahoo finance, pandas datareader',
|
||||
packages=find_packages(exclude=['contrib', 'docs', 'tests', 'examples']),
|
||||
# curl_cffi 0.14 has major problems, see their Github
|
||||
install_requires=['pandas>=1.3.0', 'numpy>=1.16.5',
|
||||
'requests>=2.31', 'multitasking>=0.0.7',
|
||||
'platformdirs>=2.0.0', 'pytz>=2022.5',
|
||||
'frozendict>=2.3.4', 'peewee>=3.16.2',
|
||||
'beautifulsoup4>=4.11.1', 'curl_cffi>=0.7',
|
||||
'beautifulsoup4>=4.11.1', 'curl_cffi>=0.7,<0.14',
|
||||
'protobuf>=3.19.0', 'websockets>=13.0'],
|
||||
extras_require={
|
||||
'nospam': ['requests_cache>=1.0', 'requests_ratelimiter>=0.3.1'],
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
|
||||
2022-05-30 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2022-05-23 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2022-05-16 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,532454,0,0
|
||||
2022-05-09 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2022-05-02 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2022-04-25 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2022-04-18 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2022-04-11 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2022-04-04 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2022-03-28 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2022-03-21 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2022-03-14 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2022-03-07 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2022-02-28 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2022-02-21 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2022-02-14 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2022-02-07 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2022-01-31 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2022-01-24 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2022-01-17 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2022-01-10 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2022-01-03 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2021-12-27 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2021-12-20 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2021-12-13 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2021-12-06 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2021-11-29 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2021-11-22 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2021-11-15 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2021-11-08 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2021-11-01 00:00:00+00:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2021-10-25 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2021-10-18 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2021-10-11 00:00:00+01:00,14.5500,14.5500,14.5500,14.5500,14.5500,0,0,0
|
||||
2021-10-04 00:00:00+01:00,14.8000,15.3400,14.4000,14.5500,14.5500,2171373,0,0
|
||||
2021-09-27 00:00:00+01:00,15.6000,16.0000,14.9000,15.0500,15.0500,3860549,0,0
|
||||
|
@@ -1,37 +0,0 @@
|
||||
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
|
||||
2022-05-30 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2022-05-23 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2022-05-16 00:00:00+01:00,14.550000190734863,14.550000190734863,0.14550000429153442,0.14550000429153442,0.14550000429153442,532454,0.0,0.0
|
||||
2022-05-09 00:00:00+01:00,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,14.550000190734863,0,0.0,0.0
|
||||
2022-05-02 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2022-04-25 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2022-04-18 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2022-04-11 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2022-04-04 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2022-03-28 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2022-03-21 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2022-03-14 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2022-03-07 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2022-02-28 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2022-02-21 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2022-02-14 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2022-02-07 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2022-01-31 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2022-01-24 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2022-01-17 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2022-01-10 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2022-01-03 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2021-12-27 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2021-12-20 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2021-12-13 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2021-12-06 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2021-11-29 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2021-11-22 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2021-11-15 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2021-11-08 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2021-11-01 00:00:00+00:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2021-10-25 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2021-10-18 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2021-10-11 00:00:00+01:00,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0.14550000429153442,0,0.0,0.0
|
||||
2021-10-04 00:00:00+01:00,14.800000190734863,15.34000015258789,0.14399999380111694,0.14550000429153442,0.14550000429153442,2171373,0.0,0.0
|
||||
2021-09-27 00:00:00+01:00,15.600000381469727,16.0,14.899999618530273,15.050000190734863,15.050000190734863,3860549,0.0,0.0
|
||||
|
503
tests/data/DODFX-1d-cg-double-count-fixed.csv
Normal file
503
tests/data/DODFX-1d-cg-double-count-fixed.csv
Normal file
@@ -0,0 +1,503 @@
|
||||
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Capital Gains
|
||||
2024-01-10 00:00:00-05:00,12.147500038147,12.147500038147,12.147500038147,12.147500038147,11.2976727169889,0,0,0,0
|
||||
2024-01-11 00:00:00-05:00,12.1350002288818,12.1350002288818,12.1350002288818,12.1350002288818,11.2860473822568,0,0,0,0
|
||||
2024-01-12 00:00:00-05:00,12.1400003433228,12.1400003433228,12.1400003433228,12.1400003433228,11.2906976935409,0,0,0,0
|
||||
2024-01-16 00:00:00-05:00,11.9300003051758,11.9300003051758,11.9300003051758,11.9300003051758,11.0953890543897,0,0,0,0
|
||||
2024-01-17 00:00:00-05:00,11.7924995422363,11.7924995422363,11.7924995422363,11.7924995422363,10.9675077114674,0,0,0,0
|
||||
2024-01-18 00:00:00-05:00,11.8400001525879,11.8400001525879,11.8400001525879,11.8400001525879,11.0116852251883,0,0,0,0
|
||||
2024-01-19 00:00:00-05:00,11.9025001525879,11.9025001525879,11.9025001525879,11.9025001525879,11.0698127858052,0,0,0,0
|
||||
2024-01-22 00:00:00-05:00,11.9075002670288,11.9075002670288,11.9075002670288,11.9075002670288,11.0744630970893,0,0,0,0
|
||||
2024-01-23 00:00:00-05:00,11.9224996566772,11.9224996566772,11.9224996566772,11.9224996566772,11.0884131439854,0,0,0,0
|
||||
2024-01-24 00:00:00-05:00,11.9925003051758,11.9925003051758,11.9925003051758,11.9925003051758,11.1535166150066,0,0,0,0
|
||||
2024-01-25 00:00:00-05:00,11.9575004577637,11.9575004577637,11.9575004577637,11.9575004577637,11.1209653229741,0,0,0,0
|
||||
2024-01-26 00:00:00-05:00,12.0325002670288,12.0325002670288,12.0325002670288,12.0325002670288,11.1907182183232,0,0,0,0
|
||||
2024-01-29 00:00:00-05:00,12.0749998092651,12.0749998092651,12.0749998092651,12.0749998092651,11.2302445338038,0,0,0,0
|
||||
2024-01-30 00:00:00-05:00,12.0299997329712,12.0299997329712,12.0299997329712,12.0299997329712,11.1883926192031,0,0,0,0
|
||||
2024-01-31 00:00:00-05:00,11.9324998855591,11.9324998855591,11.9324998855591,11.9324998855591,11.0977137665536,0,0,0,0
|
||||
2024-02-01 00:00:00-05:00,11.9825000762939,11.9825000762939,11.9825000762939,11.9825000762939,11.1442159924384,0,0,0,0
|
||||
2024-02-02 00:00:00-05:00,11.9125003814697,11.9125003814697,11.9125003814697,11.9125003814697,11.0791134083734,0,0,0,0
|
||||
2024-02-05 00:00:00-05:00,11.8400001525879,11.8400001525879,11.8400001525879,11.8400001525879,11.0116852251883,0,0,0,0
|
||||
2024-02-06 00:00:00-05:00,11.9274997711182,11.9274997711182,11.9274997711182,11.9274997711182,11.0930634552695,0,0,0,0
|
||||
2024-02-07 00:00:00-05:00,11.8699998855591,11.8699998855591,11.8699998855591,11.8699998855591,11.0395862059367,0,0,0,0
|
||||
2024-02-08 00:00:00-05:00,11.7974996566772,11.7974996566772,11.7974996566772,11.7974996566772,10.9721580227515,0,0,0,0
|
||||
2024-02-09 00:00:00-05:00,11.8050003051758,11.8050003051758,11.8050003051758,11.8050003051758,10.9791339331558,0,0,0,0
|
||||
2024-02-12 00:00:00-05:00,11.875,11.875,11.875,11.875,11.0442365172208,0,0,0,0
|
||||
2024-02-13 00:00:00-05:00,11.727499961853,11.727499961853,11.727499961853,11.727499961853,10.9070554386865,0,0,0,0
|
||||
2024-02-14 00:00:00-05:00,11.7974996566772,11.7974996566772,11.7974996566772,11.7974996566772,10.9721580227515,0,0,0,0
|
||||
2024-02-15 00:00:00-05:00,11.9049997329712,11.9049997329712,11.9049997329712,11.9049997329712,11.0721374979692,0,0,0,0
|
||||
2024-02-16 00:00:00-05:00,11.9624996185303,11.9624996185303,11.9624996185303,11.9624996185303,11.125614747302,0,0,0,0
|
||||
2024-02-20 00:00:00-05:00,12.0349998474121,12.0349998474121,12.0349998474121,12.0349998474121,11.1930429304872,0,0,0,0
|
||||
2024-02-21 00:00:00-05:00,12.0550003051758,12.0550003051758,12.0550003051758,12.0550003051758,11.2116441756236,0,0,0,0
|
||||
2024-02-22 00:00:00-05:00,12.1800003051758,12.1800003051758,12.1800003051758,12.1800003051758,11.3278992968575,0,0,0,0
|
||||
2024-02-23 00:00:00-05:00,12.1774997711182,12.1774997711182,12.1774997711182,12.1774997711182,11.3255736977373,0,0,0,0
|
||||
2024-02-26 00:00:00-05:00,12.1525001525879,12.1525001525879,12.1525001525879,12.1525001525879,11.302323028273,0,0,0,0
|
||||
2024-02-27 00:00:00-05:00,12.1724996566772,12.1724996566772,12.1724996566772,12.1724996566772,11.3209233864532,0,0,0,0
|
||||
2024-02-28 00:00:00-05:00,12.1175003051758,12.1175003051758,12.1175003051758,12.1175003051758,11.2697717362405,0,0,0,0
|
||||
2024-02-29 00:00:00-05:00,12.0900001525879,12.0900001525879,12.0900001525879,12.0900001525879,11.2441954676561,0,0,0,0
|
||||
2024-03-01 00:00:00-05:00,12.2150001525879,12.2150001525879,12.2150001525879,12.2150001525879,11.36045058889,0,0,0,0
|
||||
2024-03-04 00:00:00-05:00,12.1549997329712,12.1549997329712,12.1549997329712,12.1549997329712,11.304647740437,0,0,0,0
|
||||
2024-03-05 00:00:00-05:00,12.1374998092651,12.1374998092651,12.1374998092651,12.1374998092651,11.2883720944207,0,0,0,0
|
||||
2024-03-06 00:00:00-05:00,12.2674999237061,12.2674999237061,12.2674999237061,12.2674999237061,11.4092775269387,0,0,0,0
|
||||
2024-03-07 00:00:00-05:00,12.3699998855591,12.3699998855591,12.3699998855591,12.3699998855591,11.5046066908723,0,0,0,0
|
||||
2024-03-08 00:00:00-05:00,12.3874998092651,12.3874998092651,12.3874998092651,12.3874998092651,11.5208823368885,0,0,0,0
|
||||
2024-03-11 00:00:00-04:00,12.4174995422363,12.4174995422363,12.4174995422363,12.4174995422363,11.5487833176369,0,0,0,0
|
||||
2024-03-12 00:00:00-04:00,12.5299997329712,12.5299997329712,12.5299997329712,12.5299997329712,11.6534131041387,0,0,0,0
|
||||
2024-03-13 00:00:00-04:00,12.5775003433228,12.5775003433228,12.5775003433228,12.5775003433228,11.6975906178595,0,0,0,0
|
||||
2024-03-14 00:00:00-04:00,12.4875001907349,12.4875001907349,12.4875001907349,12.4875001907349,11.6138867886581,0,0,0,0
|
||||
2024-03-15 00:00:00-04:00,12.4549999237061,12.4549999237061,12.4549999237061,12.4549999237061,11.5836602087896,0,0,0,0
|
||||
2024-03-18 00:00:00-04:00,12.4700002670288,12.4700002670288,12.4700002670288,12.4700002670288,11.5976111426419,0,0,0,0
|
||||
2024-03-19 00:00:00-04:00,12.477499961853,12.477499961853,12.477499961853,12.477499961853,11.6045861660899,0,0,0,0
|
||||
2024-03-20 00:00:00-04:00,12.5825004577637,12.5825004577637,12.5825004577637,12.5825004577637,11.7022409291436,0,0,0,0
|
||||
2024-03-21 00:00:00-04:00,12.5749998092651,12.5749998092651,12.5749998092651,12.5749998092651,11.6952650187394,0,0,0,0
|
||||
2024-03-22 00:00:00-04:00,12.5325002670288,12.5325002670288,12.5325002670288,12.5325002670288,11.6557387032588,0,0,0,0
|
||||
2024-03-25 00:00:00-04:00,12.5524997711182,12.5524997711182,12.5524997711182,12.5524997711182,11.674339061439,0,0,0,0
|
||||
2024-03-26 00:00:00-04:00,12.5749998092651,12.5749998092651,12.5749998092651,12.5749998092651,11.6952650187394,0,0,0,0
|
||||
2024-03-27 00:00:00-04:00,12.6800003051758,12.6800003051758,12.6800003051758,12.6800003051758,11.7929197817931,0,0,0,0
|
||||
2024-03-28 00:00:00-04:00,12.6750001907349,12.6750001907349,12.6750001907349,12.6750001907349,11.788269470509,0,0,0,0
|
||||
2024-04-01 00:00:00-04:00,12.625,12.625,12.625,12.625,11.7417672446242,0,0,0,0
|
||||
2024-04-02 00:00:00-04:00,12.5874996185303,12.5874996185303,12.5874996185303,12.5874996185303,11.7068903534715,0,0,0,0
|
||||
2024-04-03 00:00:00-04:00,12.6724996566772,12.6724996566772,12.6724996566772,12.6724996566772,11.7859438713888,0,0,0,0
|
||||
2024-04-04 00:00:00-04:00,12.6199998855591,12.6199998855591,12.6199998855591,12.6199998855591,11.7371169333401,0,0,0,0
|
||||
2024-04-05 00:00:00-04:00,12.6225004196167,12.6225004196167,12.6225004196167,12.6225004196167,11.7394425324602,0,0,0,0
|
||||
2024-04-08 00:00:00-04:00,12.6750001907349,12.6750001907349,12.6750001907349,12.6750001907349,11.788269470509,0,0,0,0
|
||||
2024-04-09 00:00:00-04:00,12.7124996185303,12.7124996185303,12.7124996185303,12.7124996185303,11.8231454747054,0,0,0,0
|
||||
2024-04-10 00:00:00-04:00,12.5900001525879,12.5900001525879,12.5900001525879,12.5900001525879,11.7092159525917,0,0,0,0
|
||||
2024-04-11 00:00:00-04:00,12.5574998855591,12.5574998855591,12.5574998855591,12.5574998855591,11.6789893727231,0,0,0,0
|
||||
2024-04-12 00:00:00-04:00,12.3474998474121,12.3474998474121,12.3474998474121,12.3474998474121,11.4836807335719,0,0,0,0
|
||||
2024-04-15 00:00:00-04:00,12.2799997329712,12.2799997329712,12.2799997329712,12.2799997329712,11.4209028616709,0,0,0,0
|
||||
2024-04-16 00:00:00-04:00,12.1625003814697,12.1625003814697,12.1625003814697,12.1625003814697,11.3116236508412,0,0,0,0
|
||||
2024-04-17 00:00:00-04:00,12.1850004196167,12.1850004196167,12.1850004196167,12.1850004196167,11.3325496081416,0,0,0,0
|
||||
2024-04-18 00:00:00-04:00,12.1999998092651,12.1999998092651,12.1999998092651,12.1999998092651,11.3464996550377,0,0,0,0
|
||||
2024-04-19 00:00:00-04:00,12.2349996566772,12.2349996566772,12.2349996566772,12.2349996566772,11.3790509470702,0,0,0,0
|
||||
2024-04-22 00:00:00-04:00,12.4125003814697,12.4125003814697,12.4125003814697,12.4125003814697,11.544133893309,0,0,0,0
|
||||
2024-04-23 00:00:00-04:00,12.5124998092651,12.5124998092651,12.5124998092651,12.5124998092651,11.6371374581224,0,0,0,0
|
||||
2024-04-24 00:00:00-04:00,12.5074996948242,12.5074996948242,12.5074996948242,12.5074996948242,11.6324871468383,0,0,0,0
|
||||
2024-04-25 00:00:00-04:00,12.5699996948242,12.5699996948242,12.5699996948242,12.5699996948242,11.6906147074553,0,0,0,0
|
||||
2024-04-26 00:00:00-04:00,12.6149997711182,12.6149997711182,12.6149997711182,12.6149997711182,11.732466622056,0,0,0,0
|
||||
2024-04-29 00:00:00-04:00,12.6999998092651,12.6999998092651,12.6999998092651,12.6999998092651,11.8115201399733,0,0,0,0
|
||||
2024-04-30 00:00:00-04:00,12.5050001144409,12.5050001144409,12.5050001144409,12.5050001144409,11.6301624346744,0,0,0,0
|
||||
2024-05-01 00:00:00-04:00,12.4949998855591,12.4949998855591,12.4949998855591,12.4949998855591,11.6208618121062,0,0,0,0
|
||||
2024-05-02 00:00:00-04:00,12.6674995422363,12.6674995422363,12.6674995422363,12.6674995422363,11.7812935601047,0,0,0,0
|
||||
2024-05-03 00:00:00-04:00,12.7524995803833,12.7524995803833,12.7524995803833,12.7524995803833,11.860347078022,0,0,0,0
|
||||
2024-05-06 00:00:00-04:00,12.852499961853,12.852499961853,12.852499961853,12.852499961853,11.9533515297916,0,0,0,0
|
||||
2024-05-07 00:00:00-04:00,12.914999961853,12.914999961853,12.914999961853,12.914999961853,12.0114790904086,0,0,0,0
|
||||
2024-05-08 00:00:00-04:00,12.9350004196167,12.9350004196167,12.9350004196167,12.9350004196167,12.030080335545,0,0,0,0
|
||||
2024-05-09 00:00:00-04:00,13.0249996185303,13.0249996185303,13.0249996185303,13.0249996185303,12.1137832777902,0,0,0,0
|
||||
2024-05-10 00:00:00-04:00,13.1075000762939,13.1075000762939,13.1075000762939,13.1075000762939,12.1905120835435,0,0,0,0
|
||||
2024-05-13 00:00:00-04:00,13.1824998855591,13.1824998855591,13.1824998855591,13.1824998855591,12.2602649788926,0,0,0,0
|
||||
2024-05-14 00:00:00-04:00,13.2399997711182,13.2399997711182,13.2399997711182,13.2399997711182,12.3137422282255,0,0,0,0
|
||||
2024-05-15 00:00:00-04:00,13.3649997711182,13.3649997711182,13.3649997711182,13.3649997711182,12.4299973494594,0,0,0,0
|
||||
2024-05-16 00:00:00-04:00,13.3500003814697,13.3500003814697,13.3500003814697,13.3500003814697,12.4160473025633,0,0,0,0
|
||||
2024-05-17 00:00:00-04:00,13.3675003051758,13.3675003051758,13.3675003051758,13.3675003051758,12.4323229485795,0,0,0,0
|
||||
2024-05-20 00:00:00-04:00,13.397500038147,13.397500038147,13.397500038147,13.397500038147,12.4602239293279,0,0,0,0
|
||||
2024-05-21 00:00:00-04:00,13.3474998474121,13.3474998474121,13.3474998474121,13.3474998474121,12.4137217034432,0,0,0,0
|
||||
2024-05-22 00:00:00-04:00,13.2224998474121,13.2224998474121,13.2224998474121,13.2224998474121,12.2974665822092,0,0,0,0
|
||||
2024-05-23 00:00:00-04:00,13.125,13.125,13.125,13.125,12.2067877295598,0,0,0,0
|
||||
2024-05-24 00:00:00-04:00,13.2049999237061,13.2049999237061,13.2049999237061,13.2049999237061,12.281190936193,0,0,0,0
|
||||
2024-05-28 00:00:00-04:00,13.1899995803833,13.1899995803833,13.1899995803833,13.1899995803833,12.2672400023407,0,0,0,0
|
||||
2024-05-29 00:00:00-04:00,12.9674997329712,12.9674997329712,12.9674997329712,12.9674997329712,12.0603060284573,0,0,0,0
|
||||
2024-05-30 00:00:00-04:00,13.0699996948242,13.0699996948242,13.0699996948242,13.0699996948242,12.1556351923909,0,0,0,0
|
||||
2024-05-31 00:00:00-04:00,13.1925001144409,13.1925001144409,13.1925001144409,13.1925001144409,12.2695656014608,0,0,0,0
|
||||
2024-06-03 00:00:00-04:00,13.1774997711182,13.1774997711182,13.1774997711182,13.1774997711182,12.2556146676085,0,0,0,0
|
||||
2024-06-04 00:00:00-04:00,13.0550003051758,13.0550003051758,13.0550003051758,13.0550003051758,12.1416851454948,0,0,0,0
|
||||
2024-06-05 00:00:00-04:00,13.1549997329712,13.1549997329712,13.1549997329712,13.1549997329712,12.2346887103082,0,0,0,0
|
||||
2024-06-06 00:00:00-04:00,13.1975002288818,13.1975002288818,13.1975002288818,13.1975002288818,12.2742159127449,0,0,0,0
|
||||
2024-06-07 00:00:00-04:00,13.085000038147,13.085000038147,13.085000038147,13.085000038147,12.1695861262432,0,0,0,0
|
||||
2024-06-10 00:00:00-04:00,13.039999961853,13.039999961853,13.039999961853,13.039999961853,12.1277342116425,0,0,0,0
|
||||
2024-06-11 00:00:00-04:00,12.9025001525879,12.9025001525879,12.9025001525879,12.9025001525879,11.9998537556764,0,0,0,0
|
||||
2024-06-12 00:00:00-04:00,13.0074996948242,13.0074996948242,13.0074996948242,13.0074996948242,12.0975076317739,0,0,0,0
|
||||
2024-06-13 00:00:00-04:00,12.8275003433228,12.8275003433228,12.8275003433228,12.8275003433228,11.9301008603273,0,0,0,0
|
||||
2024-06-14 00:00:00-04:00,12.7049999237061,12.7049999237061,12.7049999237061,12.7049999237061,11.8161704512574,0,0,0,0
|
||||
2024-06-17 00:00:00-04:00,12.7574996948242,12.7574996948242,12.7574996948242,12.7574996948242,11.8649973893061,0,0,0,0
|
||||
2024-06-18 00:00:00-04:00,12.7849998474121,12.7849998474121,12.7849998474121,12.7849998474121,11.8905736578906,0,0,0,0
|
||||
2024-06-20 00:00:00-04:00,12.8325004577637,12.8325004577637,12.8325004577637,12.8325004577637,11.9347511716114,0,0,0,0
|
||||
2024-06-21 00:00:00-04:00,12.7200002670288,12.7200002670288,12.7200002670288,12.7200002670288,11.8301213851097,0,0,0,0
|
||||
2024-06-24 00:00:00-04:00,12.8675003051758,12.8675003051758,12.8675003051758,12.8675003051758,11.9673024636439,0,0,0,0
|
||||
2024-06-25 00:00:00-04:00,12.8249998092651,12.8249998092651,12.8249998092651,12.8249998092651,11.9277752612072,0,0,0,0
|
||||
2024-06-26 00:00:00-04:00,12.7399997711182,12.7399997711182,12.7399997711182,12.7399997711182,11.8487217432899,0,0,0,0
|
||||
2024-06-27 00:00:00-04:00,12.7025003433228,12.7025003433228,12.7025003433228,12.7025003433228,11.8138457390934,0,0,0,0
|
||||
2024-06-28 00:00:00-04:00,12.6774997711182,12.6774997711182,12.6774997711182,12.6774997711182,11.7905941826729,0,0,0,0
|
||||
2024-07-01 00:00:00-04:00,12.727499961853,12.727499961853,12.727499961853,12.727499961853,11.8370964085577,0,0,0,0
|
||||
2024-07-02 00:00:00-04:00,12.727499961853,12.727499961853,12.727499961853,12.727499961853,11.8370964085577,0,0,0,0
|
||||
2024-07-03 00:00:00-04:00,12.8999996185303,12.8999996185303,12.8999996185303,12.8999996185303,11.9975281565563,0,0,0,0
|
||||
2024-07-05 00:00:00-04:00,12.960000038147,12.960000038147,12.960000038147,12.960000038147,12.0533310050093,0,0,0,0
|
||||
2024-07-08 00:00:00-04:00,12.9499998092651,12.9499998092651,12.9499998092651,12.9499998092651,12.0440303824411,0,0,0,0
|
||||
2024-07-09 00:00:00-04:00,12.9075002670288,12.9075002670288,12.9075002670288,12.9075002670288,12.0045040669605,0,0,0,0
|
||||
2024-07-10 00:00:00-04:00,13.0649995803833,13.0649995803833,13.0649995803833,13.0649995803833,12.1509848811068,0,0,0,0
|
||||
2024-07-11 00:00:00-04:00,13.1724996566772,13.1724996566772,13.1724996566772,13.1724996566772,12.2509643563244,0,0,0,0
|
||||
2024-07-12 00:00:00-04:00,13.2950000762939,13.2950000762939,13.2950000762939,13.2950000762939,12.3648947653944,0,0,0,0
|
||||
2024-07-15 00:00:00-04:00,13.2049999237061,13.2049999237061,13.2049999237061,13.2049999237061,12.281190936193,0,0,0,0
|
||||
2024-07-16 00:00:00-04:00,13.2200002670288,13.2200002670288,13.2200002670288,13.2200002670288,12.2951418700453,0,0,0,0
|
||||
2024-07-17 00:00:00-04:00,13.289999961853,13.289999961853,13.289999961853,13.289999961853,12.3602444541103,0,0,0,0
|
||||
2024-07-18 00:00:00-04:00,13.1499996185303,13.1499996185303,13.1499996185303,13.1499996185303,12.2300383990241,0,0,0,0
|
||||
2024-07-19 00:00:00-04:00,13.0500001907349,13.0500001907349,13.0500001907349,13.0500001907349,12.1370348342107,0,0,0,0
|
||||
2024-07-22 00:00:00-04:00,13.1949996948242,13.1949996948242,13.1949996948242,13.1949996948242,12.2718903136248,0,0,0,0
|
||||
2024-07-23 00:00:00-04:00,13.0874996185303,13.0874996185303,13.0874996185303,13.0874996185303,12.1719108384071,0,0,0,0
|
||||
2024-07-24 00:00:00-04:00,12.9624996185303,12.9624996185303,12.9624996185303,12.9624996185303,12.0556557171732,0,0,0,0
|
||||
2024-07-25 00:00:00-04:00,12.9300003051758,12.9300003051758,12.9300003051758,12.9300003051758,12.0254300242609,0,0,0,0
|
||||
2024-07-26 00:00:00-04:00,13.0325002670288,13.0325002670288,13.0325002670288,13.0325002670288,12.1207591881944,0,0,0,0
|
||||
2024-07-29 00:00:00-04:00,13.0150003433228,13.0150003433228,13.0150003433228,13.0150003433228,12.1044835421782,0,0,0,0
|
||||
2024-07-30 00:00:00-04:00,12.9825000762939,12.9825000762939,12.9825000762939,12.9825000762939,12.0742569623096,0,0,0,0
|
||||
2024-07-31 00:00:00-04:00,13.0799999237061,13.0799999237061,13.0799999237061,13.0799999237061,12.1649358149591,0,0,0,0
|
||||
2024-08-01 00:00:00-04:00,12.8299999237061,12.8299999237061,12.8299999237061,12.8299999237061,11.9324255724913,0,0,0,0
|
||||
2024-08-02 00:00:00-04:00,12.6400003433228,12.6400003433228,12.6400003433228,12.6400003433228,11.7557181784765,0,0,0,0
|
||||
2024-08-05 00:00:00-04:00,12.3599996566772,12.3599996566772,12.3599996566772,12.3599996566772,11.4953060683041,0,0,0,0
|
||||
2024-08-06 00:00:00-04:00,12.3649997711182,12.3649997711182,12.3649997711182,12.3649997711182,11.4999563795882,0,0,0,0
|
||||
2024-08-07 00:00:00-04:00,12.4475002288818,12.4475002288818,12.4475002288818,12.4475002288818,11.5766851853415,0,0,0,0
|
||||
2024-08-08 00:00:00-04:00,12.6575002670288,12.6575002670288,12.6575002670288,12.6575002670288,11.7719938244927,0,0,0,0
|
||||
2024-08-09 00:00:00-04:00,12.6899995803833,12.6899995803833,12.6899995803833,12.6899995803833,11.8022195174051,0,0,0,0
|
||||
2024-08-12 00:00:00-04:00,12.6949996948242,12.6949996948242,12.6949996948242,12.6949996948242,11.8068698286892,0,0,0,0
|
||||
2024-08-13 00:00:00-04:00,12.8474998474121,12.8474998474121,12.8474998474121,12.8474998474121,11.9487012185075,0,0,0,0
|
||||
2024-08-14 00:00:00-04:00,12.875,12.875,12.875,12.875,11.974277487092,0,0,0,0
|
||||
2024-08-15 00:00:00-04:00,13.0450000762939,13.0450000762939,13.0450000762939,13.0450000762939,12.1323845229266,0,0,0,0
|
||||
2024-08-16 00:00:00-04:00,13.1350002288818,13.1350002288818,13.1350002288818,13.1350002288818,12.216088352128,0,0,0,0
|
||||
2024-08-19 00:00:00-04:00,13.2849998474121,13.2849998474121,13.2849998474121,13.2849998474121,12.3555941428262,0,0,0,0
|
||||
2024-08-20 00:00:00-04:00,13.2124996185303,13.2124996185303,13.2124996185303,13.2124996185303,12.2881659596411,0,0,0,0
|
||||
2024-08-21 00:00:00-04:00,13.2749996185303,13.2749996185303,13.2749996185303,13.2749996185303,12.346293520258,0,0,0,0
|
||||
2024-08-22 00:00:00-04:00,13.2049999237061,13.2049999237061,13.2049999237061,13.2049999237061,12.281190936193,0,0,0,0
|
||||
2024-08-23 00:00:00-04:00,13.4025001525879,13.4025001525879,13.4025001525879,13.4025001525879,12.464874240612,0,0,0,0
|
||||
2024-08-26 00:00:00-04:00,13.3774995803833,13.3774995803833,13.3774995803833,13.3774995803833,12.4416226841916,0,0,0,0
|
||||
2024-08-27 00:00:00-04:00,13.4449996948242,13.4449996948242,13.4449996948242,13.4449996948242,12.5044005560926,0,0,0,0
|
||||
2024-08-28 00:00:00-04:00,13.3649997711182,13.3649997711182,13.3649997711182,13.3649997711182,12.4299973494594,0,0,0,0
|
||||
2024-08-29 00:00:00-04:00,13.4049997329712,13.4049997329712,13.4049997329712,13.4049997329712,12.467198952776,0,0,0,0
|
||||
2024-08-30 00:00:00-04:00,13.4650001525879,13.4650001525879,13.4650001525879,13.4650001525879,12.523001801229,0,0,0,0
|
||||
2024-09-03 00:00:00-04:00,13.2550001144409,13.2550001144409,13.2550001144409,13.2550001144409,12.3276931620778,0,0,0,0
|
||||
2024-09-04 00:00:00-04:00,13.2700004577637,13.2700004577637,13.2700004577637,13.2700004577637,12.3416440959301,0,0,0,0
|
||||
2024-09-05 00:00:00-04:00,13.3024997711182,13.3024997711182,13.3024997711182,13.3024997711182,12.3718697888425,0,0,0,0
|
||||
2024-09-06 00:00:00-04:00,13.0924997329712,13.0924997329712,13.0924997329712,13.0924997329712,12.1765611496912,0,0,0,0
|
||||
2024-09-09 00:00:00-04:00,13.1850004196167,13.1850004196167,13.1850004196167,13.1850004196167,12.2625905780128,0,0,0,0
|
||||
2024-09-10 00:00:00-04:00,13.1324996948242,13.1324996948242,13.1324996948242,13.1324996948242,12.2137627530078,0,0,0,0
|
||||
2024-09-11 00:00:00-04:00,13.1599998474121,13.1599998474121,13.1599998474121,13.1599998474121,12.2393390215923,0,0,0,0
|
||||
2024-09-12 00:00:00-04:00,13.2550001144409,13.2550001144409,13.2550001144409,13.2550001144409,12.3276931620778,0,0,0,0
|
||||
2024-09-13 00:00:00-04:00,13.3249998092651,13.3249998092651,13.3249998092651,13.3249998092651,12.3927957461428,0,0,0,0
|
||||
2024-09-16 00:00:00-04:00,13.3675003051758,13.3675003051758,13.3675003051758,13.3675003051758,12.4323229485795,0,0,0,0
|
||||
2024-09-17 00:00:00-04:00,13.4300003051758,13.4300003051758,13.4300003051758,13.4300003051758,12.4904505091965,0,0,0,0
|
||||
2024-09-18 00:00:00-04:00,13.4075002670288,13.4075002670288,13.4075002670288,13.4075002670288,12.4695245518961,0,0,0,0
|
||||
2024-09-19 00:00:00-04:00,13.625,13.625,13.625,13.625,12.6718082144954,0,0,0,0
|
||||
2024-09-20 00:00:00-04:00,13.5150003433228,13.5150003433228,13.5150003433228,13.5150003433228,12.5695040271138,0,0,0,0
|
||||
2024-09-23 00:00:00-04:00,13.5574998855591,13.5574998855591,13.5574998855591,13.5574998855591,12.6090303425944,0,0,0,0
|
||||
2024-09-24 00:00:00-04:00,13.7600002288818,13.7600002288818,13.7600002288818,13.7600002288818,12.7973639582975,0,0,0,0
|
||||
2024-09-25 00:00:00-04:00,13.6949996948242,13.6949996948242,13.6949996948242,13.6949996948242,12.7369107985604,0,0,0,0
|
||||
2024-09-26 00:00:00-04:00,14.0024995803833,14.0024995803833,14.0024995803833,14.0024995803833,13.0228982903611,0,0,0,0
|
||||
2024-09-27 00:00:00-04:00,14.1674995422363,14.1674995422363,14.1674995422363,14.1674995422363,13.1763550149116,0,0,0,0
|
||||
2024-09-30 00:00:00-04:00,13.9425001144409,13.9425001144409,13.9425001144409,13.9425001144409,12.9670963288643,0,0,0,0
|
||||
2024-10-01 00:00:00-04:00,13.9174995422363,13.9174995422363,13.9174995422363,13.9174995422363,12.9438447724438,0,0,0,0
|
||||
2024-10-02 00:00:00-04:00,13.9549999237061,13.9549999237061,13.9549999237061,13.9549999237061,12.9787216635964,0,0,0,0
|
||||
2024-10-03 00:00:00-04:00,13.7950000762939,13.7950000762939,13.7950000762939,13.7950000762939,12.82991525033,0,0,0,0
|
||||
2024-10-04 00:00:00-04:00,13.9274997711182,13.9274997711182,13.9274997711182,13.9274997711182,12.953145395012,0,0,0,0
|
||||
2024-10-07 00:00:00-04:00,13.8924999237061,13.8924999237061,13.8924999237061,13.8924999237061,12.9205941029795,0,0,0,0
|
||||
2024-10-08 00:00:00-04:00,13.7749996185303,13.7749996185303,13.7749996185303,13.7749996185303,12.8113140051936,0,0,0,0
|
||||
2024-10-09 00:00:00-04:00,13.8125,13.8125,13.8125,13.8125,12.8461908963463,0,0,0,0
|
||||
2024-10-10 00:00:00-04:00,13.789999961853,13.789999961853,13.789999961853,13.789999961853,12.8252649390459,0,0,0,0
|
||||
2024-10-11 00:00:00-04:00,13.8199996948242,13.8199996948242,13.8199996948242,13.8199996948242,12.8531659197943,0,0,0,0
|
||||
2024-10-14 00:00:00-04:00,13.8249998092651,13.8249998092651,13.8249998092651,13.8249998092651,12.8578162310784,0,0,0,0
|
||||
2024-10-15 00:00:00-04:00,13.6274995803833,13.6274995803833,13.6274995803833,13.6274995803833,12.6741329266594,0,0,0,0
|
||||
2024-10-16 00:00:00-04:00,13.6674995422363,13.6674995422363,13.6674995422363,13.6674995422363,12.711334529976,0,0,0,0
|
||||
2024-10-17 00:00:00-04:00,13.6975002288818,13.6975002288818,13.6975002288818,13.6975002288818,12.7392363976806,0,0,0,0
|
||||
2024-10-18 00:00:00-04:00,13.7875003814697,13.7875003814697,13.7875003814697,13.7875003814697,12.822940226882,0,0,0,0
|
||||
2024-10-21 00:00:00-04:00,13.664999961853,13.664999961853,13.664999961853,13.664999961853,12.709009817812,0,0,0,0
|
||||
2024-10-22 00:00:00-04:00,13.6125001907349,13.6125001907349,13.6125001907349,13.6125001907349,12.6601828797633,0,0,0,0
|
||||
2024-10-23 00:00:00-04:00,13.5299997329712,13.5299997329712,13.5299997329712,13.5299997329712,12.5834540740099,0,0,0,0
|
||||
2024-10-24 00:00:00-04:00,13.585000038147,13.585000038147,13.585000038147,13.585000038147,12.6346066111788,0,0,0,0
|
||||
2024-10-25 00:00:00-04:00,13.5625,13.5625,13.5625,13.5625,12.6136806538785,0,0,0,0
|
||||
2024-10-28 00:00:00-04:00,13.6724996566772,13.6724996566772,13.6724996566772,13.6724996566772,12.7159848412601,0,0,0,0
|
||||
2024-10-29 00:00:00-04:00,13.5900001525879,13.5900001525879,13.5900001525879,13.5900001525879,12.6392569224629,0,0,0,0
|
||||
2024-10-30 00:00:00-04:00,13.4875001907349,13.4875001907349,13.4875001907349,13.4875001907349,12.5439277585293,0,0,0,0
|
||||
2024-10-31 00:00:00-04:00,13.3649997711182,13.3649997711182,13.3649997711182,13.3649997711182,12.4299973494594,0,0,0,0
|
||||
2024-11-01 00:00:00-04:00,13.4274997711182,13.4274997711182,13.4274997711182,13.4274997711182,12.4881249100764,0,0,0,0
|
||||
2024-11-04 00:00:00-05:00,13.4700002670288,13.4700002670288,13.4700002670288,13.4700002670288,12.5276521125131,0,0,0,0
|
||||
2024-11-05 00:00:00-05:00,13.602499961853,13.602499961853,13.602499961853,13.602499961853,12.6508822571951,0,0,0,0
|
||||
2024-11-06 00:00:00-05:00,13.5074996948242,13.5074996948242,13.5074996948242,13.5074996948242,12.5625281167096,0,0,0,0
|
||||
2024-11-07 00:00:00-05:00,13.602499961853,13.602499961853,13.602499961853,13.602499961853,12.6508822571951,0,0,0,0
|
||||
2024-11-08 00:00:00-05:00,13.4525003433228,13.4525003433228,13.4525003433228,13.4525003433228,12.5113764664968,0,0,0,0
|
||||
2024-11-11 00:00:00-05:00,13.477499961853,13.477499961853,13.477499961853,13.477499961853,12.5346271359612,0,0,0,0
|
||||
2024-11-12 00:00:00-05:00,13.1850004196167,13.1850004196167,13.1850004196167,13.1850004196167,12.2625905780128,0,0,0,0
|
||||
2024-11-13 00:00:00-05:00,13.1199998855591,13.1199998855591,13.1199998855591,13.1199998855591,12.2021374182757,0,0,0,0
|
||||
2024-11-14 00:00:00-05:00,13.1499996185303,13.1499996185303,13.1499996185303,13.1499996185303,12.2300383990241,0,0,0,0
|
||||
2024-11-15 00:00:00-05:00,13.1175003051758,13.1175003051758,13.1175003051758,13.1175003051758,12.1998127061117,0,0,0,0
|
||||
2024-11-18 00:00:00-05:00,13.2075004577637,13.2075004577637,13.2075004577637,13.2075004577637,12.2835165353131,0,0,0,0
|
||||
2024-11-19 00:00:00-05:00,13.1625003814697,13.1625003814697,13.1625003814697,13.1625003814697,12.2416646207124,0,0,0,0
|
||||
2024-11-20 00:00:00-05:00,13.125,13.125,13.125,13.125,12.2067877295598,0,0,0,0
|
||||
2024-11-21 00:00:00-05:00,13.1225004196167,13.1225004196167,13.1225004196167,13.1225004196167,12.2044630173958,0,0,0,0
|
||||
2024-11-22 00:00:00-05:00,13.1225004196167,13.1225004196167,13.1225004196167,13.1225004196167,12.2044630173958,0,0,0,0
|
||||
2024-11-25 00:00:00-05:00,13.210000038147,13.210000038147,13.210000038147,13.210000038147,12.2858412474771,0,0,0,0
|
||||
2024-11-26 00:00:00-05:00,13.1099996566772,13.1099996566772,13.1099996566772,13.1099996566772,12.1928367957075,0,0,0,0
|
||||
2024-11-27 00:00:00-05:00,13.164999961853,13.164999961853,13.164999961853,13.164999961853,12.2439893328764,0,0,0,0
|
||||
2024-11-29 00:00:00-05:00,13.2075004577637,13.2075004577637,13.2075004577637,13.2075004577637,12.2835165353131,0,0,0,0
|
||||
2024-12-02 00:00:00-05:00,13.1975002288818,13.1975002288818,13.1975002288818,13.1975002288818,12.2742159127449,0,0,0,0
|
||||
2024-12-03 00:00:00-05:00,13.2650003433228,13.2650003433228,13.2650003433228,13.2650003433228,12.336993784646,0,0,0,0
|
||||
2024-12-04 00:00:00-05:00,13.25,13.25,13.25,13.25,12.3230428507937,0,0,0,0
|
||||
2024-12-05 00:00:00-05:00,13.3824996948242,13.3824996948242,13.3824996948242,13.3824996948242,12.4462729954757,0,0,0,0
|
||||
2024-12-06 00:00:00-05:00,13.3774995803833,13.3774995803833,13.3774995803833,13.3774995803833,12.4416226841916,0,0,0,0
|
||||
2024-12-09 00:00:00-05:00,13.4425001144409,13.4425001144409,13.4425001144409,13.4425001144409,12.5020758439286,0,0,0,0
|
||||
2024-12-10 00:00:00-05:00,13.3175001144409,13.3175001144409,13.3175001144409,13.3175001144409,12.3858207226947,0,0,0,0
|
||||
2024-12-11 00:00:00-05:00,13.3024997711182,13.3024997711182,13.3024997711182,13.3024997711182,12.3718697888425,0,0,0,0
|
||||
2024-12-12 00:00:00-05:00,13.2624998092651,13.2624998092651,13.2624998092651,13.2624998092651,12.3346681855259,0,0,0,0
|
||||
2024-12-13 00:00:00-05:00,13.1875,13.1875,13.1875,13.1875,12.2649152901767,0,0,0,0
|
||||
2024-12-16 00:00:00-05:00,13.1075000762939,13.1075000762939,13.1075000762939,13.1075000762939,12.1905120835435,0,0,0,0
|
||||
2024-12-17 00:00:00-05:00,13.0349998474121,13.0349998474121,13.0349998474121,13.0349998474121,12.1230839003584,0,0,0,0
|
||||
2024-12-18 00:00:00-05:00,12.4525003433228,12.4525003433228,12.4525003433228,12.4525003433228,11.8364989993296,0,0.281,0,0
|
||||
2024-12-19 00:00:00-05:00,12.3850002288818,12.3850002288818,12.3850002288818,12.3850002288818,11.7723379862795,0,0,0,0
|
||||
2024-12-20 00:00:00-05:00,12.4250001907349,12.4250001907349,12.4250001907349,12.4250001907349,11.8103592266242,0,0,0,0
|
||||
2024-12-23 00:00:00-05:00,12.5024995803833,12.5024995803833,12.5024995803833,12.5024995803833,11.8840248698871,0,0,0,0
|
||||
2024-12-24 00:00:00-05:00,12.5349998474121,12.5349998474121,12.5349998474121,12.5349998474121,11.9149174109478,0,0,0,0
|
||||
2024-12-26 00:00:00-05:00,12.5349998474121,12.5349998474121,12.5349998474121,12.5349998474121,11.9149174109478,0,0,0,0
|
||||
2024-12-27 00:00:00-05:00,12.5450000762939,12.5450000762939,12.5450000762939,12.5450000762939,11.9244229476585,0,0,0,0
|
||||
2024-12-30 00:00:00-05:00,12.4825000762939,12.4825000762939,12.4825000762939,12.4825000762939,11.8650147029637,0,0,0,0
|
||||
2024-12-31 00:00:00-05:00,12.4750003814697,12.4750003814697,12.4750003814697,12.4750003814697,11.8578860036797,0,0,0,0
|
||||
2025-01-02 00:00:00-05:00,12.4300003051758,12.4300003051758,12.4300003051758,12.4300003051758,11.8151119949796,0,0,0,0
|
||||
2025-01-03 00:00:00-05:00,12.4624996185303,12.4624996185303,12.4624996185303,12.4624996185303,11.8460036295424,0,0,0,0
|
||||
2025-01-06 00:00:00-05:00,12.602499961853,12.602499961853,12.602499961853,12.602499961853,11.979078423998,0,0,0,0
|
||||
2025-01-07 00:00:00-05:00,12.6149997711182,12.6149997711182,12.6149997711182,12.6149997711182,11.9909598916373,0,0,0,0
|
||||
2025-01-08 00:00:00-05:00,12.5574998855591,12.5574998855591,12.5574998855591,12.5574998855591,11.9363044152979,0,0,0,0
|
||||
2025-01-10 00:00:00-05:00,12.3299999237061,12.3299999237061,12.3299999237061,12.3299999237061,11.7200584408688,0,0,0,0
|
||||
2025-01-13 00:00:00-05:00,12.3024997711182,12.3024997711182,12.3024997711182,12.3024997711182,11.6939186681634,0,0,0,0
|
||||
2025-01-14 00:00:00-05:00,12.3800001144409,12.3800001144409,12.3800001144409,12.3800001144409,11.7675852179242,0,0,0,0
|
||||
2025-01-15 00:00:00-05:00,12.539999961853,12.539999961853,12.539999961853,12.539999961853,11.9196701793032,0,0,0,0
|
||||
2025-01-16 00:00:00-05:00,12.6125001907349,12.6125001907349,12.6125001907349,12.6125001907349,11.9885839607086,0,0,0,0
|
||||
2025-01-17 00:00:00-05:00,12.7049999237061,12.7049999237061,12.7049999237061,12.7049999237061,12.0765079090375,0,0,0,0
|
||||
2025-01-21 00:00:00-05:00,12.8625001907349,12.8625001907349,12.8625001907349,12.8625001907349,12.2262169394878,0,0,0,0
|
||||
2025-01-22 00:00:00-05:00,12.8725004196167,12.8725004196167,12.8725004196167,12.8725004196167,12.2357224761984,0,0,0,0
|
||||
2025-01-23 00:00:00-05:00,12.9674997329712,12.9674997329712,12.9674997329712,12.9674997329712,12.3260223554561,0,0,0,0
|
||||
2025-01-24 00:00:00-05:00,13.0249996185303,13.0249996185303,13.0249996185303,13.0249996185303,12.3806778317955,0,0,0,0
|
||||
2025-01-27 00:00:00-05:00,13.0024995803833,13.0024995803833,13.0024995803833,13.0024995803833,12.3592908274455,0,0,0,0
|
||||
2025-01-28 00:00:00-05:00,13.0150003433228,13.0150003433228,13.0150003433228,13.0150003433228,12.3711732015827,0,0,0,0
|
||||
2025-01-29 00:00:00-05:00,13.0200004577637,13.0200004577637,13.0200004577637,13.0200004577637,12.3759259699381,0,0,0,0
|
||||
2025-01-30 00:00:00-05:00,13.1525001525879,13.1525001525879,13.1525001525879,13.1525001525879,12.5018711586117,0,0,0,0
|
||||
2025-01-31 00:00:00-05:00,13.0649995803833,13.0649995803833,13.0649995803833,13.0649995803833,12.4186990721403,0,0,0,0
|
||||
2025-02-03 00:00:00-05:00,12.8924999237061,12.8924999237061,12.8924999237061,12.8924999237061,12.2547326431219,0,0,0,0
|
||||
2025-02-04 00:00:00-05:00,13.0600004196167,13.0600004196167,13.0600004196167,13.0600004196167,12.4139472102828,0,0,0,0
|
||||
2025-02-05 00:00:00-05:00,13.1999998092651,13.1999998092651,13.1999998092651,13.1999998092651,12.5470210982405,0,0,0,0
|
||||
2025-02-06 00:00:00-05:00,13.352499961853,13.352499961853,13.352499961853,13.352499961853,12.6919773603355,0,0,0,0
|
||||
2025-02-07 00:00:00-05:00,13.2624998092651,13.2624998092651,13.2624998092651,13.2624998092651,12.6064293429353,0,0,0,0
|
||||
2025-02-10 00:00:00-05:00,13.3675003051758,13.3675003051758,13.3675003051758,13.3675003051758,12.7062356654015,0,0,0,0
|
||||
2025-02-11 00:00:00-05:00,13.3950004577637,13.3950004577637,13.3950004577637,13.3950004577637,12.7323754381068,0,0,0,0
|
||||
2025-02-12 00:00:00-05:00,13.477499961853,13.477499961853,13.477499961853,13.477499961853,12.8107938497251,0,0,0,0
|
||||
2025-02-13 00:00:00-05:00,13.5924997329712,13.5924997329712,13.5924997329712,13.5924997329712,12.920104802404,0,0,0,0
|
||||
2025-02-14 00:00:00-05:00,13.6374998092651,13.6374998092651,13.6374998092651,13.6374998092651,12.9628788111041,0,0,0,0
|
||||
2025-02-18 00:00:00-05:00,13.7425003051758,13.7425003051758,13.7425003051758,13.7425003051758,13.0626851335702,0,0,0,0
|
||||
2025-02-19 00:00:00-05:00,13.6049995422363,13.6049995422363,13.6049995422363,13.6049995422363,12.9319862700434,0,0,0,0
|
||||
2025-02-20 00:00:00-05:00,13.6724996566772,13.6724996566772,13.6724996566772,13.6724996566772,12.9961472830935,0,0,0,0
|
||||
2025-02-21 00:00:00-05:00,13.647500038147,13.647500038147,13.647500038147,13.647500038147,12.9723843478147,0,0,0,0
|
||||
2025-02-24 00:00:00-05:00,13.5349998474121,13.5349998474121,13.5349998474121,13.5349998474121,12.8654493260645,0,0,0,0
|
||||
2025-02-25 00:00:00-05:00,13.647500038147,13.647500038147,13.647500038147,13.647500038147,12.9723843478147,0,0,0,0
|
||||
2025-02-26 00:00:00-05:00,13.7299995422363,13.7299995422363,13.7299995422363,13.7299995422363,13.0508027594329,0,0,0,0
|
||||
2025-02-27 00:00:00-05:00,13.5900001525879,13.5900001525879,13.5900001525879,13.5900001525879,12.9177288714753,0,0,0,0
|
||||
2025-02-28 00:00:00-05:00,13.6549997329712,13.6549997329712,13.6549997329712,13.6549997329712,12.9795130470988,0,0,0,0
|
||||
2025-03-03 00:00:00-05:00,13.6700000762939,13.6700000762939,13.6700000762939,13.6700000762939,12.9937713521648,0,0,0,0
|
||||
2025-03-04 00:00:00-05:00,13.5900001525879,13.5900001525879,13.5900001525879,13.5900001525879,12.9177288714753,0,0,0,0
|
||||
2025-03-05 00:00:00-05:00,13.9575004577637,13.9575004577637,13.9575004577637,13.9575004577637,13.26704964036,0,0,0,0
|
||||
2025-03-06 00:00:00-05:00,13.9650001525879,13.9650001525879,13.9650001525879,13.9650001525879,13.274178339644,0,0,0,0
|
||||
2025-03-07 00:00:00-05:00,14.0675001144409,14.0675001144409,14.0675001144409,14.0675001144409,13.3716078246835,0,0,0,0
|
||||
2025-03-10 00:00:00-04:00,13.7775001525879,13.7775001525879,13.7775001525879,13.7775001525879,13.0959536055596,0,0,0,0
|
||||
2025-03-11 00:00:00-04:00,13.710000038147,13.710000038147,13.710000038147,13.710000038147,13.0317925925095,0,0,0,0
|
||||
2025-03-12 00:00:00-04:00,13.7674999237061,13.7674999237061,13.7674999237061,13.7674999237061,13.086448068849,0,0,0,0
|
||||
2025-03-13 00:00:00-04:00,13.6875,13.6875,13.6875,13.6875,13.0104055881595,0,0,0,0
|
||||
2025-03-14 00:00:00-04:00,13.9350004196167,13.9350004196167,13.9350004196167,13.9350004196167,13.2456626360099,0,0,0,0
|
||||
2025-03-17 00:00:00-04:00,14.1674995422363,14.1674995422363,14.1674995422363,14.1674995422363,13.4666604722965,0,0,0,0
|
||||
2025-03-18 00:00:00-04:00,14.2124996185303,14.2124996185303,14.2124996185303,14.2124996185303,13.5094344809966,0,0,0,0
|
||||
2025-03-19 00:00:00-04:00,14.227499961853,14.227499961853,14.227499961853,14.227499961853,13.5236927860626,0,0,0,0
|
||||
2025-03-20 00:00:00-04:00,14.1149997711182,14.1149997711182,14.1149997711182,14.1149997711182,13.4167577643124,0,0,0,0
|
||||
2025-03-21 00:00:00-04:00,14.0124998092651,14.0124998092651,14.0124998092651,14.0124998092651,13.3193282792728,0,0,0,0
|
||||
2025-03-24 00:00:00-04:00,14.0150003433228,14.0150003433228,14.0150003433228,14.0150003433228,13.3217051166994,0,0,0,0
|
||||
2025-03-25 00:00:00-04:00,14.0775003433228,14.0775003433228,14.0775003433228,14.0775003433228,13.3811133613942,0,0,0,0
|
||||
2025-03-26 00:00:00-04:00,13.9575004577637,13.9575004577637,13.9575004577637,13.9575004577637,13.26704964036,0,0,0,0
|
||||
2025-03-27 00:00:00-04:00,13.9549999237061,13.9549999237061,13.9549999237061,13.9549999237061,13.2646728029333,0,0,0,0
|
||||
2025-03-28 00:00:00-04:00,13.8000001907349,13.8000001907349,13.8000001907349,13.8000001907349,13.1173406099097,0,0,0,0
|
||||
2025-03-31 00:00:00-04:00,13.6824998855591,13.6824998855591,13.6824998855591,13.6824998855591,13.0056528198041,0,0,0,0
|
||||
2025-04-01 00:00:00-04:00,13.727499961853,13.727499961853,13.727499961853,13.727499961853,13.0484268285042,0,0,0,0
|
||||
2025-04-02 00:00:00-04:00,13.7475004196167,13.7475004196167,13.7475004196167,13.7475004196167,13.0674379019255,0,0,0,0
|
||||
2025-04-03 00:00:00-04:00,13.4674997329712,13.4674997329712,13.4674997329712,13.4674997329712,12.8012883130144,0,0,0,0
|
||||
2025-04-04 00:00:00-04:00,12.6424999237061,12.6424999237061,12.6424999237061,12.6424999237061,12.0170996643427,0,0,0,0
|
||||
2025-04-07 00:00:00-04:00,12.2799997329712,12.2799997329712,12.2799997329712,12.2799997329712,11.6725316638133,0,0,0,0
|
||||
2025-04-08 00:00:00-04:00,12.1774997711182,12.1774997711182,12.1774997711182,12.1774997711182,11.5751021787738,0,0,0,0
|
||||
2025-04-09 00:00:00-04:00,12.7574996948242,12.7574996948242,12.7574996948242,12.7574996948242,12.1264106170216,0,0,0,0
|
||||
2025-04-10 00:00:00-04:00,12.6899995803833,12.6899995803833,12.6899995803833,12.6899995803833,12.0622496039715,0,0,0,0
|
||||
2025-04-11 00:00:00-04:00,12.9399995803833,12.9399995803833,12.9399995803833,12.9399995803833,12.2998825827507,0,0,0,0
|
||||
2025-04-14 00:00:00-04:00,13.1350002288818,13.1350002288818,13.1350002288818,13.1350002288818,12.485236922617,0,0,0,0
|
||||
2025-04-15 00:00:00-04:00,13.2425003051758,13.2425003051758,13.2425003051758,13.2425003051758,12.5874191760119,0,0,0,0
|
||||
2025-04-16 00:00:00-04:00,13.1674995422363,13.1674995422363,13.1674995422363,13.1674995422363,12.5161285571798,0,0,0,0
|
||||
2025-04-17 00:00:00-04:00,13.289999961853,13.289999961853,13.289999961853,13.289999961853,12.6325691156407,0,0,0,0
|
||||
2025-04-21 00:00:00-04:00,13.2174997329712,13.2174997329712,13.2174997329712,13.2174997329712,12.5636553342352,0,0,0,0
|
||||
2025-04-22 00:00:00-04:00,13.4949998855591,13.4949998855591,13.4949998855591,13.4949998855591,12.8274280857198,0,0,0,0
|
||||
2025-04-23 00:00:00-04:00,13.6125001907349,13.6125001907349,13.6125001907349,13.6125001907349,12.9391158758253,0,0,0,0
|
||||
2025-04-24 00:00:00-04:00,13.7924995422363,13.7924995422363,13.7924995422363,13.7924995422363,13.1102110041277,0,0,0,0
|
||||
2025-04-25 00:00:00-04:00,13.835000038147,13.835000038147,13.835000038147,13.835000038147,13.1506090818991,0,0,0,0
|
||||
2025-04-28 00:00:00-04:00,13.9575004577637,13.9575004577637,13.9575004577637,13.9575004577637,13.26704964036,0,0,0,0
|
||||
2025-04-29 00:00:00-04:00,13.9624996185303,13.9624996185303,13.9624996185303,13.9624996185303,13.2718015022174,0,0,0,0
|
||||
2025-04-30 00:00:00-04:00,13.9650001525879,13.9650001525879,13.9650001525879,13.9650001525879,13.274178339644,0,0,0,0
|
||||
2025-05-01 00:00:00-04:00,13.9399995803833,13.9399995803833,13.9399995803833,13.9399995803833,13.2504144978674,0,0,0,0
|
||||
2025-05-02 00:00:00-04:00,14.1549997329712,14.1549997329712,14.1549997329712,14.1549997329712,13.4547790046571,0,0,0,0
|
||||
2025-05-05 00:00:00-04:00,14.1674995422363,14.1674995422363,14.1674995422363,14.1674995422363,13.4666604722965,0,0,0,0
|
||||
2025-05-06 00:00:00-04:00,14.2049999237061,14.2049999237061,14.2049999237061,14.2049999237061,13.5023057817125,0,0,0,0
|
||||
2025-05-07 00:00:00-04:00,14.1125001907349,14.1125001907349,14.1125001907349,14.1125001907349,13.4143818333836,0,0,0,0
|
||||
2025-05-08 00:00:00-04:00,14.1199998855591,14.1199998855591,14.1199998855591,14.1199998855591,13.4215105326677,0,0,0,0
|
||||
2025-05-09 00:00:00-04:00,14.2399997711182,14.2399997711182,14.2399997711182,14.2399997711182,13.5355742537019,0,0,0,0
|
||||
2025-05-12 00:00:00-04:00,14.4324998855591,14.4324998855591,14.4324998855591,14.4324998855591,13.7185517561416,0,0,0,0
|
||||
2025-05-13 00:00:00-04:00,14.4849996566772,14.4849996566772,14.4849996566772,14.4849996566772,13.7684544641258,0,0,0,0
|
||||
2025-05-14 00:00:00-04:00,14.4700002670288,14.4700002670288,14.4700002670288,14.4700002670288,13.7541970655577,0,0,0,0
|
||||
2025-05-15 00:00:00-04:00,14.5524997711182,14.5524997711182,14.5524997711182,14.5524997711182,13.8326154771759,0,0,0,0
|
||||
2025-05-16 00:00:00-04:00,14.6000003814697,14.6000003814697,14.6000003814697,14.6000003814697,13.8777663233026,0,0,0,0
|
||||
2025-05-19 00:00:00-04:00,14.710000038147,14.710000038147,14.710000038147,14.710000038147,13.9823245076262,0,0,0,0
|
||||
2025-05-20 00:00:00-04:00,14.772500038147,14.772500038147,14.772500038147,14.772500038147,14.041732752321,0,0,0,0
|
||||
2025-05-21 00:00:00-04:00,14.6925001144409,14.6925001144409,14.6925001144409,14.6925001144409,13.9656902716315,0,0,0,0
|
||||
2025-05-22 00:00:00-04:00,14.6899995803833,14.6899995803833,14.6899995803833,14.6899995803833,13.9633134342049,0,0,0,0
|
||||
2025-05-23 00:00:00-04:00,14.7075004577637,14.7075004577637,14.7075004577637,14.7075004577637,13.9799485766975,0,0,0,0
|
||||
2025-05-27 00:00:00-04:00,14.8649997711182,14.8649997711182,14.8649997711182,14.8649997711182,14.1296567006499,0,0,0,0
|
||||
2025-05-28 00:00:00-04:00,14.7174997329712,14.7174997329712,14.7174997329712,14.7174997329712,13.9894532069102,0,0,0,0
|
||||
2025-05-29 00:00:00-04:00,14.8199996948242,14.8199996948242,14.8199996948242,14.8199996948242,14.0868826919498,0,0,0,0
|
||||
2025-05-30 00:00:00-04:00,14.7799997329712,14.7799997329712,14.7799997329712,14.7799997329712,14.048861451605,0,0,0,0
|
||||
2025-06-02 00:00:00-04:00,14.8950004577637,14.8950004577637,14.8950004577637,14.8950004577637,14.1581733107818,0,0,0,0
|
||||
2025-06-03 00:00:00-04:00,14.8450002670288,14.8450002670288,14.8450002670288,14.8450002670288,14.1106465337264,0,0,0,0
|
||||
2025-06-04 00:00:00-04:00,14.9300003051758,14.9300003051758,14.9300003051758,14.9300003051758,14.1914417827713,0,0,0,0
|
||||
2025-06-05 00:00:00-04:00,14.9700002670288,14.9700002670288,14.9700002670288,14.9700002670288,14.229463023116,0,0,0,0
|
||||
2025-06-06 00:00:00-04:00,15.0275001525879,15.0275001525879,15.0275001525879,15.0275001525879,14.2841184994555,0,0,0,0
|
||||
2025-06-09 00:00:00-04:00,15.0775003433228,15.0775003433228,15.0775003433228,15.0775003433228,14.3316452765109,0,0,0,0
|
||||
2025-06-10 00:00:00-04:00,15.0775003433228,15.0775003433228,15.0775003433228,15.0775003433228,14.3316452765109,0,0,0,0
|
||||
2025-06-11 00:00:00-04:00,15.1300001144409,15.1300001144409,15.1300001144409,15.1300001144409,14.381547984495,0,0,0,0
|
||||
2025-06-12 00:00:00-04:00,15.1925001144409,15.1925001144409,15.1925001144409,15.1925001144409,14.4409562291898,0,0,0,0
|
||||
2025-06-13 00:00:00-04:00,14.9899997711182,14.9899997711182,14.9899997711182,14.9899997711182,14.2484731900394,0,0,0,0
|
||||
2025-06-16 00:00:00-04:00,15.1149997711182,15.1149997711182,15.1149997711182,15.1149997711182,14.367289679429,0,0,0,0
|
||||
2025-06-17 00:00:00-04:00,14.960000038147,14.960000038147,14.960000038147,14.960000038147,14.2199574864054,0,0,0,0
|
||||
2025-06-18 00:00:00-04:00,14.897500038147,14.897500038147,14.897500038147,14.897500038147,14.1605492417106,0,0,0,0
|
||||
2025-06-20 00:00:00-04:00,14.7974996566772,14.7974996566772,14.7974996566772,14.7974996566772,14.0654956875997,0,0,0,0
|
||||
2025-06-23 00:00:00-04:00,14.8675003051758,14.8675003051758,14.8675003051758,14.8675003051758,14.1320335380765,0,0,0,0
|
||||
2025-06-24 00:00:00-04:00,15.0900001525879,15.0900001525879,15.0900001525879,15.0900001525879,14.3435267441503,0,0,0,0
|
||||
2025-06-25 00:00:00-04:00,15.0249996185303,15.0249996185303,15.0249996185303,15.0249996185303,14.2817416620289,0,0,0,0
|
||||
2025-06-26 00:00:00-04:00,15.1424999237061,15.1424999237061,15.1424999237061,15.1424999237061,14.3934294521344,0,0,0,0
|
||||
2025-06-27 00:00:00-04:00,15.2650003433228,15.2650003433228,15.2650003433228,15.2650003433228,14.5098700105953,0,0,0,0
|
||||
2025-06-30 00:00:00-04:00,15.2674999237061,15.2674999237061,15.2674999237061,15.2674999237061,14.512245941524,0,0,0,0
|
||||
2025-07-01 00:00:00-04:00,15.3149995803833,15.3149995803833,15.3149995803833,15.3149995803833,14.5573958811528,0,0,0,0
|
||||
2025-07-02 00:00:00-04:00,15.3850002288818,15.3850002288818,15.3850002288818,15.3850002288818,14.6239337316295,0,0,0,0
|
||||
2025-07-03 00:00:00-04:00,15.3850002288818,15.3850002288818,15.3850002288818,15.3850002288818,14.6239337316295,0,0,0,0
|
||||
2025-07-07 00:00:00-04:00,15.2600002288818,15.2600002288818,15.2600002288818,15.2600002288818,14.5051172422399,0,0,0,0
|
||||
2025-07-08 00:00:00-04:00,15.3374996185303,15.3374996185303,15.3374996185303,15.3374996185303,14.5787828855028,0,0,0,0
|
||||
2025-07-09 00:00:00-04:00,15.3800001144409,15.3800001144409,15.3800001144409,15.3800001144409,14.6191809632742,0,0,0,0
|
||||
2025-07-10 00:00:00-04:00,15.4300003051758,15.4300003051758,15.4300003051758,15.4300003051758,14.6667077403296,0,0,0,0
|
||||
2025-07-11 00:00:00-04:00,15.3149995803833,15.3149995803833,15.3149995803833,15.3149995803833,14.5573958811528,0,0,0,0
|
||||
2025-07-14 00:00:00-04:00,15.2875003814697,15.2875003814697,15.2875003814697,15.2875003814697,14.5312570149453,0,0,0,0
|
||||
2025-07-15 00:00:00-04:00,15.2299995422363,15.2299995422363,15.2299995422363,15.2299995422363,14.476600632108,0,0,0,0
|
||||
2025-07-16 00:00:00-04:00,15.2700004577637,15.2700004577637,15.2700004577637,15.2700004577637,14.5146227789506,0,0,0,0
|
||||
2025-07-17 00:00:00-04:00,15.3125,15.3125,15.3125,15.3125,14.5550199502241,0,0,0,0
|
||||
2025-07-18 00:00:00-04:00,15.3199996948242,15.3199996948242,15.3199996948242,15.3199996948242,14.5621486495081,0,0,0,0
|
||||
2025-07-21 00:00:00-04:00,15.3774995803833,15.3774995803833,15.3774995803833,15.3774995803833,14.6168041258476,0,0,0,0
|
||||
2025-07-22 00:00:00-04:00,15.4350004196167,15.4350004196167,15.4350004196167,15.4350004196167,14.6714605086849,0,0,0,0
|
||||
2025-07-23 00:00:00-04:00,15.6975002288818,15.6975002288818,15.6975002288818,15.6975002288818,14.9209749551035,0,0,0,0
|
||||
2025-07-24 00:00:00-04:00,15.7174997329712,15.7174997329712,15.7174997329712,15.7174997329712,14.9399851220269,0,0,0,0
|
||||
2025-07-25 00:00:00-04:00,15.6674995422363,15.6674995422363,15.6674995422363,15.6674995422363,14.8924583449715,0,0,0,0
|
||||
2025-07-28 00:00:00-04:00,15.539999961853,15.539999961853,15.539999961853,15.539999961853,14.7712659246532,0,0,0,0
|
||||
2025-07-29 00:00:00-04:00,15.5200004577637,15.5200004577637,15.5200004577637,15.5200004577637,14.7522557577298,0,0,0,0
|
||||
2025-07-30 00:00:00-04:00,15.4350004196167,15.4350004196167,15.4350004196167,15.4350004196167,14.6714605086849,0,0,0,0
|
||||
2025-07-31 00:00:00-04:00,15.2624998092651,15.2624998092651,15.2624998092651,15.2624998092651,14.5074931731687,0,0,0,0
|
||||
2025-08-01 00:00:00-04:00,15.1774997711182,15.1774997711182,15.1774997711182,15.1774997711182,14.4266979241238,0,0,0,0
|
||||
2025-08-04 00:00:00-04:00,15.3424997329712,15.3424997329712,15.3424997329712,15.3424997329712,14.5835356538582,0,0,0,0
|
||||
2025-08-05 00:00:00-04:00,15.352499961853,15.352499961853,15.352499961853,15.352499961853,14.5930411905688,0,0,0,0
|
||||
2025-08-06 00:00:00-04:00,15.3374996185303,15.3374996185303,15.3374996185303,15.3374996185303,14.5787828855028,0,0,0,0
|
||||
2025-08-07 00:00:00-04:00,15.4875001907349,15.4875001907349,15.4875001907349,15.4875001907349,14.7213632166691,0,0,0,0
|
||||
2025-08-08 00:00:00-04:00,15.5299997329712,15.5299997329712,15.5299997329712,15.5299997329712,14.7617603879425,0,0,0,0
|
||||
2025-08-11 00:00:00-04:00,15.5100002288818,15.5100002288818,15.5100002288818,15.5100002288818,14.7427502210191,0,0,0,0
|
||||
2025-08-12 00:00:00-04:00,15.6925001144409,15.6925001144409,15.6925001144409,15.6925001144409,14.9162221867481,0,0,0,0
|
||||
2025-08-13 00:00:00-04:00,15.8299999237061,15.8299999237061,15.8299999237061,15.8299999237061,15.0469201437771,0,0,0,0
|
||||
2025-08-14 00:00:00-04:00,15.7775001525879,15.7775001525879,15.7775001525879,15.7775001525879,14.997017435793,0,0,0,0
|
||||
2025-08-15 00:00:00-04:00,15.835000038147,15.835000038147,15.835000038147,15.835000038147,15.0516729121324,0,0,0,0
|
||||
2025-08-18 00:00:00-04:00,15.8100004196167,15.8100004196167,15.8100004196167,15.8100004196167,15.0279099768537,0,0,0,0
|
||||
2025-08-19 00:00:00-04:00,15.8575000762939,15.8575000762939,15.8575000762939,15.8575000762939,15.0730599164825,0,0,0,0
|
||||
2025-08-20 00:00:00-04:00,15.8824996948242,15.8824996948242,15.8824996948242,15.8824996948242,15.0968228517612,0,0,0,0
|
||||
2025-08-21 00:00:00-04:00,15.8549995422363,15.8549995422363,15.8549995422363,15.8549995422363,15.0706830790559,0,0,0,0
|
||||
2025-08-22 00:00:00-04:00,16.0849990844727,16.0849990844727,16.0849990844727,16.0849990844727,15.2893049844137,0,0,0,0
|
||||
2025-08-25 00:00:00-04:00,15.9624996185303,15.9624996185303,15.9624996185303,15.9624996185303,15.1728653324508,0,0,0,0
|
||||
2025-08-26 00:00:00-04:00,15.8924999237061,15.8924999237061,15.8924999237061,15.8924999237061,15.1063283884719,0,0,0,0
|
||||
2025-08-27 00:00:00-04:00,15.8800001144409,15.8800001144409,15.8800001144409,15.8800001144409,15.0944469208325,0,0,0,0
|
||||
2025-08-28 00:00:00-04:00,15.9099998474121,15.9099998474121,15.9099998474121,15.9099998474121,15.1229626244666,0,0,0,0
|
||||
2025-08-29 00:00:00-04:00,15.8900003433228,15.8900003433228,15.8900003433228,15.8900003433228,15.1039524575432,0,0,0,0
|
||||
2025-09-02 00:00:00-04:00,15.7550001144409,15.7550001144409,15.7550001144409,15.7550001144409,14.9756304314429,0,0,0,0
|
||||
2025-09-03 00:00:00-04:00,15.7550001144409,15.7550001144409,15.7550001144409,15.7550001144409,14.9756304314429,0,0,0,0
|
||||
2025-09-04 00:00:00-04:00,15.7849998474121,15.7849998474121,15.7849998474121,15.7849998474121,15.004146135077,0,0,0,0
|
||||
2025-09-05 00:00:00-04:00,15.9250001907349,15.9250001907349,15.9250001907349,15.9250001907349,15.1372209295326,0,0,0,0
|
||||
2025-09-08 00:00:00-04:00,16.0249996185303,16.0249996185303,16.0249996185303,16.0249996185303,15.2322735771455,0,0,0,0
|
||||
2025-09-09 00:00:00-04:00,16.0575008392334,16.0575008392334,16.0575008392334,16.0575008392334,15.2631670247041,0,0,0,0
|
||||
2025-09-10 00:00:00-04:00,16.0750007629395,16.0750007629395,16.0750007629395,16.0750007629395,15.2798012606988,0,0,0,0
|
||||
2025-09-11 00:00:00-04:00,16.2900009155273,16.2900009155273,16.2900009155273,16.2900009155273,15.4841657674886,0,0,0,0
|
||||
2025-09-12 00:00:00-04:00,16.2299995422363,16.2299995422363,16.2299995422363,16.2299995422363,15.4271325472246,0,0,0,0
|
||||
2025-09-15 00:00:00-04:00,16.3075008392334,16.3075008392334,16.3075008392334,16.3075008392334,15.5008000034833,0,0,0,0
|
||||
2025-09-16 00:00:00-04:00,16.3024997711182,16.3024997711182,16.3024997711182,16.3024997711182,15.4960463286301,0,0,0,0
|
||||
2025-09-17 00:00:00-04:00,16.3474998474121,16.3474998474121,16.3474998474121,16.3474998474121,15.5388203373302,0,0,0,0
|
||||
2025-09-18 00:00:00-04:00,16.3125,16.3125,16.3125,16.3125,15.5055518653407,0,0,0,0
|
||||
2025-09-19 00:00:00-04:00,16.2749996185303,16.2749996185303,16.2749996185303,16.2749996185303,15.4699065559247,0,0,0,0
|
||||
2025-09-22 00:00:00-04:00,16.3199996948242,16.3199996948242,16.3199996948242,16.3199996948242,15.5126805646248,0,0,0,0
|
||||
2025-09-23 00:00:00-04:00,16.3250007629395,16.3250007629395,16.3250007629395,16.3250007629395,15.517434239478,0,0,0,0
|
||||
2025-09-24 00:00:00-04:00,16.2900009155273,16.2900009155273,16.2900009155273,16.2900009155273,15.4841657674886,0,0,0,0
|
||||
2025-09-25 00:00:00-04:00,16.1324996948242,16.1324996948242,16.1324996948242,16.1324996948242,15.3344558305404,0,0,0,0
|
||||
2025-09-26 00:00:00-04:00,16.2124996185303,16.2124996185303,16.2124996185303,16.2124996185303,15.4104983112299,0,0,0,0
|
||||
2025-09-29 00:00:00-04:00,16.3274993896484,16.3274993896484,16.3274993896484,16.3274993896484,15.5198092639088,0,0,0,0
|
||||
2025-09-30 00:00:00-04:00,16.4500007629395,16.4500007629395,16.4500007629395,16.4500007629395,15.6362507288676,0,0,0,0
|
||||
2025-10-01 00:00:00-04:00,16.5550003051758,16.5550003051758,16.5550003051758,16.5550003051758,15.7360561448359,0,0,0,0
|
||||
2025-10-02 00:00:00-04:00,16.5349998474121,16.5349998474121,16.5349998474121,16.5349998474121,15.7170450714145,0,0,0,0
|
||||
2025-10-03 00:00:00-04:00,16.625,16.625,16.625,16.625,15.8025930888147,0,0,0,0
|
||||
2025-10-06 00:00:00-04:00,16.6224994659424,16.6224994659424,16.6224994659424,16.6224994659424,15.8002162513881,0,0,0,0
|
||||
2025-10-07 00:00:00-04:00,16.4825000762939,16.4825000762939,16.4825000762939,16.4825000762939,15.6671423634304,0,0,0,0
|
||||
2025-10-08 00:00:00-04:00,16.5300006866455,16.5300006866455,16.5300006866455,16.5300006866455,15.7122932095571,0,0,0,0
|
||||
2025-10-09 00:00:00-04:00,16.4274997711182,16.4274997711182,16.4274997711182,16.4274997711182,15.6148628180197,0,0,0,0
|
||||
2025-10-10 00:00:00-04:00,16.1149997711182,16.1149997711182,16.1149997711182,16.1149997711182,15.3178215945457,0,0,0,0
|
||||
2025-10-13 00:00:00-04:00,16.2775001525879,16.2775001525879,16.2775001525879,16.2775001525879,15.4722833933513,0,0,0,0
|
||||
2025-10-14 00:00:00-04:00,16.2975006103516,16.2975006103516,16.2975006103516,16.2975006103516,15.4912944667726,0,0,0,0
|
||||
2025-10-15 00:00:00-04:00,16.3675003051758,16.3675003051758,16.3675003051758,16.3675003051758,15.5578314107515,0,0,0,0
|
||||
2025-10-16 00:00:00-04:00,16.3875007629395,16.3875007629395,16.3875007629395,16.3875007629395,15.5768424841728,0,0,0,0
|
||||
2025-10-17 00:00:00-04:00,16.3999996185303,16.3999996185303,16.3999996185303,16.3999996185303,15.5887230453143,0,0,0,0
|
||||
2025-10-20 00:00:00-04:00,16.4750003814697,16.4750003814697,16.4750003814697,16.4750003814697,15.6600136641463,0,0,0,0
|
||||
2025-10-21 00:00:00-04:00,16.4099998474121,16.4099998474121,16.4099998474121,16.4099998474121,15.598228582025,0,0,0,0
|
||||
2025-10-22 00:00:00-04:00,16.4074993133545,16.4074993133545,16.4074993133545,16.4074993133545,15.5958517445984,0,0,0,0
|
||||
2025-10-23 00:00:00-04:00,16.4599990844727,16.4599990844727,16.4599990844727,16.4599990844727,15.6457544525825,0,0,0,0
|
||||
2025-10-24 00:00:00-04:00,16.5025005340576,16.5025005340576,16.5025005340576,16.5025005340576,15.6861534368517,0,0,0,0
|
||||
2025-10-27 00:00:00-04:00,16.6000003814697,16.6000003814697,16.6000003814697,16.6000003814697,15.7788301535359,0,0,4,0
|
||||
2025-10-28 00:00:00-04:00,16.5599994659424,16.5599994659424,16.5599994659424,16.5599994659424,15.7408080066933,0,0,0,0
|
||||
2025-10-29 00:00:00-04:00,16.5900001525879,16.5900001525879,16.5900001525879,16.5900001525879,15.7693246168253,0,0,0,0
|
||||
2025-10-30 00:00:00-04:00,16.4400005340576,16.4400005340576,16.4400005340576,16.4400005340576,15.6267451921569,0,0,0,0
|
||||
2025-10-31 00:00:00-04:00,16.4400005340576,16.4400005340576,16.4400005340576,16.4400005340576,15.6267451921569,0,0,0,0
|
||||
2025-11-03 00:00:00-05:00,16.4300003051758,16.4300003051758,16.4300003051758,16.4300003051758,15.6172396554463,0,0,0,0
|
||||
2025-11-04 00:00:00-05:00,16.3199996948242,16.3199996948242,16.3199996948242,16.3199996948242,15.5126805646248,0,0,0,0
|
||||
2025-11-05 00:00:00-05:00,16.3899993896484,16.3899993896484,16.3899993896484,16.3899993896484,15.5792175086036,0,0,0,0
|
||||
2025-11-06 00:00:00-05:00,16.4400005340576,16.4400005340576,16.4400005340576,16.4400005340576,15.6267451921569,0,0,0,0
|
||||
2025-11-07 00:00:00-05:00,16.4899997711182,16.4899997711182,16.4899997711182,16.4899997711182,15.6742710627145,0,0,0,0
|
||||
2025-11-10 00:00:00-05:00,16.6800003051758,16.6800003051758,16.6800003051758,16.6800003051758,15.8548726342254,0,0,0,0
|
||||
2025-11-11 00:00:00-05:00,16.8400001525879,16.8400001525879,16.8400001525879,16.8400001525879,16.0069575956044,0,0,0,0
|
||||
2025-11-12 00:00:00-05:00,16.9599990844727,16.9599990844727,16.9599990844727,16.9599990844727,16.1210204101408,0,0,0,0
|
||||
2025-11-13 00:00:00-05:00,16.8199996948242,16.8199996948242,16.8199996948242,16.8199996948242,15.9879465221831,0,0,0,0
|
||||
2025-11-14 00:00:00-05:00,16.6599998474121,16.6599998474121,16.6599998474121,16.6599998474121,15.8358615608041,0,0,0,0
|
||||
2025-11-17 00:00:00-05:00,16.4899997711182,16.4899997711182,16.4899997711182,16.4899997711182,15.6742710627145,0,0,0,0
|
||||
2025-11-18 00:00:00-05:00,16.3299999237061,16.3299999237061,16.3299999237061,16.3299999237061,15.5221861013354,0,0,0,0
|
||||
2025-11-19 00:00:00-05:00,16.2299995422363,16.2299995422363,16.2299995422363,16.2299995422363,15.4271325472246,0,0,0,0
|
||||
2025-11-20 00:00:00-05:00,16.0699996948242,16.0699996948242,16.0699996948242,16.0699996948242,15.2750475858456,0,0,0,0
|
||||
2025-11-21 00:00:00-05:00,16.25,16.25,16.25,16.25,15.4461436206459,0,0,0,0
|
||||
2025-11-24 00:00:00-05:00,16.3099994659424,16.3099994659424,16.3099994659424,16.3099994659424,15.5031750279141,0,0,0,0
|
||||
2025-11-25 00:00:00-05:00,16.5100002288818,16.5100002288818,16.5100002288818,16.5100002288818,15.6932821361358,0,0,0,0
|
||||
2025-11-26 00:00:00-05:00,16.6599998474121,16.6599998474121,16.6599998474121,16.6599998474121,15.8358615608041,0,0,0,0
|
||||
2025-11-28 00:00:00-05:00,16.7299995422363,16.7299995422363,16.7299995422363,16.7299995422363,15.902398504783,0,0,0,0
|
||||
2025-12-01 00:00:00-05:00,16.6900005340576,16.6900005340576,16.6900005340576,16.6900005340576,15.8643781709361,0,0,0,0
|
||||
2025-12-02 00:00:00-05:00,16.7700004577637,16.7700004577637,16.7700004577637,16.7700004577637,15.9404206516256,0,0,0,0
|
||||
2025-12-03 00:00:00-05:00,16.8199996948242,16.8199996948242,16.8199996948242,16.8199996948242,15.9879465221831,0,0,0,0
|
||||
2025-12-04 00:00:00-05:00,16.8799991607666,16.8799991607666,16.8799991607666,16.8799991607666,16.0449779294513,0,0,0,0
|
||||
2025-12-05 00:00:00-05:00,16.8400001525879,16.8400001525879,16.8400001525879,16.8400001525879,16.0069575956044,0,0,0,0
|
||||
2025-12-08 00:00:00-05:00,16.8600006103516,16.8600006103516,16.8600006103516,16.8600006103516,16.0259686690258,0,0,0,0
|
||||
2025-12-09 00:00:00-05:00,16.8299999237061,16.8299999237061,16.8299999237061,16.8299999237061,15.9974520588938,0,0,0,0
|
||||
2025-12-10 00:00:00-05:00,16.9500007629395,16.9500007629395,16.9500007629395,16.9500007629395,16.1115166864259,0,0,0,0
|
||||
2025-12-11 00:00:00-05:00,17.0799999237061,17.0799999237061,17.0799999237061,17.0799999237061,16.235085037673,0,0,0,0
|
||||
2025-12-12 00:00:00-05:00,17.0200004577637,17.0200004577637,17.0200004577637,17.0200004577637,16.1780536304048,0,0,0,0
|
||||
2025-12-15 00:00:00-05:00,17.0900001525879,17.0900001525879,17.0900001525879,17.0900001525879,16.2445905743836,0,0,0,0
|
||||
2025-12-16 00:00:00-05:00,16.9899997711182,16.9899997711182,16.9899997711182,16.9899997711182,16.1495370202728,0,0,0,0
|
||||
2025-12-17 00:00:00-05:00,16.9200000762939,16.9200000762939,16.9200000762939,16.9200000762939,16.0830000762939,0,0,0,0
|
||||
2025-12-18 00:00:00-05:00,16.2199993133545,16.2199993133545,16.2199993133545,16.2199993133545,16.2199993133545,0,0.837,0,0.417
|
||||
2025-12-19 00:00:00-05:00,16.2999992370605,16.2999992370605,16.2999992370605,16.2999992370605,16.2999992370605,0,0,0,0
|
||||
2025-12-22 00:00:00-05:00,16.3700008392334,16.3700008392334,16.3700008392334,16.3700008392334,16.3700008392334,0,0,0,0
|
||||
2025-12-23 00:00:00-05:00,16.4599990844727,16.4599990844727,16.4599990844727,16.4599990844727,16.4599990844727,0,0,0,0
|
||||
2025-12-24 00:00:00-05:00,16.4599990844727,16.4599990844727,16.4599990844727,16.4599990844727,16.4599990844727,0,0,0,0
|
||||
2025-12-26 00:00:00-05:00,16.5300006866455,16.5300006866455,16.5300006866455,16.5300006866455,16.5300006866455,0,0,0,0
|
||||
2025-12-29 00:00:00-05:00,16.5100002288818,16.5100002288818,16.5100002288818,16.5100002288818,16.5100002288818,0,0,0,0
|
||||
2025-12-30 00:00:00-05:00,16.5400009155273,16.5400009155273,16.5400009155273,16.5400009155273,16.5400009155273,0,0,0,0
|
||||
2025-12-31 00:00:00-05:00,16.4599990844727,16.4599990844727,16.4599990844727,16.4599990844727,16.4599990844727,0,0,0,0
|
||||
2026-01-02 00:00:00-05:00,16.6299991607666,16.6299991607666,16.6299991607666,16.6299991607666,16.6299991607666,0,0,0,0
|
||||
2026-01-05 00:00:00-05:00,16.7900009155273,16.7900009155273,16.7900009155273,16.7900009155273,16.7900009155273,0,0,0,0
|
||||
2026-01-06 00:00:00-05:00,16.8299999237061,16.8299999237061,16.8299999237061,16.8299999237061,16.8299999237061,0,0,0,0
|
||||
2026-01-07 00:00:00-05:00,16.6900005340576,16.6900005340576,16.6900005340576,16.6900005340576,16.6900005340576,0,0,0,0
|
||||
2026-01-08 00:00:00-05:00,16.7600002288818,16.7600002288818,16.7600002288818,16.7600002288818,16.7600002288818,0,0,0,0
|
||||
2026-01-09 00:00:00-05:00,16.8099994659424,16.8099994659424,16.8099994659424,16.8099994659424,16.8099994659424,0,0,0,0
|
||||
|
503
tests/data/DODFX-1d-cg-double-count.csv
Normal file
503
tests/data/DODFX-1d-cg-double-count.csv
Normal file
@@ -0,0 +1,503 @@
|
||||
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Capital Gains
|
||||
2024-01-10 00:00:00-05:00,12.147500038147,12.147500038147,12.147500038147,12.147500038147,11.0047464370728,0,0,0,0
|
||||
2024-01-11 00:00:00-05:00,12.1350002288818,12.1350002288818,12.1350002288818,12.1350002288818,10.9934225082397,0,0,0,0
|
||||
2024-01-12 00:00:00-05:00,12.1400003433228,12.1400003433228,12.1400003433228,12.1400003433228,10.9979524612427,0,0,0,0
|
||||
2024-01-16 00:00:00-05:00,11.9300003051758,11.9300003051758,11.9300003051758,11.9300003051758,10.8077077865601,0,0,0,0
|
||||
2024-01-17 00:00:00-05:00,11.7924995422363,11.7924995422363,11.7924995422363,11.7924995422363,10.683141708374,0,0,0,0
|
||||
2024-01-18 00:00:00-05:00,11.8400001525879,11.8400001525879,11.8400001525879,11.8400001525879,10.7261743545532,0,0,0,0
|
||||
2024-01-19 00:00:00-05:00,11.9025001525879,11.9025001525879,11.9025001525879,11.9025001525879,10.7827949523926,0,0,0,0
|
||||
2024-01-22 00:00:00-05:00,11.9075002670288,11.9075002670288,11.9075002670288,11.9075002670288,10.7873249053955,0,0,0,0
|
||||
2024-01-23 00:00:00-05:00,11.9224996566772,11.9224996566772,11.9224996566772,11.9224996566772,10.8009128570557,0,0,0,0
|
||||
2024-01-24 00:00:00-05:00,11.9925003051758,11.9925003051758,11.9925003051758,11.9925003051758,10.8643283843994,0,0,0,0
|
||||
2024-01-25 00:00:00-05:00,11.9575004577637,11.9575004577637,11.9575004577637,11.9575004577637,10.8326215744019,0,0,0,0
|
||||
2024-01-26 00:00:00-05:00,12.0325002670288,12.0325002670288,12.0325002670288,12.0325002670288,10.9005651473999,0,0,0,0
|
||||
2024-01-29 00:00:00-05:00,12.0749998092651,12.0749998092651,12.0749998092651,12.0749998092651,10.9390668869019,0,0,0,0
|
||||
2024-01-30 00:00:00-05:00,12.0299997329712,12.0299997329712,12.0299997329712,12.0299997329712,10.8983001708984,0,0,0,0
|
||||
2024-01-31 00:00:00-05:00,11.9324998855591,11.9324998855591,11.9324998855591,11.9324998855591,10.8099727630615,0,0,0,0
|
||||
2024-02-01 00:00:00-05:00,11.9825000762939,11.9825000762939,11.9825000762939,11.9825000762939,10.8552694320679,0,0,0,0
|
||||
2024-02-02 00:00:00-05:00,11.9125003814697,11.9125003814697,11.9125003814697,11.9125003814697,10.7918539047241,0,0,0,0
|
||||
2024-02-05 00:00:00-05:00,11.8400001525879,11.8400001525879,11.8400001525879,11.8400001525879,10.7261743545532,0,0,0,0
|
||||
2024-02-06 00:00:00-05:00,11.9274997711182,11.9274997711182,11.9274997711182,11.9274997711182,10.8054428100586,0,0,0,0
|
||||
2024-02-07 00:00:00-05:00,11.8699998855591,11.8699998855591,11.8699998855591,11.8699998855591,10.7533521652222,0,0,0,0
|
||||
2024-02-08 00:00:00-05:00,11.7974996566772,11.7974996566772,11.7974996566772,11.7974996566772,10.687671661377,0,0,0,0
|
||||
2024-02-09 00:00:00-05:00,11.8050003051758,11.8050003051758,11.8050003051758,11.8050003051758,10.6944675445557,0,0,0,0
|
||||
2024-02-12 00:00:00-05:00,11.875,11.875,11.875,11.875,10.7578821182251,0,0,0,0
|
||||
2024-02-13 00:00:00-05:00,11.727499961853,11.727499961853,11.727499961853,11.727499961853,10.6242580413818,0,0,0,0
|
||||
2024-02-14 00:00:00-05:00,11.7974996566772,11.7974996566772,11.7974996566772,11.7974996566772,10.687671661377,0,0,0,0
|
||||
2024-02-15 00:00:00-05:00,11.9049997329712,11.9049997329712,11.9049997329712,11.9049997329712,10.7850589752197,0,0,0,0
|
||||
2024-02-16 00:00:00-05:00,11.9624996185303,11.9624996185303,11.9624996185303,11.9624996185303,10.8371505737305,0,0,0,0
|
||||
2024-02-20 00:00:00-05:00,12.0349998474121,12.0349998474121,12.0349998474121,12.0349998474121,10.9028301239014,0,0,0,0
|
||||
2024-02-21 00:00:00-05:00,12.0550003051758,12.0550003051758,12.0550003051758,12.0550003051758,10.9209489822388,0,0,0,0
|
||||
2024-02-22 00:00:00-05:00,12.1800003051758,12.1800003051758,12.1800003051758,12.1800003051758,11.0341892242432,0,0,0,0
|
||||
2024-02-23 00:00:00-05:00,12.1774997711182,12.1774997711182,12.1774997711182,12.1774997711182,11.0319242477417,0,0,0,0
|
||||
2024-02-26 00:00:00-05:00,12.1525001525879,12.1525001525879,12.1525001525879,12.1525001525879,11.0092763900757,0,0,0,0
|
||||
2024-02-27 00:00:00-05:00,12.1724996566772,12.1724996566772,12.1724996566772,12.1724996566772,11.0273942947388,0,0,0,0
|
||||
2024-02-28 00:00:00-05:00,12.1175003051758,12.1175003051758,12.1175003051758,12.1175003051758,10.9775695800781,0,0,0,0
|
||||
2024-02-29 00:00:00-05:00,12.0900001525879,12.0900001525879,12.0900001525879,12.0900001525879,10.9526567459106,0,0,0,0
|
||||
2024-03-01 00:00:00-05:00,12.2150001525879,12.2150001525879,12.2150001525879,12.2150001525879,11.065896987915,0,0,0,0
|
||||
2024-03-04 00:00:00-05:00,12.1549997329712,12.1549997329712,12.1549997329712,12.1549997329712,11.0115404129028,0,0,0,0
|
||||
2024-03-05 00:00:00-05:00,12.1374998092651,12.1374998092651,12.1374998092651,12.1374998092651,10.9956874847412,0,0,0,0
|
||||
2024-03-06 00:00:00-05:00,12.2674999237061,12.2674999237061,12.2674999237061,12.2674999237061,11.1134576797485,0,0,0,0
|
||||
2024-03-07 00:00:00-05:00,12.3699998855591,12.3699998855591,12.3699998855591,12.3699998855591,11.2063150405884,0,0,0,0
|
||||
2024-03-08 00:00:00-05:00,12.3874998092651,12.3874998092651,12.3874998092651,12.3874998092651,11.2221689224243,0,0,0,0
|
||||
2024-03-11 00:00:00-04:00,12.4174995422363,12.4174995422363,12.4174995422363,12.4174995422363,11.2493467330933,0,0,0,0
|
||||
2024-03-12 00:00:00-04:00,12.5299997329712,12.5299997329712,12.5299997329712,12.5299997329712,11.351263999939,0,0,0,0
|
||||
2024-03-13 00:00:00-04:00,12.5775003433228,12.5775003433228,12.5775003433228,12.5775003433228,11.3942956924438,0,0,0,0
|
||||
2024-03-14 00:00:00-04:00,12.4875001907349,12.4875001907349,12.4875001907349,12.4875001907349,11.3127613067627,0,0,0,0
|
||||
2024-03-15 00:00:00-04:00,12.4549999237061,12.4549999237061,12.4549999237061,12.4549999237061,11.2833194732666,0,0,0,0
|
||||
2024-03-18 00:00:00-04:00,12.4700002670288,12.4700002670288,12.4700002670288,12.4700002670288,11.2969083786011,0,0,0,0
|
||||
2024-03-19 00:00:00-04:00,12.477499961853,12.477499961853,12.477499961853,12.477499961853,11.3037023544312,0,0,0,0
|
||||
2024-03-20 00:00:00-04:00,12.5825004577637,12.5825004577637,12.5825004577637,12.5825004577637,11.3988256454468,0,0,0,0
|
||||
2024-03-21 00:00:00-04:00,12.5749998092651,12.5749998092651,12.5749998092651,12.5749998092651,11.3920297622681,0,0,0,0
|
||||
2024-03-22 00:00:00-04:00,12.5325002670288,12.5325002670288,12.5325002670288,12.5325002670288,11.3535289764404,0,0,0,0
|
||||
2024-03-25 00:00:00-04:00,12.5524997711182,12.5524997711182,12.5524997711182,12.5524997711182,11.3716468811035,0,0,0,0
|
||||
2024-03-26 00:00:00-04:00,12.5749998092651,12.5749998092651,12.5749998092651,12.5749998092651,11.3920297622681,0,0,0,0
|
||||
2024-03-27 00:00:00-04:00,12.6800003051758,12.6800003051758,12.6800003051758,12.6800003051758,11.4871530532837,0,0,0,0
|
||||
2024-03-28 00:00:00-04:00,12.6750001907349,12.6750001907349,12.6750001907349,12.6750001907349,11.4826231002808,0,0,0,0
|
||||
2024-04-01 00:00:00-04:00,12.625,12.625,12.625,12.625,11.4373264312744,0,0,0,0
|
||||
2024-04-02 00:00:00-04:00,12.5874996185303,12.5874996185303,12.5874996185303,12.5874996185303,11.4033546447754,0,0,0,0
|
||||
2024-04-03 00:00:00-04:00,12.6724996566772,12.6724996566772,12.6724996566772,12.6724996566772,11.480357170105,0,0,0,0
|
||||
2024-04-04 00:00:00-04:00,12.6199998855591,12.6199998855591,12.6199998855591,12.6199998855591,11.4327964782715,0,0,0,0
|
||||
2024-04-05 00:00:00-04:00,12.6225004196167,12.6225004196167,12.6225004196167,12.6225004196167,11.4350624084473,0,0,0,0
|
||||
2024-04-08 00:00:00-04:00,12.6750001907349,12.6750001907349,12.6750001907349,12.6750001907349,11.4826231002808,0,0,0,0
|
||||
2024-04-09 00:00:00-04:00,12.7124996185303,12.7124996185303,12.7124996185303,12.7124996185303,11.5165948867798,0,0,0,0
|
||||
2024-04-10 00:00:00-04:00,12.5900001525879,12.5900001525879,12.5900001525879,12.5900001525879,11.4056186676025,0,0,0,0
|
||||
2024-04-11 00:00:00-04:00,12.5574998855591,12.5574998855591,12.5574998855591,12.5574998855591,11.3761768341064,0,0,0,0
|
||||
2024-04-12 00:00:00-04:00,12.3474998474121,12.3474998474121,12.3474998474121,12.3474998474121,11.1859321594238,0,0,0,0
|
||||
2024-04-15 00:00:00-04:00,12.2799997329712,12.2799997329712,12.2799997329712,12.2799997329712,11.1247816085815,0,0,0,0
|
||||
2024-04-16 00:00:00-04:00,12.1625003814697,12.1625003814697,12.1625003814697,12.1625003814697,11.0183362960815,0,0,0,0
|
||||
2024-04-17 00:00:00-04:00,12.1850004196167,12.1850004196167,12.1850004196167,12.1850004196167,11.0387191772461,0,0,0,0
|
||||
2024-04-18 00:00:00-04:00,12.1999998092651,12.1999998092651,12.1999998092651,12.1999998092651,11.0523071289063,0,0,0,0
|
||||
2024-04-19 00:00:00-04:00,12.2349996566772,12.2349996566772,12.2349996566772,12.2349996566772,11.0840148925781,0,0,0,0
|
||||
2024-04-22 00:00:00-04:00,12.4125003814697,12.4125003814697,12.4125003814697,12.4125003814697,11.2448177337646,0,0,0,0
|
||||
2024-04-23 00:00:00-04:00,12.5124998092651,12.5124998092651,12.5124998092651,12.5124998092651,11.3354091644287,0,0,0,0
|
||||
2024-04-24 00:00:00-04:00,12.5074996948242,12.5074996948242,12.5074996948242,12.5074996948242,11.3308801651001,0,0,0,0
|
||||
2024-04-25 00:00:00-04:00,12.5699996948242,12.5699996948242,12.5699996948242,12.5699996948242,11.3874998092651,0,0,0,0
|
||||
2024-04-26 00:00:00-04:00,12.6149997711182,12.6149997711182,12.6149997711182,12.6149997711182,11.4282674789429,0,0,0,0
|
||||
2024-04-29 00:00:00-04:00,12.6999998092651,12.6999998092651,12.6999998092651,12.6999998092651,11.5052709579468,0,0,0,0
|
||||
2024-04-30 00:00:00-04:00,12.5050001144409,12.5050001144409,12.5050001144409,12.5050001144409,11.328616142273,0,0,0,0
|
||||
2024-05-01 00:00:00-04:00,12.4949998855591,12.4949998855591,12.4949998855591,12.4949998855591,11.3195562362671,0,0,0,0
|
||||
2024-05-02 00:00:00-04:00,12.6674995422363,12.6674995422363,12.6674995422363,12.6674995422363,11.4758281707764,0,0,0,0
|
||||
2024-05-03 00:00:00-04:00,12.7524995803833,12.7524995803833,12.7524995803833,12.7524995803833,11.5528316497803,0,0,0,0
|
||||
2024-05-06 00:00:00-04:00,12.852499961853,12.852499961853,12.852499961853,12.852499961853,11.643424987793,0,0,0,0
|
||||
2024-05-07 00:00:00-04:00,12.914999961853,12.914999961853,12.914999961853,12.914999961853,11.7000455856323,0,0,0,0
|
||||
2024-05-08 00:00:00-04:00,12.9350004196167,12.9350004196167,12.9350004196167,12.9350004196167,11.7181644439697,0,0,0,0
|
||||
2024-05-09 00:00:00-04:00,13.0249996185303,13.0249996185303,13.0249996185303,13.0249996185303,11.7996969223022,0,0,0,0
|
||||
2024-05-10 00:00:00-04:00,13.1075000762939,13.1075000762939,13.1075000762939,13.1075000762939,11.8744373321533,0,0,0,0
|
||||
2024-05-13 00:00:00-04:00,13.1824998855591,13.1824998855591,13.1824998855591,13.1824998855591,11.9423809051514,0,0,0,0
|
||||
2024-05-14 00:00:00-04:00,13.2399997711182,13.2399997711182,13.2399997711182,13.2399997711182,11.9944715499878,0,0,0,0
|
||||
2024-05-15 00:00:00-04:00,13.3649997711182,13.3649997711182,13.3649997711182,13.3649997711182,12.1077127456665,0,0,0,0
|
||||
2024-05-16 00:00:00-04:00,13.3500003814697,13.3500003814697,13.3500003814697,13.3500003814697,12.094123840332,0,0,0,0
|
||||
2024-05-17 00:00:00-04:00,13.3675003051758,13.3675003051758,13.3675003051758,13.3675003051758,12.109977722168,0,0,0,0
|
||||
2024-05-20 00:00:00-04:00,13.397500038147,13.397500038147,13.397500038147,13.397500038147,12.1371555328369,0,0,0,0
|
||||
2024-05-21 00:00:00-04:00,13.3474998474121,13.3474998474121,13.3474998474121,13.3474998474121,12.0918579101563,0,0,0,0
|
||||
2024-05-22 00:00:00-04:00,13.2224998474121,13.2224998474121,13.2224998474121,13.2224998474121,11.9786176681519,0,0,0,0
|
||||
2024-05-23 00:00:00-04:00,13.125,13.125,13.125,13.125,11.8902902603149,0,0,0,0
|
||||
2024-05-24 00:00:00-04:00,13.2049999237061,13.2049999237061,13.2049999237061,13.2049999237061,11.9627647399902,0,0,0,0
|
||||
2024-05-28 00:00:00-04:00,13.1899995803833,13.1899995803833,13.1899995803833,13.1899995803833,11.9491748809814,0,0,0,0
|
||||
2024-05-29 00:00:00-04:00,12.9674997329712,12.9674997329712,12.9674997329712,12.9674997329712,11.7476062774658,0,0,0,0
|
||||
2024-05-30 00:00:00-04:00,13.0699996948242,13.0699996948242,13.0699996948242,13.0699996948242,11.8404636383057,0,0,0,0
|
||||
2024-05-31 00:00:00-04:00,13.1925001144409,13.1925001144409,13.1925001144409,13.1925001144409,11.9514398574829,0,0,0,0
|
||||
2024-06-03 00:00:00-04:00,13.1774997711182,13.1774997711182,13.1774997711182,13.1774997711182,11.9378509521484,0,0,0,0
|
||||
2024-06-04 00:00:00-04:00,13.0550003051758,13.0550003051758,13.0550003051758,13.0550003051758,11.8268756866455,0,0,0,0
|
||||
2024-06-05 00:00:00-04:00,13.1549997329712,13.1549997329712,13.1549997329712,13.1549997329712,11.9174680709839,0,0,0,0
|
||||
2024-06-06 00:00:00-04:00,13.1975002288818,13.1975002288818,13.1975002288818,13.1975002288818,11.9559698104858,0,0,0,0
|
||||
2024-06-07 00:00:00-04:00,13.085000038147,13.085000038147,13.085000038147,13.085000038147,11.8540534973145,0,0,0,0
|
||||
2024-06-10 00:00:00-04:00,13.039999961853,13.039999961853,13.039999961853,13.039999961853,11.8132858276367,0,0,0,0
|
||||
2024-06-11 00:00:00-04:00,12.9025001525879,12.9025001525879,12.9025001525879,12.9025001525879,11.6887216567993,0,0,0,0
|
||||
2024-06-12 00:00:00-04:00,13.0074996948242,13.0074996948242,13.0074996948242,13.0074996948242,11.7838430404663,0,0,0,0
|
||||
2024-06-13 00:00:00-04:00,12.8275003433228,12.8275003433228,12.8275003433228,12.8275003433228,11.620777130127,0,0,0,0
|
||||
2024-06-14 00:00:00-04:00,12.7049999237061,12.7049999237061,12.7049999237061,12.7049999237061,11.5098009109497,0,0,0,0
|
||||
2024-06-17 00:00:00-04:00,12.7574996948242,12.7574996948242,12.7574996948242,12.7574996948242,11.5573616027832,0,0,0,0
|
||||
2024-06-18 00:00:00-04:00,12.7849998474121,12.7849998474121,12.7849998474121,12.7849998474121,11.5822744369507,0,0,0,0
|
||||
2024-06-20 00:00:00-04:00,12.8325004577637,12.8325004577637,12.8325004577637,12.8325004577637,11.6253070831299,0,0,0,0
|
||||
2024-06-21 00:00:00-04:00,12.7200002670288,12.7200002670288,12.7200002670288,12.7200002670288,11.5233898162842,0,0,0,0
|
||||
2024-06-24 00:00:00-04:00,12.8675003051758,12.8675003051758,12.8675003051758,12.8675003051758,11.6570148468018,0,0,0,0
|
||||
2024-06-25 00:00:00-04:00,12.8249998092651,12.8249998092651,12.8249998092651,12.8249998092651,11.6185111999512,0,0,0,0
|
||||
2024-06-26 00:00:00-04:00,12.7399997711182,12.7399997711182,12.7399997711182,12.7399997711182,11.5415086746216,0,0,0,0
|
||||
2024-06-27 00:00:00-04:00,12.7025003433228,12.7025003433228,12.7025003433228,12.7025003433228,11.5075359344482,0,0,0,0
|
||||
2024-06-28 00:00:00-04:00,12.6774997711182,12.6774997711182,12.6774997711182,12.6774997711182,11.4848871231079,0,0,0,0
|
||||
2024-07-01 00:00:00-04:00,12.727499961853,12.727499961853,12.727499961853,12.727499961853,11.5301837921143,0,0,0,0
|
||||
2024-07-02 00:00:00-04:00,12.727499961853,12.727499961853,12.727499961853,12.727499961853,11.5301837921143,0,0,0,0
|
||||
2024-07-03 00:00:00-04:00,12.8999996185303,12.8999996185303,12.8999996185303,12.8999996185303,11.6864566802979,0,0,0,0
|
||||
2024-07-05 00:00:00-04:00,12.960000038147,12.960000038147,12.960000038147,12.960000038147,11.7408123016357,0,0,0,0
|
||||
2024-07-08 00:00:00-04:00,12.9499998092651,12.9499998092651,12.9499998092651,12.9499998092651,11.7317533493042,0,0,0,0
|
||||
2024-07-09 00:00:00-04:00,12.9075002670288,12.9075002670288,12.9075002670288,12.9075002670288,11.6932506561279,0,0,0,0
|
||||
2024-07-10 00:00:00-04:00,13.0649995803833,13.0649995803833,13.0649995803833,13.0649995803833,11.8359336853027,0,0,0,0
|
||||
2024-07-11 00:00:00-04:00,13.1724996566772,13.1724996566772,13.1724996566772,13.1724996566772,11.9333209991455,0,0,0,0
|
||||
2024-07-12 00:00:00-04:00,13.2950000762939,13.2950000762939,13.2950000762939,13.2950000762939,12.0442972183228,0,0,0,0
|
||||
2024-07-15 00:00:00-04:00,13.2049999237061,13.2049999237061,13.2049999237061,13.2049999237061,11.9627647399902,0,0,0,0
|
||||
2024-07-16 00:00:00-04:00,13.2200002670288,13.2200002670288,13.2200002670288,13.2200002670288,11.9763536453247,0,0,0,0
|
||||
2024-07-17 00:00:00-04:00,13.289999961853,13.289999961853,13.289999961853,13.289999961853,12.0397682189941,0,0,0,0
|
||||
2024-07-18 00:00:00-04:00,13.1499996185303,13.1499996185303,13.1499996185303,13.1499996185303,11.912938117981,0,0,0,0
|
||||
2024-07-19 00:00:00-04:00,13.0500001907349,13.0500001907349,13.0500001907349,13.0500001907349,11.8223457336426,0,0,0,0
|
||||
2024-07-22 00:00:00-04:00,13.1949996948242,13.1949996948242,13.1949996948242,13.1949996948242,11.9537048339844,0,0,0,0
|
||||
2024-07-23 00:00:00-04:00,13.0874996185303,13.0874996185303,13.0874996185303,13.0874996185303,11.8563175201416,0,0,0,0
|
||||
2024-07-24 00:00:00-04:00,12.9624996185303,12.9624996185303,12.9624996185303,12.9624996185303,11.7430763244629,0,0,0,0
|
||||
2024-07-25 00:00:00-04:00,12.9300003051758,12.9300003051758,12.9300003051758,12.9300003051758,11.7136344909668,0,0,0,0
|
||||
2024-07-26 00:00:00-04:00,13.0325002670288,13.0325002670288,13.0325002670288,13.0325002670288,11.8064918518066,0,0,0,0
|
||||
2024-07-29 00:00:00-04:00,13.0150003433228,13.0150003433228,13.0150003433228,13.0150003433228,11.7906379699707,0,0,0,0
|
||||
2024-07-30 00:00:00-04:00,12.9825000762939,12.9825000762939,12.9825000762939,12.9825000762939,11.7611951828003,0,0,0,0
|
||||
2024-07-31 00:00:00-04:00,13.0799999237061,13.0799999237061,13.0799999237061,13.0799999237061,11.8495235443115,0,0,0,0
|
||||
2024-08-01 00:00:00-04:00,12.8299999237061,12.8299999237061,12.8299999237061,12.8299999237061,11.6230411529541,0,0,0,0
|
||||
2024-08-02 00:00:00-04:00,12.6400003433228,12.6400003433228,12.6400003433228,12.6400003433228,11.4509162902832,0,0,0,0
|
||||
2024-08-05 00:00:00-04:00,12.3599996566772,12.3599996566772,12.3599996566772,12.3599996566772,11.1972551345825,0,0,0,0
|
||||
2024-08-06 00:00:00-04:00,12.3649997711182,12.3649997711182,12.3649997711182,12.3649997711182,11.2017850875855,0,0,0,0
|
||||
2024-08-07 00:00:00-04:00,12.4475002288818,12.4475002288818,12.4475002288818,12.4475002288818,11.2765245437622,0,0,0,0
|
||||
2024-08-08 00:00:00-04:00,12.6575002670288,12.6575002670288,12.6575002670288,12.6575002670288,11.4667701721191,0,0,0,0
|
||||
2024-08-09 00:00:00-04:00,12.6899995803833,12.6899995803833,12.6899995803833,12.6899995803833,11.4962120056152,0,0,0,0
|
||||
2024-08-12 00:00:00-04:00,12.6949996948242,12.6949996948242,12.6949996948242,12.6949996948242,11.5007410049438,0,0,0,0
|
||||
2024-08-13 00:00:00-04:00,12.8474998474121,12.8474998474121,12.8474998474121,12.8474998474121,11.6388959884644,0,0,0,0
|
||||
2024-08-14 00:00:00-04:00,12.875,12.875,12.875,12.875,11.6638088226318,0,0,0,0
|
||||
2024-08-15 00:00:00-04:00,13.0450000762939,13.0450000762939,13.0450000762939,13.0450000762939,11.8178157806396,0,0,0,0
|
||||
2024-08-16 00:00:00-04:00,13.1350002288818,13.1350002288818,13.1350002288818,13.1350002288818,11.8993501663208,0,0,0,0
|
||||
2024-08-19 00:00:00-04:00,13.2849998474121,13.2849998474121,13.2849998474121,13.2849998474121,12.0352382659912,0,0,0,0
|
||||
2024-08-20 00:00:00-04:00,13.2124996185303,13.2124996185303,13.2124996185303,13.2124996185303,11.9695587158203,0,0,0,0
|
||||
2024-08-21 00:00:00-04:00,13.2749996185303,13.2749996185303,13.2749996185303,13.2749996185303,12.0261783599854,0,0,0,0
|
||||
2024-08-22 00:00:00-04:00,13.2049999237061,13.2049999237061,13.2049999237061,13.2049999237061,11.9627647399902,0,0,0,0
|
||||
2024-08-23 00:00:00-04:00,13.4025001525879,13.4025001525879,13.4025001525879,13.4025001525879,12.1416845321655,0,0,0,0
|
||||
2024-08-26 00:00:00-04:00,13.3774995803833,13.3774995803833,13.3774995803833,13.3774995803833,12.1190357208252,0,0,0,0
|
||||
2024-08-27 00:00:00-04:00,13.4449996948242,13.4449996948242,13.4449996948242,13.4449996948242,12.1801872253418,0,0,0,0
|
||||
2024-08-28 00:00:00-04:00,13.3649997711182,13.3649997711182,13.3649997711182,13.3649997711182,12.1077127456665,0,0,0,0
|
||||
2024-08-29 00:00:00-04:00,13.4049997329712,13.4049997329712,13.4049997329712,13.4049997329712,12.143949508667,0,0,0,0
|
||||
2024-08-30 00:00:00-04:00,13.4650001525879,13.4650001525879,13.4650001525879,13.4650001525879,12.1983051300049,0,0,0,0
|
||||
2024-09-03 00:00:00-04:00,13.2550001144409,13.2550001144409,13.2550001144409,13.2550001144409,12.0080604553223,0,0,0,0
|
||||
2024-09-04 00:00:00-04:00,13.2700004577637,13.2700004577637,13.2700004577637,13.2700004577637,12.0216493606567,0,0,0,0
|
||||
2024-09-05 00:00:00-04:00,13.3024997711182,13.3024997711182,13.3024997711182,13.3024997711182,12.0510921478271,0,0,0,0
|
||||
2024-09-06 00:00:00-04:00,13.0924997329712,13.0924997329712,13.0924997329712,13.0924997329712,11.8608474731445,0,0,0,0
|
||||
2024-09-09 00:00:00-04:00,13.1850004196167,13.1850004196167,13.1850004196167,13.1850004196167,11.9446468353271,0,0,0,0
|
||||
2024-09-10 00:00:00-04:00,13.1324996948242,13.1324996948242,13.1324996948242,13.1324996948242,11.897084236145,0,0,0,0
|
||||
2024-09-11 00:00:00-04:00,13.1599998474121,13.1599998474121,13.1599998474121,13.1599998474121,11.9219980239868,0,0,0,0
|
||||
2024-09-12 00:00:00-04:00,13.2550001144409,13.2550001144409,13.2550001144409,13.2550001144409,12.0080604553223,0,0,0,0
|
||||
2024-09-13 00:00:00-04:00,13.3249998092651,13.3249998092651,13.3249998092651,13.3249998092651,12.0714750289917,0,0,0,0
|
||||
2024-09-16 00:00:00-04:00,13.3675003051758,13.3675003051758,13.3675003051758,13.3675003051758,12.109977722168,0,0,0,0
|
||||
2024-09-17 00:00:00-04:00,13.4300003051758,13.4300003051758,13.4300003051758,13.4300003051758,12.1665983200073,0,0,0,0
|
||||
2024-09-18 00:00:00-04:00,13.4075002670288,13.4075002670288,13.4075002670288,13.4075002670288,12.1462144851685,0,0,0,0
|
||||
2024-09-19 00:00:00-04:00,13.625,13.625,13.625,13.625,12.3432540893555,0,0,0,0
|
||||
2024-09-20 00:00:00-04:00,13.5150003433228,13.5150003433228,13.5150003433228,13.5150003433228,12.2436017990112,0,0,0,0
|
||||
2024-09-23 00:00:00-04:00,13.5574998855591,13.5574998855591,13.5574998855591,13.5574998855591,12.2821025848389,0,0,0,0
|
||||
2024-09-24 00:00:00-04:00,13.7600002288818,13.7600002288818,13.7600002288818,13.7600002288818,12.4655542373657,0,0,0,0
|
||||
2024-09-25 00:00:00-04:00,13.6949996948242,13.6949996948242,13.6949996948242,13.6949996948242,12.4066677093506,0,0,0,0
|
||||
2024-09-26 00:00:00-04:00,14.0024995803833,14.0024995803833,14.0024995803833,14.0024995803833,12.6852397918701,0,0,0,0
|
||||
2024-09-27 00:00:00-04:00,14.1674995422363,14.1674995422363,14.1674995422363,14.1674995422363,12.8347187042236,0,0,0,0
|
||||
2024-09-30 00:00:00-04:00,13.9425001144409,13.9425001144409,13.9425001144409,13.9425001144409,12.6308860778809,0,0,0,0
|
||||
2024-10-01 00:00:00-04:00,13.9174995422363,13.9174995422363,13.9174995422363,13.9174995422363,12.6082372665405,0,0,0,0
|
||||
2024-10-02 00:00:00-04:00,13.9549999237061,13.9549999237061,13.9549999237061,13.9549999237061,12.6422090530396,0,0,0,0
|
||||
2024-10-03 00:00:00-04:00,13.7950000762939,13.7950000762939,13.7950000762939,13.7950000762939,12.4972610473633,0,0,0,0
|
||||
2024-10-04 00:00:00-04:00,13.9274997711182,13.9274997711182,13.9274997711182,13.9274997711182,12.6172962188721,0,0,0,0
|
||||
2024-10-07 00:00:00-04:00,13.8924999237061,13.8924999237061,13.8924999237061,13.8924999237061,12.5855894088745,0,0,0,0
|
||||
2024-10-08 00:00:00-04:00,13.7749996185303,13.7749996185303,13.7749996185303,13.7749996185303,12.4791421890259,0,0,0,0
|
||||
2024-10-09 00:00:00-04:00,13.8125,13.8125,13.8125,13.8125,12.5131149291992,0,0,0,0
|
||||
2024-10-10 00:00:00-04:00,13.789999961853,13.789999961853,13.789999961853,13.789999961853,12.4927310943604,0,0,0,0
|
||||
2024-10-11 00:00:00-04:00,13.8199996948242,13.8199996948242,13.8199996948242,13.8199996948242,12.5199089050293,0,0,0,0
|
||||
2024-10-14 00:00:00-04:00,13.8249998092651,13.8249998092651,13.8249998092651,13.8249998092651,12.5244388580322,0,0,0,0
|
||||
2024-10-15 00:00:00-04:00,13.6274995803833,13.6274995803833,13.6274995803833,13.6274995803833,12.3455181121826,0,0,0,0
|
||||
2024-10-16 00:00:00-04:00,13.6674995422363,13.6674995422363,13.6674995422363,13.6674995422363,12.3817548751831,0,0,0,0
|
||||
2024-10-17 00:00:00-04:00,13.6975002288818,13.6975002288818,13.6975002288818,13.6975002288818,12.4089336395264,0,0,0,0
|
||||
2024-10-18 00:00:00-04:00,13.7875003814697,13.7875003814697,13.7875003814697,13.7875003814697,12.4904670715332,0,0,0,0
|
||||
2024-10-21 00:00:00-04:00,13.664999961853,13.664999961853,13.664999961853,13.664999961853,12.379490852356,0,0,0,0
|
||||
2024-10-22 00:00:00-04:00,13.6125001907349,13.6125001907349,13.6125001907349,13.6125001907349,12.3319292068481,0,0,0,0
|
||||
2024-10-23 00:00:00-04:00,13.5299997329712,13.5299997329712,13.5299997329712,13.5299997329712,12.2571897506714,0,0,0,0
|
||||
2024-10-24 00:00:00-04:00,13.585000038147,13.585000038147,13.585000038147,13.585000038147,12.3070163726807,0,0,0,0
|
||||
2024-10-25 00:00:00-04:00,13.5625,13.5625,13.5625,13.5625,12.2866325378418,0,0,0,0
|
||||
2024-10-28 00:00:00-04:00,13.6724996566772,13.6724996566772,13.6724996566772,13.6724996566772,12.386284828186,0,0,0,0
|
||||
2024-10-29 00:00:00-04:00,13.5900001525879,13.5900001525879,13.5900001525879,13.5900001525879,12.3115463256836,0,0,0,0
|
||||
2024-10-30 00:00:00-04:00,13.4875001907349,13.4875001907349,13.4875001907349,13.4875001907349,12.2186889648438,0,0,0,0
|
||||
2024-10-31 00:00:00-04:00,13.3649997711182,13.3649997711182,13.3649997711182,13.3649997711182,12.1077127456665,0,0,0,0
|
||||
2024-11-01 00:00:00-04:00,13.4274997711182,13.4274997711182,13.4274997711182,13.4274997711182,12.1643323898315,0,0,0,0
|
||||
2024-11-04 00:00:00-05:00,13.4700002670288,13.4700002670288,13.4700002670288,13.4700002670288,12.2028350830078,0,0,0,0
|
||||
2024-11-05 00:00:00-05:00,13.602499961853,13.602499961853,13.602499961853,13.602499961853,12.3228702545166,0,0,0,0
|
||||
2024-11-06 00:00:00-05:00,13.5074996948242,13.5074996948242,13.5074996948242,13.5074996948242,12.2368068695068,0,0,0,0
|
||||
2024-11-07 00:00:00-05:00,13.602499961853,13.602499961853,13.602499961853,13.602499961853,12.3228702545166,0,0,0,0
|
||||
2024-11-08 00:00:00-05:00,13.4525003433228,13.4525003433228,13.4525003433228,13.4525003433228,12.1869812011719,0,0,0,0
|
||||
2024-11-11 00:00:00-05:00,13.477499961853,13.477499961853,13.477499961853,13.477499961853,12.2096290588379,0,0,0,0
|
||||
2024-11-12 00:00:00-05:00,13.1850004196167,13.1850004196167,13.1850004196167,13.1850004196167,11.9446468353271,0,0,0,0
|
||||
2024-11-13 00:00:00-05:00,13.1199998855591,13.1199998855591,13.1199998855591,13.1199998855591,11.885760307312,0,0,0,0
|
||||
2024-11-14 00:00:00-05:00,13.1499996185303,13.1499996185303,13.1499996185303,13.1499996185303,11.912938117981,0,0,0,0
|
||||
2024-11-15 00:00:00-05:00,13.1175003051758,13.1175003051758,13.1175003051758,13.1175003051758,11.8834953308105,0,0,0,0
|
||||
2024-11-18 00:00:00-05:00,13.2075004577637,13.2075004577637,13.2075004577637,13.2075004577637,11.9650297164917,0,0,0,0
|
||||
2024-11-19 00:00:00-05:00,13.1625003814697,13.1625003814697,13.1625003814697,13.1625003814697,11.9242630004883,0,0,0,0
|
||||
2024-11-20 00:00:00-05:00,13.125,13.125,13.125,13.125,11.8902902603149,0,0,0,0
|
||||
2024-11-21 00:00:00-05:00,13.1225004196167,13.1225004196167,13.1225004196167,13.1225004196167,11.8880252838135,0,0,0,0
|
||||
2024-11-22 00:00:00-05:00,13.1225004196167,13.1225004196167,13.1225004196167,13.1225004196167,11.8880252838135,0,0,0,0
|
||||
2024-11-25 00:00:00-05:00,13.210000038147,13.210000038147,13.210000038147,13.210000038147,11.9672946929932,0,0,0,0
|
||||
2024-11-26 00:00:00-05:00,13.1099996566772,13.1099996566772,13.1099996566772,13.1099996566772,11.8767013549805,0,0,0,0
|
||||
2024-11-27 00:00:00-05:00,13.164999961853,13.164999961853,13.164999961853,13.164999961853,11.9265270233154,0,0,0,0
|
||||
2024-11-29 00:00:00-05:00,13.2075004577637,13.2075004577637,13.2075004577637,13.2075004577637,11.9650297164917,0,0,0,0
|
||||
2024-12-02 00:00:00-05:00,13.1975002288818,13.1975002288818,13.1975002288818,13.1975002288818,11.9559698104858,0,0,0,0
|
||||
2024-12-03 00:00:00-05:00,13.2650003433228,13.2650003433228,13.2650003433228,13.2650003433228,12.0171203613281,0,0,0,0
|
||||
2024-12-04 00:00:00-05:00,13.25,13.25,13.25,13.25,12.0035305023193,0,0,0,0
|
||||
2024-12-05 00:00:00-05:00,13.3824996948242,13.3824996948242,13.3824996948242,13.3824996948242,12.1235656738281,0,0,0,0
|
||||
2024-12-06 00:00:00-05:00,13.3774995803833,13.3774995803833,13.3774995803833,13.3774995803833,12.1190357208252,0,0,0,0
|
||||
2024-12-09 00:00:00-05:00,13.4425001144409,13.4425001144409,13.4425001144409,13.4425001144409,12.1779222488403,0,0,0,0
|
||||
2024-12-10 00:00:00-05:00,13.3175001144409,13.3175001144409,13.3175001144409,13.3175001144409,12.0646820068359,0,0,0,0
|
||||
2024-12-11 00:00:00-05:00,13.3024997711182,13.3024997711182,13.3024997711182,13.3024997711182,12.0510921478271,0,0,0,0
|
||||
2024-12-12 00:00:00-05:00,13.2624998092651,13.2624998092651,13.2624998092651,13.2624998092651,12.0148553848267,0,0,0,0
|
||||
2024-12-13 00:00:00-05:00,13.1875,13.1875,13.1875,13.1875,11.9469108581543,0,0,0,0
|
||||
2024-12-16 00:00:00-05:00,13.1075000762939,13.1075000762939,13.1075000762939,13.1075000762939,11.8744373321533,0,0,0,0
|
||||
2024-12-17 00:00:00-05:00,13.0349998474121,13.0349998474121,13.0349998474121,13.0349998474121,11.8087558746338,0,0,0,0
|
||||
2024-12-18 00:00:00-05:00,12.4525003433228,12.4525003433228,12.4525003433228,12.4525003433228,11.5296020507813,0,0.281,0,0
|
||||
2024-12-19 00:00:00-05:00,12.3850002288818,12.3850002288818,12.3850002288818,12.3850002288818,11.4671049118042,0,0,0,0
|
||||
2024-12-20 00:00:00-05:00,12.4250001907349,12.4250001907349,12.4250001907349,12.4250001907349,11.5041399002075,0,0,0,0
|
||||
2024-12-23 00:00:00-05:00,12.5024995803833,12.5024995803833,12.5024995803833,12.5024995803833,11.5758953094482,0,0,0,0
|
||||
2024-12-24 00:00:00-05:00,12.5349998474121,12.5349998474121,12.5349998474121,12.5349998474121,11.6059875488281,0,0,0,0
|
||||
2024-12-26 00:00:00-05:00,12.5349998474121,12.5349998474121,12.5349998474121,12.5349998474121,11.6059875488281,0,0,0,0
|
||||
2024-12-27 00:00:00-05:00,12.5450000762939,12.5450000762939,12.5450000762939,12.5450000762939,11.6152467727661,0,0,0,0
|
||||
2024-12-30 00:00:00-05:00,12.4825000762939,12.4825000762939,12.4825000762939,12.4825000762939,11.5573787689209,0,0,0,0
|
||||
2024-12-31 00:00:00-05:00,12.4750003814697,12.4750003814697,12.4750003814697,12.4750003814697,11.5504341125488,0,0,0,0
|
||||
2025-01-02 00:00:00-05:00,12.4300003051758,12.4300003051758,12.4300003051758,12.4300003051758,11.5087699890137,0,0,0,0
|
||||
2025-01-03 00:00:00-05:00,12.4624996185303,12.4624996185303,12.4624996185303,12.4624996185303,11.5388603210449,0,0,0,0
|
||||
2025-01-06 00:00:00-05:00,12.602499961853,12.602499961853,12.602499961853,12.602499961853,11.6684846878052,0,0,0,0
|
||||
2025-01-07 00:00:00-05:00,12.6149997711182,12.6149997711182,12.6149997711182,12.6149997711182,11.6800584793091,0,0,0,0
|
||||
2025-01-08 00:00:00-05:00,12.5574998855591,12.5574998855591,12.5574998855591,12.5574998855591,11.6268196105957,0,0,0,0
|
||||
2025-01-10 00:00:00-05:00,12.3299999237061,12.3299999237061,12.3299999237061,12.3299999237061,11.4161806106567,0,0,0,0
|
||||
2025-01-13 00:00:00-05:00,12.3024997711182,12.3024997711182,12.3024997711182,12.3024997711182,11.390718460083,0,0,0,0
|
||||
2025-01-14 00:00:00-05:00,12.3800001144409,12.3800001144409,12.3800001144409,12.3800001144409,11.462474822998,0,0,0,0
|
||||
2025-01-15 00:00:00-05:00,12.539999961853,12.539999961853,12.539999961853,12.539999961853,11.61061668396,0,0,0,0
|
||||
2025-01-16 00:00:00-05:00,12.6125001907349,12.6125001907349,12.6125001907349,12.6125001907349,11.6777439117432,0,0,0,0
|
||||
2025-01-17 00:00:00-05:00,12.7049999237061,12.7049999237061,12.7049999237061,12.7049999237061,11.7633876800537,0,0,0,0
|
||||
2025-01-21 00:00:00-05:00,12.8625001907349,12.8625001907349,12.8625001907349,12.8625001907349,11.9092149734497,0,0,0,0
|
||||
2025-01-22 00:00:00-05:00,12.8725004196167,12.8725004196167,12.8725004196167,12.8725004196167,11.9184741973877,0,0,0,0
|
||||
2025-01-23 00:00:00-05:00,12.9674997329712,12.9674997329712,12.9674997329712,12.9674997329712,12.0064334869385,0,0,0,0
|
||||
2025-01-24 00:00:00-05:00,13.0249996185303,13.0249996185303,13.0249996185303,13.0249996185303,12.0596714019775,0,0,0,0
|
||||
2025-01-27 00:00:00-05:00,13.0024995803833,13.0024995803833,13.0024995803833,13.0024995803833,12.03883934021,0,0,0,0
|
||||
2025-01-28 00:00:00-05:00,13.0150003433228,13.0150003433228,13.0150003433228,13.0150003433228,12.0504131317139,0,0,0,0
|
||||
2025-01-29 00:00:00-05:00,13.0200004577637,13.0200004577637,13.0200004577637,13.0200004577637,12.05504322052,0,0,0,0
|
||||
2025-01-30 00:00:00-05:00,13.1525001525879,13.1525001525879,13.1525001525879,13.1525001525879,12.1777229309082,0,0,0,0
|
||||
2025-01-31 00:00:00-05:00,13.0649995803833,13.0649995803833,13.0649995803833,13.0649995803833,12.0967073440552,0,0,0,0
|
||||
2025-02-03 00:00:00-05:00,12.8924999237061,12.8924999237061,12.8924999237061,12.8924999237061,11.9369916915894,0,0,0,0
|
||||
2025-02-04 00:00:00-05:00,13.0600004196167,13.0600004196167,13.0600004196167,13.0600004196167,12.0920782089233,0,0,0,0
|
||||
2025-02-05 00:00:00-05:00,13.1999998092651,13.1999998092651,13.1999998092651,13.1999998092651,12.2217016220093,0,0,0,0
|
||||
2025-02-06 00:00:00-05:00,13.352499961853,13.352499961853,13.352499961853,13.352499961853,12.3628997802734,0,0,0,0
|
||||
2025-02-07 00:00:00-05:00,13.2624998092651,13.2624998092651,13.2624998092651,13.2624998092651,12.2795696258545,0,0,0,0
|
||||
2025-02-10 00:00:00-05:00,13.3675003051758,13.3675003051758,13.3675003051758,13.3675003051758,12.3767881393433,0,0,0,0
|
||||
2025-02-11 00:00:00-05:00,13.3950004577637,13.3950004577637,13.3950004577637,13.3950004577637,12.402250289917,0,0,0,0
|
||||
2025-02-12 00:00:00-05:00,13.477499961853,13.477499961853,13.477499961853,13.477499961853,12.4786357879639,0,0,0,0
|
||||
2025-02-13 00:00:00-05:00,13.5924997329712,13.5924997329712,13.5924997329712,13.5924997329712,12.5851125717163,0,0,0,0
|
||||
2025-02-14 00:00:00-05:00,13.6374998092651,13.6374998092651,13.6374998092651,13.6374998092651,12.6267766952515,0,0,0,0
|
||||
2025-02-18 00:00:00-05:00,13.7425003051758,13.7425003051758,13.7425003051758,13.7425003051758,12.7239952087402,0,0,0,0
|
||||
2025-02-19 00:00:00-05:00,13.6049995422363,13.6049995422363,13.6049995422363,13.6049995422363,12.5966854095459,0,0,0,0
|
||||
2025-02-20 00:00:00-05:00,13.6724996566772,13.6724996566772,13.6724996566772,13.6724996566772,12.659182548523,0,0,0,0
|
||||
2025-02-21 00:00:00-05:00,13.647500038147,13.647500038147,13.647500038147,13.647500038147,12.6360359191895,0,0,0,0
|
||||
2025-02-24 00:00:00-05:00,13.5349998474121,13.5349998474121,13.5349998474121,13.5349998474121,12.5318737030029,0,0,0,0
|
||||
2025-02-25 00:00:00-05:00,13.647500038147,13.647500038147,13.647500038147,13.647500038147,12.6360359191895,0,0,0,0
|
||||
2025-02-26 00:00:00-05:00,13.7299995422363,13.7299995422363,13.7299995422363,13.7299995422363,12.7124214172363,0,0,0,0
|
||||
2025-02-27 00:00:00-05:00,13.5900001525879,13.5900001525879,13.5900001525879,13.5900001525879,12.5827980041504,0,0,0,0
|
||||
2025-02-28 00:00:00-05:00,13.6549997329712,13.6549997329712,13.6549997329712,13.6549997329712,12.6429796218872,0,0,0,0
|
||||
2025-03-03 00:00:00-05:00,13.6700000762939,13.6700000762939,13.6700000762939,13.6700000762939,12.6568689346313,0,0,0,0
|
||||
2025-03-04 00:00:00-05:00,13.5900001525879,13.5900001525879,13.5900001525879,13.5900001525879,12.5827980041504,0,0,0,0
|
||||
2025-03-05 00:00:00-05:00,13.9575004577637,13.9575004577637,13.9575004577637,13.9575004577637,12.9230613708496,0,0,0,0
|
||||
2025-03-06 00:00:00-05:00,13.9650001525879,13.9650001525879,13.9650001525879,13.9650001525879,12.9300050735474,0,0,0,0
|
||||
2025-03-07 00:00:00-05:00,14.0675001144409,14.0675001144409,14.0675001144409,14.0675001144409,13.0249090194702,0,0,0,0
|
||||
2025-03-10 00:00:00-04:00,13.7775001525879,13.7775001525879,13.7775001525879,13.7775001525879,12.756402015686,0,0,0,0
|
||||
2025-03-11 00:00:00-04:00,13.710000038147,13.710000038147,13.710000038147,13.710000038147,12.6939039230347,0,0,0,0
|
||||
2025-03-12 00:00:00-04:00,13.7674999237061,13.7674999237061,13.7674999237061,13.7674999237061,12.747142791748,0,0,0,0
|
||||
2025-03-13 00:00:00-04:00,13.6875,13.6875,13.6875,13.6875,12.6730718612671,0,0,0,0
|
||||
2025-03-14 00:00:00-04:00,13.9350004196167,13.9350004196167,13.9350004196167,13.9350004196167,12.902229309082,0,0,0,0
|
||||
2025-03-17 00:00:00-04:00,14.1674995422363,14.1674995422363,14.1674995422363,14.1674995422363,13.1174964904785,0,0,0,0
|
||||
2025-03-18 00:00:00-04:00,14.2124996185303,14.2124996185303,14.2124996185303,14.2124996185303,13.159161567688,0,0,0,0
|
||||
2025-03-19 00:00:00-04:00,14.227499961853,14.227499961853,14.227499961853,14.227499961853,13.1730499267578,0,0,0,0
|
||||
2025-03-20 00:00:00-04:00,14.1149997711182,14.1149997711182,14.1149997711182,14.1149997711182,13.0688877105713,0,0,0,0
|
||||
2025-03-21 00:00:00-04:00,14.0124998092651,14.0124998092651,14.0124998092651,14.0124998092651,12.9739847183228,0,0,0,0
|
||||
2025-03-24 00:00:00-04:00,14.0150003433228,14.0150003433228,14.0150003433228,14.0150003433228,12.976300239563,0,0,0,0
|
||||
2025-03-25 00:00:00-04:00,14.0775003433228,14.0775003433228,14.0775003433228,14.0775003433228,13.0341672897339,0,0,0,0
|
||||
2025-03-26 00:00:00-04:00,13.9575004577637,13.9575004577637,13.9575004577637,13.9575004577637,12.9230613708496,0,0,0,0
|
||||
2025-03-27 00:00:00-04:00,13.9549999237061,13.9549999237061,13.9549999237061,13.9549999237061,12.9207458496094,0,0,0,0
|
||||
2025-03-28 00:00:00-04:00,13.8000001907349,13.8000001907349,13.8000001907349,13.8000001907349,12.7772340774536,0,0,0,0
|
||||
2025-03-31 00:00:00-04:00,13.6824998855591,13.6824998855591,13.6824998855591,13.6824998855591,12.6684417724609,0,0,0,0
|
||||
2025-04-01 00:00:00-04:00,13.727499961853,13.727499961853,13.727499961853,13.727499961853,12.7101068496704,0,0,0,0
|
||||
2025-04-02 00:00:00-04:00,13.7475004196167,13.7475004196167,13.7475004196167,13.7475004196167,12.7286252975464,0,0,0,0
|
||||
2025-04-03 00:00:00-04:00,13.4674997329712,13.4674997329712,13.4674997329712,13.4674997329712,12.4693765640259,0,0,0,0
|
||||
2025-04-04 00:00:00-04:00,12.6424999237061,12.6424999237061,12.6424999237061,12.6424999237061,11.7055206298828,0,0,0,0
|
||||
2025-04-07 00:00:00-04:00,12.2799997329712,12.2799997329712,12.2799997329712,12.2799997329712,11.3698863983154,0,0,0,0
|
||||
2025-04-08 00:00:00-04:00,12.1774997711182,12.1774997711182,12.1774997711182,12.1774997711182,11.2749824523926,0,0,0,0
|
||||
2025-04-09 00:00:00-04:00,12.7574996948242,12.7574996948242,12.7574996948242,12.7574996948242,11.8119964599609,0,0,0,0
|
||||
2025-04-10 00:00:00-04:00,12.6899995803833,12.6899995803833,12.6899995803833,12.6899995803833,11.7494993209839,0,0,0,0
|
||||
2025-04-11 00:00:00-04:00,12.9399995803833,12.9399995803833,12.9399995803833,12.9399995803833,11.9809713363647,0,0,0,0
|
||||
2025-04-14 00:00:00-04:00,13.1350002288818,13.1350002288818,13.1350002288818,13.1350002288818,12.1615200042725,0,0,0,0
|
||||
2025-04-15 00:00:00-04:00,13.2425003051758,13.2425003051758,13.2425003051758,13.2425003051758,12.2610521316528,0,0,0,0
|
||||
2025-04-16 00:00:00-04:00,13.1674995422363,13.1674995422363,13.1674995422363,13.1674995422363,12.1916103363037,0,0,0,0
|
||||
2025-04-17 00:00:00-04:00,13.289999961853,13.289999961853,13.289999961853,13.289999961853,12.3050317764282,0,0,0,0
|
||||
2025-04-21 00:00:00-04:00,13.2174997329712,13.2174997329712,13.2174997329712,13.2174997329712,12.237904548645,0,0,0,0
|
||||
2025-04-22 00:00:00-04:00,13.4949998855591,13.4949998855591,13.4949998855591,13.4949998855591,12.4948387145996,0,0,0,0
|
||||
2025-04-23 00:00:00-04:00,13.6125001907349,13.6125001907349,13.6125001907349,13.6125001907349,12.603630065918,0,0,0,0
|
||||
2025-04-24 00:00:00-04:00,13.7924995422363,13.7924995422363,13.7924995422363,13.7924995422363,12.7702894210815,0,0,0,0
|
||||
2025-04-25 00:00:00-04:00,13.835000038147,13.835000038147,13.835000038147,13.835000038147,12.8096399307251,0,0,0,0
|
||||
2025-04-28 00:00:00-04:00,13.9575004577637,13.9575004577637,13.9575004577637,13.9575004577637,12.9230613708496,0,0,0,0
|
||||
2025-04-29 00:00:00-04:00,13.9624996185303,13.9624996185303,13.9624996185303,13.9624996185303,12.9276905059814,0,0,0,0
|
||||
2025-04-30 00:00:00-04:00,13.9650001525879,13.9650001525879,13.9650001525879,13.9650001525879,12.9300050735474,0,0,0,0
|
||||
2025-05-01 00:00:00-04:00,13.9399995803833,13.9399995803833,13.9399995803833,13.9399995803833,12.9068574905396,0,0,0,0
|
||||
2025-05-02 00:00:00-04:00,14.1549997329712,14.1549997329712,14.1549997329712,14.1549997329712,13.1059236526489,0,0,0,0
|
||||
2025-05-05 00:00:00-04:00,14.1674995422363,14.1674995422363,14.1674995422363,14.1674995422363,13.1174964904785,0,0,0,0
|
||||
2025-05-06 00:00:00-04:00,14.2049999237061,14.2049999237061,14.2049999237061,14.2049999237061,13.1522178649902,0,0,0,0
|
||||
2025-05-07 00:00:00-04:00,14.1125001907349,14.1125001907349,14.1125001907349,14.1125001907349,13.0665731430054,0,0,0,0
|
||||
2025-05-08 00:00:00-04:00,14.1199998855591,14.1199998855591,14.1199998855591,14.1199998855591,13.0735177993774,0,0,0,0
|
||||
2025-05-09 00:00:00-04:00,14.2399997711182,14.2399997711182,14.2399997711182,14.2399997711182,13.1846237182617,0,0,0,0
|
||||
2025-05-12 00:00:00-04:00,14.4324998855591,14.4324998855591,14.4324998855591,14.4324998855591,13.3628568649292,0,0,0,0
|
||||
2025-05-13 00:00:00-04:00,14.4849996566772,14.4849996566772,14.4849996566772,14.4849996566772,13.4114656448364,0,0,0,0
|
||||
2025-05-14 00:00:00-04:00,14.4700002670288,14.4700002670288,14.4700002670288,14.4700002670288,13.3975782394409,0,0,0,0
|
||||
2025-05-15 00:00:00-04:00,14.5524997711182,14.5524997711182,14.5524997711182,14.5524997711182,13.4739627838135,0,0,0,0
|
||||
2025-05-16 00:00:00-04:00,14.6000003814697,14.6000003814697,14.6000003814697,14.6000003814697,13.5179433822632,0,0,0,0
|
||||
2025-05-19 00:00:00-04:00,14.710000038147,14.710000038147,14.710000038147,14.710000038147,13.6197910308838,0,0,0,0
|
||||
2025-05-20 00:00:00-04:00,14.772500038147,14.772500038147,14.772500038147,14.772500038147,13.6776580810547,0,0,0,0
|
||||
2025-05-21 00:00:00-04:00,14.6925001144409,14.6925001144409,14.6925001144409,14.6925001144409,13.603588104248,0,0,0,0
|
||||
2025-05-22 00:00:00-04:00,14.6899995803833,14.6899995803833,14.6899995803833,14.6899995803833,13.6012725830078,0,0,0,0
|
||||
2025-05-23 00:00:00-04:00,14.7075004577637,14.7075004577637,14.7075004577637,14.7075004577637,13.6174764633179,0,0,0,0
|
||||
2025-05-27 00:00:00-04:00,14.8649997711182,14.8649997711182,14.8649997711182,14.8649997711182,13.7633028030396,0,0,0,0
|
||||
2025-05-28 00:00:00-04:00,14.7174997329712,14.7174997329712,14.7174997329712,14.7174997329712,13.6267347335815,0,0,0,0
|
||||
2025-05-29 00:00:00-04:00,14.8199996948242,14.8199996948242,14.8199996948242,14.8199996948242,13.7216377258301,0,0,0,0
|
||||
2025-05-30 00:00:00-04:00,14.7799997329712,14.7799997329712,14.7799997329712,14.7799997329712,13.6846027374268,0,0,0,0
|
||||
2025-06-02 00:00:00-04:00,14.8950004577637,14.8950004577637,14.8950004577637,14.8950004577637,13.7910804748535,0,0,0,0
|
||||
2025-06-03 00:00:00-04:00,14.8450002670288,14.8450002670288,14.8450002670288,14.8450002670288,13.7447853088379,0,0,0,0
|
||||
2025-06-04 00:00:00-04:00,14.9300003051758,14.9300003051758,14.9300003051758,14.9300003051758,13.823486328125,0,0,0,0
|
||||
2025-06-05 00:00:00-04:00,14.9700002670288,14.9700002670288,14.9700002670288,14.9700002670288,13.8605213165283,0,0,0,0
|
||||
2025-06-06 00:00:00-04:00,15.0275001525879,15.0275001525879,15.0275001525879,15.0275001525879,13.9137592315674,0,0,0,0
|
||||
2025-06-09 00:00:00-04:00,15.0775003433228,15.0775003433228,15.0775003433228,15.0775003433228,13.960054397583,0,0,0,0
|
||||
2025-06-10 00:00:00-04:00,15.0775003433228,15.0775003433228,15.0775003433228,15.0775003433228,13.960054397583,0,0,0,0
|
||||
2025-06-11 00:00:00-04:00,15.1300001144409,15.1300001144409,15.1300001144409,15.1300001144409,14.0086631774902,0,0,0,0
|
||||
2025-06-12 00:00:00-04:00,15.1925001144409,15.1925001144409,15.1925001144409,15.1925001144409,14.0665311813355,0,0,0,0
|
||||
2025-06-13 00:00:00-04:00,14.9899997711182,14.9899997711182,14.9899997711182,14.9899997711182,13.87903881073,0,0,0,0
|
||||
2025-06-16 00:00:00-04:00,15.1149997711182,15.1149997711182,15.1149997711182,15.1149997711182,13.9947748184204,0,0,0,0
|
||||
2025-06-17 00:00:00-04:00,14.960000038147,14.960000038147,14.960000038147,14.960000038147,13.8512620925903,0,0,0,0
|
||||
2025-06-18 00:00:00-04:00,14.897500038147,14.897500038147,14.897500038147,14.897500038147,13.7933940887451,0,0,0,0
|
||||
2025-06-20 00:00:00-04:00,14.7974996566772,14.7974996566772,14.7974996566772,14.7974996566772,13.7008056640625,0,0,0,0
|
||||
2025-06-23 00:00:00-04:00,14.8675003051758,14.8675003051758,14.8675003051758,14.8675003051758,13.7656183242798,0,0,0,0
|
||||
2025-06-24 00:00:00-04:00,15.0900001525879,15.0900001525879,15.0900001525879,15.0900001525879,13.9716272354126,0,0,0,0
|
||||
2025-06-25 00:00:00-04:00,15.0249996185303,15.0249996185303,15.0249996185303,15.0249996185303,13.9114446640015,0,0,0,0
|
||||
2025-06-26 00:00:00-04:00,15.1424999237061,15.1424999237061,15.1424999237061,15.1424999237061,14.0202360153198,0,0,0,0
|
||||
2025-06-27 00:00:00-04:00,15.2650003433228,15.2650003433228,15.2650003433228,15.2650003433228,14.1336574554443,0,0,0,0
|
||||
2025-06-30 00:00:00-04:00,15.2674999237061,15.2674999237061,15.2674999237061,15.2674999237061,14.1359720230103,0,0,0,0
|
||||
2025-07-01 00:00:00-04:00,15.3149995803833,15.3149995803833,15.3149995803833,15.3149995803833,14.1799516677856,0,0,0,0
|
||||
2025-07-02 00:00:00-04:00,15.3850002288818,15.3850002288818,15.3850002288818,15.3850002288818,14.2447643280029,0,0,0,0
|
||||
2025-07-03 00:00:00-04:00,15.3850002288818,15.3850002288818,15.3850002288818,15.3850002288818,14.2447643280029,0,0,0,0
|
||||
2025-07-07 00:00:00-04:00,15.2600002288818,15.2600002288818,15.2600002288818,15.2600002288818,14.1290283203125,0,0,0,0
|
||||
2025-07-08 00:00:00-04:00,15.3374996185303,15.3374996185303,15.3374996185303,15.3374996185303,14.2007837295532,0,0,0,0
|
||||
2025-07-09 00:00:00-04:00,15.3800001144409,15.3800001144409,15.3800001144409,15.3800001144409,14.2401342391968,0,0,0,0
|
||||
2025-07-10 00:00:00-04:00,15.4300003051758,15.4300003051758,15.4300003051758,15.4300003051758,14.2864294052124,0,0,0,0
|
||||
2025-07-11 00:00:00-04:00,15.3149995803833,15.3149995803833,15.3149995803833,15.3149995803833,14.1799516677856,0,0,0,0
|
||||
2025-07-14 00:00:00-04:00,15.2875003814697,15.2875003814697,15.2875003814697,15.2875003814697,14.1544904708862,0,0,0,0
|
||||
2025-07-15 00:00:00-04:00,15.2299995422363,15.2299995422363,15.2299995422363,15.2299995422363,14.1012516021729,0,0,0,0
|
||||
2025-07-16 00:00:00-04:00,15.2700004577637,15.2700004577637,15.2700004577637,15.2700004577637,14.1382875442505,0,0,0,0
|
||||
2025-07-17 00:00:00-04:00,15.3125,15.3125,15.3125,15.3125,14.1776371002197,0,0,0,0
|
||||
2025-07-18 00:00:00-04:00,15.3199996948242,15.3199996948242,15.3199996948242,15.3199996948242,14.1845808029175,0,0,0,0
|
||||
2025-07-21 00:00:00-04:00,15.3774995803833,15.3774995803833,15.3774995803833,15.3774995803833,14.2378196716309,0,0,0,0
|
||||
2025-07-22 00:00:00-04:00,15.4350004196167,15.4350004196167,15.4350004196167,15.4350004196167,14.2910585403442,0,0,0,0
|
||||
2025-07-23 00:00:00-04:00,15.6975002288818,15.6975002288818,15.6975002288818,15.6975002288818,14.5341033935547,0,0,0,0
|
||||
2025-07-24 00:00:00-04:00,15.7174997329712,15.7174997329712,15.7174997329712,15.7174997329712,14.5526208877563,0,0,0,0
|
||||
2025-07-25 00:00:00-04:00,15.6674995422363,15.6674995422363,15.6674995422363,15.6674995422363,14.506326675415,0,0,0,0
|
||||
2025-07-28 00:00:00-04:00,15.539999961853,15.539999961853,15.539999961853,15.539999961853,14.3882761001587,0,0,0,0
|
||||
2025-07-29 00:00:00-04:00,15.5200004577637,15.5200004577637,15.5200004577637,15.5200004577637,14.3697595596313,0,0,0,0
|
||||
2025-07-30 00:00:00-04:00,15.4350004196167,15.4350004196167,15.4350004196167,15.4350004196167,14.2910585403442,0,0,0,0
|
||||
2025-07-31 00:00:00-04:00,15.2624998092651,15.2624998092651,15.2624998092651,15.2624998092651,14.1313428878784,0,0,0,0
|
||||
2025-08-01 00:00:00-04:00,15.1774997711182,15.1774997711182,15.1774997711182,15.1774997711182,14.0526418685913,0,0,0,0
|
||||
2025-08-04 00:00:00-04:00,15.3424997329712,15.3424997329712,15.3424997329712,15.3424997329712,14.2054138183594,0,0,0,0
|
||||
2025-08-05 00:00:00-04:00,15.352499961853,15.352499961853,15.352499961853,15.352499961853,14.2146730422974,0,0,0,0
|
||||
2025-08-06 00:00:00-04:00,15.3374996185303,15.3374996185303,15.3374996185303,15.3374996185303,14.2007837295532,0,0,0,0
|
||||
2025-08-07 00:00:00-04:00,15.4875001907349,15.4875001907349,15.4875001907349,15.4875001907349,14.3396673202515,0,0,0,0
|
||||
2025-08-08 00:00:00-04:00,15.5299997329712,15.5299997329712,15.5299997329712,15.5299997329712,14.3790168762207,0,0,0,0
|
||||
2025-08-11 00:00:00-04:00,15.5100002288818,15.5100002288818,15.5100002288818,15.5100002288818,14.3605003356934,0,0,0,0
|
||||
2025-08-12 00:00:00-04:00,15.6925001144409,15.6925001144409,15.6925001144409,15.6925001144409,14.5294742584229,0,0,0,0
|
||||
2025-08-13 00:00:00-04:00,15.8299999237061,15.8299999237061,15.8299999237061,15.8299999237061,14.6567831039429,0,0,0,0
|
||||
2025-08-14 00:00:00-04:00,15.7775001525879,15.7775001525879,15.7775001525879,15.7775001525879,14.6081743240356,0,0,0,0
|
||||
2025-08-15 00:00:00-04:00,15.835000038147,15.835000038147,15.835000038147,15.835000038147,14.661413192749,0,0,0,0
|
||||
2025-08-18 00:00:00-04:00,15.8100004196167,15.8100004196167,15.8100004196167,15.8100004196167,14.6382665634155,0,0,0,0
|
||||
2025-08-19 00:00:00-04:00,15.8575000762939,15.8575000762939,15.8575000762939,15.8575000762939,14.6822452545166,0,0,0,0
|
||||
2025-08-20 00:00:00-04:00,15.8824996948242,15.8824996948242,15.8824996948242,15.8824996948242,14.7053918838501,0,0,0,0
|
||||
2025-08-21 00:00:00-04:00,15.8549995422363,15.8549995422363,15.8549995422363,15.8549995422363,14.6799306869507,0,0,0,0
|
||||
2025-08-22 00:00:00-04:00,16.0849990844727,16.0849990844727,16.0849990844727,16.0849990844727,14.8928833007813,0,0,0,0
|
||||
2025-08-25 00:00:00-04:00,15.9624996185303,15.9624996185303,15.9624996185303,15.9624996185303,14.7794628143311,0,0,0,0
|
||||
2025-08-26 00:00:00-04:00,15.8924999237061,15.8924999237061,15.8924999237061,15.8924999237061,14.7146511077881,0,0,0,0
|
||||
2025-08-27 00:00:00-04:00,15.8800001144409,15.8800001144409,15.8800001144409,15.8800001144409,14.7030782699585,0,0,0,0
|
||||
2025-08-28 00:00:00-04:00,15.9099998474121,15.9099998474121,15.9099998474121,15.9099998474121,14.7308540344238,0,0,0,0
|
||||
2025-08-29 00:00:00-04:00,15.8900003433228,15.8900003433228,15.8900003433228,15.8900003433228,14.7123365402222,0,0,0,0
|
||||
2025-09-02 00:00:00-04:00,15.7550001144409,15.7550001144409,15.7550001144409,15.7550001144409,14.5873422622681,0,0,0,0
|
||||
2025-09-03 00:00:00-04:00,15.7550001144409,15.7550001144409,15.7550001144409,15.7550001144409,14.5873422622681,0,0,0,0
|
||||
2025-09-04 00:00:00-04:00,15.7849998474121,15.7849998474121,15.7849998474121,15.7849998474121,14.6151180267334,0,0,0,0
|
||||
2025-09-05 00:00:00-04:00,15.9250001907349,15.9250001907349,15.9250001907349,15.9250001907349,14.744743347168,0,0,0,0
|
||||
2025-09-08 00:00:00-04:00,16.0249996185303,16.0249996185303,16.0249996185303,16.0249996185303,14.8373308181763,0,0,0,0
|
||||
2025-09-09 00:00:00-04:00,16.0575008392334,16.0575008392334,16.0575008392334,16.0575008392334,14.8674230575562,0,0,0,0
|
||||
2025-09-10 00:00:00-04:00,16.0750007629395,16.0750007629395,16.0750007629395,16.0750007629395,14.8836259841919,0,0,0,0
|
||||
2025-09-11 00:00:00-04:00,16.2900009155273,16.2900009155273,16.2900009155273,16.2900009155273,15.0826921463013,0,0,0,0
|
||||
2025-09-12 00:00:00-04:00,16.2299995422363,16.2299995422363,16.2299995422363,16.2299995422363,15.0271377563477,0,0,0,0
|
||||
2025-09-15 00:00:00-04:00,16.3075008392334,16.3075008392334,16.3075008392334,16.3075008392334,15.098895072937,0,0,0,0
|
||||
2025-09-16 00:00:00-04:00,16.3024997711182,16.3024997711182,16.3024997711182,16.3024997711182,15.0942649841309,0,0,0,0
|
||||
2025-09-17 00:00:00-04:00,16.3474998474121,16.3474998474121,16.3474998474121,16.3474998474121,15.1359300613403,0,0,0,0
|
||||
2025-09-18 00:00:00-04:00,16.3125,16.3125,16.3125,16.3125,15.1035232543945,0,0,0,0
|
||||
2025-09-19 00:00:00-04:00,16.2749996185303,16.2749996185303,16.2749996185303,16.2749996185303,15.0688028335571,0,0,0,0
|
||||
2025-09-22 00:00:00-04:00,16.3199996948242,16.3199996948242,16.3199996948242,16.3199996948242,15.1104679107666,0,0,0,0
|
||||
2025-09-23 00:00:00-04:00,16.3250007629395,16.3250007629395,16.3250007629395,16.3250007629395,15.1150979995728,0,0,0,0
|
||||
2025-09-24 00:00:00-04:00,16.2900009155273,16.2900009155273,16.2900009155273,16.2900009155273,15.0826921463013,0,0,0,0
|
||||
2025-09-25 00:00:00-04:00,16.1324996948242,16.1324996948242,16.1324996948242,16.1324996948242,14.936863899231,0,0,0,0
|
||||
2025-09-26 00:00:00-04:00,16.2124996185303,16.2124996185303,16.2124996185303,16.2124996185303,15.0109348297119,0,0,0,0
|
||||
2025-09-29 00:00:00-04:00,16.3274993896484,16.3274993896484,16.3274993896484,16.3274993896484,15.1174116134644,0,0,0,0
|
||||
2025-09-30 00:00:00-04:00,16.4500007629395,16.4500007629395,16.4500007629395,16.4500007629395,15.2308340072632,0,0,0,0
|
||||
2025-10-01 00:00:00-04:00,16.5550003051758,16.5550003051758,16.5550003051758,16.5550003051758,15.3280515670776,0,0,0,0
|
||||
2025-10-02 00:00:00-04:00,16.5349998474121,16.5349998474121,16.5349998474121,16.5349998474121,15.3095331192017,0,0,0,0
|
||||
2025-10-03 00:00:00-04:00,16.625,16.625,16.625,16.625,15.3928632736206,0,0,0,0
|
||||
2025-10-06 00:00:00-04:00,16.6224994659424,16.6224994659424,16.6224994659424,16.6224994659424,15.3905477523804,0,0,0,0
|
||||
2025-10-07 00:00:00-04:00,16.4825000762939,16.4825000762939,16.4825000762939,16.4825000762939,15.2609243392944,0,0,0,0
|
||||
2025-10-08 00:00:00-04:00,16.5300006866455,16.5300006866455,16.5300006866455,16.5300006866455,15.3049049377441,0,0,0,0
|
||||
2025-10-09 00:00:00-04:00,16.4274997711182,16.4274997711182,16.4274997711182,16.4274997711182,15.210000038147,0,0,0,0
|
||||
2025-10-10 00:00:00-04:00,16.1149997711182,16.1149997711182,16.1149997711182,16.1149997711182,14.9206609725952,0,0,0,0
|
||||
2025-10-13 00:00:00-04:00,16.2775001525879,16.2775001525879,16.2775001525879,16.2775001525879,15.071117401123,0,0,0,0
|
||||
2025-10-14 00:00:00-04:00,16.2975006103516,16.2975006103516,16.2975006103516,16.2975006103516,15.089635848999,0,0,0,0
|
||||
2025-10-15 00:00:00-04:00,16.3675003051758,16.3675003051758,16.3675003051758,16.3675003051758,15.154447555542,0,0,0,0
|
||||
2025-10-16 00:00:00-04:00,16.3875007629395,16.3875007629395,16.3875007629395,16.3875007629395,15.172966003418,0,0,0,0
|
||||
2025-10-17 00:00:00-04:00,16.3999996185303,16.3999996185303,16.3999996185303,16.3999996185303,15.1845388412476,0,0,0,0
|
||||
2025-10-20 00:00:00-04:00,16.4750003814697,16.4750003814697,16.4750003814697,16.4750003814697,15.2539806365967,0,0,0,0
|
||||
2025-10-21 00:00:00-04:00,16.4099998474121,16.4099998474121,16.4099998474121,16.4099998474121,15.1937971115112,0,0,0,0
|
||||
2025-10-22 00:00:00-04:00,16.4074993133545,16.4074993133545,16.4074993133545,16.4074993133545,15.1914825439453,0,0,0,0
|
||||
2025-10-23 00:00:00-04:00,16.4599990844727,16.4599990844727,16.4599990844727,16.4599990844727,15.2400913238525,0,0,0,0
|
||||
2025-10-24 00:00:00-04:00,16.5025005340576,16.5025005340576,16.5025005340576,16.5025005340576,15.2794427871704,0,0,0,0
|
||||
2025-10-27 00:00:00-04:00,16.6000003814697,16.6000003814697,16.6000003814697,16.6000003814697,15.3697166442871,0,0,4,0
|
||||
2025-10-28 00:00:00-04:00,16.5599994659424,16.5599994659424,16.5599994659424,16.5599994659424,15.3326797485352,0,0,0,0
|
||||
2025-10-29 00:00:00-04:00,16.5900001525879,16.5900001525879,16.5900001525879,16.5900001525879,15.3604574203491,0,0,0,0
|
||||
2025-10-30 00:00:00-04:00,16.4400005340576,16.4400005340576,16.4400005340576,16.4400005340576,15.2215747833252,0,0,0,0
|
||||
2025-10-31 00:00:00-04:00,16.4400005340576,16.4400005340576,16.4400005340576,16.4400005340576,15.2215747833252,0,0,0,0
|
||||
2025-11-03 00:00:00-05:00,16.4300003051758,16.4300003051758,16.4300003051758,16.4300003051758,15.2123155593872,0,0,0,0
|
||||
2025-11-04 00:00:00-05:00,16.3199996948242,16.3199996948242,16.3199996948242,16.3199996948242,15.1104679107666,0,0,0,0
|
||||
2025-11-05 00:00:00-05:00,16.3899993896484,16.3899993896484,16.3899993896484,16.3899993896484,15.1752796173096,0,0,0,0
|
||||
2025-11-06 00:00:00-05:00,16.4400005340576,16.4400005340576,16.4400005340576,16.4400005340576,15.2215747833252,0,0,0,0
|
||||
2025-11-07 00:00:00-05:00,16.4899997711182,16.4899997711182,16.4899997711182,16.4899997711182,15.2678680419922,0,0,0,0
|
||||
2025-11-10 00:00:00-05:00,16.6800003051758,16.6800003051758,16.6800003051758,16.6800003051758,15.4437875747681,0,0,0,0
|
||||
2025-11-11 00:00:00-05:00,16.8400001525879,16.8400001525879,16.8400001525879,16.8400001525879,15.59192943573,0,0,0,0
|
||||
2025-11-12 00:00:00-05:00,16.9599990844727,16.9599990844727,16.9599990844727,16.9599990844727,15.7030344009399,0,0,0,0
|
||||
2025-11-13 00:00:00-05:00,16.8199996948242,16.8199996948242,16.8199996948242,16.8199996948242,15.573410987854,0,0,0,0
|
||||
2025-11-14 00:00:00-05:00,16.6599998474121,16.6599998474121,16.6599998474121,16.6599998474121,15.4252691268921,0,0,0,0
|
||||
2025-11-17 00:00:00-05:00,16.4899997711182,16.4899997711182,16.4899997711182,16.4899997711182,15.2678680419922,0,0,0,0
|
||||
2025-11-18 00:00:00-05:00,16.3299999237061,16.3299999237061,16.3299999237061,16.3299999237061,15.1197271347046,0,0,0,0
|
||||
2025-11-19 00:00:00-05:00,16.2299995422363,16.2299995422363,16.2299995422363,16.2299995422363,15.0271377563477,0,0,0,0
|
||||
2025-11-20 00:00:00-05:00,16.0699996948242,16.0699996948242,16.0699996948242,16.0699996948242,14.8789958953857,0,0,0,0
|
||||
2025-11-21 00:00:00-05:00,16.25,16.25,16.25,16.25,15.0456562042236,0,0,0,0
|
||||
2025-11-24 00:00:00-05:00,16.3099994659424,16.3099994659424,16.3099994659424,16.3099994659424,15.1012086868286,0,0,0,0
|
||||
2025-11-25 00:00:00-05:00,16.5100002288818,16.5100002288818,16.5100002288818,16.5100002288818,15.2863864898682,0,0,0,0
|
||||
2025-11-26 00:00:00-05:00,16.6599998474121,16.6599998474121,16.6599998474121,16.6599998474121,15.4252691268921,0,0,0,0
|
||||
2025-11-28 00:00:00-05:00,16.7299995422363,16.7299995422363,16.7299995422363,16.7299995422363,15.4900808334351,0,0,0,0
|
||||
2025-12-01 00:00:00-05:00,16.6900005340576,16.6900005340576,16.6900005340576,16.6900005340576,15.4530467987061,0,0,0,0
|
||||
2025-12-02 00:00:00-05:00,16.7700004577637,16.7700004577637,16.7700004577637,16.7700004577637,15.5271167755127,0,0,0,0
|
||||
2025-12-03 00:00:00-05:00,16.8199996948242,16.8199996948242,16.8199996948242,16.8199996948242,15.573410987854,0,0,0,0
|
||||
2025-12-04 00:00:00-05:00,16.8799991607666,16.8799991607666,16.8799991607666,16.8799991607666,15.628963470459,0,0,0,0
|
||||
2025-12-05 00:00:00-05:00,16.8400001525879,16.8400001525879,16.8400001525879,16.8400001525879,15.59192943573,0,0,0,0
|
||||
2025-12-08 00:00:00-05:00,16.8600006103516,16.8600006103516,16.8600006103516,16.8600006103516,15.6104469299316,0,0,0,0
|
||||
2025-12-09 00:00:00-05:00,16.8299999237061,16.8299999237061,16.8299999237061,16.8299999237061,15.582670211792,0,0,0,0
|
||||
2025-12-10 00:00:00-05:00,16.9500007629395,16.9500007629395,16.9500007629395,16.9500007629395,15.6937770843506,0,0,0,0
|
||||
2025-12-11 00:00:00-05:00,17.0799999237061,17.0799999237061,17.0799999237061,17.0799999237061,15.8141412734985,0,0,0,0
|
||||
2025-12-12 00:00:00-05:00,17.0200004577637,17.0200004577637,17.0200004577637,17.0200004577637,15.7585887908936,0,0,0,0
|
||||
2025-12-15 00:00:00-05:00,17.0900001525879,17.0900001525879,17.0900001525879,17.0900001525879,15.8234004974365,0,0,0,0
|
||||
2025-12-16 00:00:00-05:00,16.9899997711182,16.9899997711182,16.9899997711182,16.9899997711182,15.7308120727539,0,0,0,0
|
||||
2025-12-17 00:00:00-05:00,16.9200000762939,16.9200000762939,16.9200000762939,16.9200000762939,15.6659994125366,0,0,0,0
|
||||
2025-12-18 00:00:00-05:00,16.2199993133545,16.2199993133545,16.2199993133545,16.2199993133545,16.2199993133545,0,0.837,0,0.417
|
||||
2025-12-19 00:00:00-05:00,16.2999992370605,16.2999992370605,16.2999992370605,16.2999992370605,16.2999992370605,0,0,0,0
|
||||
2025-12-22 00:00:00-05:00,16.3700008392334,16.3700008392334,16.3700008392334,16.3700008392334,16.3700008392334,0,0,0,0
|
||||
2025-12-23 00:00:00-05:00,16.4599990844727,16.4599990844727,16.4599990844727,16.4599990844727,16.4599990844727,0,0,0,0
|
||||
2025-12-24 00:00:00-05:00,16.4599990844727,16.4599990844727,16.4599990844727,16.4599990844727,16.4599990844727,0,0,0,0
|
||||
2025-12-26 00:00:00-05:00,16.5300006866455,16.5300006866455,16.5300006866455,16.5300006866455,16.5300006866455,0,0,0,0
|
||||
2025-12-29 00:00:00-05:00,16.5100002288818,16.5100002288818,16.5100002288818,16.5100002288818,16.5100002288818,0,0,0,0
|
||||
2025-12-30 00:00:00-05:00,16.5400009155273,16.5400009155273,16.5400009155273,16.5400009155273,16.5400009155273,0,0,0,0
|
||||
2025-12-31 00:00:00-05:00,16.4599990844727,16.4599990844727,16.4599990844727,16.4599990844727,16.4599990844727,0,0,0,0
|
||||
2026-01-02 00:00:00-05:00,16.6299991607666,16.6299991607666,16.6299991607666,16.6299991607666,16.6299991607666,0,0,0,0
|
||||
2026-01-05 00:00:00-05:00,16.7900009155273,16.7900009155273,16.7900009155273,16.7900009155273,16.7900009155273,0,0,0,0
|
||||
2026-01-06 00:00:00-05:00,16.8299999237061,16.8299999237061,16.8299999237061,16.8299999237061,16.8299999237061,0,0,0,0
|
||||
2026-01-07 00:00:00-05:00,16.6900005340576,16.6900005340576,16.6900005340576,16.6900005340576,16.6900005340576,0,0,0,0
|
||||
2026-01-08 00:00:00-05:00,16.7600002288818,16.7600002288818,16.7600002288818,16.7600002288818,16.7600002288818,0,0,0,0
|
||||
2026-01-09 00:00:00-05:00,16.8099994659424,16.8099994659424,16.8099994659424,16.8099994659424,16.8099994659424,0,0,0,0
|
||||
|
1257
tests/data/JENYX-1d-cg-double-count-fixed.csv
Normal file
1257
tests/data/JENYX-1d-cg-double-count-fixed.csv
Normal file
File diff suppressed because it is too large
Load Diff
1257
tests/data/JENYX-1d-cg-double-count.csv
Normal file
1257
tests/data/JENYX-1d-cg-double-count.csv
Normal file
File diff suppressed because it is too large
Load Diff
503
tests/data/VWILX-1d-cg-double-count-fixed.csv
Normal file
503
tests/data/VWILX-1d-cg-double-count-fixed.csv
Normal file
@@ -0,0 +1,503 @@
|
||||
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Capital Gains
|
||||
2024-01-10 00:00:00-05:00,100.029998779297,100.029998779297,100.029998779297,100.029998779297,85.4241455239785,0,0,0,0
|
||||
2024-01-11 00:00:00-05:00,100.25,100.25,100.25,100.25,85.6120233258593,0,0,0,0
|
||||
2024-01-12 00:00:00-05:00,100.440002441406,100.440002441406,100.440002441406,100.440002441406,85.7742826121002,0,0,0,0
|
||||
2024-01-16 00:00:00-05:00,98.7099990844727,98.7099990844727,98.7099990844727,98.7099990844727,84.2968852280841,0,0,0,0
|
||||
2024-01-17 00:00:00-05:00,97.0599975585938,97.0599975585938,97.0599975585938,97.0599975585938,82.8878082293684,0,0,0,0
|
||||
2024-01-18 00:00:00-05:00,98.0299987792969,98.0299987792969,98.0299987792969,98.0299987792969,83.7161749838117,0,0,0,0
|
||||
2024-01-19 00:00:00-05:00,98.7699966430664,98.7699966430664,98.7699966430664,98.7699966430664,84.3481222593641,0,0,0,0
|
||||
2024-01-22 00:00:00-05:00,98.7600021362305,98.7600021362305,98.7600021362305,98.7600021362305,84.3395870977445,0,0,0,0
|
||||
2024-01-23 00:00:00-05:00,99.370002746582,99.370002746582,99.370002746582,99.370002746582,84.8605186337266,0,0,0,0
|
||||
2024-01-24 00:00:00-05:00,100.410003662109,100.410003662109,100.410003662109,100.410003662109,85.7486640964602,0,0,0,0
|
||||
2024-01-25 00:00:00-05:00,100.349998474121,100.349998474121,100.349998474121,100.349998474121,85.6974205497896,0,0,0,0
|
||||
2024-01-26 00:00:00-05:00,100.839996337891,100.839996337891,100.839996337891,100.839996337891,86.1158715078211,0,0,0,0
|
||||
2024-01-29 00:00:00-05:00,101.190002441406,101.190002441406,101.190002441406,101.190002441406,86.4147715646627,0,0,0,0
|
||||
2024-01-30 00:00:00-05:00,100.410003662109,100.410003662109,100.410003662109,100.410003662109,85.7486640964602,0,0,0,0
|
||||
2024-01-31 00:00:00-05:00,99.2799987792969,99.2799987792969,99.2799987792969,99.2799987792969,84.783656571416,0,0,0,0
|
||||
2024-02-01 00:00:00-05:00,100.800003051758,100.800003051758,100.800003051758,100.800003051758,86.0817178305614,0,0,0,0
|
||||
2024-02-02 00:00:00-05:00,100.120002746582,100.120002746582,100.120002746582,100.120002746582,85.5010075862891,0,0,0,0
|
||||
2024-02-05 00:00:00-05:00,100.269996643066,100.269996643066,100.269996643066,100.269996643066,85.6291001644892,0,0,0,0
|
||||
2024-02-06 00:00:00-05:00,101.080001831055,101.080001831055,101.080001831055,101.080001831055,86.3208326637223,0,0,0,0
|
||||
2024-02-07 00:00:00-05:00,101.860000610352,101.860000610352,101.860000610352,101.860000610352,86.9869401319248,0,0,0,0
|
||||
2024-02-08 00:00:00-05:00,102.720001220703,102.720001220703,102.720001220703,102.720001220703,87.7213679854278,0,0,0,0
|
||||
2024-02-09 00:00:00-05:00,103.440002441406,103.440002441406,103.440002441406,103.440002441406,88.3362384223503,0,0,0,0
|
||||
2024-02-12 00:00:00-05:00,103.540000915527,103.540000915527,103.540000915527,103.540000915527,88.4216356462806,0,0,0,0
|
||||
2024-02-13 00:00:00-05:00,101.23999786377,101.23999786377,101.23999786377,101.23999786377,86.4574669189325,0,0,0,0
|
||||
2024-02-14 00:00:00-05:00,103.01000213623,103.01000213623,103.01000213623,103.01000213623,87.9690244955988,0,0,0,0
|
||||
2024-02-15 00:00:00-05:00,104.330001831055,104.330001831055,104.330001831055,104.330001831055,89.0962847914933,0,0,0,0
|
||||
2024-02-16 00:00:00-05:00,104.349998474121,104.349998474121,104.349998474121,104.349998474121,89.1133616301231,0,0,0,0
|
||||
2024-02-20 00:00:00-05:00,103.480003356934,103.480003356934,103.480003356934,103.480003356934,88.3703986150005,0,0,0,0
|
||||
2024-02-21 00:00:00-05:00,103.75,103.75,103.75,103.75,88.6009717711512,0,0,0,0
|
||||
2024-02-22 00:00:00-05:00,106.080001831055,106.080001831055,106.080001831055,106.080001831055,90.5907590141392,0,0,0,0
|
||||
2024-02-23 00:00:00-05:00,105.269996643066,105.269996643066,105.269996643066,105.269996643066,89.8990265149061,0,0,0,0
|
||||
2024-02-26 00:00:00-05:00,105.349998474121,105.349998474121,105.349998474121,105.349998474121,89.9673469002065,0,0,0,0
|
||||
2024-02-27 00:00:00-05:00,105.930000305176,105.930000305176,105.930000305176,105.930000305176,90.4626599205486,0,0,0,0
|
||||
2024-02-28 00:00:00-05:00,105.209999084473,105.209999084473,105.209999084473,105.209999084473,89.8477894836261,0,0,0,0
|
||||
2024-02-29 00:00:00-05:00,105.519996643066,105.519996643066,105.519996643066,105.519996643066,90.112522832427,0,0,0,0
|
||||
2024-03-01 00:00:00-05:00,107.01000213623,107.01000213623,107.01000213623,107.01000213623,91.3849655759324,0,0,0,0
|
||||
2024-03-04 00:00:00-05:00,106.449996948242,106.449996948242,106.449996948242,106.449996948242,90.9067293942201,0,0,0,0
|
||||
2024-03-05 00:00:00-05:00,105.23999786377,105.23999786377,105.23999786377,105.23999786377,89.8734079992661,0,0,0,0
|
||||
2024-03-06 00:00:00-05:00,106.629997253418,106.629997253418,106.629997253418,106.629997253418,91.0604470034508,0,0,0,0
|
||||
2024-03-07 00:00:00-05:00,108.180000305176,108.180000305176,108.180000305176,108.180000305176,92.3841267782362,0,0,0,0
|
||||
2024-03-08 00:00:00-05:00,106.98999786377,106.98999786377,106.98999786377,106.98999786377,91.367882221912,0,0,0,0
|
||||
2024-03-11 00:00:00-04:00,107.110000610352,107.110000610352,107.110000610352,107.110000610352,91.4703627998626,0,0,0,0
|
||||
2024-03-12 00:00:00-04:00,108.73999786377,108.73999786377,108.73999786377,108.73999786377,92.8623564445579,0,0,0,0
|
||||
2024-03-13 00:00:00-04:00,108.550003051758,108.550003051758,108.550003051758,108.550003051758,92.7001036737077,0,0,0,0
|
||||
2024-03-14 00:00:00-04:00,107.199996948242,107.199996948242,107.199996948242,107.199996948242,91.5472183467827,0,0,0,0
|
||||
2024-03-15 00:00:00-04:00,106.120002746582,106.120002746582,106.120002746582,106.120002746582,90.6249192067894,0,0,0,0
|
||||
2024-03-18 00:00:00-04:00,106.389999389648,106.389999389648,106.389999389648,106.389999389648,90.8554923629401,0,0,0,0
|
||||
2024-03-19 00:00:00-04:00,106.459999084473,106.459999084473,106.459999084473,106.459999084473,90.9152710712303,0,0,0,0
|
||||
2024-03-20 00:00:00-04:00,107.76000213623,107.76000213623,107.76000213623,107.76000213623,92.0254545284949,0,0,0,0
|
||||
2024-03-21 00:00:00-04:00,108.040000915527,108.040000915527,108.040000915527,108.040000915527,92.2645693616558,0,0,0,0
|
||||
2024-03-22 00:00:00-04:00,107.949996948242,107.949996948242,107.949996948242,107.949996948242,92.1877072993452,0,0,0,0
|
||||
2024-03-25 00:00:00-04:00,107.790000915527,107.790000915527,107.790000915527,107.790000915527,92.0510730441349,0,0,0,0
|
||||
2024-03-26 00:00:00-04:00,107.559997558594,107.559997558594,107.559997558594,107.559997558594,91.8546535652439,0,0,0,0
|
||||
2024-03-27 00:00:00-04:00,107.650001525879,107.650001525879,107.650001525879,107.650001525879,91.9315156275545,0,0,0,0
|
||||
2024-03-28 00:00:00-04:00,107.199996948242,107.199996948242,107.199996948242,107.199996948242,91.5472183467827,0,0,0,0
|
||||
2024-04-01 00:00:00-04:00,107.290000915527,107.290000915527,107.290000915527,107.290000915527,91.6240804090932,0,0,0,0
|
||||
2024-04-02 00:00:00-04:00,106.790000915527,106.790000915527,106.790000915527,106.790000915527,91.1970877740516,0,0,0,0
|
||||
2024-04-03 00:00:00-04:00,107.290000915527,107.290000915527,107.290000915527,107.290000915527,91.6240804090932,0,0,0,0
|
||||
2024-04-04 00:00:00-04:00,106.400001525879,106.400001525879,106.400001525879,106.400001525879,90.8640340399503,0,0,0,0
|
||||
2024-04-05 00:00:00-04:00,106.959999084473,106.959999084473,106.959999084473,106.959999084473,91.342263706272,0,0,0,0
|
||||
2024-04-08 00:00:00-04:00,107.470001220703,107.470001220703,107.470001220703,107.470001220703,91.7777980183239,0,0,0,0
|
||||
2024-04-09 00:00:00-04:00,107.879997253418,107.879997253418,107.879997253418,107.879997253418,92.127928591055,0,0,0,0
|
||||
2024-04-10 00:00:00-04:00,106.569999694824,106.569999694824,106.569999694824,106.569999694824,91.0092099721707,0,0,0,0
|
||||
2024-04-11 00:00:00-04:00,107.400001525879,107.400001525879,107.400001525879,107.400001525879,91.7180193100337,0,0,0,0
|
||||
2024-04-12 00:00:00-04:00,105.080001831055,105.080001831055,105.080001831055,105.080001831055,89.7367737440558,0,0,0,0
|
||||
2024-04-15 00:00:00-04:00,104.309997558594,104.309997558594,104.309997558594,104.309997558594,89.0792014374729,0,0,0,0
|
||||
2024-04-16 00:00:00-04:00,103.980003356934,103.980003356934,103.980003356934,103.980003356934,88.7973912500422,0,0,0,0
|
||||
2024-04-17 00:00:00-04:00,103.279998779297,103.279998779297,103.279998779297,103.279998779297,88.1995976517495,0,0,0,0
|
||||
2024-04-18 00:00:00-04:00,102.480003356934,102.480003356934,102.480003356934,102.480003356934,87.5164133449171,0,0,0,0
|
||||
2024-04-19 00:00:00-04:00,101.139999389648,101.139999389648,101.139999389648,101.139999389648,86.3720696950023,0,0,0,0
|
||||
2024-04-22 00:00:00-04:00,102.580001831055,102.580001831055,102.580001831055,102.580001831055,87.6018105688474,0,0,0,0
|
||||
2024-04-23 00:00:00-04:00,104.879997253418,104.879997253418,104.879997253418,104.879997253418,89.5659727808048,0,0,0,0
|
||||
2024-04-24 00:00:00-04:00,104.660003662109,104.660003662109,104.660003662109,104.660003662109,89.3781014943145,0,0,0,0
|
||||
2024-04-25 00:00:00-04:00,103.930000305176,103.930000305176,103.930000305176,103.930000305176,88.7546893803818,0,0,0,0
|
||||
2024-04-26 00:00:00-04:00,105.23999786377,105.23999786377,105.23999786377,105.23999786377,89.8734079992661,0,0,0,0
|
||||
2024-04-29 00:00:00-04:00,105.75,105.75,105.75,105.75,90.308942311318,0,0,0,0
|
||||
2024-04-30 00:00:00-04:00,103.949996948242,103.949996948242,103.949996948242,103.949996948242,88.7717662190117,0,0,0,0
|
||||
2024-05-01 00:00:00-04:00,103.779998779297,103.779998779297,103.779998779297,103.779998779297,88.6265902867912,0,0,0,0
|
||||
2024-05-02 00:00:00-04:00,106.279998779297,106.279998779297,106.279998779297,106.279998779297,90.7615534619997,0,0,0,0
|
||||
2024-05-03 00:00:00-04:00,107.970001220703,107.970001220703,107.970001220703,107.970001220703,92.2047906533656,0,0,0,0
|
||||
2024-05-06 00:00:00-04:00,108.73999786377,108.73999786377,108.73999786377,108.73999786377,92.8623564445579,0,0,0,0
|
||||
2024-05-07 00:00:00-04:00,108.669998168945,108.669998168945,108.669998168945,108.669998168945,92.8025777362677,0,0,0,0
|
||||
2024-05-08 00:00:00-04:00,108.230003356934,108.230003356934,108.230003356934,108.230003356934,92.4268286478966,0,0,0,0
|
||||
2024-05-09 00:00:00-04:00,108.639999389648,108.639999389648,108.639999389648,108.639999389648,92.7769592206277,0,0,0,0
|
||||
2024-05-10 00:00:00-04:00,108.819999694824,108.819999694824,108.819999694824,108.819999694824,92.9306768298583,0,0,0,0
|
||||
2024-05-13 00:00:00-04:00,109.089996337891,109.089996337891,109.089996337891,109.089996337891,93.161249986009,0,0,0,0
|
||||
2024-05-14 00:00:00-04:00,110.180000305176,110.180000305176,110.180000305176,110.180000305176,94.092097318403,0,0,0,0
|
||||
2024-05-15 00:00:00-04:00,111.889999389648,111.889999389648,111.889999389648,111.889999389648,95.5524113483987,0,0,0,0
|
||||
2024-05-16 00:00:00-04:00,111.449996948242,111.449996948242,111.449996948242,111.449996948242,95.176655744637,0,0,0,0
|
||||
2024-05-17 00:00:00-04:00,111.470001220703,111.470001220703,111.470001220703,111.470001220703,95.1937390986574,0,0,0,0
|
||||
2024-05-20 00:00:00-04:00,112.150001525879,112.150001525879,112.150001525879,112.150001525879,95.7744493429297,0,0,0,0
|
||||
2024-05-21 00:00:00-04:00,111.660003662109,111.660003662109,111.660003662109,111.660003662109,95.3559983848982,0,0,0,0
|
||||
2024-05-22 00:00:00-04:00,111.459999084473,111.459999084473,111.459999084473,111.459999084473,95.1851974216472,0,0,0,0
|
||||
2024-05-23 00:00:00-04:00,111.360000610352,111.360000610352,111.360000610352,111.360000610352,95.099800197717,0,0,0,0
|
||||
2024-05-24 00:00:00-04:00,112.25,112.25,112.25,112.25,95.85984656686,0,0,0,0
|
||||
2024-05-28 00:00:00-04:00,112.25,112.25,112.25,112.25,95.85984656686,0,0,0,0
|
||||
2024-05-29 00:00:00-04:00,110.459999084473,110.459999084473,110.459999084473,110.459999084473,94.3312121515638,0,0,0,0
|
||||
2024-05-30 00:00:00-04:00,110.680000305176,110.680000305176,110.680000305176,110.680000305176,94.5190899534447,0,0,0,0
|
||||
2024-05-31 00:00:00-04:00,110.790000915527,110.790000915527,110.790000915527,110.790000915527,94.6130288543851,0,0,0,0
|
||||
2024-06-03 00:00:00-04:00,111.580001831055,111.580001831055,111.580001831055,111.580001831055,95.2876779995978,0,0,0,0
|
||||
2024-06-04 00:00:00-04:00,111.139999389648,111.139999389648,111.139999389648,111.139999389648,94.9119223958362,0,0,0,0
|
||||
2024-06-05 00:00:00-04:00,113.23999786377,113.23999786377,113.23999786377,113.23999786377,96.7052901599332,0,0,0,0
|
||||
2024-06-06 00:00:00-04:00,113.720001220703,113.720001220703,113.720001220703,113.720001220703,97.115205956345,0,0,0,0
|
||||
2024-06-07 00:00:00-04:00,112.059997558594,112.059997558594,112.059997558594,112.059997558594,95.6975872806192,0,0,0,0
|
||||
2024-06-10 00:00:00-04:00,112.379997253418,112.379997253418,112.379997253418,112.379997253418,95.9708623064302,0,0,0,0
|
||||
2024-06-11 00:00:00-04:00,111.599998474121,111.599998474121,111.599998474121,111.599998474121,95.3047548382277,0,0,0,0
|
||||
2024-06-12 00:00:00-04:00,113.059997558594,113.059997558594,113.059997558594,113.059997558594,96.5515725507025,0,0,0,0
|
||||
2024-06-13 00:00:00-04:00,111.959999084473,111.959999084473,111.959999084473,111.959999084473,95.6121900566889,0,0,0,0
|
||||
2024-06-14 00:00:00-04:00,111.040000915527,111.040000915527,111.040000915527,111.040000915527,94.8265251719059,0,0,0,0
|
||||
2024-06-17 00:00:00-04:00,111.150001525879,111.150001525879,111.150001525879,111.150001525879,94.9204640728464,0,0,0,0
|
||||
2024-06-18 00:00:00-04:00,111.220001220703,111.220001220703,111.220001220703,111.220001220703,94.9802427811366,0,0,0,0
|
||||
2024-06-20 00:00:00-04:00,111.019996643066,111.019996643066,111.019996643066,111.019996643066,94.8094418178856,0,0,0,0
|
||||
2024-06-21 00:00:00-04:00,110.389999389648,110.389999389648,110.389999389648,110.389999389648,94.2714334432736,0,0,0,0
|
||||
2024-06-24 00:00:00-04:00,110.51000213623,110.51000213623,110.51000213623,110.51000213623,94.3739140212242,0,0,0,0
|
||||
2024-06-25 00:00:00-04:00,111.389999389648,111.389999389648,111.389999389648,111.389999389648,95.125418713357,0,0,0,0
|
||||
2024-06-26 00:00:00-04:00,110.73999786377,110.73999786377,110.73999786377,110.73999786377,94.5703269847247,0,0,0,0
|
||||
2024-06-27 00:00:00-04:00,110.25,110.25,110.25,110.25,94.1518760266932,0,0,0,0
|
||||
2024-06-28 00:00:00-04:00,109.720001220703,109.720001220703,109.720001220703,109.720001220703,93.6992648760115,0,0,0,0
|
||||
2024-07-01 00:00:00-04:00,109.650001525879,109.650001525879,109.650001525879,109.650001525879,93.6394861677213,0,0,0,0
|
||||
2024-07-02 00:00:00-04:00,110.069999694824,110.069999694824,110.069999694824,110.069999694824,93.9981584174626,0,0,0,0
|
||||
2024-07-03 00:00:00-04:00,111.51000213623,111.51000213623,111.51000213623,111.51000213623,95.2278992913076,0,0,0,0
|
||||
2024-07-05 00:00:00-04:00,112.48999786377,112.48999786377,112.48999786377,112.48999786377,96.0648012073706,0,0,0,0
|
||||
2024-07-08 00:00:00-04:00,112.169998168945,112.169998168945,112.169998168945,112.169998168945,95.7915261815596,0,0,0,0
|
||||
2024-07-09 00:00:00-04:00,112.389999389648,112.389999389648,112.389999389648,112.389999389648,95.9794039834404,0,0,0,0
|
||||
2024-07-10 00:00:00-04:00,113.769996643066,113.769996643066,113.769996643066,113.769996643066,97.1579013106149,0,0,0,0
|
||||
2024-07-11 00:00:00-04:00,113.860000610352,113.860000610352,113.860000610352,113.860000610352,97.2347633729255,0,0,0,0
|
||||
2024-07-12 00:00:00-04:00,115.230003356934,115.230003356934,115.230003356934,115.230003356934,98.4047255384803,0,0,0,0
|
||||
2024-07-15 00:00:00-04:00,113.779998779297,113.779998779297,113.779998779297,113.779998779297,97.1664429876251,0,0,0,0
|
||||
2024-07-16 00:00:00-04:00,114.279998779297,114.279998779297,114.279998779297,114.279998779297,97.5934356226668,0,0,0,0
|
||||
2024-07-17 00:00:00-04:00,111.639999389648,111.639999389648,111.639999389648,111.639999389648,95.3389150308779,0,0,0,0
|
||||
2024-07-18 00:00:00-04:00,110.540000915527,110.540000915527,110.540000915527,110.540000915527,94.3995325368642,0,0,0,0
|
||||
2024-07-19 00:00:00-04:00,109.949996948242,109.949996948242,109.949996948242,109.949996948242,93.895677839512,0,0,0,0
|
||||
2024-07-22 00:00:00-04:00,111.51000213623,111.51000213623,111.51000213623,111.51000213623,95.2278992913076,0,0,0,0
|
||||
2024-07-23 00:00:00-04:00,111.459999084473,111.459999084473,111.459999084473,111.459999084473,95.1851974216472,0,0,0,0
|
||||
2024-07-24 00:00:00-04:00,108.900001525879,108.900001525879,108.900001525879,108.900001525879,92.9989972151587,0,0,0,0
|
||||
2024-07-25 00:00:00-04:00,108.080001831055,108.080001831055,108.080001831055,108.080001831055,92.298729554306,0,0,0,0
|
||||
2024-07-26 00:00:00-04:00,109.48999786377,109.48999786377,109.48999786377,109.48999786377,93.5028453971205,0,0,0,0
|
||||
2024-07-29 00:00:00-04:00,108.769996643066,108.769996643066,108.769996643066,108.769996643066,92.8879749601979,0,0,0,0
|
||||
2024-07-30 00:00:00-04:00,108.5,108.5,108.5,108.5,92.6574018040473,0,0,0,0
|
||||
2024-07-31 00:00:00-04:00,111.089996337891,111.089996337891,111.089996337891,111.089996337891,94.8692205261758,0,0,0,0
|
||||
2024-08-01 00:00:00-04:00,107.879997253418,107.879997253418,107.879997253418,107.879997253418,92.127928591055,0,0,0,0
|
||||
2024-08-02 00:00:00-04:00,105.830001831055,105.830001831055,105.830001831055,105.830001831055,90.3772626966184,0,0,0,0
|
||||
2024-08-05 00:00:00-04:00,103.870002746582,103.870002746582,103.870002746582,103.870002746582,88.7034523491018,0,0,0,0
|
||||
2024-08-06 00:00:00-04:00,104.76000213623,104.76000213623,104.76000213623,104.76000213623,89.4634987182448,0,0,0,0
|
||||
2024-08-07 00:00:00-04:00,105.199996948242,105.199996948242,105.199996948242,105.199996948242,89.8392478066159,0,0,0,0
|
||||
2024-08-08 00:00:00-04:00,107.900001525879,107.900001525879,107.900001525879,107.900001525879,92.1450119450754,0,0,0,0
|
||||
2024-08-09 00:00:00-04:00,108.180000305176,108.180000305176,108.180000305176,108.180000305176,92.3841267782362,0,0,0,0
|
||||
2024-08-12 00:00:00-04:00,108.069999694824,108.069999694824,108.069999694824,108.069999694824,92.2901878772958,0,0,0,0
|
||||
2024-08-13 00:00:00-04:00,109.900001525879,109.900001525879,109.900001525879,109.900001525879,93.8529824852421,0,0,0,0
|
||||
2024-08-14 00:00:00-04:00,109.779998779297,109.779998779297,109.779998779297,109.779998779297,93.7505019072915,0,0,0,0
|
||||
2024-08-15 00:00:00-04:00,112.300003051758,112.300003051758,112.300003051758,112.300003051758,95.9025484365204,0,0,0,0
|
||||
2024-08-16 00:00:00-04:00,113,113,113,113,96.5003355194225,0,0,0,0
|
||||
2024-08-19 00:00:00-04:00,114.830001831055,114.830001831055,114.830001831055,114.830001831055,98.0631301273688,0,0,0,0
|
||||
2024-08-20 00:00:00-04:00,113.830001831055,113.830001831055,113.830001831055,113.830001831055,97.2091448572854,0,0,0,0
|
||||
2024-08-21 00:00:00-04:00,114.959999084473,114.959999084473,114.959999084473,114.959999084473,98.1741458669391,0,0,0,0
|
||||
2024-08-22 00:00:00-04:00,113.819999694824,113.819999694824,113.819999694824,113.819999694824,97.2006031802753,0,0,0,0
|
||||
2024-08-23 00:00:00-04:00,115.139999389648,115.139999389648,115.139999389648,115.139999389648,98.3278634761697,0,0,0,0
|
||||
2024-08-26 00:00:00-04:00,113.629997253418,113.629997253418,113.629997253418,113.629997253418,97.0383438940344,0,0,0,0
|
||||
2024-08-27 00:00:00-04:00,113.970001220703,113.970001220703,113.970001220703,113.970001220703,97.3287022738659,0,0,0,0
|
||||
2024-08-28 00:00:00-04:00,112.879997253418,112.879997253418,112.879997253418,112.879997253418,96.3978549414719,0,0,0,0
|
||||
2024-08-29 00:00:00-04:00,113.629997253418,113.629997253418,113.629997253418,113.629997253418,97.0383438940344,0,0,0,0
|
||||
2024-08-30 00:00:00-04:00,113.870002746582,113.870002746582,113.870002746582,113.870002746582,97.2433050499356,0,0,0,0
|
||||
2024-09-03 00:00:00-04:00,110.930000305176,110.930000305176,110.930000305176,110.930000305176,94.7325862709655,0,0,0,0
|
||||
2024-09-04 00:00:00-04:00,110.569999694824,110.569999694824,110.569999694824,110.569999694824,94.4251510525043,0,0,0,0
|
||||
2024-09-05 00:00:00-04:00,110.690002441406,110.690002441406,110.690002441406,110.690002441406,94.5276316304549,0,0,0,0
|
||||
2024-09-06 00:00:00-04:00,108.099998474121,108.099998474121,108.099998474121,108.099998474121,92.3158063929358,0,0,0,0
|
||||
2024-09-09 00:00:00-04:00,109.610000610352,109.610000610352,109.610000610352,109.610000610352,93.6053259750711,0,0,0,0
|
||||
2024-09-10 00:00:00-04:00,109.330001831055,109.330001831055,109.330001831055,109.330001831055,93.3662111419102,0,0,0,0
|
||||
2024-09-11 00:00:00-04:00,111.069999694824,111.069999694824,111.069999694824,111.069999694824,94.852143687546,0,0,0,0
|
||||
2024-09-12 00:00:00-04:00,111.970001220703,111.970001220703,111.970001220703,111.970001220703,95.6207317336991,0,0,0,0
|
||||
2024-09-13 00:00:00-04:00,112.319999694824,112.319999694824,112.319999694824,112.319999694824,95.9196252751502,0,0,0,0
|
||||
2024-09-16 00:00:00-04:00,112.449996948242,112.449996948242,112.449996948242,112.449996948242,96.0306410147204,0,0,0,0
|
||||
2024-09-17 00:00:00-04:00,112.650001525879,112.650001525879,112.650001525879,112.650001525879,96.2014419779714,0,0,0,0
|
||||
2024-09-18 00:00:00-04:00,112.360000610352,112.360000610352,112.360000610352,112.360000610352,95.9537854678004,0,0,0,0
|
||||
2024-09-19 00:00:00-04:00,115.370002746582,115.370002746582,115.370002746582,115.370002746582,98.5242829550607,0,0,0,0
|
||||
2024-09-20 00:00:00-04:00,114.089996337891,114.089996337891,114.089996337891,114.089996337891,97.4311763364259,0,0,0,0
|
||||
2024-09-23 00:00:00-04:00,114.589996337891,114.589996337891,114.589996337891,114.589996337891,97.8581689714676,0,0,0,0
|
||||
2024-09-24 00:00:00-04:00,116.519996643066,116.519996643066,116.519996643066,116.519996643066,99.5063608033442,0,0,0,0
|
||||
2024-09-25 00:00:00-04:00,116.199996948242,116.199996948242,116.199996948242,116.199996948242,99.2330857775331,0,0,0,0
|
||||
2024-09-26 00:00:00-04:00,118.980003356934,118.980003356934,118.980003356934,118.980003356934,101.607170301293,0,0,0,0
|
||||
2024-09-27 00:00:00-04:00,118.51000213623,118.51000213623,118.51000213623,118.51000213623,101.205796181891,0,0,0,0
|
||||
2024-09-30 00:00:00-04:00,117.870002746582,117.870002746582,117.870002746582,117.870002746582,100.659246130269,0,0,0,0
|
||||
2024-10-01 00:00:00-04:00,117.5,117.5,117.5,117.5,100.343269234798,0,0,0,0
|
||||
2024-10-02 00:00:00-04:00,118.050003051758,118.050003051758,118.050003051758,118.050003051758,100.8129637395,0,0,0,0
|
||||
2024-10-03 00:00:00-04:00,117.230003356934,117.230003356934,117.230003356934,117.230003356934,100.112696078647,0,0,0,0
|
||||
2024-10-04 00:00:00-04:00,118.379997253418,118.379997253418,118.379997253418,118.379997253418,101.094773926931,0,0,0,0
|
||||
2024-10-07 00:00:00-04:00,118.180000305176,118.180000305176,118.180000305176,118.180000305176,100.92397947907,0,0,0,0
|
||||
2024-10-08 00:00:00-04:00,117.589996337891,117.589996337891,117.589996337891,117.589996337891,100.420124781718,0,0,0,0
|
||||
2024-10-09 00:00:00-04:00,118,118,118,118,100.770261869839,0,0,0,0
|
||||
2024-10-10 00:00:00-04:00,117.830001831055,117.830001831055,117.830001831055,117.830001831055,100.625085937619,0,0,0,0
|
||||
2024-10-11 00:00:00-04:00,118.660003662109,118.660003662109,118.660003662109,118.660003662109,101.333895275482,0,0,0,0
|
||||
2024-10-14 00:00:00-04:00,118.800003051758,118.800003051758,118.800003051758,118.800003051758,101.453452692062,0,0,0,0
|
||||
2024-10-15 00:00:00-04:00,115.360000610352,115.360000610352,115.360000610352,115.360000610352,98.5157412780505,0,0,0,0
|
||||
2024-10-16 00:00:00-04:00,115.660003662109,115.660003662109,115.660003662109,115.660003662109,98.7719394652318,0,0,0,0
|
||||
2024-10-17 00:00:00-04:00,115.839996337891,115.839996337891,115.839996337891,115.839996337891,98.9256505590719,0,0,0,0
|
||||
2024-10-18 00:00:00-04:00,117.300003051758,117.300003051758,117.300003051758,117.300003051758,100.172474786937,0,0,0,0
|
||||
2024-10-21 00:00:00-04:00,116.569999694824,116.569999694824,116.569999694824,116.569999694824,99.5490626730046,0,0,0,0
|
||||
2024-10-22 00:00:00-04:00,116.370002746582,116.370002746582,116.370002746582,116.370002746582,99.3782682251441,0,0,0,0
|
||||
2024-10-23 00:00:00-04:00,115.430000305176,115.430000305176,115.430000305176,115.430000305176,98.5755199863408,0,0,0,0
|
||||
2024-10-24 00:00:00-04:00,115.830001831055,115.830001831055,115.830001831055,115.830001831055,98.9171153974522,0,0,0,0
|
||||
2024-10-25 00:00:00-04:00,116,116,116,116,99.0622913296727,0,0,0,0
|
||||
2024-10-28 00:00:00-04:00,116.669998168945,116.669998168945,116.669998168945,116.669998168945,99.6344598969348,0,0,0,0
|
||||
2024-10-29 00:00:00-04:00,116.73999786377,116.73999786377,116.73999786377,116.73999786377,99.694238605225,0,0,0,0
|
||||
2024-10-30 00:00:00-04:00,115.720001220703,115.720001220703,115.720001220703,115.720001220703,98.8231764965118,0,0,0,0
|
||||
2024-10-31 00:00:00-04:00,114.519996643066,114.519996643066,114.519996643066,114.519996643066,97.7983902631774,0,0,0,0
|
||||
2024-11-01 00:00:00-04:00,115.129997253418,115.129997253418,115.129997253418,115.129997253418,98.3193217991595,0,0,0,0
|
||||
2024-11-04 00:00:00-05:00,115.180000305176,115.180000305176,115.180000305176,115.180000305176,98.3620236688199,0,0,0,0
|
||||
2024-11-05 00:00:00-05:00,116.449996948242,116.449996948242,116.449996948242,116.449996948242,99.446582095054,0,0,0,0
|
||||
2024-11-06 00:00:00-05:00,115.25,115.25,115.25,115.25,98.4218023771101,0,0,0,0
|
||||
2024-11-07 00:00:00-05:00,116.370002746582,116.370002746582,116.370002746582,116.370002746582,99.3782682251441,0,0,0,0
|
||||
2024-11-08 00:00:00-05:00,114.830001831055,114.830001831055,114.830001831055,114.830001831055,98.0631301273688,0,0,0,0
|
||||
2024-11-11 00:00:00-05:00,115.480003356934,115.480003356934,115.480003356934,115.480003356934,98.6182218560011,0,0,0,0
|
||||
2024-11-12 00:00:00-05:00,114.48999786377,114.48999786377,114.48999786377,114.48999786377,97.7727717475374,0,0,0,0
|
||||
2024-11-13 00:00:00-05:00,114.610000610352,114.610000610352,114.610000610352,114.610000610352,97.875252325488,0,0,0,0
|
||||
2024-11-14 00:00:00-05:00,114.180000305176,114.180000305176,114.180000305176,114.180000305176,97.5080383987365,0,0,0,0
|
||||
2024-11-15 00:00:00-05:00,112.25,112.25,112.25,112.25,95.85984656686,0,0,0,0
|
||||
2024-11-18 00:00:00-05:00,112.879997253418,112.879997253418,112.879997253418,112.879997253418,96.3978549414719,0,0,0,0
|
||||
2024-11-19 00:00:00-05:00,113.290000915527,113.290000915527,113.290000915527,113.290000915527,96.7479920295936,0,0,0,0
|
||||
2024-11-20 00:00:00-05:00,113.379997253418,113.379997253418,113.379997253418,113.379997253418,96.8248475765136,0,0,0,0
|
||||
2024-11-21 00:00:00-05:00,113.709999084473,113.709999084473,113.709999084473,113.709999084473,97.1066642793348,0,0,0,0
|
||||
2024-11-22 00:00:00-05:00,114.160003662109,114.160003662109,114.160003662109,114.160003662109,97.4909615601067,0,0,0,0
|
||||
2024-11-25 00:00:00-05:00,115.160003662109,115.160003662109,115.160003662109,115.160003662109,98.3449468301901,0,0,0,0
|
||||
2024-11-26 00:00:00-05:00,114.76000213623,114.76000213623,114.76000213623,114.76000213623,98.0033514190786,0,0,0,0
|
||||
2024-11-27 00:00:00-05:00,114.970001220703,114.970001220703,114.970001220703,114.970001220703,98.1826875439493,0,0,0,0
|
||||
2024-11-29 00:00:00-05:00,115.339996337891,115.339996337891,115.339996337891,115.339996337891,98.4986579240302,0,0,0,0
|
||||
2024-12-02 00:00:00-05:00,116.040000915527,116.040000915527,116.040000915527,116.040000915527,99.0964515223229,0,0,0,0
|
||||
2024-12-03 00:00:00-05:00,116.110000610352,116.110000610352,116.110000610352,116.110000610352,99.1562302306131,0,0,0,0
|
||||
2024-12-04 00:00:00-05:00,117.160003662109,117.160003662109,117.160003662109,117.160003662109,100.052917370357,0,0,0,0
|
||||
2024-12-05 00:00:00-05:00,117.360000610352,117.360000610352,117.360000610352,117.360000610352,100.223711818217,0,0,0,0
|
||||
2024-12-06 00:00:00-05:00,117.779998779297,117.779998779297,117.779998779297,117.779998779297,100.582384067959,0,0,0,0
|
||||
2024-12-09 00:00:00-05:00,117.75,117.75,117.75,117.75,100.556765552319,0,0,0,0
|
||||
2024-12-10 00:00:00-05:00,116.059997558594,116.059997558594,116.059997558594,116.059997558594,99.1135283609527,0,0,0,0
|
||||
2024-12-11 00:00:00-05:00,117.069999694824,117.069999694824,117.069999694824,117.069999694824,99.9760553080463,0,0,0,0
|
||||
2024-12-12 00:00:00-05:00,116.620002746582,116.620002746582,116.620002746582,116.620002746582,99.591764542665,0,0,0,0
|
||||
2024-12-13 00:00:00-05:00,116.26000213623,116.26000213623,116.26000213623,116.26000213623,99.2843293242037,0,0,0,0
|
||||
2024-12-16 00:00:00-05:00,115.830001831055,115.830001831055,115.830001831055,115.830001831055,98.9171153974522,0,0,0,0
|
||||
2024-12-17 00:00:00-05:00,115.589996337891,115.589996337891,115.589996337891,115.589996337891,98.712154241551,0,0,0,0
|
||||
2024-12-18 00:00:00-05:00,102.330001831055,102.330001831055,102.330001831055,102.330001831055,95.6355236078943,0,9.968,0,8.999
|
||||
2024-12-19 00:00:00-05:00,102.040000915527,102.040000915527,102.040000915527,102.040000915527,95.3644946925522,0,0,0,0
|
||||
2024-12-20 00:00:00-05:00,102.330001831055,102.330001831055,102.330001831055,102.330001831055,95.6355236078943,0,0,0,0
|
||||
2024-12-23 00:00:00-05:00,103.139999389648,103.139999389648,103.139999389648,103.139999389648,96.3925307343588,0,0,0,0
|
||||
2024-12-24 00:00:00-05:00,103.589996337891,103.589996337891,103.589996337891,103.589996337891,96.8130886645555,0,0,0,0
|
||||
2024-12-26 00:00:00-05:00,103.410003662109,103.410003662109,103.410003662109,103.410003662109,96.6448711966975,0,0,0,0
|
||||
2024-12-27 00:00:00-05:00,102.849998474121,102.849998474121,102.849998474121,102.849998474121,96.1215018190167,0,0,0,0
|
||||
2024-12-30 00:00:00-05:00,101.949996948242,101.949996948242,101.949996948242,101.949996948242,95.2803788283474,0,0,0,0
|
||||
2024-12-31 00:00:00-05:00,101.569999694824,101.569999694824,101.569999694824,101.569999694824,94.9252411790763,0,0,0,0
|
||||
2025-01-02 00:00:00-05:00,101.699996948242,101.699996948242,101.699996948242,101.699996948242,95.0467339492879,0,0,0,0
|
||||
2025-01-03 00:00:00-05:00,102.970001220703,102.970001220703,102.970001220703,102.970001220703,96.2336539278645,0,0,0,0
|
||||
2025-01-06 00:00:00-05:00,104.370002746582,104.370002746582,104.370002746582,104.370002746582,97.5420666766528,0,0,0,0
|
||||
2025-01-07 00:00:00-05:00,103.620002746582,103.620002746582,103.620002746582,103.620002746582,96.8411320394744,0,0,0,0
|
||||
2025-01-08 00:00:00-05:00,103.389999389648,103.389999389648,103.389999389648,103.389999389648,96.6261756134183,0,0,0,0
|
||||
2025-01-10 00:00:00-05:00,101.860000610352,101.860000610352,101.860000610352,101.860000610352,95.1962700944184,0,0,0,0
|
||||
2025-01-13 00:00:00-05:00,100.919998168945,100.919998168945,100.919998168945,100.919998168945,94.3177630674664,0,0,0,0
|
||||
2025-01-14 00:00:00-05:00,101.690002441406,101.690002441406,101.690002441406,101.690002441406,95.0373932879241,0,0,0,0
|
||||
2025-01-15 00:00:00-05:00,103.26000213623,103.26000213623,103.26000213623,103.26000213623,96.5046828432066,0,0,0,0
|
||||
2025-01-16 00:00:00-05:00,103.849998474121,103.849998474121,103.849998474121,103.849998474121,97.0560813352546,0,0,0,0
|
||||
2025-01-17 00:00:00-05:00,104.319999694824,104.319999694824,104.319999694824,104.319999694824,97.4953348487306,0,0,0,0
|
||||
2025-01-21 00:00:00-05:00,105.919998168945,105.919998168945,105.919998168945,105.919998168945,98.9906606486561,0,0,0,0
|
||||
2025-01-22 00:00:00-05:00,106.370002746582,106.370002746582,106.370002746582,106.370002746582,99.4112257091287,0,0,0,0
|
||||
2025-01-23 00:00:00-05:00,106.800003051758,106.800003051758,106.800003051758,106.800003051758,99.813095186322,0,0,0,0
|
||||
2025-01-24 00:00:00-05:00,107.51000213623,107.51000213623,107.51000213623,107.51000213623,100.476645787218,0,0,0,0
|
||||
2025-01-27 00:00:00-05:00,105.819999694824,105.819999694824,105.819999694824,105.819999694824,98.8972041230875,0,0,0,0
|
||||
2025-01-28 00:00:00-05:00,107.050003051758,107.050003051758,107.050003051758,107.050003051758,100.046740065382,0,0,0,0
|
||||
2025-01-29 00:00:00-05:00,106.919998168945,106.919998168945,106.919998168945,106.919998168945,99.9252401648941,0,0,0,0
|
||||
2025-01-30 00:00:00-05:00,108.610000610352,108.610000610352,108.610000610352,108.610000610352,101.504681829024,0,0,0,0
|
||||
2025-01-31 00:00:00-05:00,107.5,107.5,107.5,107.5,100.467297995578,0,0,0,0
|
||||
2025-02-03 00:00:00-05:00,106.099998474121,106.099998474121,106.099998474121,106.099998474121,99.15888524679,0,0,0,0
|
||||
2025-02-04 00:00:00-05:00,108.76000213623,108.76000213623,108.76000213623,108.76000213623,101.644870182515,0,0,0,0
|
||||
2025-02-05 00:00:00-05:00,109.660003662109,109.660003662109,109.660003662109,109.660003662109,102.485993173185,0,0,0,0
|
||||
2025-02-06 00:00:00-05:00,109.970001220703,109.970001220703,109.970001220703,109.970001220703,102.77571054153,0,0,0,0
|
||||
2025-02-07 00:00:00-05:00,109.099998474121,109.099998474121,109.099998474121,109.099998474121,101.962623795504,0,0,0,0
|
||||
2025-02-10 00:00:00-05:00,110.180000305176,110.180000305176,110.180000305176,110.180000305176,102.971971384307,0,0,0,0
|
||||
2025-02-11 00:00:00-05:00,110.389999389648,110.389999389648,110.389999389648,110.389999389648,103.168232227084,0,0,0,0
|
||||
2025-02-12 00:00:00-05:00,110.699996948242,110.699996948242,110.699996948242,110.699996948242,103.457949595429,0,0,0,0
|
||||
2025-02-13 00:00:00-05:00,112.790000915527,112.790000915527,112.790000915527,112.790000915527,105.41122449211,0,0,0,0
|
||||
2025-02-14 00:00:00-05:00,113.300003051758,113.300003051758,113.300003051758,113.300003051758,105.887862041869,0,0,0,0
|
||||
2025-02-18 00:00:00-05:00,114.230003356934,114.230003356934,114.230003356934,114.230003356934,106.757021277181,0,0,0,0
|
||||
2025-02-19 00:00:00-05:00,113.230003356934,113.230003356934,113.230003356934,113.230003356934,105.822441760943,0,0,0,0
|
||||
2025-02-20 00:00:00-05:00,113.400001525879,113.400001525879,113.400001525879,113.400001525879,105.981318567437,0,0,0,0
|
||||
2025-02-21 00:00:00-05:00,112.25,112.25,112.25,112.25,104.906550697708,0,0,0,0
|
||||
2025-02-24 00:00:00-05:00,110.660003662109,110.660003662109,110.660003662109,110.660003662109,103.420572689423,0,0,0,0
|
||||
2025-02-25 00:00:00-05:00,110.339996337891,110.339996337891,110.339996337891,110.339996337891,103.121500399162,0,0,0,0
|
||||
2025-02-26 00:00:00-05:00,111.339996337891,111.339996337891,111.339996337891,111.339996337891,104.0560799154,0,0,0,0
|
||||
2025-02-27 00:00:00-05:00,108.76000213623,108.76000213623,108.76000213623,108.76000213623,101.644870182515,0,0,0,0
|
||||
2025-02-28 00:00:00-05:00,108.949996948242,108.949996948242,108.949996948242,108.949996948242,101.822435442013,0,0,0,0
|
||||
2025-03-03 00:00:00-05:00,107.400001525879,107.400001525879,107.400001525879,107.400001525879,100.37384147001,0,0,0,0
|
||||
2025-03-04 00:00:00-05:00,107.589996337891,107.589996337891,107.589996337891,107.589996337891,100.551406729507,0,0,0,0
|
||||
2025-03-05 00:00:00-05:00,110.949996948242,110.949996948242,110.949996948242,110.949996948242,103.691594474489,0,0,0,0
|
||||
2025-03-06 00:00:00-05:00,108.370002746582,108.370002746582,108.370002746582,108.370002746582,101.280384741605,0,0,0,0
|
||||
2025-03-07 00:00:00-05:00,108.620002746582,108.620002746582,108.620002746582,108.620002746582,101.514029620664,0,0,0,0
|
||||
2025-03-10 00:00:00-04:00,104.459999084473,104.459999084473,104.459999084473,104.459999084473,97.6261754105818,0,0,0,0
|
||||
2025-03-11 00:00:00-04:00,105,105,105,105,98.1308492049834,0,0,0,0
|
||||
2025-03-12 00:00:00-04:00,106.220001220703,106.220001220703,106.220001220703,106.220001220703,99.2710373556378,0,0,0,0
|
||||
2025-03-13 00:00:00-04:00,104.980003356934,104.980003356934,104.980003356934,104.980003356934,98.11216075198,0,0,0,0
|
||||
2025-03-14 00:00:00-04:00,107.809997558594,107.809997558594,107.809997558594,107.809997558594,100.757015363924,0,0,0,0
|
||||
2025-03-17 00:00:00-04:00,109.620002746582,109.620002746582,109.620002746582,109.620002746582,102.448609136902,0,0,0,0
|
||||
2025-03-18 00:00:00-04:00,108.589996337891,108.589996337891,108.589996337891,108.589996337891,101.485986245745,0,0,0,0
|
||||
2025-03-19 00:00:00-04:00,109.5,109.5,109.5,109.5,102.336457028054,0,0,0,0
|
||||
2025-03-20 00:00:00-04:00,109.029998779297,109.029998779297,109.029998779297,109.029998779297,101.897203514578,0,0,0,0
|
||||
2025-03-21 00:00:00-04:00,108.029998779297,108.029998779297,108.029998779297,108.029998779297,100.96262399834,0,0,0,0
|
||||
2025-03-24 00:00:00-04:00,108.680000305176,108.680000305176,108.680000305176,108.680000305176,101.57010210995,0,0,0,0
|
||||
2025-03-25 00:00:00-04:00,108.680000305176,108.680000305176,108.680000305176,108.680000305176,101.57010210995,0,0,0,0
|
||||
2025-03-26 00:00:00-04:00,106.26000213623,106.26000213623,106.26000213623,106.26000213623,99.3084213919205,0,0,0,0
|
||||
2025-03-27 00:00:00-04:00,106.650001525879,106.650001525879,106.650001525879,106.650001525879,99.6729068328312,0,0,0,0
|
||||
2025-03-28 00:00:00-04:00,104.559997558594,104.559997558594,104.559997558594,104.559997558594,97.7196319361505,0,0,0,0
|
||||
2025-03-31 00:00:00-04:00,103.01000213623,103.01000213623,103.01000213623,103.01000213623,96.2710379641472,0,0,0,0
|
||||
2025-04-01 00:00:00-04:00,103.129997253418,103.129997253418,103.129997253418,103.129997253418,96.3831829427192,0,0,0,0
|
||||
2025-04-02 00:00:00-04:00,103.819999694824,103.819999694824,103.819999694824,103.819999694824,97.0280450906116,0,0,0,0
|
||||
2025-04-03 00:00:00-04:00,100.059997558594,100.059997558594,100.059997558594,100.059997558594,93.5140241130797,0,0,0,0
|
||||
2025-04-04 00:00:00-04:00,93.5199966430664,93.5199966430664,93.5199966430664,93.5199966430664,87.4018732212505,0,0,0,0
|
||||
2025-04-07 00:00:00-04:00,92.1999969482422,92.1999969482422,92.1999969482422,92.1999969482422,86.1682285450275,0,0,0,0
|
||||
2025-04-08 00:00:00-04:00,91.3600006103516,91.3600006103516,91.3600006103516,91.3600006103516,85.38318517392,0,0,0,0
|
||||
2025-04-09 00:00:00-04:00,99.0800018310547,99.0800018310547,99.0800018310547,99.0800018310547,92.598140180121,0,0,0,0
|
||||
2025-04-10 00:00:00-04:00,96.3499984741211,96.3499984741211,96.3499984741211,96.3499984741211,90.0467349634701,0,0,0,0
|
||||
2025-04-11 00:00:00-04:00,98.9400024414063,98.9400024414063,98.9400024414063,98.9400024414063,92.4672996182698,0,0,0,0
|
||||
2025-04-14 00:00:00-04:00,99.9199981689453,99.9199981689453,99.9199981689453,99.9199981689453,93.3831835512285,0,0,0,0
|
||||
2025-04-15 00:00:00-04:00,100.849998474121,100.849998474121,100.849998474121,100.849998474121,94.2523427865408,0,0,0,0
|
||||
2025-04-16 00:00:00-04:00,98.9899978637695,98.9899978637695,98.9899978637695,98.9899978637695,92.5140243159162,0,0,0,0
|
||||
2025-04-17 00:00:00-04:00,99.6900024414063,99.6900024414063,99.6900024414063,99.6900024414063,93.1682342554482,0,0,0,0
|
||||
2025-04-21 00:00:00-04:00,98.7200012207031,98.7200012207031,98.7200012207031,98.7200012207031,92.2616909838533,0,0,0,0
|
||||
2025-04-22 00:00:00-04:00,100.769996643066,100.769996643066,100.769996643066,100.769996643066,94.1775747139756,0,0,0,0
|
||||
2025-04-23 00:00:00-04:00,102.279998779297,102.279998779297,102.279998779297,102.279998779297,95.5887917799721,0,0,0,0
|
||||
2025-04-24 00:00:00-04:00,104.540000915527,104.540000915527,104.540000915527,104.540000915527,97.7009434831471,0,0,0,0
|
||||
2025-04-25 00:00:00-04:00,105.269996643066,105.269996643066,105.269996643066,105.269996643066,98.3831825370463,0,0,0,0
|
||||
2025-04-28 00:00:00-04:00,105.150001525879,105.150001525879,105.150001525879,105.150001525879,98.2710375584743,0,0,0,0
|
||||
2025-04-29 00:00:00-04:00,105.360000610352,105.360000610352,105.360000610352,105.360000610352,98.4672984012511,0,0,0,0
|
||||
2025-04-30 00:00:00-04:00,106.040000915527,106.040000915527,106.040000915527,106.040000915527,99.102812757504,0,0,0,0
|
||||
2025-05-01 00:00:00-04:00,106.019996643066,106.019996643066,106.019996643066,106.019996643066,99.0841171742247,0,0,0,0
|
||||
2025-05-02 00:00:00-04:00,108.809997558594,108.809997558594,108.809997558594,108.809997558594,101.691594880162,0,0,0,0
|
||||
2025-05-05 00:00:00-04:00,108.610000610352,108.610000610352,108.610000610352,108.610000610352,101.504681829024,0,0,0,0
|
||||
2025-05-06 00:00:00-04:00,108.25,108.25,108.25,108.25,101.168232632757,0,0,0,0
|
||||
2025-05-07 00:00:00-04:00,108.25,108.25,108.25,108.25,101.168232632757,0,0,0,0
|
||||
2025-05-08 00:00:00-04:00,108.76000213623,108.76000213623,108.76000213623,108.76000213623,101.644870182515,0,0,0,0
|
||||
2025-05-09 00:00:00-04:00,109.139999389648,109.139999389648,109.139999389648,109.139999389648,102.000007831786,0,0,0,0
|
||||
2025-05-12 00:00:00-04:00,111.889999389648,111.889999389648,111.889999389648,111.889999389648,104.570101501441,0,0,0,0
|
||||
2025-05-13 00:00:00-04:00,112.699996948242,112.699996948242,112.699996948242,112.699996948242,105.327108627905,0,0,0,0
|
||||
2025-05-14 00:00:00-04:00,113.330001831055,113.330001831055,113.330001831055,113.330001831055,105.915898286512,0,0,0,0
|
||||
2025-05-15 00:00:00-04:00,113.849998474121,113.849998474121,113.849998474121,113.849998474121,106.401876497634,0,0,0,0
|
||||
2025-05-16 00:00:00-04:00,114.139999389648,114.139999389648,114.139999389648,114.139999389648,106.672905412976,0,0,0,0
|
||||
2025-05-19 00:00:00-04:00,114.779998779297,114.779998779297,114.779998779297,114.779998779297,107.271035732946,0,0,0,0
|
||||
2025-05-20 00:00:00-04:00,114.860000610352,114.860000610352,114.860000610352,114.860000610352,107.345803805512,0,0,0,0
|
||||
2025-05-21 00:00:00-04:00,113.809997558594,113.809997558594,113.809997558594,113.809997558594,106.364492461351,0,0,0,0
|
||||
2025-05-22 00:00:00-04:00,113.730003356934,113.730003356934,113.730003356934,113.730003356934,106.289731519062,0,0,0,0
|
||||
2025-05-23 00:00:00-04:00,113.330001831055,113.330001831055,113.330001831055,113.330001831055,105.915898286512,0,0,0,0
|
||||
2025-05-27 00:00:00-04:00,114.279998779297,114.279998779297,114.279998779297,114.279998779297,106.803745974827,0,0,0,0
|
||||
2025-05-28 00:00:00-04:00,113.069999694824,113.069999694824,113.069999694824,113.069999694824,105.672905615813,0,0,0,0
|
||||
2025-05-29 00:00:00-04:00,113.470001220703,113.470001220703,113.470001220703,113.470001220703,106.046738848363,0,0,0,0
|
||||
2025-05-30 00:00:00-04:00,113.279998779297,113.279998779297,113.279998779297,113.279998779297,105.869166458589,0,0,0,0
|
||||
2025-06-02 00:00:00-04:00,114.180000305176,114.180000305176,114.180000305176,114.180000305176,106.710289449259,0,0,0,0
|
||||
2025-06-03 00:00:00-04:00,113.860000610352,113.860000610352,113.860000610352,113.860000610352,106.411224289274,0,0,0,0
|
||||
2025-06-04 00:00:00-04:00,114.940002441406,114.940002441406,114.940002441406,114.940002441406,107.420571878077,0,0,0,0
|
||||
2025-06-05 00:00:00-04:00,115.339996337891,115.339996337891,115.339996337891,115.339996337891,107.794397980351,0,0,0,0
|
||||
2025-06-06 00:00:00-04:00,115.569999694824,115.569999694824,115.569999694824,115.569999694824,108.009354406407,0,0,0,0
|
||||
2025-06-09 00:00:00-04:00,115.529998779297,115.529998779297,115.529998779297,115.529998779297,107.971970370125,0,0,0,0
|
||||
2025-06-10 00:00:00-04:00,116.089996337891,116.089996337891,116.089996337891,116.089996337891,108.49533261753,0,0,0,0
|
||||
2025-06-11 00:00:00-04:00,116.180000305176,116.180000305176,116.180000305176,116.180000305176,108.579448481735,0,0,0,0
|
||||
2025-06-12 00:00:00-04:00,116.309997558594,116.309997558594,116.309997558594,116.309997558594,108.700941251946,0,0,0,0
|
||||
2025-06-13 00:00:00-04:00,114.26000213623,114.26000213623,114.26000213623,114.26000213623,106.785057521824,0,0,0,0
|
||||
2025-06-16 00:00:00-04:00,115.309997558594,115.309997558594,115.309997558594,115.309997558594,107.766361735708,0,0,0,0
|
||||
2025-06-17 00:00:00-04:00,113.860000610352,113.860000610352,113.860000610352,113.860000610352,106.411224289274,0,0,0,0
|
||||
2025-06-18 00:00:00-04:00,113.660003662109,113.660003662109,113.660003662109,113.660003662109,106.224311238136,0,0,0,0
|
||||
2025-06-20 00:00:00-04:00,112.680000305176,112.680000305176,112.680000305176,112.680000305176,105.308420174902,0,0,0,0
|
||||
2025-06-23 00:00:00-04:00,113.699996948242,113.699996948242,113.699996948242,113.699996948242,106.261688144143,0,0,0,0
|
||||
2025-06-24 00:00:00-04:00,113.699996948242,113.699996948242,113.699996948242,113.699996948242,106.261688144143,0,0,0,0
|
||||
2025-06-25 00:00:00-04:00,116.139999389648,116.139999389648,116.139999389648,116.139999389648,108.542064445452,0,0,0,0
|
||||
2025-06-26 00:00:00-04:00,117.069999694824,117.069999694824,117.069999694824,117.069999694824,109.411223680764,0,0,0,0
|
||||
2025-06-27 00:00:00-04:00,118.059997558594,118.059997558594,118.059997558594,118.059997558594,110.336455405363,0,0,0,0
|
||||
2025-06-30 00:00:00-04:00,117.919998168945,117.919998168945,117.919998168945,117.919998168945,110.205614843511,0,0,0,0
|
||||
2025-07-01 00:00:00-04:00,116.98999786377,116.98999786377,116.98999786377,116.98999786377,109.336455608199,0,0,0,0
|
||||
2025-07-02 00:00:00-04:00,117.449996948242,117.449996948242,117.449996948242,117.449996948242,109.766361330035,0,0,0,0
|
||||
2025-07-03 00:00:00-04:00,117.779998779297,117.779998779297,117.779998779297,117.779998779297,110.07477428166,0,0,0,0
|
||||
2025-07-07 00:00:00-04:00,116.849998474121,116.849998474121,116.849998474121,116.849998474121,109.205615046348,0,0,0,0
|
||||
2025-07-08 00:00:00-04:00,117.629997253418,117.629997253418,117.629997253418,117.629997253418,109.934585928169,0,0,0,0
|
||||
2025-07-09 00:00:00-04:00,118.209999084473,118.209999084473,118.209999084473,118.209999084473,110.476643758853,0,0,0,0
|
||||
2025-07-10 00:00:00-04:00,117.73999786377,117.73999786377,117.73999786377,117.73999786377,110.037390245378,0,0,0,0
|
||||
2025-07-11 00:00:00-04:00,116.75,116.75,116.75,116.75,109.112158520779,0,0,0,0
|
||||
2025-07-14 00:00:00-04:00,116.779998779297,116.779998779297,116.779998779297,116.779998779297,109.140194765422,0,0,0,0
|
||||
2025-07-15 00:00:00-04:00,117.120002746582,117.120002746582,117.120002746582,117.120002746582,109.457955508687,0,0,0,0
|
||||
2025-07-16 00:00:00-04:00,117.430000305176,117.430000305176,117.430000305176,117.430000305176,109.747672877032,0,0,0,0
|
||||
2025-07-17 00:00:00-04:00,118.220001220703,118.220001220703,118.220001220703,118.220001220703,110.485991550493,0,0,0,0
|
||||
2025-07-18 00:00:00-04:00,117.610000610352,117.610000610352,117.610000610352,117.610000610352,109.915897475166,0,0,0,0
|
||||
2025-07-21 00:00:00-04:00,117.699996948242,117.699996948242,117.699996948242,117.699996948242,110.000006209095,0,0,0,0
|
||||
2025-07-22 00:00:00-04:00,117.699996948242,117.699996948242,117.699996948242,117.699996948242,110.000006209095,0,0,0,0
|
||||
2025-07-23 00:00:00-04:00,119.860000610352,119.860000610352,119.860000610352,119.860000610352,112.018701386701,0,0,0,0
|
||||
2025-07-24 00:00:00-04:00,119.449996948242,119.449996948242,119.449996948242,119.449996948242,111.635520362511,0,0,0,0
|
||||
2025-07-25 00:00:00-04:00,119.559997558594,119.559997558594,119.559997558594,119.559997558594,111.73832467972,0,0,0,0
|
||||
2025-07-28 00:00:00-04:00,118.449996948242,118.449996948242,118.449996948242,118.449996948242,110.700940846273,0,0,0,0
|
||||
2025-07-29 00:00:00-04:00,117.309997558594,117.309997558594,117.309997558594,117.309997558594,109.635520768184,0,0,0,0
|
||||
2025-07-30 00:00:00-04:00,115.879997253418,115.879997253418,115.879997253418,115.879997253418,108.299071774753,0,0,0,0
|
||||
2025-07-31 00:00:00-04:00,114.089996337891,114.089996337891,114.089996337891,114.089996337891,106.626173585054,0,0,0,0
|
||||
2025-08-01 00:00:00-04:00,113.199996948242,113.199996948242,113.199996948242,113.199996948242,105.794398386024,0,0,0,0
|
||||
2025-08-04 00:00:00-04:00,114.839996337891,114.839996337891,114.839996337891,114.839996337891,107.327108222232,0,0,0,0
|
||||
2025-08-05 00:00:00-04:00,114.330001831055,114.330001831055,114.330001831055,114.330001831055,106.85047780275,0,0,0,0
|
||||
2025-08-06 00:00:00-04:00,114.51000213623,114.51000213623,114.51000213623,114.51000213623,107.018702400883,0,0,0,0
|
||||
2025-08-07 00:00:00-04:00,116.080001831055,116.080001831055,116.080001831055,116.080001831055,108.485991956166,0,0,0,0
|
||||
2025-08-08 00:00:00-04:00,116.370002746582,116.370002746582,116.370002746582,116.370002746582,108.757020871508,0,0,0,0
|
||||
2025-08-11 00:00:00-04:00,115.360000610352,115.360000610352,115.360000610352,115.360000610352,107.813093563631,0,0,0,0
|
||||
2025-08-12 00:00:00-04:00,117.699996948242,117.699996948242,117.699996948242,117.699996948242,110.000006209095,0,0,0,0
|
||||
2025-08-13 00:00:00-04:00,118.580001831055,118.580001831055,118.580001831055,118.580001831055,110.822440746761,0,0,0,0
|
||||
2025-08-14 00:00:00-04:00,117.860000610352,117.860000610352,117.860000610352,117.860000610352,110.149542354225,0,0,0,0
|
||||
2025-08-15 00:00:00-04:00,118.900001525879,118.900001525879,118.900001525879,118.900001525879,111.121505906746,0,0,0,0
|
||||
2025-08-18 00:00:00-04:00,119.309997558594,119.309997558594,119.309997558594,119.309997558594,111.50467980066,0,0,0,0
|
||||
2025-08-19 00:00:00-04:00,118.860000610352,118.860000610352,118.860000610352,118.860000610352,111.084121870463,0,0,0,0
|
||||
2025-08-20 00:00:00-04:00,118.569999694824,118.569999694824,118.569999694824,118.569999694824,110.813092955121,0,0,0,0
|
||||
2025-08-21 00:00:00-04:00,117.940002441406,117.940002441406,117.940002441406,117.940002441406,110.224310426791,0,0,0,0
|
||||
2025-08-22 00:00:00-04:00,120.230003356934,120.230003356934,120.230003356934,120.230003356934,112.364498374609,0,0,0,0
|
||||
2025-08-25 00:00:00-04:00,119.349998474121,119.349998474121,119.349998474121,119.349998474121,111.542063836943,0,0,0,0
|
||||
2025-08-26 00:00:00-04:00,119.800003051758,119.800003051758,119.800003051758,119.800003051758,111.962628897415,0,0,0,0
|
||||
2025-08-27 00:00:00-04:00,119.199996948242,119.199996948242,119.199996948242,119.199996948242,111.401875483452,0,0,0,0
|
||||
2025-08-28 00:00:00-04:00,119.529998779297,119.529998779297,119.529998779297,119.529998779297,111.710288435077,0,0,0,0
|
||||
2025-08-29 00:00:00-04:00,118.589996337891,118.589996337891,118.589996337891,118.589996337891,110.831781408125,0,0,0,0
|
||||
2025-09-02 00:00:00-04:00,117.099998474121,117.099998474121,117.099998474121,117.099998474121,109.439259925407,0,0,0,0
|
||||
2025-09-03 00:00:00-04:00,117.660003662109,117.660003662109,117.660003662109,117.660003662109,109.962629303088,0,0,0,0
|
||||
2025-09-04 00:00:00-04:00,118.580001831055,118.580001831055,118.580001831055,118.580001831055,110.822440746761,0,0,0,0
|
||||
2025-09-05 00:00:00-04:00,119.410003662109,119.410003662109,119.410003662109,119.410003662109,111.598143456504,0,0,0,0
|
||||
2025-09-08 00:00:00-04:00,120.5,120.5,120.5,120.5,112.616831706671,0,0,0,0
|
||||
2025-09-09 00:00:00-04:00,120.860000610352,120.860000610352,120.860000610352,120.860000610352,112.953280902939,0,0,0,0
|
||||
2025-09-10 00:00:00-04:00,120.610000610352,120.610000610352,120.610000610352,120.610000610352,112.71963602388,0,0,0,0
|
||||
2025-09-11 00:00:00-04:00,121.599998474121,121.599998474121,121.599998474121,121.599998474121,113.644867748478,0,0,0,0
|
||||
2025-09-12 00:00:00-04:00,121.209999084473,121.209999084473,121.209999084473,121.209999084473,113.280382307567,0,0,0,0
|
||||
2025-09-15 00:00:00-04:00,122.430000305176,122.430000305176,122.430000305176,122.430000305176,114.420570458222,0,0,0,0
|
||||
2025-09-16 00:00:00-04:00,122.900001525879,122.900001525879,122.900001525879,122.900001525879,114.859823971698,0,0,0,0
|
||||
2025-09-17 00:00:00-04:00,123.110000610352,123.110000610352,123.110000610352,123.110000610352,115.056084814475,0,0,0,0
|
||||
2025-09-18 00:00:00-04:00,124.75,124.75,124.75,124.75,116.588794650683,0,0,0,0
|
||||
2025-09-19 00:00:00-04:00,123.940002441406,123.940002441406,123.940002441406,123.940002441406,115.831787524218,0,0,0,0
|
||||
2025-09-22 00:00:00-04:00,124.569999694824,124.569999694824,124.569999694824,124.569999694824,116.420570052549,0,0,0,0
|
||||
2025-09-23 00:00:00-04:00,124,124,124,124,115.887860013504,0,0,0,0
|
||||
2025-09-24 00:00:00-04:00,123.26000213623,123.26000213623,123.26000213623,123.26000213623,115.196273167965,0,0,0,0
|
||||
2025-09-25 00:00:00-04:00,122.220001220703,122.220001220703,122.220001220703,122.220001220703,114.224309615445,0,0,0,0
|
||||
2025-09-26 00:00:00-04:00,122.120002746582,122.120002746582,122.120002746582,122.120002746582,114.130853089876,0,0,0,0
|
||||
2025-09-29 00:00:00-04:00,123.169998168945,123.169998168945,123.169998168945,123.169998168945,115.112157303761,0,0,0,0
|
||||
2025-09-30 00:00:00-04:00,123.199996948242,123.199996948242,123.199996948242,123.199996948242,115.140193548404,0,0,0,0
|
||||
2025-10-01 00:00:00-04:00,123.860000610352,123.860000610352,123.860000610352,123.860000610352,115.757019451653,0,0,0,0
|
||||
2025-10-02 00:00:00-04:00,125.309997558594,125.309997558594,125.309997558594,125.309997558594,117.112156898088,0,0,0,0
|
||||
2025-10-03 00:00:00-04:00,125.650001525879,125.650001525879,125.650001525879,125.650001525879,117.429917641352,0,0,0,0
|
||||
2025-10-06 00:00:00-04:00,126.889999389648,126.889999389648,126.889999389648,126.889999389648,118.58879424501,0,0,0,0
|
||||
2025-10-07 00:00:00-04:00,125.580001831055,125.580001831055,125.580001831055,125.580001831055,117.364497360426,0,0,0,0
|
||||
2025-10-08 00:00:00-04:00,126.120002746582,126.120002746582,126.120002746582,126.120002746582,117.869171154828,0,0,0,0
|
||||
2025-10-09 00:00:00-04:00,125.040000915527,125.040000915527,125.040000915527,125.040000915527,116.859823566025,0,0,0,0
|
||||
2025-10-10 00:00:00-04:00,120.529998779297,120.529998779297,120.529998779297,120.529998779297,112.644867951314,0,0,0,0
|
||||
2025-10-13 00:00:00-04:00,123.080001831055,123.080001831055,123.080001831055,123.080001831055,115.028048569832,0,0,0,0
|
||||
2025-10-14 00:00:00-04:00,122.540000915527,122.540000915527,122.540000915527,122.540000915527,114.52337477543,0,0,0,0
|
||||
2025-10-15 00:00:00-04:00,122.839996337891,122.839996337891,122.839996337891,122.839996337891,114.803744352136,0,0,0,0
|
||||
2025-10-16 00:00:00-04:00,122.970001220703,122.970001220703,122.970001220703,122.970001220703,114.925244252623,0,0,0,0
|
||||
2025-10-17 00:00:00-04:00,123.040000915527,123.040000915527,123.040000915527,123.040000915527,114.990664533549,0,0,0,0
|
||||
2025-10-20 00:00:00-04:00,124.769996643066,124.769996643066,124.769996643066,124.769996643066,116.607483103686,0,0,0,0
|
||||
2025-10-21 00:00:00-04:00,124.120002746582,124.120002746582,124.120002746582,124.120002746582,116.000012122352,0,0,0,0
|
||||
2025-10-22 00:00:00-04:00,122.669998168945,122.669998168945,122.669998168945,122.669998168945,114.644867545642,0,0,0,0
|
||||
2025-10-23 00:00:00-04:00,123.949996948242,123.949996948242,123.949996948242,123.949996948242,115.841128185582,0,0,0,0
|
||||
2025-10-24 00:00:00-04:00,124.440002441406,124.440002441406,124.440002441406,124.440002441406,116.299077282337,0,0,0,0
|
||||
2025-10-27 00:00:00-04:00,126.180000305176,126.180000305176,126.180000305176,126.180000305176,117.925243644114,0,0,0,0
|
||||
2025-10-28 00:00:00-04:00,125.730003356934,125.730003356934,125.730003356934,125.730003356934,117.504685713917,0,0,0,0
|
||||
2025-10-29 00:00:00-04:00,126,126,126,126,117.75701904598,0,0,0,0
|
||||
2025-10-30 00:00:00-04:00,125.300003051758,125.300003051758,125.300003051758,125.300003051758,117.102816236724,0,0,0,0
|
||||
2025-10-31 00:00:00-04:00,124.940002441406,124.940002441406,124.940002441406,124.940002441406,116.766367040456,0,0,0,0
|
||||
2025-11-03 00:00:00-05:00,125.080001831055,125.080001831055,125.080001831055,125.080001831055,116.897207602307,0,0,0,0
|
||||
2025-11-04 00:00:00-05:00,122.650001525879,122.650001525879,122.650001525879,122.650001525879,114.626179092638,0,0,0,0
|
||||
2025-11-05 00:00:00-05:00,123.150001525879,123.150001525879,123.150001525879,123.150001525879,115.093468850757,0,0,0,0
|
||||
2025-11-06 00:00:00-05:00,121.400001525879,121.400001525879,121.400001525879,121.400001525879,113.457954697341,0,0,0,0
|
||||
2025-11-07 00:00:00-05:00,120.959999084473,120.959999084473,120.959999084473,120.959999084473,113.046737428508,0,0,0,0
|
||||
2025-11-10 00:00:00-05:00,122.849998474121,122.849998474121,122.849998474121,122.849998474121,114.813092143775,0,0,0,0
|
||||
2025-11-11 00:00:00-05:00,123.300003051758,123.300003051758,123.300003051758,123.300003051758,115.233657204248,0,0,0,0
|
||||
2025-11-12 00:00:00-05:00,123.650001525879,123.650001525879,123.650001525879,123.650001525879,115.560758608876,0,0,0,0
|
||||
2025-11-13 00:00:00-05:00,121.470001220703,121.470001220703,121.470001220703,121.470001220703,113.523374978266,0,0,0,0
|
||||
2025-11-14 00:00:00-05:00,121.330001831055,121.330001831055,121.330001831055,121.330001831055,113.392534416415,0,0,0,0
|
||||
2025-11-17 00:00:00-05:00,119.73999786377,119.73999786377,119.73999786377,119.73999786377,111.906549277853,0,0,0,0
|
||||
2025-11-18 00:00:00-05:00,118.410003662109,118.410003662109,118.410003662109,118.410003662109,110.663563940267,0,0,0,0
|
||||
2025-11-19 00:00:00-05:00,118.279998779297,118.279998779297,118.279998779297,118.279998779297,110.542064039779,0,0,0,0
|
||||
2025-11-20 00:00:00-05:00,115.160003662109,115.160003662109,115.160003662109,115.160003662109,107.626180512493,0,0,0,0
|
||||
2025-11-21 00:00:00-05:00,116.569999694824,116.569999694824,116.569999694824,116.569999694824,108.943933922645,0,0,0,0
|
||||
2025-11-24 00:00:00-05:00,117.610000610352,117.610000610352,117.610000610352,117.610000610352,109.915897475166,0,0,0,0
|
||||
2025-11-25 00:00:00-05:00,118.849998474121,118.849998474121,118.849998474121,118.849998474121,111.074774078824,0,0,0,0
|
||||
2025-11-26 00:00:00-05:00,119.889999389648,119.889999389648,119.889999389648,119.889999389648,112.046737631344,0,0,0,0
|
||||
2025-11-28 00:00:00-05:00,120.910003662109,120.910003662109,120.910003662109,120.910003662109,113.000012730861,0,0,0,0
|
||||
2025-12-01 00:00:00-05:00,120,120,120,120,112.149541948552,0,0,0,0
|
||||
2025-12-02 00:00:00-05:00,120.769996643066,120.769996643066,120.769996643066,120.769996643066,112.869165038734,0,0,0,0
|
||||
2025-12-03 00:00:00-05:00,121.389999389648,121.389999389648,121.389999389648,121.389999389648,113.448606905701,0,0,0,0
|
||||
2025-12-04 00:00:00-05:00,121.559997558594,121.559997558594,121.559997558594,121.559997558594,113.607483712195,0,0,0,0
|
||||
2025-12-05 00:00:00-05:00,121.519996643066,121.519996643066,121.519996643066,121.519996643066,113.570099675913,0,0,0,0
|
||||
2025-12-08 00:00:00-05:00,121.48999786377,121.48999786377,121.48999786377,121.48999786377,113.54206343127,0,0,0,0
|
||||
2025-12-09 00:00:00-05:00,121.160003662109,121.160003662109,121.160003662109,121.160003662109,113.233657609921,0,0,0,0
|
||||
2025-12-10 00:00:00-05:00,122.550003051758,122.550003051758,122.550003051758,122.550003051758,114.53272256707,0,0,0,0
|
||||
2025-12-11 00:00:00-05:00,122.669998168945,122.669998168945,122.669998168945,122.669998168945,114.644867545642,0,0,0,0
|
||||
2025-12-12 00:00:00-05:00,121.089996337891,121.089996337891,121.089996337891,121.089996337891,113.168230198719,0,0,0,0
|
||||
2025-12-15 00:00:00-05:00,120.769996643066,120.769996643066,120.769996643066,120.769996643066,112.869165038734,0,0,0,0
|
||||
2025-12-16 00:00:00-05:00,120.099998474121,120.099998474121,120.099998474121,120.099998474121,112.242998474121,0,0,0,0
|
||||
2025-12-17 00:00:00-05:00,110.440002441406,110.440002441406,110.440002441406,110.440002441406,110.440002441406,0,7.857,0,6.42
|
||||
2025-12-18 00:00:00-05:00,111.779998779297,111.779998779297,111.779998779297,111.779998779297,111.779998779297,0,0,0,0
|
||||
2025-12-19 00:00:00-05:00,112.76000213623,112.76000213623,112.76000213623,112.76000213623,112.76000213623,0,0,0,0
|
||||
2025-12-22 00:00:00-05:00,113.379997253418,113.379997253418,113.379997253418,113.379997253418,113.379997253418,0,0,0,0
|
||||
2025-12-23 00:00:00-05:00,114.01000213623,114.01000213623,114.01000213623,114.01000213623,114.01000213623,0,0,0,0
|
||||
2025-12-24 00:00:00-05:00,114.129997253418,114.129997253418,114.129997253418,114.129997253418,114.129997253418,0,0,0,0
|
||||
2025-12-26 00:00:00-05:00,114.709999084473,114.709999084473,114.709999084473,114.709999084473,114.709999084473,0,0,0,0
|
||||
2025-12-29 00:00:00-05:00,114.440002441406,114.440002441406,114.440002441406,114.440002441406,114.440002441406,0,0,0,0
|
||||
2025-12-30 00:00:00-05:00,114.379997253418,114.379997253418,114.379997253418,114.379997253418,114.379997253418,0,0,0,0
|
||||
2025-12-31 00:00:00-05:00,113.98999786377,113.98999786377,113.98999786377,113.98999786377,113.98999786377,0,0,0,0
|
||||
2026-01-02 00:00:00-05:00,115.680000305176,115.680000305176,115.680000305176,115.680000305176,115.680000305176,0,0,0,0
|
||||
2026-01-05 00:00:00-05:00,118.099998474121,118.099998474121,118.099998474121,118.099998474121,118.099998474121,0,0,0,0
|
||||
2026-01-06 00:00:00-05:00,118.98999786377,118.98999786377,118.98999786377,118.98999786377,118.98999786377,0,0,0,0
|
||||
2026-01-07 00:00:00-05:00,118.019996643066,118.019996643066,118.019996643066,118.019996643066,118.019996643066,0,0,0,0
|
||||
2026-01-08 00:00:00-05:00,117.5,117.5,117.5,117.5,117.5,0,0,0,0
|
||||
2026-01-09 00:00:00-05:00,118.620002746582,118.620002746582,118.620002746582,118.620002746582,118.620002746582,0,0,0,0
|
||||
|
503
tests/data/VWILX-1d-cg-double-count.csv
Normal file
503
tests/data/VWILX-1d-cg-double-count.csv
Normal file
@@ -0,0 +1,503 @@
|
||||
Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Capital Gains
|
||||
2024-01-10 00:00:00-05:00,100.02999877929688,100.02999877929688,100.02999877929688,100.02999877929688,73.67626190185547,0,0.0,0.0,0.0
|
||||
2024-01-11 00:00:00-05:00,100.25,100.25,100.25,100.25,73.83830261230469,0,0.0,0.0,0.0
|
||||
2024-01-12 00:00:00-05:00,100.44000244140625,100.44000244140625,100.44000244140625,100.44000244140625,73.9782485961914,0,0.0,0.0,0.0
|
||||
2024-01-16 00:00:00-05:00,98.70999908447266,98.70999908447266,98.70999908447266,98.70999908447266,72.70402526855469,0,0.0,0.0,0.0
|
||||
2024-01-17 00:00:00-05:00,97.05999755859375,97.05999755859375,97.05999755859375,97.05999755859375,71.48873138427734,0,0.0,0.0,0.0
|
||||
2024-01-18 00:00:00-05:00,98.02999877929688,98.02999877929688,98.02999877929688,98.02999877929688,72.20317840576172,0,0.0,0.0,0.0
|
||||
2024-01-19 00:00:00-05:00,98.7699966430664,98.7699966430664,98.7699966430664,98.7699966430664,72.74822235107422,0,0.0,0.0,0.0
|
||||
2024-01-22 00:00:00-05:00,98.76000213623047,98.76000213623047,98.76000213623047,98.76000213623047,72.74085235595703,0,0.0,0.0,0.0
|
||||
2024-01-23 00:00:00-05:00,99.37000274658203,99.37000274658203,99.37000274658203,99.37000274658203,73.19014739990234,0,0.0,0.0,0.0
|
||||
2024-01-24 00:00:00-05:00,100.41000366210938,100.41000366210938,100.41000366210938,100.41000366210938,73.95614624023438,0,0.0,0.0,0.0
|
||||
2024-01-25 00:00:00-05:00,100.3499984741211,100.3499984741211,100.3499984741211,100.3499984741211,73.91195678710938,0,0.0,0.0,0.0
|
||||
2024-01-26 00:00:00-05:00,100.83999633789062,100.83999633789062,100.83999633789062,100.83999633789062,74.27285766601562,0,0.0,0.0,0.0
|
||||
2024-01-29 00:00:00-05:00,101.19000244140625,101.19000244140625,101.19000244140625,101.19000244140625,74.53065490722656,0,0.0,0.0,0.0
|
||||
2024-01-30 00:00:00-05:00,100.41000366210938,100.41000366210938,100.41000366210938,100.41000366210938,73.95614624023438,0,0.0,0.0,0.0
|
||||
2024-01-31 00:00:00-05:00,99.27999877929688,99.27999877929688,99.27999877929688,99.27999877929688,73.12385559082031,0,0.0,0.0,0.0
|
||||
2024-02-01 00:00:00-05:00,100.80000305175781,100.80000305175781,100.80000305175781,100.80000305175781,74.24340057373047,0,0.0,0.0,0.0
|
||||
2024-02-02 00:00:00-05:00,100.12000274658203,100.12000274658203,100.12000274658203,100.12000274658203,73.7425537109375,0,0.0,0.0,0.0
|
||||
2024-02-05 00:00:00-05:00,100.2699966430664,100.2699966430664,100.2699966430664,100.2699966430664,73.85303497314453,0,0.0,0.0,0.0
|
||||
2024-02-06 00:00:00-05:00,101.08000183105469,101.08000183105469,101.08000183105469,101.08000183105469,74.44963073730469,0,0.0,0.0,0.0
|
||||
2024-02-07 00:00:00-05:00,101.86000061035156,101.86000061035156,101.86000061035156,101.86000061035156,75.02413177490234,0,0.0,0.0,0.0
|
||||
2024-02-08 00:00:00-05:00,102.72000122070312,102.72000122070312,102.72000122070312,102.72000122070312,75.65755462646484,0,0.0,0.0,0.0
|
||||
2024-02-09 00:00:00-05:00,103.44000244140625,103.44000244140625,103.44000244140625,103.44000244140625,76.18787384033203,0,0.0,0.0,0.0
|
||||
2024-02-12 00:00:00-05:00,103.54000091552734,103.54000091552734,103.54000091552734,103.54000091552734,76.26152801513672,0,0.0,0.0,0.0
|
||||
2024-02-13 00:00:00-05:00,101.23999786376953,101.23999786376953,101.23999786376953,101.23999786376953,74.56747436523438,0,0.0,0.0,0.0
|
||||
2024-02-14 00:00:00-05:00,103.01000213623047,103.01000213623047,103.01000213623047,103.01000213623047,75.87116241455078,0,0.0,0.0,0.0
|
||||
2024-02-15 00:00:00-05:00,104.33000183105469,104.33000183105469,104.33000183105469,104.33000183105469,76.84339141845703,0,0.0,0.0,0.0
|
||||
2024-02-16 00:00:00-05:00,104.3499984741211,104.3499984741211,104.3499984741211,104.3499984741211,76.85812377929688,0,0.0,0.0,0.0
|
||||
2024-02-20 00:00:00-05:00,103.4800033569336,103.4800033569336,103.4800033569336,103.4800033569336,76.21733856201172,0,0.0,0.0,0.0
|
||||
2024-02-21 00:00:00-05:00,103.75,103.75,103.75,103.75,76.41619873046875,0,0.0,0.0,0.0
|
||||
2024-02-22 00:00:00-05:00,106.08000183105469,106.08000183105469,106.08000183105469,106.08000183105469,78.13233947753906,0,0.0,0.0,0.0
|
||||
2024-02-23 00:00:00-05:00,105.2699966430664,105.2699966430664,105.2699966430664,105.2699966430664,77.53573608398438,0,0.0,0.0,0.0
|
||||
2024-02-26 00:00:00-05:00,105.3499984741211,105.3499984741211,105.3499984741211,105.3499984741211,77.59466552734375,0,0.0,0.0,0.0
|
||||
2024-02-27 00:00:00-05:00,105.93000030517578,105.93000030517578,105.93000030517578,105.93000030517578,78.02185821533203,0,0.0,0.0,0.0
|
||||
2024-02-28 00:00:00-05:00,105.20999908447266,105.20999908447266,105.20999908447266,105.20999908447266,77.49154663085938,0,0.0,0.0,0.0
|
||||
2024-02-29 00:00:00-05:00,105.5199966430664,105.5199966430664,105.5199966430664,105.5199966430664,77.7198715209961,0,0.0,0.0,0.0
|
||||
2024-03-01 00:00:00-05:00,107.01000213623047,107.01000213623047,107.01000213623047,107.01000213623047,78.81732940673828,0,0.0,0.0,0.0
|
||||
2024-03-04 00:00:00-05:00,106.44999694824219,106.44999694824219,106.44999694824219,106.44999694824219,78.40485382080078,0,0.0,0.0,0.0
|
||||
2024-03-05 00:00:00-05:00,105.23999786376953,105.23999786376953,105.23999786376953,105.23999786376953,77.5136489868164,0,0.0,0.0,0.0
|
||||
2024-03-06 00:00:00-05:00,106.62999725341797,106.62999725341797,106.62999725341797,106.62999725341797,78.53743743896484,0,0.0,0.0,0.0
|
||||
2024-03-07 00:00:00-05:00,108.18000030517578,108.18000030517578,108.18000030517578,108.18000030517578,79.6790771484375,0,0.0,0.0,0.0
|
||||
2024-03-08 00:00:00-05:00,106.98999786376953,106.98999786376953,106.98999786376953,106.98999786376953,78.8025894165039,0,0.0,0.0,0.0
|
||||
2024-03-11 00:00:00-04:00,107.11000061035156,107.11000061035156,107.11000061035156,107.11000061035156,78.89097595214844,0,0.0,0.0,0.0
|
||||
2024-03-12 00:00:00-04:00,108.73999786376953,108.73999786376953,108.73999786376953,108.73999786376953,80.09153747558594,0,0.0,0.0,0.0
|
||||
2024-03-13 00:00:00-04:00,108.55000305175781,108.55000305175781,108.55000305175781,108.55000305175781,79.95159912109375,0,0.0,0.0,0.0
|
||||
2024-03-14 00:00:00-04:00,107.19999694824219,107.19999694824219,107.19999694824219,107.19999694824219,78.95726013183594,0,0.0,0.0,0.0
|
||||
2024-03-15 00:00:00-04:00,106.12000274658203,106.12000274658203,106.12000274658203,106.12000274658203,78.16180419921875,0,0.0,0.0,0.0
|
||||
2024-03-18 00:00:00-04:00,106.38999938964844,106.38999938964844,106.38999938964844,106.38999938964844,78.36066436767578,0,0.0,0.0,0.0
|
||||
2024-03-19 00:00:00-04:00,106.45999908447266,106.45999908447266,106.45999908447266,106.45999908447266,78.41222381591797,0,0.0,0.0,0.0
|
||||
2024-03-20 00:00:00-04:00,107.76000213623047,107.76000213623047,107.76000213623047,107.76000213623047,79.36973571777344,0,0.0,0.0,0.0
|
||||
2024-03-21 00:00:00-04:00,108.04000091552734,108.04000091552734,108.04000091552734,108.04000091552734,79.57596588134766,0,0.0,0.0,0.0
|
||||
2024-03-22 00:00:00-04:00,107.94999694824219,107.94999694824219,107.94999694824219,107.94999694824219,79.5096664428711,0,0.0,0.0,0.0
|
||||
2024-03-25 00:00:00-04:00,107.79000091552734,107.79000091552734,107.79000091552734,107.79000091552734,79.3918228149414,0,0.0,0.0,0.0
|
||||
2024-03-26 00:00:00-04:00,107.55999755859375,107.55999755859375,107.55999755859375,107.55999755859375,79.22241973876953,0,0.0,0.0,0.0
|
||||
2024-03-27 00:00:00-04:00,107.6500015258789,107.6500015258789,107.6500015258789,107.6500015258789,79.28871154785156,0,0.0,0.0,0.0
|
||||
2024-03-28 00:00:00-04:00,107.19999694824219,107.19999694824219,107.19999694824219,107.19999694824219,78.95726013183594,0,0.0,0.0,0.0
|
||||
2024-04-01 00:00:00-04:00,107.29000091552734,107.29000091552734,107.29000091552734,107.29000091552734,79.0235595703125,0,0.0,0.0,0.0
|
||||
2024-04-02 00:00:00-04:00,106.79000091552734,106.79000091552734,106.79000091552734,106.79000091552734,78.65528106689453,0,0.0,0.0,0.0
|
||||
2024-04-03 00:00:00-04:00,107.29000091552734,107.29000091552734,107.29000091552734,107.29000091552734,79.0235595703125,0,0.0,0.0,0.0
|
||||
2024-04-04 00:00:00-04:00,106.4000015258789,106.4000015258789,106.4000015258789,106.4000015258789,78.36803436279297,0,0.0,0.0,0.0
|
||||
2024-04-05 00:00:00-04:00,106.95999908447266,106.95999908447266,106.95999908447266,106.95999908447266,78.7804946899414,0,0.0,0.0,0.0
|
||||
2024-04-08 00:00:00-04:00,107.47000122070312,107.47000122070312,107.47000122070312,107.47000122070312,79.1561279296875,0,0.0,0.0,0.0
|
||||
2024-04-09 00:00:00-04:00,107.87999725341797,107.87999725341797,107.87999725341797,107.87999725341797,79.45811462402344,0,0.0,0.0,0.0
|
||||
2024-04-10 00:00:00-04:00,106.56999969482422,106.56999969482422,106.56999969482422,106.56999969482422,78.49324035644531,0,0.0,0.0,0.0
|
||||
2024-04-11 00:00:00-04:00,107.4000015258789,107.4000015258789,107.4000015258789,107.4000015258789,79.10457611083984,0,0.0,0.0,0.0
|
||||
2024-04-12 00:00:00-04:00,105.08000183105469,105.08000183105469,105.08000183105469,105.08000183105469,77.39579772949219,0,0.0,0.0,0.0
|
||||
2024-04-15 00:00:00-04:00,104.30999755859375,104.30999755859375,104.30999755859375,104.30999755859375,76.82865905761719,0,0.0,0.0,0.0
|
||||
2024-04-16 00:00:00-04:00,103.9800033569336,103.9800033569336,103.9800033569336,103.9800033569336,76.58560180664062,0,0.0,0.0,0.0
|
||||
2024-04-17 00:00:00-04:00,103.27999877929688,103.27999877929688,103.27999877929688,103.27999877929688,76.07002258300781,0,0.0,0.0,0.0
|
||||
2024-04-18 00:00:00-04:00,102.4800033569336,102.4800033569336,102.4800033569336,102.4800033569336,75.48078918457031,0,0.0,0.0,0.0
|
||||
2024-04-19 00:00:00-04:00,101.13999938964844,101.13999938964844,101.13999938964844,101.13999938964844,74.49382019042969,0,0.0,0.0,0.0
|
||||
2024-04-22 00:00:00-04:00,102.58000183105469,102.58000183105469,102.58000183105469,102.58000183105469,75.554443359375,0,0.0,0.0,0.0
|
||||
2024-04-23 00:00:00-04:00,104.87999725341797,104.87999725341797,104.87999725341797,104.87999725341797,77.24848937988281,0,0.0,0.0,0.0
|
||||
2024-04-24 00:00:00-04:00,104.66000366210938,104.66000366210938,104.66000366210938,104.66000366210938,77.08645629882812,0,0.0,0.0,0.0
|
||||
2024-04-25 00:00:00-04:00,103.93000030517578,103.93000030517578,103.93000030517578,103.93000030517578,76.54877471923828,0,0.0,0.0,0.0
|
||||
2024-04-26 00:00:00-04:00,105.23999786376953,105.23999786376953,105.23999786376953,105.23999786376953,77.5136489868164,0,0.0,0.0,0.0
|
||||
2024-04-29 00:00:00-04:00,105.75,105.75,105.75,105.75,77.8892822265625,0,0.0,0.0,0.0
|
||||
2024-04-30 00:00:00-04:00,103.94999694824219,103.94999694824219,103.94999694824219,103.94999694824219,76.5634994506836,0,0.0,0.0,0.0
|
||||
2024-05-01 00:00:00-04:00,103.77999877929688,103.77999877929688,103.77999877929688,103.77999877929688,76.43829345703125,0,0.0,0.0,0.0
|
||||
2024-05-02 00:00:00-04:00,106.27999877929688,106.27999877929688,106.27999877929688,106.27999877929688,78.27964782714844,0,0.0,0.0,0.0
|
||||
2024-05-03 00:00:00-04:00,107.97000122070312,107.97000122070312,107.97000122070312,107.97000122070312,79.52440643310547,0,0.0,0.0,0.0
|
||||
2024-05-06 00:00:00-04:00,108.73999786376953,108.73999786376953,108.73999786376953,108.73999786376953,80.09153747558594,0,0.0,0.0,0.0
|
||||
2024-05-07 00:00:00-04:00,108.66999816894531,108.66999816894531,108.66999816894531,108.66999816894531,80.03998565673828,0,0.0,0.0,0.0
|
||||
2024-05-08 00:00:00-04:00,108.2300033569336,108.2300033569336,108.2300033569336,108.2300033569336,79.71590423583984,0,0.0,0.0,0.0
|
||||
2024-05-09 00:00:00-04:00,108.63999938964844,108.63999938964844,108.63999938964844,108.63999938964844,80.01788330078125,0,0.0,0.0,0.0
|
||||
2024-05-10 00:00:00-04:00,108.81999969482422,108.81999969482422,108.81999969482422,108.81999969482422,80.15045928955078,0,0.0,0.0,0.0
|
||||
2024-05-13 00:00:00-04:00,109.08999633789062,109.08999633789062,109.08999633789062,109.08999633789062,80.34932708740234,0,0.0,0.0,0.0
|
||||
2024-05-14 00:00:00-04:00,110.18000030517578,110.18000030517578,110.18000030517578,110.18000030517578,81.15216064453125,0,0.0,0.0,0.0
|
||||
2024-05-15 00:00:00-04:00,111.88999938964844,111.88999938964844,111.88999938964844,111.88999938964844,82.4116439819336,0,0.0,0.0,0.0
|
||||
2024-05-16 00:00:00-04:00,111.44999694824219,111.44999694824219,111.44999694824219,111.44999694824219,82.08757019042969,0,0.0,0.0,0.0
|
||||
2024-05-17 00:00:00-04:00,111.47000122070312,111.47000122070312,111.47000122070312,111.47000122070312,82.10230255126953,0,0.0,0.0,0.0
|
||||
2024-05-20 00:00:00-04:00,112.1500015258789,112.1500015258789,112.1500015258789,112.1500015258789,82.6031494140625,0,0.0,0.0,0.0
|
||||
2024-05-21 00:00:00-04:00,111.66000366210938,111.66000366210938,111.66000366210938,111.66000366210938,82.24224090576172,0,0.0,0.0,0.0
|
||||
2024-05-22 00:00:00-04:00,111.45999908447266,111.45999908447266,111.45999908447266,111.45999908447266,82.09493255615234,0,0.0,0.0,0.0
|
||||
2024-05-23 00:00:00-04:00,111.36000061035156,111.36000061035156,111.36000061035156,111.36000061035156,82.02127838134766,0,0.0,0.0,0.0
|
||||
2024-05-24 00:00:00-04:00,112.25,112.25,112.25,112.25,82.67680358886719,0,0.0,0.0,0.0
|
||||
2024-05-28 00:00:00-04:00,112.25,112.25,112.25,112.25,82.67680358886719,0,0.0,0.0,0.0
|
||||
2024-05-29 00:00:00-04:00,110.45999908447266,110.45999908447266,110.45999908447266,110.45999908447266,81.35839080810547,0,0.0,0.0,0.0
|
||||
2024-05-30 00:00:00-04:00,110.68000030517578,110.68000030517578,110.68000030517578,110.68000030517578,81.52043151855469,0,0.0,0.0,0.0
|
||||
2024-05-31 00:00:00-04:00,110.79000091552734,110.79000091552734,110.79000091552734,110.79000091552734,81.60144805908203,0,0.0,0.0,0.0
|
||||
2024-06-03 00:00:00-04:00,111.58000183105469,111.58000183105469,111.58000183105469,111.58000183105469,82.18331909179688,0,0.0,0.0,0.0
|
||||
2024-06-04 00:00:00-04:00,111.13999938964844,111.13999938964844,111.13999938964844,111.13999938964844,81.85923767089844,0,0.0,0.0,0.0
|
||||
2024-06-05 00:00:00-04:00,113.23999786376953,113.23999786376953,113.23999786376953,113.23999786376953,83.40597534179688,0,0.0,0.0,0.0
|
||||
2024-06-06 00:00:00-04:00,113.72000122070312,113.72000122070312,113.72000122070312,113.72000122070312,83.759521484375,0,0.0,0.0,0.0
|
||||
2024-06-07 00:00:00-04:00,112.05999755859375,112.05999755859375,112.05999755859375,112.05999755859375,82.53685760498047,0,0.0,0.0,0.0
|
||||
2024-06-10 00:00:00-04:00,112.37999725341797,112.37999725341797,112.37999725341797,112.37999725341797,82.77255249023438,0,0.0,0.0,0.0
|
||||
2024-06-11 00:00:00-04:00,111.5999984741211,111.5999984741211,111.5999984741211,111.5999984741211,82.19804382324219,0,0.0,0.0,0.0
|
||||
2024-06-12 00:00:00-04:00,113.05999755859375,113.05999755859375,113.05999755859375,113.05999755859375,83.27339935302734,0,0.0,0.0,0.0
|
||||
2024-06-13 00:00:00-04:00,111.95999908447266,111.95999908447266,111.95999908447266,111.95999908447266,82.46320343017578,0,0.0,0.0,0.0
|
||||
2024-06-14 00:00:00-04:00,111.04000091552734,111.04000091552734,111.04000091552734,111.04000091552734,81.78558349609375,0,0.0,0.0,0.0
|
||||
2024-06-17 00:00:00-04:00,111.1500015258789,111.1500015258789,111.1500015258789,111.1500015258789,81.86660766601562,0,0.0,0.0,0.0
|
||||
2024-06-18 00:00:00-04:00,111.22000122070312,111.22000122070312,111.22000122070312,111.22000122070312,81.91815948486328,0,0.0,0.0,0.0
|
||||
2024-06-20 00:00:00-04:00,111.0199966430664,111.0199966430664,111.0199966430664,111.0199966430664,81.7708511352539,0,0.0,0.0,0.0
|
||||
2024-06-21 00:00:00-04:00,110.38999938964844,110.38999938964844,110.38999938964844,110.38999938964844,81.30683135986328,0,0.0,0.0,0.0
|
||||
2024-06-24 00:00:00-04:00,110.51000213623047,110.51000213623047,110.51000213623047,110.51000213623047,81.39521789550781,0,0.0,0.0,0.0
|
||||
2024-06-25 00:00:00-04:00,111.38999938964844,111.38999938964844,111.38999938964844,111.38999938964844,82.04337310791016,0,0.0,0.0,0.0
|
||||
2024-06-26 00:00:00-04:00,110.73999786376953,110.73999786376953,110.73999786376953,110.73999786376953,81.56462097167969,0,0.0,0.0,0.0
|
||||
2024-06-27 00:00:00-04:00,110.25,110.25,110.25,110.25,81.20372009277344,0,0.0,0.0,0.0
|
||||
2024-06-28 00:00:00-04:00,109.72000122070312,109.72000122070312,109.72000122070312,109.72000122070312,80.81334686279297,0,0.0,0.0,0.0
|
||||
2024-07-01 00:00:00-04:00,109.6500015258789,109.6500015258789,109.6500015258789,109.6500015258789,80.76179504394531,0,0.0,0.0,0.0
|
||||
2024-07-02 00:00:00-04:00,110.06999969482422,110.06999969482422,110.06999969482422,110.06999969482422,81.0711441040039,0,0.0,0.0,0.0
|
||||
2024-07-03 00:00:00-04:00,111.51000213623047,111.51000213623047,111.51000213623047,111.51000213623047,82.13176727294922,0,0.0,0.0,0.0
|
||||
2024-07-05 00:00:00-04:00,112.48999786376953,112.48999786376953,112.48999786376953,112.48999786376953,82.85356903076172,0,0.0,0.0,0.0
|
||||
2024-07-08 00:00:00-04:00,112.16999816894531,112.16999816894531,112.16999816894531,112.16999816894531,82.61787414550781,0,0.0,0.0,0.0
|
||||
2024-07-09 00:00:00-04:00,112.38999938964844,112.38999938964844,112.38999938964844,112.38999938964844,82.77991485595703,0,0.0,0.0,0.0
|
||||
2024-07-10 00:00:00-04:00,113.7699966430664,113.7699966430664,113.7699966430664,113.7699966430664,83.79634094238281,0,0.0,0.0,0.0
|
||||
2024-07-11 00:00:00-04:00,113.86000061035156,113.86000061035156,113.86000061035156,113.86000061035156,83.86263275146484,0,0.0,0.0,0.0
|
||||
2024-07-12 00:00:00-04:00,115.2300033569336,115.2300033569336,115.2300033569336,115.2300033569336,84.87169647216797,0,0.0,0.0,0.0
|
||||
2024-07-15 00:00:00-04:00,113.77999877929688,113.77999877929688,113.77999877929688,113.77999877929688,83.8037109375,0,0.0,0.0,0.0
|
||||
2024-07-16 00:00:00-04:00,114.27999877929688,114.27999877929688,114.27999877929688,114.27999877929688,84.17198181152344,0,0.0,0.0,0.0
|
||||
2024-07-17 00:00:00-04:00,111.63999938964844,111.63999938964844,111.63999938964844,111.63999938964844,82.22750854492188,0,0.0,0.0,0.0
|
||||
2024-07-18 00:00:00-04:00,110.54000091552734,110.54000091552734,110.54000091552734,110.54000091552734,81.41732025146484,0,0.0,0.0,0.0
|
||||
2024-07-19 00:00:00-04:00,109.94999694824219,109.94999694824219,109.94999694824219,109.94999694824219,80.98275756835938,0,0.0,0.0,0.0
|
||||
2024-07-22 00:00:00-04:00,111.51000213623047,111.51000213623047,111.51000213623047,111.51000213623047,82.13176727294922,0,0.0,0.0,0.0
|
||||
2024-07-23 00:00:00-04:00,111.45999908447266,111.45999908447266,111.45999908447266,111.45999908447266,82.09493255615234,0,0.0,0.0,0.0
|
||||
2024-07-24 00:00:00-04:00,108.9000015258789,108.9000015258789,108.9000015258789,108.9000015258789,80.20938873291016,0,0.0,0.0,0.0
|
||||
2024-07-25 00:00:00-04:00,108.08000183105469,108.08000183105469,108.08000183105469,108.08000183105469,79.60542297363281,0,0.0,0.0,0.0
|
||||
2024-07-26 00:00:00-04:00,109.48999786376953,109.48999786376953,109.48999786376953,109.48999786376953,80.6439437866211,0,0.0,0.0,0.0
|
||||
2024-07-29 00:00:00-04:00,108.7699966430664,108.7699966430664,108.7699966430664,108.7699966430664,80.11363983154297,0,0.0,0.0,0.0
|
||||
2024-07-30 00:00:00-04:00,108.5,108.5,108.5,108.5,79.91476440429688,0,0.0,0.0,0.0
|
||||
2024-07-31 00:00:00-04:00,111.08999633789062,111.08999633789062,111.08999633789062,111.08999633789062,81.8224105834961,0,0.0,0.0,0.0
|
||||
2024-08-01 00:00:00-04:00,107.87999725341797,107.87999725341797,107.87999725341797,107.87999725341797,79.45811462402344,0,0.0,0.0,0.0
|
||||
2024-08-02 00:00:00-04:00,105.83000183105469,105.83000183105469,105.83000183105469,105.83000183105469,77.94820404052734,0,0.0,0.0,0.0
|
||||
2024-08-05 00:00:00-04:00,103.87000274658203,103.87000274658203,103.87000274658203,103.87000274658203,76.50458526611328,0,0.0,0.0,0.0
|
||||
2024-08-06 00:00:00-04:00,104.76000213623047,104.76000213623047,104.76000213623047,104.76000213623047,77.16010284423828,0,0.0,0.0,0.0
|
||||
2024-08-07 00:00:00-04:00,105.19999694824219,105.19999694824219,105.19999694824219,105.19999694824219,77.48418426513672,0,0.0,0.0,0.0
|
||||
2024-08-08 00:00:00-04:00,107.9000015258789,107.9000015258789,107.9000015258789,107.9000015258789,79.47284698486328,0,0.0,0.0,0.0
|
||||
2024-08-09 00:00:00-04:00,108.18000030517578,108.18000030517578,108.18000030517578,108.18000030517578,79.6790771484375,0,0.0,0.0,0.0
|
||||
2024-08-12 00:00:00-04:00,108.06999969482422,108.06999969482422,108.06999969482422,108.06999969482422,79.59805297851562,0,0.0,0.0,0.0
|
||||
2024-08-13 00:00:00-04:00,109.9000015258789,109.9000015258789,109.9000015258789,109.9000015258789,80.94593048095703,0,0.0,0.0,0.0
|
||||
2024-08-14 00:00:00-04:00,109.77999877929688,109.77999877929688,109.77999877929688,109.77999877929688,80.85753631591797,0,0.0,0.0,0.0
|
||||
2024-08-15 00:00:00-04:00,112.30000305175781,112.30000305175781,112.30000305175781,112.30000305175781,82.71363067626953,0,0.0,0.0,0.0
|
||||
2024-08-16 00:00:00-04:00,113.0,113.0,113.0,113.0,83.22920989990234,0,0.0,0.0,0.0
|
||||
2024-08-19 00:00:00-04:00,114.83000183105469,114.83000183105469,114.83000183105469,114.83000183105469,84.57707977294922,0,0.0,0.0,0.0
|
||||
2024-08-20 00:00:00-04:00,113.83000183105469,113.83000183105469,113.83000183105469,113.83000183105469,83.84053802490234,0,0.0,0.0,0.0
|
||||
2024-08-21 00:00:00-04:00,114.95999908447266,114.95999908447266,114.95999908447266,114.95999908447266,84.6728286743164,0,0.0,0.0,0.0
|
||||
2024-08-22 00:00:00-04:00,113.81999969482422,113.81999969482422,113.81999969482422,113.81999969482422,83.83316802978516,0,0.0,0.0,0.0
|
||||
2024-08-23 00:00:00-04:00,115.13999938964844,115.13999938964844,115.13999938964844,115.13999938964844,84.80541229248047,0,0.0,0.0,0.0
|
||||
2024-08-26 00:00:00-04:00,113.62999725341797,113.62999725341797,113.62999725341797,113.62999725341797,83.69322204589844,0,0.0,0.0,0.0
|
||||
2024-08-27 00:00:00-04:00,113.97000122070312,113.97000122070312,113.97000122070312,113.97000122070312,83.94365692138672,0,0.0,0.0,0.0
|
||||
2024-08-28 00:00:00-04:00,112.87999725341797,112.87999725341797,112.87999725341797,112.87999725341797,83.14081573486328,0,0.0,0.0,0.0
|
||||
2024-08-29 00:00:00-04:00,113.62999725341797,113.62999725341797,113.62999725341797,113.62999725341797,83.69322204589844,0,0.0,0.0,0.0
|
||||
2024-08-30 00:00:00-04:00,113.87000274658203,113.87000274658203,113.87000274658203,113.87000274658203,83.87000274658203,0,0.0,0.0,0.0
|
||||
2024-09-03 00:00:00-04:00,110.93000030517578,110.93000030517578,110.93000030517578,110.93000030517578,81.7045669555664,0,0.0,0.0,0.0
|
||||
2024-09-04 00:00:00-04:00,110.56999969482422,110.56999969482422,110.56999969482422,110.56999969482422,81.43940734863281,0,0.0,0.0,0.0
|
||||
2024-09-05 00:00:00-04:00,110.69000244140625,110.69000244140625,110.69000244140625,110.69000244140625,81.52779388427734,0,0.0,0.0,0.0
|
||||
2024-09-06 00:00:00-04:00,108.0999984741211,108.0999984741211,108.0999984741211,108.0999984741211,79.62015533447266,0,0.0,0.0,0.0
|
||||
2024-09-09 00:00:00-04:00,109.61000061035156,109.61000061035156,109.61000061035156,109.61000061035156,80.73233032226562,0,0.0,0.0,0.0
|
||||
2024-09-10 00:00:00-04:00,109.33000183105469,109.33000183105469,109.33000183105469,109.33000183105469,80.5261001586914,0,0.0,0.0,0.0
|
||||
2024-09-11 00:00:00-04:00,111.06999969482422,111.06999969482422,111.06999969482422,111.06999969482422,81.80767822265625,0,0.0,0.0,0.0
|
||||
2024-09-12 00:00:00-04:00,111.97000122070312,111.97000122070312,111.97000122070312,111.97000122070312,82.47056579589844,0,0.0,0.0,0.0
|
||||
2024-09-13 00:00:00-04:00,112.31999969482422,112.31999969482422,112.31999969482422,112.31999969482422,82.72836303710938,0,0.0,0.0,0.0
|
||||
2024-09-16 00:00:00-04:00,112.44999694824219,112.44999694824219,112.44999694824219,112.44999694824219,82.82410430908203,0,0.0,0.0,0.0
|
||||
2024-09-17 00:00:00-04:00,112.6500015258789,112.6500015258789,112.6500015258789,112.6500015258789,82.97142028808594,0,0.0,0.0,0.0
|
||||
2024-09-18 00:00:00-04:00,112.36000061035156,112.36000061035156,112.36000061035156,112.36000061035156,82.75782012939453,0,0.0,0.0,0.0
|
||||
2024-09-19 00:00:00-04:00,115.37000274658203,115.37000274658203,115.37000274658203,115.37000274658203,84.97481536865234,0,0.0,0.0,0.0
|
||||
2024-09-20 00:00:00-04:00,114.08999633789062,114.08999633789062,114.08999633789062,114.08999633789062,84.03203582763672,0,0.0,0.0,0.0
|
||||
2024-09-23 00:00:00-04:00,114.58999633789062,114.58999633789062,114.58999633789062,114.58999633789062,84.40030670166016,0,0.0,0.0,0.0
|
||||
2024-09-24 00:00:00-04:00,116.5199966430664,116.5199966430664,116.5199966430664,116.5199966430664,85.82183074951172,0,0.0,0.0,0.0
|
||||
2024-09-25 00:00:00-04:00,116.19999694824219,116.19999694824219,116.19999694824219,116.19999694824219,85.58613586425781,0,0.0,0.0,0.0
|
||||
2024-09-26 00:00:00-04:00,118.9800033569336,118.9800033569336,118.9800033569336,118.9800033569336,87.63372802734375,0,0.0,0.0,0.0
|
||||
2024-09-27 00:00:00-04:00,118.51000213623047,118.51000213623047,118.51000213623047,118.51000213623047,87.28755950927734,0,0.0,0.0,0.0
|
||||
2024-09-30 00:00:00-04:00,117.87000274658203,117.87000274658203,117.87000274658203,117.87000274658203,86.81616973876953,0,0.0,0.0,0.0
|
||||
2024-10-01 00:00:00-04:00,117.5,117.5,117.5,117.5,86.54364776611328,0,0.0,0.0,0.0
|
||||
2024-10-02 00:00:00-04:00,118.05000305175781,118.05000305175781,118.05000305175781,118.05000305175781,86.94874572753906,0,0.0,0.0,0.0
|
||||
2024-10-03 00:00:00-04:00,117.2300033569336,117.2300033569336,117.2300033569336,117.2300033569336,86.34477996826172,0,0.0,0.0,0.0
|
||||
2024-10-04 00:00:00-04:00,118.37999725341797,118.37999725341797,118.37999725341797,118.37999725341797,87.1917953491211,0,0.0,0.0,0.0
|
||||
2024-10-07 00:00:00-04:00,118.18000030517578,118.18000030517578,118.18000030517578,118.18000030517578,87.04448699951172,0,0.0,0.0,0.0
|
||||
2024-10-08 00:00:00-04:00,117.58999633789062,117.58999633789062,117.58999633789062,117.58999633789062,86.60992431640625,0,0.0,0.0,0.0
|
||||
2024-10-09 00:00:00-04:00,118.0,118.0,118.0,118.0,86.91191864013672,0,0.0,0.0,0.0
|
||||
2024-10-10 00:00:00-04:00,117.83000183105469,117.83000183105469,117.83000183105469,117.83000183105469,86.78670501708984,0,0.0,0.0,0.0
|
||||
2024-10-11 00:00:00-04:00,118.66000366210938,118.66000366210938,118.66000366210938,118.66000366210938,87.39803314208984,0,0.0,0.0,0.0
|
||||
2024-10-14 00:00:00-04:00,118.80000305175781,118.80000305175781,118.80000305175781,118.80000305175781,87.50115203857422,0,0.0,0.0,0.0
|
||||
2024-10-15 00:00:00-04:00,115.36000061035156,115.36000061035156,115.36000061035156,115.36000061035156,84.96744537353516,0,0.0,0.0,0.0
|
||||
2024-10-16 00:00:00-04:00,115.66000366210938,115.66000366210938,115.66000366210938,115.66000366210938,85.18840789794922,0,0.0,0.0,0.0
|
||||
2024-10-17 00:00:00-04:00,115.83999633789062,115.83999633789062,115.83999633789062,115.83999633789062,85.32098388671875,0,0.0,0.0,0.0
|
||||
2024-10-18 00:00:00-04:00,117.30000305175781,117.30000305175781,117.30000305175781,117.30000305175781,86.3963394165039,0,0.0,0.0,0.0
|
||||
2024-10-21 00:00:00-04:00,116.56999969482422,116.56999969482422,116.56999969482422,116.56999969482422,85.85865783691406,0,0.0,0.0,0.0
|
||||
2024-10-22 00:00:00-04:00,116.37000274658203,116.37000274658203,116.37000274658203,116.37000274658203,85.71135711669922,0,0.0,0.0,0.0
|
||||
2024-10-23 00:00:00-04:00,115.43000030517578,115.43000030517578,115.43000030517578,115.43000030517578,85.01900482177734,0,0.0,0.0,0.0
|
||||
2024-10-24 00:00:00-04:00,115.83000183105469,115.83000183105469,115.83000183105469,115.83000183105469,85.3136215209961,0,0.0,0.0,0.0
|
||||
2024-10-25 00:00:00-04:00,116.0,116.0,116.0,116.0,85.43883514404297,0,0.0,0.0,0.0
|
||||
2024-10-28 00:00:00-04:00,116.66999816894531,116.66999816894531,116.66999816894531,116.66999816894531,85.93231201171875,0,0.0,0.0,0.0
|
||||
2024-10-29 00:00:00-04:00,116.73999786376953,116.73999786376953,116.73999786376953,116.73999786376953,85.98387145996094,0,0.0,0.0,0.0
|
||||
2024-10-30 00:00:00-04:00,115.72000122070312,115.72000122070312,115.72000122070312,115.72000122070312,85.23259735107422,0,0.0,0.0,0.0
|
||||
2024-10-31 00:00:00-04:00,114.5199966430664,114.5199966430664,114.5199966430664,114.5199966430664,84.34874725341797,0,0.0,0.0,0.0
|
||||
2024-11-01 00:00:00-04:00,115.12999725341797,115.12999725341797,115.12999725341797,115.12999725341797,84.79803466796875,0,0.0,0.0,0.0
|
||||
2024-11-04 00:00:00-05:00,115.18000030517578,115.18000030517578,115.18000030517578,115.18000030517578,84.83486938476562,0,0.0,0.0,0.0
|
||||
2024-11-05 00:00:00-05:00,116.44999694824219,116.44999694824219,116.44999694824219,116.44999694824219,85.77027130126953,0,0.0,0.0,0.0
|
||||
2024-11-06 00:00:00-05:00,115.25,115.25,115.25,115.25,84.88642883300781,0,0.0,0.0,0.0
|
||||
2024-11-07 00:00:00-05:00,116.37000274658203,116.37000274658203,116.37000274658203,116.37000274658203,85.71135711669922,0,0.0,0.0,0.0
|
||||
2024-11-08 00:00:00-05:00,114.83000183105469,114.83000183105469,114.83000183105469,114.83000183105469,84.57707977294922,0,0.0,0.0,0.0
|
||||
2024-11-11 00:00:00-05:00,115.4800033569336,115.4800033569336,115.4800033569336,115.4800033569336,85.05583190917969,0,0.0,0.0,0.0
|
||||
2024-11-12 00:00:00-05:00,114.48999786376953,114.48999786376953,114.48999786376953,114.48999786376953,84.32665252685547,0,0.0,0.0,0.0
|
||||
2024-11-13 00:00:00-05:00,114.61000061035156,114.61000061035156,114.61000061035156,114.61000061035156,84.4150390625,0,0.0,0.0,0.0
|
||||
2024-11-14 00:00:00-05:00,114.18000030517578,114.18000030517578,114.18000030517578,114.18000030517578,84.09832763671875,0,0.0,0.0,0.0
|
||||
2024-11-15 00:00:00-05:00,112.25,112.25,112.25,112.25,82.67680358886719,0,0.0,0.0,0.0
|
||||
2024-11-18 00:00:00-05:00,112.87999725341797,112.87999725341797,112.87999725341797,112.87999725341797,83.14081573486328,0,0.0,0.0,0.0
|
||||
2024-11-19 00:00:00-05:00,113.29000091552734,113.29000091552734,113.29000091552734,113.29000091552734,83.44280242919922,0,0.0,0.0,0.0
|
||||
2024-11-20 00:00:00-05:00,113.37999725341797,113.37999725341797,113.37999725341797,113.37999725341797,83.50909423828125,0,0.0,0.0,0.0
|
||||
2024-11-21 00:00:00-05:00,113.70999908447266,113.70999908447266,113.70999908447266,113.70999908447266,83.75215148925781,0,0.0,0.0,0.0
|
||||
2024-11-22 00:00:00-05:00,114.16000366210938,114.16000366210938,114.16000366210938,114.16000366210938,84.0835952758789,0,0.0,0.0,0.0
|
||||
2024-11-25 00:00:00-05:00,115.16000366210938,115.16000366210938,115.16000366210938,115.16000366210938,84.82013702392578,0,0.0,0.0,0.0
|
||||
2024-11-26 00:00:00-05:00,114.76000213623047,114.76000213623047,114.76000213623047,114.76000213623047,84.52552032470703,0,0.0,0.0,0.0
|
||||
2024-11-27 00:00:00-05:00,114.97000122070312,114.97000122070312,114.97000122070312,114.97000122070312,84.68019104003906,0,0.0,0.0,0.0
|
||||
2024-11-29 00:00:00-05:00,115.33999633789062,115.33999633789062,115.33999633789062,115.33999633789062,84.95271301269531,0,0.0,0.0,0.0
|
||||
2024-12-02 00:00:00-05:00,116.04000091552734,116.04000091552734,116.04000091552734,116.04000091552734,85.46829223632812,0,0.0,0.0,0.0
|
||||
2024-12-03 00:00:00-05:00,116.11000061035156,116.11000061035156,116.11000061035156,116.11000061035156,85.51985168457031,0,0.0,0.0,0.0
|
||||
2024-12-04 00:00:00-05:00,117.16000366210938,117.16000366210938,117.16000366210938,117.16000366210938,86.29322052001953,0,0.0,0.0,0.0
|
||||
2024-12-05 00:00:00-05:00,117.36000061035156,117.36000061035156,117.36000061035156,117.36000061035156,86.4405288696289,0,0.0,0.0,0.0
|
||||
2024-12-06 00:00:00-05:00,117.77999877929688,117.77999877929688,117.77999877929688,117.77999877929688,86.7498779296875,0,0.0,0.0,0.0
|
||||
2024-12-09 00:00:00-05:00,117.75,117.75,117.75,117.75,86.72777557373047,0,0.0,0.0,0.0
|
||||
2024-12-10 00:00:00-05:00,116.05999755859375,116.05999755859375,116.05999755859375,116.05999755859375,85.48302459716797,0,0.0,0.0,0.0
|
||||
2024-12-11 00:00:00-05:00,117.06999969482422,117.06999969482422,117.06999969482422,117.06999969482422,86.22693634033203,0,0.0,0.0,0.0
|
||||
2024-12-12 00:00:00-05:00,116.62000274658203,116.62000274658203,116.62000274658203,116.62000274658203,85.8954849243164,0,0.0,0.0,0.0
|
||||
2024-12-13 00:00:00-05:00,116.26000213623047,116.26000213623047,116.26000213623047,116.26000213623047,85.63033294677734,0,0.0,0.0,0.0
|
||||
2024-12-16 00:00:00-05:00,115.83000183105469,115.83000183105469,115.83000183105469,115.83000183105469,85.3136215209961,0,0.0,0.0,0.0
|
||||
2024-12-17 00:00:00-05:00,115.58999633789062,115.58999633789062,115.58999633789062,115.58999633789062,85.13684844970703,0,0.0,0.0,0.0
|
||||
2024-12-18 00:00:00-05:00,102.33000183105469,102.33000183105469,102.33000183105469,102.33000183105469,90.1654281616211,0,9.968,0.0,8.999
|
||||
2024-12-19 00:00:00-05:00,102.04000091552734,102.04000091552734,102.04000091552734,102.04000091552734,89.90990447998047,0,0.0,0.0,0.0
|
||||
2024-12-20 00:00:00-05:00,102.33000183105469,102.33000183105469,102.33000183105469,102.33000183105469,90.1654281616211,0,0.0,0.0,0.0
|
||||
2024-12-23 00:00:00-05:00,103.13999938964844,103.13999938964844,103.13999938964844,103.13999938964844,90.87913513183594,0,0.0,0.0,0.0
|
||||
2024-12-24 00:00:00-05:00,103.58999633789062,103.58999633789062,103.58999633789062,103.58999633789062,91.27564239501953,0,0.0,0.0,0.0
|
||||
2024-12-26 00:00:00-05:00,103.41000366210938,103.41000366210938,103.41000366210938,103.41000366210938,91.1170425415039,0,0.0,0.0,0.0
|
||||
2024-12-27 00:00:00-05:00,102.8499984741211,102.8499984741211,102.8499984741211,102.8499984741211,90.62361145019531,0,0.0,0.0,0.0
|
||||
2024-12-30 00:00:00-05:00,101.94999694824219,101.94999694824219,101.94999694824219,101.94999694824219,89.83059692382812,0,0.0,0.0,0.0
|
||||
2024-12-31 00:00:00-05:00,101.56999969482422,101.56999969482422,101.56999969482422,101.56999969482422,89.49577331542969,0,0.0,0.0,0.0
|
||||
2025-01-02 00:00:00-05:00,101.69999694824219,101.69999694824219,101.69999694824219,101.69999694824219,89.61031341552734,0,0.0,0.0,0.0
|
||||
2025-01-03 00:00:00-05:00,102.97000122070312,102.97000122070312,102.97000122070312,102.97000122070312,90.7293472290039,0,0.0,0.0,0.0
|
||||
2025-01-06 00:00:00-05:00,104.37000274658203,104.37000274658203,104.37000274658203,104.37000274658203,91.96292114257812,0,0.0,0.0,0.0
|
||||
2025-01-07 00:00:00-05:00,103.62000274658203,103.62000274658203,103.62000274658203,103.62000274658203,91.30207824707031,0,0.0,0.0,0.0
|
||||
2025-01-08 00:00:00-05:00,103.38999938964844,103.38999938964844,103.38999938964844,103.38999938964844,91.09941864013672,0,0.0,0.0,0.0
|
||||
2025-01-10 00:00:00-05:00,101.86000061035156,101.86000061035156,101.86000061035156,101.86000061035156,89.75129699707031,0,0.0,0.0,0.0
|
||||
2025-01-13 00:00:00-05:00,100.91999816894531,100.91999816894531,100.91999816894531,100.91999816894531,88.92304229736328,0,0.0,0.0,0.0
|
||||
2025-01-14 00:00:00-05:00,101.69000244140625,101.69000244140625,101.69000244140625,101.69000244140625,89.60150909423828,0,0.0,0.0,0.0
|
||||
2025-01-15 00:00:00-05:00,103.26000213623047,103.26000213623047,103.26000213623047,103.26000213623047,90.98487091064453,0,0.0,0.0,0.0
|
||||
2025-01-16 00:00:00-05:00,103.8499984741211,103.8499984741211,103.8499984741211,103.8499984741211,91.5047378540039,0,0.0,0.0,0.0
|
||||
2025-01-17 00:00:00-05:00,104.31999969482422,104.31999969482422,104.31999969482422,104.31999969482422,91.91886138916016,0,0.0,0.0,0.0
|
||||
2025-01-21 00:00:00-05:00,105.91999816894531,105.91999816894531,105.91999816894531,105.91999816894531,93.32865905761719,0,0.0,0.0,0.0
|
||||
2025-01-22 00:00:00-05:00,106.37000274658203,106.37000274658203,106.37000274658203,106.37000274658203,93.72517395019531,0,0.0,0.0,0.0
|
||||
2025-01-23 00:00:00-05:00,106.80000305175781,106.80000305175781,106.80000305175781,106.80000305175781,94.10405731201172,0,0.0,0.0,0.0
|
||||
2025-01-24 00:00:00-05:00,107.51000213623047,107.51000213623047,107.51000213623047,107.51000213623047,94.72965240478516,0,0.0,0.0,0.0
|
||||
2025-01-27 00:00:00-05:00,105.81999969482422,105.81999969482422,105.81999969482422,105.81999969482422,93.24054718017578,0,0.0,0.0,0.0
|
||||
2025-01-28 00:00:00-05:00,107.05000305175781,107.05000305175781,107.05000305175781,107.05000305175781,94.32433319091797,0,0.0,0.0,0.0
|
||||
2025-01-29 00:00:00-05:00,106.91999816894531,106.91999816894531,106.91999816894531,106.91999816894531,94.20978546142578,0,0.0,0.0,0.0
|
||||
2025-01-30 00:00:00-05:00,108.61000061035156,108.61000061035156,108.61000061035156,108.61000061035156,95.69888305664062,0,0.0,0.0,0.0
|
||||
2025-01-31 00:00:00-05:00,107.5,107.5,107.5,107.5,94.72084045410156,0,0.0,0.0,0.0
|
||||
2025-02-03 00:00:00-05:00,106.0999984741211,106.0999984741211,106.0999984741211,106.0999984741211,93.48726654052734,0,0.0,0.0,0.0
|
||||
2025-02-04 00:00:00-05:00,108.76000213623047,108.76000213623047,108.76000213623047,108.76000213623047,95.8310546875,0,0.0,0.0,0.0
|
||||
2025-02-05 00:00:00-05:00,109.66000366210938,109.66000366210938,109.66000366210938,109.66000366210938,96.62406921386719,0,0.0,0.0,0.0
|
||||
2025-02-06 00:00:00-05:00,109.97000122070312,109.97000122070312,109.97000122070312,109.97000122070312,96.897216796875,0,0.0,0.0,0.0
|
||||
2025-02-07 00:00:00-05:00,109.0999984741211,109.0999984741211,109.0999984741211,109.0999984741211,96.1306381225586,0,0.0,0.0,0.0
|
||||
2025-02-10 00:00:00-05:00,110.18000030517578,110.18000030517578,110.18000030517578,110.18000030517578,97.0822525024414,0,0.0,0.0,0.0
|
||||
2025-02-11 00:00:00-05:00,110.38999938964844,110.38999938964844,110.38999938964844,110.38999938964844,97.26728820800781,0,0.0,0.0,0.0
|
||||
2025-02-12 00:00:00-05:00,110.69999694824219,110.69999694824219,110.69999694824219,110.69999694824219,97.54043579101562,0,0.0,0.0,0.0
|
||||
2025-02-13 00:00:00-05:00,112.79000091552734,112.79000091552734,112.79000091552734,112.79000091552734,99.38198852539062,0,0.0,0.0,0.0
|
||||
2025-02-14 00:00:00-05:00,113.30000305175781,113.30000305175781,113.30000305175781,113.30000305175781,99.83135986328125,0,0.0,0.0,0.0
|
||||
2025-02-18 00:00:00-05:00,114.2300033569336,114.2300033569336,114.2300033569336,114.2300033569336,100.65081024169922,0,0.0,0.0,0.0
|
||||
2025-02-19 00:00:00-05:00,113.2300033569336,113.2300033569336,113.2300033569336,113.2300033569336,99.76968383789062,0,0.0,0.0,0.0
|
||||
2025-02-20 00:00:00-05:00,113.4000015258789,113.4000015258789,113.4000015258789,113.4000015258789,99.91947174072266,0,0.0,0.0,0.0
|
||||
2025-02-21 00:00:00-05:00,112.25,112.25,112.25,112.25,98.90618133544922,0,0.0,0.0,0.0
|
||||
2025-02-24 00:00:00-05:00,110.66000366210938,110.66000366210938,110.66000366210938,110.66000366210938,97.50519561767578,0,0.0,0.0,0.0
|
||||
2025-02-25 00:00:00-05:00,110.33999633789062,110.33999633789062,110.33999633789062,110.33999633789062,97.22322845458984,0,0.0,0.0,0.0
|
||||
2025-02-26 00:00:00-05:00,111.33999633789062,111.33999633789062,111.33999633789062,111.33999633789062,98.10435485839844,0,0.0,0.0,0.0
|
||||
2025-02-27 00:00:00-05:00,108.76000213623047,108.76000213623047,108.76000213623047,108.76000213623047,95.8310546875,0,0.0,0.0,0.0
|
||||
2025-02-28 00:00:00-05:00,108.94999694824219,108.94999694824219,108.94999694824219,108.94999694824219,95.99846649169922,0,0.0,0.0,0.0
|
||||
2025-03-03 00:00:00-05:00,107.4000015258789,107.4000015258789,107.4000015258789,107.4000015258789,94.63272857666016,0,0.0,0.0,0.0
|
||||
2025-03-04 00:00:00-05:00,107.58999633789062,107.58999633789062,107.58999633789062,107.58999633789062,94.80013275146484,0,0.0,0.0,0.0
|
||||
2025-03-05 00:00:00-05:00,110.94999694824219,110.94999694824219,110.94999694824219,110.94999694824219,97.76071166992188,0,0.0,0.0,0.0
|
||||
2025-03-06 00:00:00-05:00,108.37000274658203,108.37000274658203,108.37000274658203,108.37000274658203,95.48741912841797,0,0.0,0.0,0.0
|
||||
2025-03-07 00:00:00-05:00,108.62000274658203,108.62000274658203,108.62000274658203,108.62000274658203,95.70770263671875,0,0.0,0.0,0.0
|
||||
2025-03-10 00:00:00-04:00,104.45999908447266,104.45999908447266,104.45999908447266,104.45999908447266,92.04222106933594,0,0.0,0.0,0.0
|
||||
2025-03-11 00:00:00-04:00,105.0,105.0,105.0,105.0,92.51802825927734,0,0.0,0.0,0.0
|
||||
2025-03-12 00:00:00-04:00,106.22000122070312,106.22000122070312,106.22000122070312,106.22000122070312,93.59300231933594,0,0.0,0.0,0.0
|
||||
2025-03-13 00:00:00-04:00,104.9800033569336,104.9800033569336,104.9800033569336,104.9800033569336,92.50041198730469,0,0.0,0.0,0.0
|
||||
2025-03-14 00:00:00-04:00,107.80999755859375,107.80999755859375,107.80999755859375,107.80999755859375,94.99398803710938,0,0.0,0.0,0.0
|
||||
2025-03-17 00:00:00-04:00,109.62000274658203,109.62000274658203,109.62000274658203,109.62000274658203,96.58882141113281,0,0.0,0.0,0.0
|
||||
2025-03-18 00:00:00-04:00,108.58999633789062,108.58999633789062,108.58999633789062,108.58999633789062,95.68125915527344,0,0.0,0.0,0.0
|
||||
2025-03-19 00:00:00-04:00,109.5,109.5,109.5,109.5,96.48308563232422,0,0.0,0.0,0.0
|
||||
2025-03-20 00:00:00-04:00,109.02999877929688,109.02999877929688,109.02999877929688,109.02999877929688,96.06895446777344,0,0.0,0.0,0.0
|
||||
2025-03-21 00:00:00-04:00,108.02999877929688,108.02999877929688,108.02999877929688,108.02999877929688,95.18783569335938,0,0.0,0.0,0.0
|
||||
2025-03-24 00:00:00-04:00,108.68000030517578,108.68000030517578,108.68000030517578,108.68000030517578,95.76056671142578,0,0.0,0.0,0.0
|
||||
2025-03-25 00:00:00-04:00,108.68000030517578,108.68000030517578,108.68000030517578,108.68000030517578,95.76056671142578,0,0.0,0.0,0.0
|
||||
2025-03-26 00:00:00-04:00,106.26000213623047,106.26000213623047,106.26000213623047,106.26000213623047,93.62825012207031,0,0.0,0.0,0.0
|
||||
2025-03-27 00:00:00-04:00,106.6500015258789,106.6500015258789,106.6500015258789,106.6500015258789,93.97188568115234,0,0.0,0.0,0.0
|
||||
2025-03-28 00:00:00-04:00,104.55999755859375,104.55999755859375,104.55999755859375,104.55999755859375,92.13033294677734,0,0.0,0.0,0.0
|
||||
2025-03-31 00:00:00-04:00,103.01000213623047,103.01000213623047,103.01000213623047,103.01000213623047,90.76459503173828,0,0.0,0.0,0.0
|
||||
2025-04-01 00:00:00-04:00,103.12999725341797,103.12999725341797,103.12999725341797,103.12999725341797,90.87032318115234,0,0.0,0.0,0.0
|
||||
2025-04-02 00:00:00-04:00,103.81999969482422,103.81999969482422,103.81999969482422,103.81999969482422,91.47830200195312,0,0.0,0.0,0.0
|
||||
2025-04-03 00:00:00-04:00,100.05999755859375,100.05999755859375,100.05999755859375,100.05999755859375,88.16527557373047,0,0.0,0.0,0.0
|
||||
2025-04-04 00:00:00-04:00,93.5199966430664,93.5199966430664,93.5199966430664,93.5199966430664,82.40271759033203,0,0.0,0.0,0.0
|
||||
2025-04-07 00:00:00-04:00,92.19999694824219,92.19999694824219,92.19999694824219,92.19999694824219,81.23963928222656,0,0.0,0.0,0.0
|
||||
2025-04-08 00:00:00-04:00,91.36000061035156,91.36000061035156,91.36000061035156,91.36000061035156,80.49949645996094,0,0.0,0.0,0.0
|
||||
2025-04-09 00:00:00-04:00,99.08000183105469,99.08000183105469,99.08000183105469,99.08000183105469,87.30177307128906,0,0.0,0.0,0.0
|
||||
2025-04-10 00:00:00-04:00,96.3499984741211,96.3499984741211,96.3499984741211,96.3499984741211,84.89630126953125,0,0.0,0.0,0.0
|
||||
2025-04-11 00:00:00-04:00,98.94000244140625,98.94000244140625,98.94000244140625,98.94000244140625,87.17842102050781,0,0.0,0.0,0.0
|
||||
2025-04-14 00:00:00-04:00,99.91999816894531,99.91999816894531,99.91999816894531,99.91999816894531,88.04191589355469,0,0.0,0.0,0.0
|
||||
2025-04-15 00:00:00-04:00,100.8499984741211,100.8499984741211,100.8499984741211,100.8499984741211,88.86135864257812,0,0.0,0.0,0.0
|
||||
2025-04-16 00:00:00-04:00,98.98999786376953,98.98999786376953,98.98999786376953,98.98999786376953,87.22247314453125,0,0.0,0.0,0.0
|
||||
2025-04-17 00:00:00-04:00,99.69000244140625,99.69000244140625,99.69000244140625,99.69000244140625,87.83926391601562,0,0.0,0.0,0.0
|
||||
2025-04-21 00:00:00-04:00,98.72000122070312,98.72000122070312,98.72000122070312,98.72000122070312,86.98457336425781,0,0.0,0.0,0.0
|
||||
2025-04-22 00:00:00-04:00,100.7699966430664,100.7699966430664,100.7699966430664,100.7699966430664,88.7908706665039,0,0.0,0.0,0.0
|
||||
2025-04-23 00:00:00-04:00,102.27999877929688,102.27999877929688,102.27999877929688,102.27999877929688,90.12136840820312,0,0.0,0.0,0.0
|
||||
2025-04-24 00:00:00-04:00,104.54000091552734,104.54000091552734,104.54000091552734,104.54000091552734,92.11270904541016,0,0.0,0.0,0.0
|
||||
2025-04-25 00:00:00-04:00,105.2699966430664,105.2699966430664,105.2699966430664,105.2699966430664,92.75592803955078,0,0.0,0.0,0.0
|
||||
2025-04-28 00:00:00-04:00,105.1500015258789,105.1500015258789,105.1500015258789,105.1500015258789,92.65019989013672,0,0.0,0.0,0.0
|
||||
2025-04-29 00:00:00-04:00,105.36000061035156,105.36000061035156,105.36000061035156,105.36000061035156,92.83523559570312,0,0.0,0.0,0.0
|
||||
2025-04-30 00:00:00-04:00,106.04000091552734,106.04000091552734,106.04000091552734,106.04000091552734,93.43439483642578,0,0.0,0.0,0.0
|
||||
2025-05-01 00:00:00-04:00,106.0199966430664,106.0199966430664,106.0199966430664,106.0199966430664,93.4167709350586,0,0.0,0.0,0.0
|
||||
2025-05-02 00:00:00-04:00,108.80999755859375,108.80999755859375,108.80999755859375,108.80999755859375,95.87510681152344,0,0.0,0.0,0.0
|
||||
2025-05-05 00:00:00-04:00,108.61000061035156,108.61000061035156,108.61000061035156,108.61000061035156,95.69888305664062,0,0.0,0.0,0.0
|
||||
2025-05-06 00:00:00-04:00,108.25,108.25,108.25,108.25,95.38168334960938,0,0.0,0.0,0.0
|
||||
2025-05-07 00:00:00-04:00,108.25,108.25,108.25,108.25,95.38168334960938,0,0.0,0.0,0.0
|
||||
2025-05-08 00:00:00-04:00,108.76000213623047,108.76000213623047,108.76000213623047,108.76000213623047,95.8310546875,0,0.0,0.0,0.0
|
||||
2025-05-09 00:00:00-04:00,109.13999938964844,109.13999938964844,109.13999938964844,109.13999938964844,96.16587829589844,0,0.0,0.0,0.0
|
||||
2025-05-12 00:00:00-04:00,111.88999938964844,111.88999938964844,111.88999938964844,111.88999938964844,98.58897399902344,0,0.0,0.0,0.0
|
||||
2025-05-13 00:00:00-04:00,112.69999694824219,112.69999694824219,112.69999694824219,112.69999694824219,99.30268096923828,0,0.0,0.0,0.0
|
||||
2025-05-14 00:00:00-04:00,113.33000183105469,113.33000183105469,113.33000183105469,113.33000183105469,99.85779571533203,0,0.0,0.0,0.0
|
||||
2025-05-15 00:00:00-04:00,113.8499984741211,113.8499984741211,113.8499984741211,113.8499984741211,100.31597137451172,0,0.0,0.0,0.0
|
||||
2025-05-16 00:00:00-04:00,114.13999938964844,114.13999938964844,114.13999938964844,114.13999938964844,100.57150268554688,0,0.0,0.0,0.0
|
||||
2025-05-19 00:00:00-04:00,114.77999877929688,114.77999877929688,114.77999877929688,114.77999877929688,101.13542175292969,0,0.0,0.0,0.0
|
||||
2025-05-20 00:00:00-04:00,114.86000061035156,114.86000061035156,114.86000061035156,114.86000061035156,101.2059097290039,0,0.0,0.0,0.0
|
||||
2025-05-21 00:00:00-04:00,113.80999755859375,113.80999755859375,113.80999755859375,113.80999755859375,100.28073120117188,0,0.0,0.0,0.0
|
||||
2025-05-22 00:00:00-04:00,113.7300033569336,113.7300033569336,113.7300033569336,113.7300033569336,100.21024322509766,0,0.0,0.0,0.0
|
||||
2025-05-23 00:00:00-04:00,113.33000183105469,113.33000183105469,113.33000183105469,113.33000183105469,99.85779571533203,0,0.0,0.0,0.0
|
||||
2025-05-27 00:00:00-04:00,114.27999877929688,114.27999877929688,114.27999877929688,114.27999877929688,100.69486236572266,0,0.0,0.0,0.0
|
||||
2025-05-28 00:00:00-04:00,113.06999969482422,113.06999969482422,113.06999969482422,113.06999969482422,99.62870025634766,0,0.0,0.0,0.0
|
||||
2025-05-29 00:00:00-04:00,113.47000122070312,113.47000122070312,113.47000122070312,113.47000122070312,99.98114776611328,0,0.0,0.0,0.0
|
||||
2025-05-30 00:00:00-04:00,113.27999877929688,113.27999877929688,113.27999877929688,113.27999877929688,99.81373596191406,0,0.0,0.0,0.0
|
||||
2025-06-02 00:00:00-04:00,114.18000030517578,114.18000030517578,114.18000030517578,114.18000030517578,100.60675048828125,0,0.0,0.0,0.0
|
||||
2025-06-03 00:00:00-04:00,113.86000061035156,113.86000061035156,113.86000061035156,113.86000061035156,100.32479095458984,0,0.0,0.0,0.0
|
||||
2025-06-04 00:00:00-04:00,114.94000244140625,114.94000244140625,114.94000244140625,114.94000244140625,101.27640533447266,0,0.0,0.0,0.0
|
||||
2025-06-05 00:00:00-04:00,115.33999633789062,115.33999633789062,115.33999633789062,115.33999633789062,101.62884521484375,0,0.0,0.0,0.0
|
||||
2025-06-06 00:00:00-04:00,115.56999969482422,115.56999969482422,115.56999969482422,115.56999969482422,101.83151245117188,0,0.0,0.0,0.0
|
||||
2025-06-09 00:00:00-04:00,115.52999877929688,115.52999877929688,115.52999877929688,115.52999877929688,101.7962646484375,0,0.0,0.0,0.0
|
||||
2025-06-10 00:00:00-04:00,116.08999633789062,116.08999633789062,116.08999633789062,116.08999633789062,102.28968811035156,0,0.0,0.0,0.0
|
||||
2025-06-11 00:00:00-04:00,116.18000030517578,116.18000030517578,116.18000030517578,116.18000030517578,102.3689956665039,0,0.0,0.0,0.0
|
||||
2025-06-12 00:00:00-04:00,116.30999755859375,116.30999755859375,116.30999755859375,116.30999755859375,102.48353576660156,0,0.0,0.0,0.0
|
||||
2025-06-13 00:00:00-04:00,114.26000213623047,114.26000213623047,114.26000213623047,114.26000213623047,100.67723846435547,0,0.0,0.0,0.0
|
||||
2025-06-16 00:00:00-04:00,115.30999755859375,115.30999755859375,115.30999755859375,115.30999755859375,101.6024169921875,0,0.0,0.0,0.0
|
||||
2025-06-17 00:00:00-04:00,113.86000061035156,113.86000061035156,113.86000061035156,113.86000061035156,100.32479095458984,0,0.0,0.0,0.0
|
||||
2025-06-18 00:00:00-04:00,113.66000366210938,113.66000366210938,113.66000366210938,113.66000366210938,100.14856719970703,0,0.0,0.0,0.0
|
||||
2025-06-20 00:00:00-04:00,112.68000030517578,112.68000030517578,112.68000030517578,112.68000030517578,99.28506469726562,0,0.0,0.0,0.0
|
||||
2025-06-23 00:00:00-04:00,113.69999694824219,113.69999694824219,113.69999694824219,113.69999694824219,100.18380737304688,0,0.0,0.0,0.0
|
||||
2025-06-24 00:00:00-04:00,113.69999694824219,113.69999694824219,113.69999694824219,113.69999694824219,100.18380737304688,0,0.0,0.0,0.0
|
||||
2025-06-25 00:00:00-04:00,116.13999938964844,116.13999938964844,116.13999938964844,116.13999938964844,102.33374786376953,0,0.0,0.0,0.0
|
||||
2025-06-26 00:00:00-04:00,117.06999969482422,117.06999969482422,117.06999969482422,117.06999969482422,103.1531982421875,0,0.0,0.0,0.0
|
||||
2025-06-27 00:00:00-04:00,118.05999755859375,118.05999755859375,118.05999755859375,118.05999755859375,104.02550506591797,0,0.0,0.0,0.0
|
||||
2025-06-30 00:00:00-04:00,117.91999816894531,117.91999816894531,117.91999816894531,117.91999816894531,103.90215301513672,0,0.0,0.0,0.0
|
||||
2025-07-01 00:00:00-04:00,116.98999786376953,116.98999786376953,116.98999786376953,116.98999786376953,103.08270263671875,0,0.0,0.0,0.0
|
||||
2025-07-02 00:00:00-04:00,117.44999694824219,117.44999694824219,117.44999694824219,117.44999694824219,103.48802185058594,0,0.0,0.0,0.0
|
||||
2025-07-03 00:00:00-04:00,117.77999877929688,117.77999877929688,117.77999877929688,117.77999877929688,103.77879333496094,0,0.0,0.0,0.0
|
||||
2025-07-07 00:00:00-04:00,116.8499984741211,116.8499984741211,116.8499984741211,116.8499984741211,102.9593505859375,0,0.0,0.0,0.0
|
||||
2025-07-08 00:00:00-04:00,117.62999725341797,117.62999725341797,117.62999725341797,117.62999725341797,103.64662170410156,0,0.0,0.0,0.0
|
||||
2025-07-09 00:00:00-04:00,118.20999908447266,118.20999908447266,118.20999908447266,118.20999908447266,104.15767669677734,0,0.0,0.0,0.0
|
||||
2025-07-10 00:00:00-04:00,117.73999786376953,117.73999786376953,117.73999786376953,117.73999786376953,103.74354553222656,0,0.0,0.0,0.0
|
||||
2025-07-11 00:00:00-04:00,116.75,116.75,116.75,116.75,102.8712387084961,0,0.0,0.0,0.0
|
||||
2025-07-14 00:00:00-04:00,116.77999877929688,116.77999877929688,116.77999877929688,116.77999877929688,102.89766693115234,0,0.0,0.0,0.0
|
||||
2025-07-15 00:00:00-04:00,117.12000274658203,117.12000274658203,117.12000274658203,117.12000274658203,103.19725799560547,0,0.0,0.0,0.0
|
||||
2025-07-16 00:00:00-04:00,117.43000030517578,117.43000030517578,117.43000030517578,117.43000030517578,103.47039794921875,0,0.0,0.0,0.0
|
||||
2025-07-17 00:00:00-04:00,118.22000122070312,118.22000122070312,118.22000122070312,118.22000122070312,104.16648864746094,0,0.0,0.0,0.0
|
||||
2025-07-18 00:00:00-04:00,117.61000061035156,117.61000061035156,117.61000061035156,117.61000061035156,103.6290054321289,0,0.0,0.0,0.0
|
||||
2025-07-21 00:00:00-04:00,117.69999694824219,117.69999694824219,117.69999694824219,117.69999694824219,103.70829772949219,0,0.0,0.0,0.0
|
||||
2025-07-22 00:00:00-04:00,117.69999694824219,117.69999694824219,117.69999694824219,117.69999694824219,103.70829772949219,0,0.0,0.0,0.0
|
||||
2025-07-23 00:00:00-04:00,119.86000061035156,119.86000061035156,119.86000061035156,119.86000061035156,105.61153411865234,0,0.0,0.0,0.0
|
||||
2025-07-24 00:00:00-04:00,119.44999694824219,119.44999694824219,119.44999694824219,119.44999694824219,105.2502670288086,0,0.0,0.0,0.0
|
||||
2025-07-25 00:00:00-04:00,119.55999755859375,119.55999755859375,119.55999755859375,119.55999755859375,105.3471908569336,0,0.0,0.0,0.0
|
||||
2025-07-28 00:00:00-04:00,118.44999694824219,118.44999694824219,118.44999694824219,118.44999694824219,104.36914825439453,0,0.0,0.0,0.0
|
||||
2025-07-29 00:00:00-04:00,117.30999755859375,117.30999755859375,117.30999755859375,117.30999755859375,103.36466217041016,0,0.0,0.0,0.0
|
||||
2025-07-30 00:00:00-04:00,115.87999725341797,115.87999725341797,115.87999725341797,115.87999725341797,102.10465240478516,0,0.0,0.0,0.0
|
||||
2025-07-31 00:00:00-04:00,114.08999633789062,114.08999633789062,114.08999633789062,114.08999633789062,100.5274429321289,0,0.0,0.0,0.0
|
||||
2025-08-01 00:00:00-04:00,113.19999694824219,113.19999694824219,113.19999694824219,113.19999694824219,99.74324035644531,0,0.0,0.0,0.0
|
||||
2025-08-04 00:00:00-04:00,114.83999633789062,114.83999633789062,114.83999633789062,114.83999633789062,101.18828582763672,0,0.0,0.0,0.0
|
||||
2025-08-05 00:00:00-04:00,114.33000183105469,114.33000183105469,114.33000183105469,114.33000183105469,100.7389144897461,0,0.0,0.0,0.0
|
||||
2025-08-06 00:00:00-04:00,114.51000213623047,114.51000213623047,114.51000213623047,114.51000213623047,100.89752197265625,0,0.0,0.0,0.0
|
||||
2025-08-07 00:00:00-04:00,116.08000183105469,116.08000183105469,116.08000183105469,116.08000183105469,102.2808837890625,0,0.0,0.0,0.0
|
||||
2025-08-08 00:00:00-04:00,116.37000274658203,116.37000274658203,116.37000274658203,116.37000274658203,102.53641510009766,0,0.0,0.0,0.0
|
||||
2025-08-11 00:00:00-04:00,115.36000061035156,115.36000061035156,115.36000061035156,115.36000061035156,101.64647674560547,0,0.0,0.0,0.0
|
||||
2025-08-12 00:00:00-04:00,117.69999694824219,117.69999694824219,117.69999694824219,117.69999694824219,103.70829772949219,0,0.0,0.0,0.0
|
||||
2025-08-13 00:00:00-04:00,118.58000183105469,118.58000183105469,118.58000183105469,118.58000183105469,104.48369598388672,0,0.0,0.0,0.0
|
||||
2025-08-14 00:00:00-04:00,117.86000061035156,117.86000061035156,117.86000061035156,117.86000061035156,103.84928131103516,0,0.0,0.0,0.0
|
||||
2025-08-15 00:00:00-04:00,118.9000015258789,118.9000015258789,118.9000015258789,118.9000015258789,104.76565551757812,0,0.0,0.0,0.0
|
||||
2025-08-18 00:00:00-04:00,119.30999755859375,119.30999755859375,119.30999755859375,119.30999755859375,105.12691497802734,0,0.0,0.0,0.0
|
||||
2025-08-19 00:00:00-04:00,118.86000061035156,118.86000061035156,118.86000061035156,118.86000061035156,104.73040771484375,0,0.0,0.0,0.0
|
||||
2025-08-20 00:00:00-04:00,118.56999969482422,118.56999969482422,118.56999969482422,118.56999969482422,104.47488403320312,0,0.0,0.0,0.0
|
||||
2025-08-21 00:00:00-04:00,117.94000244140625,117.94000244140625,117.94000244140625,117.94000244140625,103.9197769165039,0,0.0,0.0,0.0
|
||||
2025-08-22 00:00:00-04:00,120.2300033569336,120.2300033569336,120.2300033569336,120.2300033569336,105.93755340576172,0,0.0,0.0,0.0
|
||||
2025-08-25 00:00:00-04:00,119.3499984741211,119.3499984741211,119.3499984741211,119.3499984741211,105.16215515136719,0,0.0,0.0,0.0
|
||||
2025-08-26 00:00:00-04:00,119.80000305175781,119.80000305175781,119.80000305175781,119.80000305175781,105.55867004394531,0,0.0,0.0,0.0
|
||||
2025-08-27 00:00:00-04:00,119.19999694824219,119.19999694824219,119.19999694824219,119.19999694824219,105.02999114990234,0,0.0,0.0,0.0
|
||||
2025-08-28 00:00:00-04:00,119.52999877929688,119.52999877929688,119.52999877929688,119.52999877929688,105.32076263427734,0,0.0,0.0,0.0
|
||||
2025-08-29 00:00:00-04:00,118.58999633789062,118.58999633789062,118.58999633789062,118.58999633789062,104.49250030517578,0,0.0,0.0,0.0
|
||||
2025-09-02 00:00:00-04:00,117.0999984741211,117.0999984741211,117.0999984741211,117.0999984741211,103.17962646484375,0,0.0,0.0,0.0
|
||||
2025-09-03 00:00:00-04:00,117.66000366210938,117.66000366210938,117.66000366210938,117.66000366210938,103.67306518554688,0,0.0,0.0,0.0
|
||||
2025-09-04 00:00:00-04:00,118.58000183105469,118.58000183105469,118.58000183105469,118.58000183105469,104.48369598388672,0,0.0,0.0,0.0
|
||||
2025-09-05 00:00:00-04:00,119.41000366210938,119.41000366210938,119.41000366210938,119.41000366210938,105.21502685546875,0,0.0,0.0,0.0
|
||||
2025-09-08 00:00:00-04:00,120.5,120.5,120.5,120.5,106.17545318603516,0,0.0,0.0,0.0
|
||||
2025-09-09 00:00:00-04:00,120.86000061035156,120.86000061035156,120.86000061035156,120.86000061035156,106.49266052246094,0,0.0,0.0,0.0
|
||||
2025-09-10 00:00:00-04:00,120.61000061035156,120.61000061035156,120.61000061035156,120.61000061035156,106.27237701416016,0,0.0,0.0,0.0
|
||||
2025-09-11 00:00:00-04:00,121.5999984741211,121.5999984741211,121.5999984741211,121.5999984741211,107.14468383789062,0,0.0,0.0,0.0
|
||||
2025-09-12 00:00:00-04:00,121.20999908447266,121.20999908447266,121.20999908447266,121.20999908447266,106.8010482788086,0,0.0,0.0,0.0
|
||||
2025-09-15 00:00:00-04:00,122.43000030517578,122.43000030517578,122.43000030517578,122.43000030517578,107.87602233886719,0,0.0,0.0,0.0
|
||||
2025-09-16 00:00:00-04:00,122.9000015258789,122.9000015258789,122.9000015258789,122.9000015258789,108.29015350341797,0,0.0,0.0,0.0
|
||||
2025-09-17 00:00:00-04:00,123.11000061035156,123.11000061035156,123.11000061035156,123.11000061035156,108.47518920898438,0,0.0,0.0,0.0
|
||||
2025-09-18 00:00:00-04:00,124.75,124.75,124.75,124.75,109.92022705078125,0,0.0,0.0,0.0
|
||||
2025-09-19 00:00:00-04:00,123.94000244140625,123.94000244140625,123.94000244140625,123.94000244140625,109.2065200805664,0,0.0,0.0,0.0
|
||||
2025-09-22 00:00:00-04:00,124.56999969482422,124.56999969482422,124.56999969482422,124.56999969482422,109.76162719726562,0,0.0,0.0,0.0
|
||||
2025-09-23 00:00:00-04:00,124.0,124.0,124.0,124.0,109.25938415527344,0,0.0,0.0,0.0
|
||||
2025-09-24 00:00:00-04:00,123.26000213623047,123.26000213623047,123.26000213623047,123.26000213623047,108.60735321044922,0,0.0,0.0,0.0
|
||||
2025-09-25 00:00:00-04:00,122.22000122070312,122.22000122070312,122.22000122070312,122.22000122070312,107.69098663330078,0,0.0,0.0,0.0
|
||||
2025-09-26 00:00:00-04:00,122.12000274658203,122.12000274658203,122.12000274658203,122.12000274658203,107.60287475585938,0,0.0,0.0,0.0
|
||||
2025-09-29 00:00:00-04:00,123.16999816894531,123.16999816894531,123.16999816894531,123.16999816894531,108.5280532836914,0,0.0,0.0,0.0
|
||||
2025-09-30 00:00:00-04:00,123.19999694824219,123.19999694824219,123.19999694824219,123.19999694824219,108.55448150634766,0,0.0,0.0,0.0
|
||||
2025-10-01 00:00:00-04:00,123.86000061035156,123.86000061035156,123.86000061035156,123.86000061035156,109.13603210449219,0,0.0,0.0,0.0
|
||||
2025-10-02 00:00:00-04:00,125.30999755859375,125.30999755859375,125.30999755859375,125.30999755859375,110.41365814208984,0,0.0,0.0,0.0
|
||||
2025-10-03 00:00:00-04:00,125.6500015258789,125.6500015258789,125.6500015258789,125.6500015258789,110.71324157714844,0,0.0,0.0,0.0
|
||||
2025-10-06 00:00:00-04:00,126.88999938964844,126.88999938964844,126.88999938964844,126.88999938964844,111.80583190917969,0,0.0,0.0,0.0
|
||||
2025-10-07 00:00:00-04:00,125.58000183105469,125.58000183105469,125.58000183105469,125.58000183105469,110.65156555175781,0,0.0,0.0,0.0
|
||||
2025-10-08 00:00:00-04:00,126.12000274658203,126.12000274658203,126.12000274658203,126.12000274658203,111.12737274169922,0,0.0,0.0,0.0
|
||||
2025-10-09 00:00:00-04:00,125.04000091552734,125.04000091552734,125.04000091552734,125.04000091552734,110.1757583618164,0,0.0,0.0,0.0
|
||||
2025-10-10 00:00:00-04:00,120.52999877929688,120.52999877929688,120.52999877929688,120.52999877929688,106.2018814086914,0,0.0,0.0,0.0
|
||||
2025-10-13 00:00:00-04:00,123.08000183105469,123.08000183105469,123.08000183105469,123.08000183105469,108.4487533569336,0,0.0,0.0,0.0
|
||||
2025-10-14 00:00:00-04:00,122.54000091552734,122.54000091552734,122.54000091552734,122.54000091552734,107.97294616699219,0,0.0,0.0,0.0
|
||||
2025-10-15 00:00:00-04:00,122.83999633789062,122.83999633789062,122.83999633789062,122.83999633789062,108.2372817993164,0,0.0,0.0,0.0
|
||||
2025-10-16 00:00:00-04:00,122.97000122070312,122.97000122070312,122.97000122070312,122.97000122070312,108.3518295288086,0,0.0,0.0,0.0
|
||||
2025-10-17 00:00:00-04:00,123.04000091552734,123.04000091552734,123.04000091552734,123.04000091552734,108.41350555419922,0,0.0,0.0,0.0
|
||||
2025-10-20 00:00:00-04:00,124.7699966430664,124.7699966430664,124.7699966430664,124.7699966430664,109.93785095214844,0,0.0,0.0,0.0
|
||||
2025-10-21 00:00:00-04:00,124.12000274658203,124.12000274658203,124.12000274658203,124.12000274658203,109.36511993408203,0,0.0,0.0,0.0
|
||||
2025-10-22 00:00:00-04:00,122.66999816894531,122.66999816894531,122.66999816894531,122.66999816894531,108.08748626708984,0,0.0,0.0,0.0
|
||||
2025-10-23 00:00:00-04:00,123.94999694824219,123.94999694824219,123.94999694824219,123.94999694824219,109.21532440185547,0,0.0,0.0,0.0
|
||||
2025-10-24 00:00:00-04:00,124.44000244140625,124.44000244140625,124.44000244140625,124.44000244140625,109.64707946777344,0,0.0,0.0,0.0
|
||||
2025-10-27 00:00:00-04:00,126.18000030517578,126.18000030517578,126.18000030517578,126.18000030517578,111.18023681640625,0,0.0,0.0,0.0
|
||||
2025-10-28 00:00:00-04:00,125.7300033569336,125.7300033569336,125.7300033569336,125.7300033569336,110.78373718261719,0,0.0,0.0,0.0
|
||||
2025-10-29 00:00:00-04:00,126.0,126.0,126.0,126.0,111.02163696289062,0,0.0,0.0,0.0
|
||||
2025-10-30 00:00:00-04:00,125.30000305175781,125.30000305175781,125.30000305175781,125.30000305175781,110.40484619140625,0,0.0,0.0,0.0
|
||||
2025-10-31 00:00:00-04:00,124.94000244140625,124.94000244140625,124.94000244140625,124.94000244140625,110.087646484375,0,0.0,0.0,0.0
|
||||
2025-11-03 00:00:00-05:00,125.08000183105469,125.08000183105469,125.08000183105469,125.08000183105469,110.21099853515625,0,0.0,0.0,0.0
|
||||
2025-11-04 00:00:00-05:00,122.6500015258789,122.6500015258789,122.6500015258789,122.6500015258789,108.06986999511719,0,0.0,0.0,0.0
|
||||
2025-11-05 00:00:00-05:00,123.1500015258789,123.1500015258789,123.1500015258789,123.1500015258789,108.51042938232422,0,0.0,0.0,0.0
|
||||
2025-11-06 00:00:00-05:00,121.4000015258789,121.4000015258789,121.4000015258789,121.4000015258789,106.96846771240234,0,0.0,0.0,0.0
|
||||
2025-11-07 00:00:00-05:00,120.95999908447266,120.95999908447266,120.95999908447266,120.95999908447266,106.58076477050781,0,0.0,0.0,0.0
|
||||
2025-11-10 00:00:00-05:00,122.8499984741211,122.8499984741211,122.8499984741211,122.8499984741211,108.24609375,0,0.0,0.0,0.0
|
||||
2025-11-11 00:00:00-05:00,123.30000305175781,123.30000305175781,123.30000305175781,123.30000305175781,108.6426010131836,0,0.0,0.0,0.0
|
||||
2025-11-12 00:00:00-05:00,123.6500015258789,123.6500015258789,123.6500015258789,123.6500015258789,108.95099639892578,0,0.0,0.0,0.0
|
||||
2025-11-13 00:00:00-05:00,121.47000122070312,121.47000122070312,121.47000122070312,121.47000122070312,107.03014373779297,0,0.0,0.0,0.0
|
||||
2025-11-14 00:00:00-05:00,121.33000183105469,121.33000183105469,121.33000183105469,121.33000183105469,106.90678405761719,0,0.0,0.0,0.0
|
||||
2025-11-17 00:00:00-05:00,119.73999786376953,119.73999786376953,119.73999786376953,119.73999786376953,105.50579833984375,0,0.0,0.0,0.0
|
||||
2025-11-18 00:00:00-05:00,118.41000366210938,118.41000366210938,118.41000366210938,118.41000366210938,104.33390808105469,0,0.0,0.0,0.0
|
||||
2025-11-19 00:00:00-05:00,118.27999877929688,118.27999877929688,118.27999877929688,118.27999877929688,104.21935272216797,0,0.0,0.0,0.0
|
||||
2025-11-20 00:00:00-05:00,115.16000366210938,115.16000366210938,115.16000366210938,115.16000366210938,101.47025299072266,0,0.0,0.0,0.0
|
||||
2025-11-21 00:00:00-05:00,116.56999969482422,116.56999969482422,116.56999969482422,116.56999969482422,102.71263122558594,0,0.0,0.0,0.0
|
||||
2025-11-24 00:00:00-05:00,117.61000061035156,117.61000061035156,117.61000061035156,117.61000061035156,103.6290054321289,0,0.0,0.0,0.0
|
||||
2025-11-25 00:00:00-05:00,118.8499984741211,118.8499984741211,118.8499984741211,118.8499984741211,104.72159576416016,0,0.0,0.0,0.0
|
||||
2025-11-26 00:00:00-05:00,119.88999938964844,119.88999938964844,119.88999938964844,119.88999938964844,105.6379623413086,0,0.0,0.0,0.0
|
||||
2025-11-28 00:00:00-05:00,120.91000366210938,120.91000366210938,120.91000366210938,120.91000366210938,106.53671264648438,0,0.0,0.0,0.0
|
||||
2025-12-01 00:00:00-05:00,120.0,120.0,120.0,120.0,105.7348861694336,0,0.0,0.0,0.0
|
||||
2025-12-02 00:00:00-05:00,120.7699966430664,120.7699966430664,120.7699966430664,120.7699966430664,106.4133529663086,0,0.0,0.0,0.0
|
||||
2025-12-03 00:00:00-05:00,121.38999938964844,121.38999938964844,121.38999938964844,121.38999938964844,106.95964813232422,0,0.0,0.0,0.0
|
||||
2025-12-04 00:00:00-05:00,121.55999755859375,121.55999755859375,121.55999755859375,121.55999755859375,107.10944366455078,0,0.0,0.0,0.0
|
||||
2025-12-05 00:00:00-05:00,121.5199966430664,121.5199966430664,121.5199966430664,121.5199966430664,107.0741958618164,0,0.0,0.0,0.0
|
||||
2025-12-08 00:00:00-05:00,121.48999786376953,121.48999786376953,121.48999786376953,121.48999786376953,107.04776000976562,0,0.0,0.0,0.0
|
||||
2025-12-09 00:00:00-05:00,121.16000366210938,121.16000366210938,121.16000366210938,121.16000366210938,106.75699615478516,0,0.0,0.0,0.0
|
||||
2025-12-10 00:00:00-05:00,122.55000305175781,122.55000305175781,122.55000305175781,122.55000305175781,107.98175811767578,0,0.0,0.0,0.0
|
||||
2025-12-11 00:00:00-05:00,122.66999816894531,122.66999816894531,122.66999816894531,122.66999816894531,108.08748626708984,0,0.0,0.0,0.0
|
||||
2025-12-12 00:00:00-05:00,121.08999633789062,121.08999633789062,121.08999633789062,121.08999633789062,106.6953125,0,0.0,0.0,0.0
|
||||
2025-12-15 00:00:00-05:00,120.7699966430664,120.7699966430664,120.7699966430664,120.7699966430664,106.4133529663086,0,0.0,0.0,0.0
|
||||
2025-12-16 00:00:00-05:00,120.0999984741211,120.0999984741211,120.0999984741211,120.0999984741211,105.822998046875,0,0.0,0.0,0.0
|
||||
2025-12-17 00:00:00-05:00,110.44000244140625,110.44000244140625,110.44000244140625,110.44000244140625,110.44000244140625,0,7.857,0.0,6.42
|
||||
2025-12-18 00:00:00-05:00,111.77999877929688,111.77999877929688,111.77999877929688,111.77999877929688,111.77999877929688,0,0.0,0.0,0.0
|
||||
2025-12-19 00:00:00-05:00,112.76000213623047,112.76000213623047,112.76000213623047,112.76000213623047,112.76000213623047,0,0.0,0.0,0.0
|
||||
2025-12-22 00:00:00-05:00,113.37999725341797,113.37999725341797,113.37999725341797,113.37999725341797,113.37999725341797,0,0.0,0.0,0.0
|
||||
2025-12-23 00:00:00-05:00,114.01000213623047,114.01000213623047,114.01000213623047,114.01000213623047,114.01000213623047,0,0.0,0.0,0.0
|
||||
2025-12-24 00:00:00-05:00,114.12999725341797,114.12999725341797,114.12999725341797,114.12999725341797,114.12999725341797,0,0.0,0.0,0.0
|
||||
2025-12-26 00:00:00-05:00,114.70999908447266,114.70999908447266,114.70999908447266,114.70999908447266,114.70999908447266,0,0.0,0.0,0.0
|
||||
2025-12-29 00:00:00-05:00,114.44000244140625,114.44000244140625,114.44000244140625,114.44000244140625,114.44000244140625,0,0.0,0.0,0.0
|
||||
2025-12-30 00:00:00-05:00,114.37999725341797,114.37999725341797,114.37999725341797,114.37999725341797,114.37999725341797,0,0.0,0.0,0.0
|
||||
2025-12-31 00:00:00-05:00,113.98999786376953,113.98999786376953,113.98999786376953,113.98999786376953,113.98999786376953,0,0.0,0.0,0.0
|
||||
2026-01-02 00:00:00-05:00,115.68000030517578,115.68000030517578,115.68000030517578,115.68000030517578,115.68000030517578,0,0.0,0.0,0.0
|
||||
2026-01-05 00:00:00-05:00,118.0999984741211,118.0999984741211,118.0999984741211,118.0999984741211,118.0999984741211,0,0.0,0.0,0.0
|
||||
2026-01-06 00:00:00-05:00,118.98999786376953,118.98999786376953,118.98999786376953,118.98999786376953,118.98999786376953,0,0.0,0.0,0.0
|
||||
2026-01-07 00:00:00-05:00,118.0199966430664,118.0199966430664,118.0199966430664,118.0199966430664,118.0199966430664,0,0.0,0.0,0.0
|
||||
2026-01-08 00:00:00-05:00,117.5,117.5,117.5,117.5,117.5,0,0.0,0.0,0.0
|
||||
2026-01-09 00:00:00-05:00,118.62000274658203,118.62000274658203,118.62000274658203,118.62000274658203,118.62000274658203,0,0.0,0.0,0.0
|
||||
|
55
tests/test_calendars.py
Normal file
55
tests/test_calendars.py
Normal file
@@ -0,0 +1,55 @@
|
||||
from datetime import datetime, timedelta, timezone
|
||||
import unittest
|
||||
|
||||
import pandas as pd
|
||||
|
||||
from tests.context import yfinance as yf, session_gbl
|
||||
|
||||
|
||||
class TestCalendars(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.calendars = yf.Calendars(session=session_gbl)
|
||||
|
||||
def test_get_earnings_calendar(self):
|
||||
result = self.calendars.get_earnings_calendar(limit=1)
|
||||
tickers = self.calendars.earnings_calendar.index.tolist()
|
||||
|
||||
self.assertIsInstance(result, pd.DataFrame)
|
||||
self.assertEqual(len(result), 1)
|
||||
self.assertIsInstance(tickers, list)
|
||||
self.assertEqual(len(tickers), len(result))
|
||||
self.assertEqual(tickers, result.index.tolist())
|
||||
|
||||
first_ticker = result.index.tolist()[0]
|
||||
result_first_ticker = self.calendars.earnings_calendar.loc[first_ticker].name
|
||||
self.assertEqual(first_ticker, result_first_ticker)
|
||||
|
||||
def test_get_earnings_calendar_init_params(self):
|
||||
result = self.calendars.get_earnings_calendar(limit=5)
|
||||
self.assertGreaterEqual(result['Event Start Date'].iloc[0], pd.to_datetime(datetime.now(tz=timezone.utc)))
|
||||
|
||||
start = datetime.now(tz=timezone.utc) - timedelta(days=7)
|
||||
result = yf.Calendars(start=start).get_earnings_calendar(limit=5)
|
||||
self.assertGreaterEqual(result['Event Start Date'].iloc[0], pd.to_datetime(start))
|
||||
|
||||
def test_get_ipo_info_calendar(self):
|
||||
result = self.calendars.get_ipo_info_calendar(limit=5)
|
||||
|
||||
self.assertIsInstance(result, pd.DataFrame)
|
||||
self.assertEqual(len(result), 5)
|
||||
|
||||
def test_get_economic_events_calendar(self):
|
||||
result = self.calendars.get_economic_events_calendar(limit=5)
|
||||
|
||||
self.assertIsInstance(result, pd.DataFrame)
|
||||
self.assertEqual(len(result), 5)
|
||||
|
||||
def test_get_splits_calendar(self):
|
||||
result = self.calendars.get_splits_calendar(limit=5)
|
||||
|
||||
self.assertIsInstance(result, pd.DataFrame)
|
||||
self.assertEqual(len(result), 5)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
@@ -61,7 +61,7 @@ class TestPriceRepairAssumptions(unittest.TestCase):
|
||||
vol_diff_pct0 = (dfr['Volume'].iloc[0] - df_truth['Volume'].iloc[0])/df_truth['Volume'].iloc[0]
|
||||
vol_diff_pct1 = (dfr['Volume'].iloc[-1] - df_truth['Volume'].iloc[-1])/df_truth['Volume'].iloc[-1]
|
||||
vol_diff_pct = _np.array([vol_diff_pct0, vol_diff_pct1])
|
||||
vol_match = vol_diff_pct > -0.23
|
||||
vol_match = vol_diff_pct > -0.32
|
||||
vol_match_nmatch = _np.sum(vol_match)
|
||||
vol_match_ndiff = len(vol_match) - vol_match_nmatch
|
||||
if vol_match.all():
|
||||
@@ -78,6 +78,8 @@ class TestPriceRepairAssumptions(unittest.TestCase):
|
||||
|
||||
if debug:
|
||||
print("- investigate:")
|
||||
print(f" - interval = {interval}")
|
||||
print(f" - period = {period}")
|
||||
print("- df_truth:")
|
||||
print(df_truth)#[['Open', 'Close', 'Volume']])
|
||||
df_1d = dat.history(interval='1d', period=period)
|
||||
@@ -301,10 +303,9 @@ class TestPriceRepair(unittest.TestCase):
|
||||
# Sometimes Yahoo suddenly shifts from cents->$ from some recent date.
|
||||
|
||||
tkrs = ['AET.L', 'SSW.JO']
|
||||
intervals = ['1d', '1wk']
|
||||
# tkrs = ['AET.L']
|
||||
# intervals = ['1wk']
|
||||
# import yfinance as yf ; yf.enable_debug_mode()
|
||||
# intervals = ['1d', '1wk']
|
||||
# Give up repairing 1wk intervals directly. Instead will resample from 1d
|
||||
intervals = ['1d']
|
||||
|
||||
for tkr in tkrs:
|
||||
for interval in intervals:
|
||||
@@ -361,27 +362,23 @@ class TestPriceRepair(unittest.TestCase):
|
||||
hist = dat._lazy_load_price_history()
|
||||
tz_exchange = dat.fast_info["timezone"]
|
||||
|
||||
df_bad = _pd.DataFrame(data={"Open": [0, 114.37, 114.20],
|
||||
"High": [0, 114.40, 114.40],
|
||||
"Low": [0, 114.36, 114.20],
|
||||
"Close": [114.39, 114.38, 114.45],
|
||||
"Adj Close": [114.39, 114.38, 114.45],
|
||||
"Volume": [9, 15666, 1094]},
|
||||
index=_pd.to_datetime([_dt.datetime(2025, 3, 17),
|
||||
_dt.datetime(2025, 3, 14),
|
||||
_dt.datetime(2025, 3, 13)]))
|
||||
df_bad = df_bad.sort_index()
|
||||
df_bad.index.name = "Date"
|
||||
df_bad.index = df_bad.index.tz_localize(tz_exchange)
|
||||
correct_df = dat.history(period='1mo', auto_adjust=False)
|
||||
|
||||
dt_bad = correct_df.index[len(correct_df)//2]
|
||||
df_bad = correct_df.copy()
|
||||
for c in df_bad.columns:
|
||||
df_bad.loc[dt_bad, c] = _np.nan
|
||||
|
||||
repaired_df = hist._fix_zeroes(df_bad, "1d", tz_exchange, prepost=False)
|
||||
|
||||
correct_df = df_bad.copy()
|
||||
correct_df.loc["2025-03-17", "Open"] = 114.62
|
||||
correct_df.loc["2025-03-17", "High"] = 114.62
|
||||
correct_df.loc["2025-03-17", "Low"] = 114.41
|
||||
for c in ["Open", "Low", "High", "Close"]:
|
||||
self.assertTrue(_np.isclose(repaired_df[c], correct_df[c], rtol=1e-7).all())
|
||||
try:
|
||||
self.assertTrue(_np.isclose(repaired_df[c], correct_df[c], rtol=1e-7).all())
|
||||
except Exception:
|
||||
print(f"# column = {c}")
|
||||
print("# correct:") ; print(correct_df[c])
|
||||
print("# repaired:") ; print(repaired_df[c])
|
||||
raise
|
||||
|
||||
self.assertTrue("Repaired?" in repaired_df.columns)
|
||||
self.assertFalse(repaired_df["Repaired?"].isna().any())
|
||||
@@ -421,7 +418,13 @@ class TestPriceRepair(unittest.TestCase):
|
||||
|
||||
df_slice_bad_repaired = hist._fix_zeroes(df_slice_bad, "1d", tz_exchange, prepost=False)
|
||||
for c in ["Close", "Adj Close"]:
|
||||
self.assertTrue(_np.isclose(df_slice_bad_repaired[c], df_slice[c], rtol=rtol).all())
|
||||
try:
|
||||
self.assertTrue(_np.isclose(df_slice_bad_repaired[c], df_slice[c], rtol=rtol).all())
|
||||
except Exception:
|
||||
print(f"# column = {c}")
|
||||
print("# correct:") ; print(df_slice[c])
|
||||
print("# repaired:") ; print(df_slice_bad_repaired[c])
|
||||
raise
|
||||
self.assertTrue("Repaired?" in df_slice_bad_repaired.columns)
|
||||
self.assertFalse(df_slice_bad_repaired["Repaired?"].isna().any())
|
||||
|
||||
@@ -464,7 +467,7 @@ class TestPriceRepair(unittest.TestCase):
|
||||
# Stocks that split in 2022 but no problems in Yahoo data,
|
||||
# so repair should change nothing
|
||||
good_tkrs = ['AMZN', 'DXCM', 'FTNT', 'GOOG', 'GME', 'PANW', 'SHOP', 'TSLA']
|
||||
good_tkrs += ['AEI', 'GHI', 'IRON', 'LXU', 'RSLS', 'TISI']
|
||||
good_tkrs += ['AEI', 'GHI', 'IRON', 'LXU', 'TISI']
|
||||
good_tkrs += ['BOL.ST', 'TUI1.DE']
|
||||
intervals = ['1d', '1wk', '1mo', '3mo']
|
||||
for tkr in good_tkrs:
|
||||
@@ -526,33 +529,36 @@ class TestPriceRepair(unittest.TestCase):
|
||||
# print(repaired_df[c] - correct_df[c])
|
||||
raise
|
||||
|
||||
# Had very high price volatility in Jan-2021 around split date that could
|
||||
# be mistaken for missing stock split adjustment. And old logic did think
|
||||
# column 'High' required fixing - wrong!
|
||||
sketchy_tkrs = ['FIZZ']
|
||||
intervals = ['1wk']
|
||||
for tkr in sketchy_tkrs:
|
||||
for interval in intervals:
|
||||
dat = yf.Ticker(tkr, session=self.session)
|
||||
tz_exchange = dat.fast_info["timezone"]
|
||||
hist = dat._lazy_load_price_history()
|
||||
false_positives = {}
|
||||
# FIZZ had very high price volatility in Jan-2021 around split date:
|
||||
false_positives['FIZZ'] = {'interval': '1d', 'start': '2020-11-30', 'end': '2021-04-01'}
|
||||
# GME has crazy price action in Jan 2021, mistaken for missing 2007 split
|
||||
false_positives['GME'] = {'interval': '1d', 'start': '2007-01-01', 'end': '2023-01-01'}
|
||||
# NVDA has a ~33% price drop on 2004-08-06, confused with earlier 3:2 split
|
||||
false_positives['NVDA'] = {'interval': '1d', 'start': '2001-07-01', 'end': '2007-09-15'}
|
||||
# yf.config.debug.logging = True
|
||||
for tkr, args in false_positives.items():
|
||||
interval = args['interval']
|
||||
dat = yf.Ticker(tkr, session=self.session)
|
||||
tz_exchange = dat.fast_info["timezone"]
|
||||
hist = dat._lazy_load_price_history()
|
||||
|
||||
df_good = hist.history(start='2020-11-30', end='2021-04-01', interval=interval, auto_adjust=False)
|
||||
df_good = hist.history(auto_adjust=False, **args)
|
||||
|
||||
repaired_df = hist._fix_bad_stock_splits(df_good, interval, tz_exchange)
|
||||
repaired_df = hist._fix_bad_stock_splits(df_good, interval, tz_exchange)
|
||||
|
||||
# Expect no change from repair
|
||||
df_good = df_good.sort_index()
|
||||
repaired_df = repaired_df.sort_index()
|
||||
for c in ["Open", "Low", "High", "Close", "Adj Close", "Volume"]:
|
||||
try:
|
||||
self.assertTrue((repaired_df[c].to_numpy() == df_good[c].to_numpy()).all())
|
||||
except AssertionError:
|
||||
print(f"tkr={tkr} interval={interval} COLUMN={c}")
|
||||
df_dbg = df_good[[c]].join(repaired_df[[c]], lsuffix='.good', rsuffix='.repaired')
|
||||
f_diff = repaired_df[c].to_numpy() != df_good[c].to_numpy()
|
||||
print(df_dbg[f_diff | _np.roll(f_diff, 1) | _np.roll(f_diff, -1)])
|
||||
raise
|
||||
# Expect no change from repair
|
||||
df_good = df_good.sort_index()
|
||||
repaired_df = repaired_df.sort_index()
|
||||
for c in ["Open", "Low", "High", "Close", "Adj Close", "Volume"]:
|
||||
try:
|
||||
self.assertTrue((repaired_df[c].to_numpy() == df_good[c].to_numpy()).all())
|
||||
except AssertionError:
|
||||
print(f"tkr={tkr} interval={interval} COLUMN={c}")
|
||||
df_dbg = df_good[[c]].join(repaired_df[[c]], lsuffix='.good', rsuffix='.repaired')
|
||||
f_diff = repaired_df[c].to_numpy() != df_good[c].to_numpy()
|
||||
print(df_dbg[f_diff | _np.roll(f_diff, 1) | _np.roll(f_diff, -1)])
|
||||
raise
|
||||
|
||||
def test_repair_bad_div_adjusts(self):
|
||||
interval = '1d'
|
||||
@@ -589,7 +595,6 @@ class TestPriceRepair(unittest.TestCase):
|
||||
|
||||
# Div 0.01x
|
||||
bad_tkrs += ['NVT.L']
|
||||
bad_tkrs += ['TENT.L']
|
||||
|
||||
# Missing div adjusts:
|
||||
bad_tkrs += ['1398.HK']
|
||||
@@ -598,7 +603,6 @@ class TestPriceRepair(unittest.TestCase):
|
||||
|
||||
# Phantom divs
|
||||
bad_tkrs += ['KAP.IL'] # 1x 1d phantom div, and false positives 0.01x in 1wk
|
||||
bad_tkrs += ['SAND']
|
||||
bad_tkrs += ['TEM.L']
|
||||
bad_tkrs += ['TEP.PA']
|
||||
|
||||
@@ -692,6 +696,44 @@ class TestPriceRepair(unittest.TestCase):
|
||||
print(repaired_df[c][f_diff] - correct_df[c][f_diff])
|
||||
raise
|
||||
|
||||
def test_repair_capital_gains_double_count(self):
|
||||
bad_tkrs = ['DODFX', 'VWILX', 'JENYX']
|
||||
for tkr in bad_tkrs:
|
||||
dat = yf.Ticker(tkr, session=self.session)
|
||||
hist = dat._lazy_load_price_history()
|
||||
|
||||
interval = '1d'
|
||||
fp = os.path.join(self.dp, "data", tkr.replace('.','-')+'-'+interval+"-cg-double-count.csv")
|
||||
|
||||
df_bad = _pd.read_csv(fp, index_col="Date")
|
||||
df_bad.index = _pd.to_datetime(df_bad.index, utc=True)
|
||||
|
||||
repaired_df = hist._repair_capital_gains(df_bad)
|
||||
|
||||
fp = os.path.join(self.dp, "data", tkr.replace('.','-')+'-'+interval+"-cg-double-count-fixed.csv")
|
||||
correct_df = _pd.read_csv(fp, index_col="Date")
|
||||
correct_df.index = _pd.to_datetime(correct_df.index, utc=True)
|
||||
|
||||
repaired_df = repaired_df.sort_index()
|
||||
correct_df = correct_df.sort_index()
|
||||
for c in ["Open", "Low", "High", "Close", "Adj Close", "Volume"]:
|
||||
try:
|
||||
self.assertTrue(_np.isclose(repaired_df[c], correct_df[c], rtol=5e-6).all())
|
||||
except AssertionError:
|
||||
f = (correct_df['Capital Gains']!=0).to_numpy()
|
||||
f2 = f|_np.roll(f,1)|_np.roll(f,2)|_np.roll(f,-1)|_np.roll(f,-2)
|
||||
print(f"tkr={tkr} COLUMN={c}")
|
||||
print("- repaired_df")
|
||||
print(repaired_df[f2].drop(['Open', 'High', 'Low', 'Volume', 'Capital Gains'], axis=1))
|
||||
print("- repaired_df[c]")
|
||||
print(repaired_df[f2][c])
|
||||
print("- correct_df[c]:")
|
||||
print(correct_df[f2][c])
|
||||
print("- diff:")
|
||||
print(repaired_df[f2][c] - correct_df[f2][c])
|
||||
raise
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
@@ -2,6 +2,7 @@ from tests.context import yfinance as yf
|
||||
from tests.context import session_gbl
|
||||
|
||||
import unittest
|
||||
import socket
|
||||
|
||||
import datetime as _dt
|
||||
import pytz as _tz
|
||||
@@ -224,7 +225,7 @@ class TestPriceHistory(unittest.TestCase):
|
||||
start_d = _dt.date(2022, 1, 1)
|
||||
end_d = _dt.date(2023, 1, 1)
|
||||
|
||||
tkr_div_dates = {'BHP.AX': [_dt.date(2022, 9, 1), _dt.date(2022, 2, 24)], # Yahoo claims 23-Feb but wrong because DST
|
||||
tkr_div_dates = {'BHP.AX': [_dt.date(2022, 9, 1), _dt.date(2022, 2, 24)],
|
||||
'IMP.JO': [_dt.date(2022, 9, 21), _dt.date(2022, 3, 16)],
|
||||
'BP.L': [_dt.date(2022, 11, 10), _dt.date(2022, 8, 11), _dt.date(2022, 5, 12),
|
||||
_dt.date(2022, 2, 17)],
|
||||
@@ -456,6 +457,21 @@ class TestPriceHistory(unittest.TestCase):
|
||||
|
||||
dat.history(start=start, end=end, interval=interval)
|
||||
|
||||
def test_transient_error_detection(self):
|
||||
"""Test that _is_transient_error correctly identifies transient vs permanent errors"""
|
||||
from yfinance.data import _is_transient_error
|
||||
from yfinance.exceptions import YFPricesMissingError
|
||||
|
||||
# Transient errors (should retry)
|
||||
self.assertTrue(_is_transient_error(socket.error("Network error")))
|
||||
self.assertTrue(_is_transient_error(TimeoutError("Timeout")))
|
||||
self.assertTrue(_is_transient_error(OSError("OS error")))
|
||||
|
||||
# Permanent errors (should NOT retry)
|
||||
self.assertFalse(_is_transient_error(ValueError("Invalid")))
|
||||
self.assertFalse(_is_transient_error(YFPricesMissingError('INVALID', '')))
|
||||
self.assertFalse(_is_transient_error(KeyError("key")))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
@@ -15,7 +15,7 @@ import pandas as pd
|
||||
from tests.context import yfinance as yf
|
||||
from tests.context import session_gbl
|
||||
from yfinance.exceptions import YFPricesMissingError, YFInvalidPeriodError, YFNotImplementedError, YFTickerMissingError, YFTzMissingError, YFDataException
|
||||
|
||||
from yfinance.config import YfConfig
|
||||
|
||||
import unittest
|
||||
# import requests_cache
|
||||
@@ -132,10 +132,11 @@ class TestTicker(unittest.TestCase):
|
||||
def test_invalid_period(self):
|
||||
tkr = 'VALE'
|
||||
dat = yf.Ticker(tkr, session=self.session)
|
||||
YfConfig.debug.hide_exceptions = False
|
||||
with self.assertRaises(YFInvalidPeriodError):
|
||||
dat.history(period="2wks", interval="1d", raise_errors=True)
|
||||
dat.history(period="2wks", interval="1d")
|
||||
with self.assertRaises(YFInvalidPeriodError):
|
||||
dat.history(period="2mos", interval="1d", raise_errors=True)
|
||||
dat.history(period="2mos", interval="1d")
|
||||
|
||||
def test_valid_custom_periods(self):
|
||||
valid_periods = [
|
||||
@@ -151,9 +152,11 @@ class TestTicker(unittest.TestCase):
|
||||
tkr = "AAPL"
|
||||
dat = yf.Ticker(tkr, session=self.session)
|
||||
|
||||
YfConfig.debug.hide_exceptions = False
|
||||
|
||||
for period, interval in valid_periods:
|
||||
with self.subTest(period=period, interval=interval):
|
||||
df = dat.history(period=period, interval=interval, raise_errors=True)
|
||||
df = dat.history(period=period, interval=interval)
|
||||
self.assertIsInstance(df, pd.DataFrame)
|
||||
self.assertFalse(df.empty, f"No data returned for period={period}, interval={interval}")
|
||||
self.assertIn("Close", df.columns, f"'Close' column missing for period={period}, interval={interval}")
|
||||
@@ -185,21 +188,25 @@ class TestTicker(unittest.TestCase):
|
||||
self.assertLessEqual(df.index[-1].to_pydatetime().replace(tzinfo=None), now,
|
||||
f"End date {df.index[-1]} out of range for period={period}")
|
||||
|
||||
def test_prices_missing(self):
|
||||
# this test will need to be updated every time someone wants to run a test
|
||||
# hard to find a ticker that matches this error other than options
|
||||
# META call option, 2024 April 26th @ strike of 180000
|
||||
tkr = 'META240426C00180000'
|
||||
dat = yf.Ticker(tkr, session=self.session)
|
||||
with self.assertRaises(YFPricesMissingError):
|
||||
dat.history(period="5d", interval="1m", raise_errors=True)
|
||||
# # 2025-12-11: test failing and no time to find new tkr
|
||||
# def test_prices_missing(self):
|
||||
# # this test will need to be updated every time someone wants to run a test
|
||||
# # hard to find a ticker that matches this error other than options
|
||||
# # META call option, 2024 April 26th @ strike of 180000
|
||||
|
||||
# tkr = 'META240426C00180000'
|
||||
# dat = yf.Ticker(tkr, session=self.session)
|
||||
# YfConfig.debug.hide_exceptions = False
|
||||
# with self.assertRaises(YFPricesMissingError):
|
||||
# dat.history(period="5d", interval="1m")
|
||||
|
||||
def test_ticker_missing(self):
|
||||
tkr = 'ATVI'
|
||||
dat = yf.Ticker(tkr, session=self.session)
|
||||
# A missing ticker can trigger either a niche error or the generalized error
|
||||
with self.assertRaises((YFTickerMissingError, YFTzMissingError, YFPricesMissingError)):
|
||||
dat.history(period="3mo", interval="1d", raise_errors=True)
|
||||
YfConfig.debug.hide_exceptions = False
|
||||
dat.history(period="3mo", interval="1d")
|
||||
|
||||
def test_goodTicker(self):
|
||||
# that yfinance works when full api is called on same instance of ticker
|
||||
@@ -234,6 +241,23 @@ class TestTicker(unittest.TestCase):
|
||||
for attribute_name, attribute_type in ticker_attributes:
|
||||
assert_attribute_type(self, dat, attribute_name, attribute_type)
|
||||
|
||||
def test_ticker_with_symbol_mic(self):
|
||||
equities = [
|
||||
("OR", "XPAR"), # L'Oréal on Euronext Paris
|
||||
("AAPL", "XNYS"), # Apple on NYSE
|
||||
("GOOGL", "XNAS"), # Alphabet on NASDAQ
|
||||
("BMW", "XETR"), # BMW on XETRA
|
||||
]
|
||||
for eq in equities:
|
||||
# No exception = pass
|
||||
yf.Ticker(eq)
|
||||
yf.Ticker((eq[0], eq[1].lower()))
|
||||
|
||||
def test_ticker_with_symbol_mic_invalid(self):
|
||||
with self.assertRaises(ValueError) as cm:
|
||||
yf.Ticker(('ABC', 'XXXX'))
|
||||
self.assertIn("Unknown MIC code: 'XXXX'", str(cm.exception))
|
||||
|
||||
|
||||
class TestTickerHistory(unittest.TestCase):
|
||||
session = None
|
||||
@@ -488,7 +512,7 @@ class TestTickerMiscFinancials(unittest.TestCase):
|
||||
def test_isin(self):
|
||||
data = self.ticker.isin
|
||||
self.assertIsInstance(data, str, "data has wrong type")
|
||||
self.assertEqual("ARDEUT116159", data, "data is empty")
|
||||
self.assertEqual("CA02080M1005", data, "data is empty")
|
||||
|
||||
data_cached = self.ticker.isin
|
||||
self.assertIs(data, data_cached, "data not cached")
|
||||
@@ -833,14 +857,14 @@ class TestTickerMiscFinancials(unittest.TestCase):
|
||||
data_cached = self.ticker.calendar
|
||||
self.assertIs(data, data_cached, "data not cached")
|
||||
|
||||
# # sustainability stopped working
|
||||
# def test_sustainability(self):
|
||||
# data = self.ticker.sustainability
|
||||
# self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
|
||||
# self.assertFalse(data.empty, "data is empty")
|
||||
|
||||
def test_sustainability(self):
|
||||
data = self.ticker.sustainability
|
||||
self.assertIsInstance(data, pd.DataFrame, "data has wrong type")
|
||||
self.assertFalse(data.empty, "data is empty")
|
||||
|
||||
data_cached = self.ticker.sustainability
|
||||
self.assertIs(data, data_cached, "data not cached")
|
||||
# data_cached = self.ticker.sustainability
|
||||
# self.assertIs(data, data_cached, "data not cached")
|
||||
|
||||
# def test_shares(self):
|
||||
# data = self.ticker.shares
|
||||
@@ -983,7 +1007,7 @@ class TestTickerInfo(unittest.TestCase):
|
||||
self.symbols.append("QCSTIX") # good for testing, doesn't trade
|
||||
self.symbols += ["BTC-USD", "IWO", "VFINX", "^GSPC"]
|
||||
self.symbols += ["SOKE.IS", "ADS.DE"] # detected bugs
|
||||
self.symbols += ["EXTO", "NEPT" ] # Issues 2343 and 2363
|
||||
self.symbols += ["EXTO" ] # Issues 2343
|
||||
self.tickers = [yf.Ticker(s, session=self.session) for s in self.symbols]
|
||||
|
||||
def tearDown(self):
|
||||
@@ -1035,15 +1059,6 @@ class TestTickerInfo(unittest.TestCase):
|
||||
self.assertCountEqual(['quoteType', 'symbol', 'underlyingSymbol', 'uuid', 'maxAge', 'trailingPegRatio'], data.keys())
|
||||
self.assertIn("trailingPegRatio", data.keys(), "Did not find expected key 'trailingPegRatio' in info dict")
|
||||
|
||||
# Test issue 2363 (Empty QuoteResponse)
|
||||
data = self.tickers[11].info
|
||||
expected_keys = ['maxAge', 'priceHint', 'previousClose', 'open', 'dayLow', 'dayHigh', 'regularMarketPreviousClose',
|
||||
'regularMarketOpen', 'regularMarketDayLow', 'regularMarketDayHigh', 'volume', 'regularMarketVolume',
|
||||
'bid', 'ask', 'bidSize', 'askSize', 'fiftyTwoWeekLow', 'fiftyTwoWeekHigh', 'currency', 'tradeable',
|
||||
'exchange', 'quoteType', 'symbol', 'underlyingSymbol', 'shortName', 'timeZoneFullName', 'timeZoneShortName',
|
||||
'uuid', 'gmtOffSetMilliseconds', 'trailingPegRatio']
|
||||
self.assertCountEqual(expected_keys, data.keys())
|
||||
|
||||
# def test_fast_info_matches_info(self):
|
||||
# fast_info_keys = set()
|
||||
# for ticker in self.tickers:
|
||||
|
||||
@@ -15,7 +15,7 @@ import pandas as pd
|
||||
|
||||
import unittest
|
||||
|
||||
from yfinance.utils import is_valid_period_format, _dts_in_same_interval
|
||||
from yfinance.utils import is_valid_period_format, _dts_in_same_interval, _parse_user_dt
|
||||
|
||||
|
||||
class TestPandas(unittest.TestCase):
|
||||
@@ -169,6 +169,19 @@ class TestDateIntervalCheck(unittest.TestCase):
|
||||
dt3 = pd.Timestamp("2024-10-15 10:31:00")
|
||||
self.assertFalse(_dts_in_same_interval(dt1, dt3, "1min"))
|
||||
|
||||
def test_parse_user_dt(self):
|
||||
exchange_tz = "US/Eastern"
|
||||
dtstr = "2024-01-04"
|
||||
epoch = 1704344400 # output of `pd.Timestamp("2024-01-04", tz="US/Eastern").timestamp()`
|
||||
expected = pd.Timestamp(dtstr, tz=exchange_tz)
|
||||
|
||||
self.assertEqual(_parse_user_dt(epoch, exchange_tz), expected)
|
||||
self.assertEqual(_parse_user_dt(dtstr, exchange_tz), expected)
|
||||
self.assertEqual(_parse_user_dt(datetime(year=2024, month=1, day=4).date(), exchange_tz), expected)
|
||||
self.assertEqual(_parse_user_dt(datetime(year=2024, month=1, day=4), exchange_tz), expected)
|
||||
with self.assertRaises(ValueError):
|
||||
self.assertEqual(_parse_user_dt(float(epoch), exchange_tz), expected)
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
|
||||
@@ -23,6 +23,7 @@ from . import version
|
||||
from .search import Search
|
||||
from .lookup import Lookup
|
||||
from .ticker import Ticker
|
||||
from .calendars import Calendars
|
||||
from .tickers import Tickers
|
||||
from .multi import download
|
||||
from .live import WebSocket, AsyncWebSocket
|
||||
@@ -31,7 +32,7 @@ from .cache import set_tz_cache_location
|
||||
from .domain.sector import Sector
|
||||
from .domain.industry import Industry
|
||||
from .domain.market import Market
|
||||
from .data import YfData
|
||||
from .config import YfConfig as config
|
||||
|
||||
from .screener.query import EquityQuery, FundQuery
|
||||
from .screener.screener import screen, PREDEFINED_SCREENER_QUERIES
|
||||
@@ -42,13 +43,17 @@ __author__ = "Ran Aroussi"
|
||||
import warnings
|
||||
warnings.filterwarnings('default', category=DeprecationWarning, module='^yfinance')
|
||||
|
||||
__all__ = ['download', 'Market', 'Search', 'Lookup', 'Ticker', 'Tickers', 'enable_debug_mode', 'set_tz_cache_location', 'Sector', 'Industry', 'WebSocket', 'AsyncWebSocket']
|
||||
__all__ = ['download', 'Market', 'Search', 'Lookup', 'Ticker', 'Tickers', 'enable_debug_mode', 'set_tz_cache_location', 'Sector', 'Industry', 'WebSocket', 'AsyncWebSocket', 'Calendars']
|
||||
# screener stuff:
|
||||
__all__ += ['EquityQuery', 'FundQuery', 'screen', 'PREDEFINED_SCREENER_QUERIES']
|
||||
|
||||
# Config stuff:
|
||||
_NOTSET=object()
|
||||
def set_config(proxy=_NOTSET):
|
||||
def set_config(proxy=_NOTSET, retries=_NOTSET):
|
||||
if proxy is not _NOTSET:
|
||||
YfData(proxy=proxy)
|
||||
__all__ += ["set_config"]
|
||||
warnings.warn("Set proxy via new config control: yf.config.network.proxy = proxy", DeprecationWarning)
|
||||
config.network.proxy = proxy
|
||||
if retries is not _NOTSET:
|
||||
warnings.warn("Set retries via new config control: yf.config.network.retries = retries", DeprecationWarning)
|
||||
config.network.retries = retries
|
||||
__all__ += ['config', 'set_config']
|
||||
|
||||
418
yfinance/base.py
418
yfinance/base.py
@@ -22,7 +22,6 @@
|
||||
from __future__ import print_function
|
||||
|
||||
import json as _json
|
||||
import warnings
|
||||
from typing import Optional, Union
|
||||
from urllib.parse import quote as urlencode
|
||||
|
||||
@@ -32,8 +31,10 @@ from curl_cffi import requests
|
||||
|
||||
|
||||
from . import utils, cache
|
||||
from .const import _MIC_TO_YAHOO_SUFFIX
|
||||
from .data import YfData
|
||||
from .exceptions import YFEarningsDateMissing, YFRateLimitError
|
||||
from .config import YfConfig
|
||||
from .exceptions import YFDataException, YFEarningsDateMissing, YFRateLimitError
|
||||
from .live import WebSocket
|
||||
from .scrapers.analysis import Analysis
|
||||
from .scrapers.fundamentals import Fundamentals
|
||||
@@ -42,13 +43,43 @@ from .scrapers.quote import Quote, FastInfo
|
||||
from .scrapers.history import PriceHistory
|
||||
from .scrapers.funds import FundsData
|
||||
|
||||
from .const import _BASE_URL_, _ROOT_URL_, _QUERY1_URL_, _SENTINEL_
|
||||
from .const import _BASE_URL_, _ROOT_URL_, _QUERY1_URL_
|
||||
|
||||
from io import StringIO
|
||||
from bs4 import BeautifulSoup
|
||||
|
||||
|
||||
_tz_info_fetch_ctr = 0
|
||||
|
||||
class TickerBase:
|
||||
def __init__(self, ticker, session=None, proxy=_SENTINEL_):
|
||||
def __init__(self, ticker, session=None):
|
||||
"""
|
||||
Initialize a Yahoo Finance Ticker object.
|
||||
|
||||
Args:
|
||||
ticker (str | tuple[str, str]):
|
||||
Yahoo Finance symbol (e.g. "AAPL")
|
||||
or a tuple of (symbol, MIC) e.g. ('OR','XPAR')
|
||||
(MIC = market identifier code)
|
||||
|
||||
session (requests.Session, optional):
|
||||
Custom requests session.
|
||||
"""
|
||||
if isinstance(ticker, tuple):
|
||||
if len(ticker) != 2:
|
||||
raise ValueError("Ticker tuple must be (symbol, mic_code)")
|
||||
base_symbol, mic_code = ticker
|
||||
# ticker = yahoo_ticker(base_symbol, mic_code)
|
||||
if mic_code.startswith('.'):
|
||||
mic_code = mic_code[1:]
|
||||
if mic_code.upper() not in _MIC_TO_YAHOO_SUFFIX:
|
||||
raise ValueError(f"Unknown MIC code: '{mic_code}'")
|
||||
sfx = _MIC_TO_YAHOO_SUFFIX[mic_code.upper()]
|
||||
if sfx != '':
|
||||
ticker = f'{base_symbol}.{sfx}'
|
||||
else:
|
||||
ticker = base_symbol
|
||||
|
||||
self.ticker = ticker.upper()
|
||||
self.session = session or requests.Session(impersonate="chrome")
|
||||
self._tz = None
|
||||
@@ -67,9 +98,6 @@ class TickerBase:
|
||||
raise ValueError("Empty ticker name")
|
||||
|
||||
self._data: YfData = YfData(session=session)
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
# accept isin as ticker
|
||||
if utils.is_isin(self.ticker):
|
||||
@@ -157,6 +185,8 @@ class TickerBase:
|
||||
# Must propagate this
|
||||
raise
|
||||
except Exception as e:
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
logger.error(f"Failed to get ticker '{self.ticker}' reason: {e}")
|
||||
return None
|
||||
else:
|
||||
@@ -168,6 +198,8 @@ class TickerBase:
|
||||
try:
|
||||
return data["chart"]["result"][0]["meta"]["exchangeTimezoneName"]
|
||||
except Exception as err:
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
logger.error(f"Could not get exchangeTimezoneName for ticker '{self.ticker}' reason: {err}")
|
||||
logger.debug("Got response: ")
|
||||
logger.debug("-------------")
|
||||
@@ -175,164 +207,100 @@ class TickerBase:
|
||||
logger.debug("-------------")
|
||||
return None
|
||||
|
||||
def get_recommendations(self, proxy=_SENTINEL_, as_dict=False):
|
||||
def get_recommendations(self, as_dict=False):
|
||||
"""
|
||||
Returns a DataFrame with the recommendations
|
||||
Columns: period strongBuy buy hold sell strongSell
|
||||
"""
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
data = self._quote.recommendations
|
||||
if as_dict:
|
||||
return data.to_dict()
|
||||
return data
|
||||
|
||||
def get_recommendations_summary(self, proxy=_SENTINEL_, as_dict=False):
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
def get_recommendations_summary(self, as_dict=False):
|
||||
return self.get_recommendations(as_dict=as_dict)
|
||||
|
||||
def get_upgrades_downgrades(self, proxy=_SENTINEL_, as_dict=False):
|
||||
def get_upgrades_downgrades(self, as_dict=False):
|
||||
"""
|
||||
Returns a DataFrame with the recommendations changes (upgrades/downgrades)
|
||||
Index: date of grade
|
||||
Columns: firm toGrade fromGrade action
|
||||
"""
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
data = self._quote.upgrades_downgrades
|
||||
if as_dict:
|
||||
return data.to_dict()
|
||||
return data
|
||||
|
||||
def get_calendar(self, proxy=_SENTINEL_) -> dict:
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
def get_calendar(self) -> dict:
|
||||
return self._quote.calendar
|
||||
|
||||
def get_sec_filings(self, proxy=_SENTINEL_) -> dict:
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
def get_sec_filings(self) -> dict:
|
||||
return self._quote.sec_filings
|
||||
|
||||
def get_major_holders(self, proxy=_SENTINEL_, as_dict=False):
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
def get_major_holders(self, as_dict=False):
|
||||
data = self._holders.major
|
||||
if as_dict:
|
||||
return data.to_dict()
|
||||
return data
|
||||
|
||||
def get_institutional_holders(self, proxy=_SENTINEL_, as_dict=False):
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
def get_institutional_holders(self, as_dict=False):
|
||||
data = self._holders.institutional
|
||||
if data is not None:
|
||||
if as_dict:
|
||||
return data.to_dict()
|
||||
return data
|
||||
|
||||
def get_mutualfund_holders(self, proxy=_SENTINEL_, as_dict=False):
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
def get_mutualfund_holders(self, as_dict=False):
|
||||
data = self._holders.mutualfund
|
||||
if data is not None:
|
||||
if as_dict:
|
||||
return data.to_dict()
|
||||
return data
|
||||
|
||||
def get_insider_purchases(self, proxy=_SENTINEL_, as_dict=False):
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
def get_insider_purchases(self, as_dict=False):
|
||||
data = self._holders.insider_purchases
|
||||
if data is not None:
|
||||
if as_dict:
|
||||
return data.to_dict()
|
||||
return data
|
||||
|
||||
def get_insider_transactions(self, proxy=_SENTINEL_, as_dict=False):
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
def get_insider_transactions(self, as_dict=False):
|
||||
data = self._holders.insider_transactions
|
||||
if data is not None:
|
||||
if as_dict:
|
||||
return data.to_dict()
|
||||
return data
|
||||
|
||||
def get_insider_roster_holders(self, proxy=_SENTINEL_, as_dict=False):
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
def get_insider_roster_holders(self, as_dict=False):
|
||||
data = self._holders.insider_roster
|
||||
if data is not None:
|
||||
if as_dict:
|
||||
return data.to_dict()
|
||||
return data
|
||||
|
||||
def get_info(self, proxy=_SENTINEL_) -> dict:
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
def get_info(self) -> dict:
|
||||
data = self._quote.info
|
||||
return data
|
||||
|
||||
def get_fast_info(self, proxy=_SENTINEL_):
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
def get_fast_info(self):
|
||||
if self._fast_info is None:
|
||||
self._fast_info = FastInfo(self)
|
||||
return self._fast_info
|
||||
|
||||
def get_sustainability(self, proxy=_SENTINEL_, as_dict=False):
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
def get_sustainability(self, as_dict=False):
|
||||
data = self._quote.sustainability
|
||||
if as_dict:
|
||||
return data.to_dict()
|
||||
return data
|
||||
|
||||
def get_analyst_price_targets(self, proxy=_SENTINEL_) -> dict:
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
def get_analyst_price_targets(self) -> dict:
|
||||
"""
|
||||
Keys: current low high mean median
|
||||
"""
|
||||
data = self._analysis.analyst_price_targets
|
||||
return data
|
||||
|
||||
def get_earnings_estimate(self, proxy=_SENTINEL_, as_dict=False):
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
def get_earnings_estimate(self, as_dict=False):
|
||||
"""
|
||||
Index: 0q +1q 0y +1y
|
||||
Columns: numberOfAnalysts avg low high yearAgoEps growth
|
||||
@@ -340,11 +308,7 @@ class TickerBase:
|
||||
data = self._analysis.earnings_estimate
|
||||
return data.to_dict() if as_dict else data
|
||||
|
||||
def get_revenue_estimate(self, proxy=_SENTINEL_, as_dict=False):
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
def get_revenue_estimate(self, as_dict=False):
|
||||
"""
|
||||
Index: 0q +1q 0y +1y
|
||||
Columns: numberOfAnalysts avg low high yearAgoRevenue growth
|
||||
@@ -352,11 +316,7 @@ class TickerBase:
|
||||
data = self._analysis.revenue_estimate
|
||||
return data.to_dict() if as_dict else data
|
||||
|
||||
def get_earnings_history(self, proxy=_SENTINEL_, as_dict=False):
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
def get_earnings_history(self, as_dict=False):
|
||||
"""
|
||||
Index: pd.DatetimeIndex
|
||||
Columns: epsEstimate epsActual epsDifference surprisePercent
|
||||
@@ -364,43 +324,34 @@ class TickerBase:
|
||||
data = self._analysis.earnings_history
|
||||
return data.to_dict() if as_dict else data
|
||||
|
||||
def get_eps_trend(self, proxy=_SENTINEL_, as_dict=False):
|
||||
def get_eps_trend(self, as_dict=False):
|
||||
"""
|
||||
Index: 0q +1q 0y +1y
|
||||
Columns: current 7daysAgo 30daysAgo 60daysAgo 90daysAgo
|
||||
"""
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
data = self._analysis.eps_trend
|
||||
return data.to_dict() if as_dict else data
|
||||
|
||||
def get_eps_revisions(self, proxy=_SENTINEL_, as_dict=False):
|
||||
def get_eps_revisions(self, as_dict=False):
|
||||
"""
|
||||
Index: 0q +1q 0y +1y
|
||||
Columns: upLast7days upLast30days downLast7days downLast30days
|
||||
"""
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
data = self._analysis.eps_revisions
|
||||
return data.to_dict() if as_dict else data
|
||||
|
||||
def get_growth_estimates(self, proxy=_SENTINEL_, as_dict=False):
|
||||
def get_growth_estimates(self, as_dict=False):
|
||||
"""
|
||||
Index: 0q +1q 0y +1y +5y -5y
|
||||
Columns: stock industry sector index
|
||||
"""
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
data = self._analysis.growth_estimates
|
||||
return data.to_dict() if as_dict else data
|
||||
|
||||
def get_earnings(self, proxy=_SENTINEL_, as_dict=False, freq="yearly"):
|
||||
def get_earnings(self, as_dict=False, freq="yearly"):
|
||||
"""
|
||||
:Parameters:
|
||||
as_dict: bool
|
||||
@@ -410,9 +361,6 @@ class TickerBase:
|
||||
"yearly" or "quarterly" or "trailing"
|
||||
Default is "yearly"
|
||||
"""
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
if self._fundamentals.earnings is None:
|
||||
return None
|
||||
@@ -424,7 +372,7 @@ class TickerBase:
|
||||
return dict_data
|
||||
return data
|
||||
|
||||
def get_income_stmt(self, proxy=_SENTINEL_, as_dict=False, pretty=False, freq="yearly"):
|
||||
def get_income_stmt(self, as_dict=False, pretty=False, freq="yearly"):
|
||||
"""
|
||||
:Parameters:
|
||||
as_dict: bool
|
||||
@@ -437,9 +385,6 @@ class TickerBase:
|
||||
"yearly" or "quarterly" or "trailing"
|
||||
Default is "yearly"
|
||||
"""
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
data = self._fundamentals.financials.get_income_time_series(freq=freq)
|
||||
|
||||
@@ -450,21 +395,13 @@ class TickerBase:
|
||||
return data.to_dict()
|
||||
return data
|
||||
|
||||
def get_incomestmt(self, proxy=_SENTINEL_, as_dict=False, pretty=False, freq="yearly"):
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
def get_incomestmt(self, as_dict=False, pretty=False, freq="yearly"):
|
||||
return self.get_income_stmt(as_dict, pretty, freq)
|
||||
|
||||
return self.get_income_stmt(proxy, as_dict, pretty, freq)
|
||||
def get_financials(self, as_dict=False, pretty=False, freq="yearly"):
|
||||
return self.get_income_stmt(as_dict, pretty, freq)
|
||||
|
||||
def get_financials(self, proxy=_SENTINEL_, as_dict=False, pretty=False, freq="yearly"):
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
return self.get_income_stmt(proxy, as_dict, pretty, freq)
|
||||
|
||||
def get_balance_sheet(self, proxy=_SENTINEL_, as_dict=False, pretty=False, freq="yearly"):
|
||||
def get_balance_sheet(self, as_dict=False, pretty=False, freq="yearly"):
|
||||
"""
|
||||
:Parameters:
|
||||
as_dict: bool
|
||||
@@ -477,9 +414,6 @@ class TickerBase:
|
||||
"yearly" or "quarterly"
|
||||
Default is "yearly"
|
||||
"""
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
|
||||
data = self._fundamentals.financials.get_balance_sheet_time_series(freq=freq)
|
||||
@@ -491,14 +425,10 @@ class TickerBase:
|
||||
return data.to_dict()
|
||||
return data
|
||||
|
||||
def get_balancesheet(self, proxy=_SENTINEL_, as_dict=False, pretty=False, freq="yearly"):
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
def get_balancesheet(self, as_dict=False, pretty=False, freq="yearly"):
|
||||
return self.get_balance_sheet(as_dict, pretty, freq)
|
||||
|
||||
return self.get_balance_sheet(proxy, as_dict, pretty, freq)
|
||||
|
||||
def get_cash_flow(self, proxy=_SENTINEL_, as_dict=False, pretty=False, freq="yearly") -> Union[pd.DataFrame, dict]:
|
||||
def get_cash_flow(self, as_dict=False, pretty=False, freq="yearly") -> Union[pd.DataFrame, dict]:
|
||||
"""
|
||||
:Parameters:
|
||||
as_dict: bool
|
||||
@@ -511,9 +441,6 @@ class TickerBase:
|
||||
"yearly" or "quarterly"
|
||||
Default is "yearly"
|
||||
"""
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
|
||||
data = self._fundamentals.financials.get_cash_flow_time_series(freq=freq)
|
||||
@@ -525,63 +452,39 @@ class TickerBase:
|
||||
return data.to_dict()
|
||||
return data
|
||||
|
||||
def get_cashflow(self, proxy=_SENTINEL_, as_dict=False, pretty=False, freq="yearly"):
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
return self.get_cash_flow(proxy, as_dict, pretty, freq)
|
||||
def get_cashflow(self, as_dict=False, pretty=False, freq="yearly"):
|
||||
return self.get_cash_flow(as_dict, pretty, freq)
|
||||
|
||||
def get_dividends(self, proxy=_SENTINEL_, period="max") -> pd.Series:
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
def get_dividends(self, period="max") -> pd.Series:
|
||||
return self._lazy_load_price_history().get_dividends(period=period)
|
||||
|
||||
def get_capital_gains(self, proxy=_SENTINEL_, period="max") -> pd.Series:
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
def get_capital_gains(self, period="max") -> pd.Series:
|
||||
return self._lazy_load_price_history().get_capital_gains(period=period)
|
||||
|
||||
def get_splits(self, proxy=_SENTINEL_, period="max") -> pd.Series:
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
def get_splits(self, period="max") -> pd.Series:
|
||||
return self._lazy_load_price_history().get_splits(period=period)
|
||||
|
||||
def get_actions(self, proxy=_SENTINEL_, period="max") -> pd.Series:
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
def get_actions(self, period="max") -> pd.Series:
|
||||
return self._lazy_load_price_history().get_actions(period=period)
|
||||
|
||||
def get_shares(self, proxy=_SENTINEL_, as_dict=False) -> Union[pd.DataFrame, dict]:
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
def get_shares(self, as_dict=False) -> Union[pd.DataFrame, dict]:
|
||||
data = self._fundamentals.shares
|
||||
if as_dict:
|
||||
return data.to_dict()
|
||||
return data
|
||||
|
||||
@utils.log_indent_decorator
|
||||
def get_shares_full(self, start=None, end=None, proxy=_SENTINEL_):
|
||||
def get_shares_full(self, start=None, end=None):
|
||||
logger = utils.get_yf_logger()
|
||||
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
# Process dates
|
||||
tz = self._get_ticker_tz(timeout=10)
|
||||
dt_now = pd.Timestamp.utcnow().tz_convert(tz)
|
||||
if start is not None:
|
||||
start_ts = utils._parse_user_dt(start, tz)
|
||||
start = pd.Timestamp.fromtimestamp(start_ts).tz_localize("UTC").tz_convert(tz)
|
||||
start = utils._parse_user_dt(start, tz)
|
||||
if end is not None:
|
||||
end_ts = utils._parse_user_dt(end, tz)
|
||||
end = pd.Timestamp.fromtimestamp(end_ts).tz_localize("UTC").tz_convert(tz)
|
||||
end = utils._parse_user_dt(end, tz)
|
||||
if end is None:
|
||||
end = dt_now
|
||||
if start is None:
|
||||
@@ -599,6 +502,8 @@ class TickerBase:
|
||||
json_data = self._data.cache_get(url=shares_url)
|
||||
json_data = json_data.json()
|
||||
except (_json.JSONDecodeError, requests.exceptions.RequestException):
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
logger.error(f"{self.ticker}: Yahoo web request for share count failed")
|
||||
return None
|
||||
try:
|
||||
@@ -606,6 +511,8 @@ class TickerBase:
|
||||
except KeyError:
|
||||
fail = False
|
||||
if fail:
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise requests.exceptions.HTTPError("Yahoo web request for share count returned 'Bad Request'")
|
||||
logger.error(f"{self.ticker}: Yahoo web request for share count failed")
|
||||
return None
|
||||
|
||||
@@ -615,6 +522,8 @@ class TickerBase:
|
||||
try:
|
||||
df = pd.Series(shares_data[0]["shares_out"], index=pd.to_datetime(shares_data[0]["timestamp"], unit="s"))
|
||||
except Exception as e:
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
logger.error(f"{self.ticker}: Failed to parse shares count data: {e}")
|
||||
return None
|
||||
|
||||
@@ -622,11 +531,7 @@ class TickerBase:
|
||||
df = df.sort_index()
|
||||
return df
|
||||
|
||||
def get_isin(self, proxy=_SENTINEL_) -> Optional[str]:
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
def get_isin(self) -> Optional[str]:
|
||||
# *** experimental ***
|
||||
if self._isin is not None:
|
||||
return self._isin
|
||||
@@ -662,16 +567,13 @@ class TickerBase:
|
||||
self._isin = data.split(search_str)[1].split('"')[0].split('|')[0]
|
||||
return self._isin
|
||||
|
||||
def get_news(self, count=10, tab="news", proxy=_SENTINEL_) -> list:
|
||||
def get_news(self, count=10, tab="news") -> list:
|
||||
"""Allowed options for tab: "news", "all", "press releases"""
|
||||
if self._news:
|
||||
return self._news
|
||||
|
||||
logger = utils.get_yf_logger()
|
||||
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
tab_queryrefs = {
|
||||
"all": "newsAll",
|
||||
@@ -693,12 +595,12 @@ class TickerBase:
|
||||
|
||||
data = self._data.post(url, body=payload)
|
||||
if data is None or "Will be right back" in data.text:
|
||||
raise RuntimeError("*** YAHOO! FINANCE IS CURRENTLY DOWN! ***\n"
|
||||
"Our engineers are working quickly to resolve "
|
||||
"the issue. Thank you for your patience.")
|
||||
raise YFDataException("*** YAHOO! FINANCE IS CURRENTLY DOWN! ***")
|
||||
try:
|
||||
data = data.json()
|
||||
except _json.JSONDecodeError:
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
logger.error(f"{self.ticker}: Failed to retrieve the news and received faulty response instead.")
|
||||
data = {}
|
||||
|
||||
@@ -707,10 +609,119 @@ class TickerBase:
|
||||
self._news = [article for article in news if not article.get('ad', [])]
|
||||
return self._news
|
||||
|
||||
def get_earnings_dates(self, limit = 12, offset = 0) -> Optional[pd.DataFrame]:
|
||||
if limit > 100:
|
||||
raise ValueError("Yahoo caps limit at 100")
|
||||
|
||||
if self._earnings_dates and limit in self._earnings_dates:
|
||||
return self._earnings_dates[limit]
|
||||
|
||||
df = self._get_earnings_dates_using_scrape(limit, offset)
|
||||
self._earnings_dates[limit] = df
|
||||
return df
|
||||
|
||||
@utils.log_indent_decorator
|
||||
def get_earnings_dates(self, limit=12, proxy=_SENTINEL_) -> Optional[pd.DataFrame]:
|
||||
def _get_earnings_dates_using_scrape(self, limit = 12, offset = 0) -> Optional[pd.DataFrame]:
|
||||
"""
|
||||
Uses YfData.cache_get() to scrape earnings data from YahooFinance.
|
||||
(https://finance.yahoo.com/calendar/earnings?symbol=INTC)
|
||||
|
||||
Args:
|
||||
limit (int): Number of rows to extract (max=100)
|
||||
offset (int): if 0, search from future EPS estimates.
|
||||
if 1, search from the most recent EPS.
|
||||
if x, search from x'th recent EPS.
|
||||
|
||||
Returns:
|
||||
pd.DataFrame in the following format.
|
||||
|
||||
EPS Estimate Reported EPS Surprise(%)
|
||||
Date
|
||||
2025-10-30 2.97 - -
|
||||
2025-07-22 1.73 1.54 -10.88
|
||||
2025-05-06 2.63 2.7 2.57
|
||||
2025-02-06 2.09 2.42 16.06
|
||||
2024-10-31 1.92 1.55 -19.36
|
||||
... ... ... ...
|
||||
2014-07-31 0.61 0.65 7.38
|
||||
2014-05-01 0.55 0.68 22.92
|
||||
2014-02-13 0.55 0.58 6.36
|
||||
2013-10-31 0.51 0.54 6.86
|
||||
2013-08-01 0.46 0.5 7.86
|
||||
"""
|
||||
#####################################################
|
||||
# Define Constants
|
||||
#####################################################
|
||||
if limit > 0 and limit <= 25:
|
||||
size = 25
|
||||
elif limit > 25 and limit <= 50:
|
||||
size = 50
|
||||
elif limit > 50 and limit <= 100:
|
||||
size = 100
|
||||
else:
|
||||
raise ValueError("Please use limit <= 100")
|
||||
|
||||
# Define the URL
|
||||
url = "https://finance.yahoo.com/calendar/earnings?symbol={}&offset={}&size={}".format(
|
||||
self.ticker, offset, size
|
||||
)
|
||||
#####################################################
|
||||
# Get data
|
||||
#####################################################
|
||||
response = self._data.cache_get(url)
|
||||
|
||||
#####################################################
|
||||
# Response -> pd.DataFrame
|
||||
#####################################################
|
||||
# Parse the HTML content using BeautifulSoup
|
||||
soup = BeautifulSoup(response.text, "html.parser")
|
||||
# This page should have only one <table>
|
||||
table = soup.find("table")
|
||||
# If the table is found
|
||||
if table:
|
||||
# Get the HTML string of the table
|
||||
table_html = str(table)
|
||||
|
||||
# Wrap the HTML string in a StringIO object
|
||||
html_stringio = StringIO(table_html)
|
||||
|
||||
# Pass the StringIO object to pd.read_html()
|
||||
df = pd.read_html(html_stringio, na_values=['-'])[0]
|
||||
|
||||
# Drop redundant columns
|
||||
df = df.drop(["Symbol", "Company"], axis=1)
|
||||
|
||||
# Backwards compatibility
|
||||
df.rename(columns={'Surprise (%)': 'Surprise(%)'}, inplace=True)
|
||||
|
||||
df = df.dropna(subset="Earnings Date")
|
||||
|
||||
# Parse earnings date
|
||||
# - Pandas doesn't like EDT, EST
|
||||
df['Earnings Date'] = df['Earnings Date'].str.replace('EDT', 'America/New_York')
|
||||
df['Earnings Date'] = df['Earnings Date'].str.replace('EST', 'America/New_York')
|
||||
# - separate timezone string (last word)
|
||||
dt_parts = df['Earnings Date'].str.rsplit(' ', n=1, expand=True)
|
||||
dts = dt_parts[0]
|
||||
tzs = dt_parts[1]
|
||||
df['Earnings Date'] = pd.to_datetime(dts, format='%B %d, %Y at %I %p')
|
||||
df['Earnings Date'] = pd.Series([dt.tz_localize(tz) for dt, tz in zip(df['Earnings Date'], tzs)])
|
||||
df = df.set_index("Earnings Date")
|
||||
|
||||
else:
|
||||
err_msg = "No earnings dates found, symbol may be delisted"
|
||||
logger = utils.get_yf_logger()
|
||||
logger.error(f'{self.ticker}: {err_msg}')
|
||||
return None
|
||||
return df
|
||||
|
||||
@utils.log_indent_decorator
|
||||
def _get_earnings_dates_using_screener(self, limit=12) -> Optional[pd.DataFrame]:
|
||||
"""
|
||||
Get earning dates (future and historic)
|
||||
|
||||
In Summer 2025, Yahoo stopped updating the data at this endpoint.
|
||||
So reverting to scraping HTML.
|
||||
|
||||
Args:
|
||||
limit (int): max amount of upcoming and recent earnings dates to return.
|
||||
@@ -721,20 +732,11 @@ class TickerBase:
|
||||
"""
|
||||
logger = utils.get_yf_logger()
|
||||
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
clamped_limit = min(limit, 100) # YF caps at 100, don't go higher
|
||||
|
||||
if self._earnings_dates and clamped_limit in self._earnings_dates:
|
||||
return self._earnings_dates[clamped_limit]
|
||||
|
||||
# Fetch data
|
||||
url = f"{_QUERY1_URL_}/v1/finance/visualization"
|
||||
params = {"lang": "en-US", "region": "US"}
|
||||
body = {
|
||||
"size": clamped_limit,
|
||||
"size": limit,
|
||||
"query": { "operator": "eq", "operands": ["ticker", self.ticker] },
|
||||
"sortField": "startdatetime",
|
||||
"sortType": "DESC",
|
||||
@@ -780,21 +782,13 @@ class TickerBase:
|
||||
df.set_index('Earnings Date', inplace=True)
|
||||
df.rename(columns={'Surprise (%)': 'Surprise(%)'}, inplace=True) # Compatibility
|
||||
|
||||
self._earnings_dates[clamped_limit] = df
|
||||
self._earnings_dates[limit] = df
|
||||
return df
|
||||
|
||||
def get_history_metadata(self, proxy=_SENTINEL_) -> dict:
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
return self._lazy_load_price_history().get_history_metadata(proxy)
|
||||
|
||||
def get_funds_data(self, proxy=_SENTINEL_) -> Optional[FundsData]:
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
def get_history_metadata(self) -> dict:
|
||||
return self._lazy_load_price_history().get_history_metadata()
|
||||
|
||||
def get_funds_data(self) -> Optional[FundsData]:
|
||||
if not self._funds_data:
|
||||
self._funds_data = FundsData(self._data, self.ticker)
|
||||
|
||||
|
||||
547
yfinance/calendars.py
Normal file
547
yfinance/calendars.py
Normal file
@@ -0,0 +1,547 @@
|
||||
from __future__ import annotations # Just in case
|
||||
import json
|
||||
from typing import Any, Optional, List, Union, Dict
|
||||
import warnings
|
||||
import numpy as np
|
||||
from requests import Session, Response, exceptions
|
||||
import pandas as pd
|
||||
from datetime import datetime, date, timedelta
|
||||
|
||||
from .const import _QUERY1_URL_
|
||||
from .utils import log_indent_decorator, get_yf_logger, _parse_user_dt
|
||||
from .screener import screen
|
||||
from .data import YfData
|
||||
from .exceptions import YFException
|
||||
|
||||
|
||||
class CalendarQuery:
|
||||
"""
|
||||
Simple CalendarQuery class for calendar queries, similar to yf.screener.query.QueryBase.
|
||||
|
||||
Simple operand accepted by YF is of the form:
|
||||
`{ "operator": operator, "operands": [field, ...values] }`
|
||||
|
||||
Nested operand accepted by YF:
|
||||
`{ "operator": operator, "operands": [ ...CalendarQuery ] }`
|
||||
|
||||
### Simple example:
|
||||
```python
|
||||
op = CalendarQuery('eq', ['ticker', 'AAPL'])
|
||||
print(op.to_dict())
|
||||
```
|
||||
"""
|
||||
|
||||
def __init__(self, operator: str, operand: Union[List[Any], List["CalendarQuery"]]):
|
||||
"""
|
||||
:param operator: Operator string, e.g., 'eq', 'gte', 'and', 'or'.
|
||||
:param operand: List of operands: can be values (str, int), or other Operands instances (nested).
|
||||
"""
|
||||
operator = operator.upper()
|
||||
self.operator = operator
|
||||
self.operands = operand
|
||||
|
||||
def append(self, operand: Any) -> None:
|
||||
"""
|
||||
Append an operand to the operands list.
|
||||
|
||||
:param operand: CalendarQuery to append (can be value or CalendarQuery instance).
|
||||
"""
|
||||
self.operands.append(operand)
|
||||
|
||||
@property
|
||||
def is_empty(self) -> bool:
|
||||
"""
|
||||
Check if the operands list is empty.
|
||||
|
||||
:return: True if operands list is empty, False otherwise.
|
||||
"""
|
||||
return len(self.operands) == 0
|
||||
|
||||
def to_dict(self) -> dict:
|
||||
"""
|
||||
Query-ready dict for YF.
|
||||
|
||||
Simple operand accepted by YF is of the form:
|
||||
`{ "operator": operator, "operands": [field, ...values] }`
|
||||
|
||||
Nested operand accepted by YF:
|
||||
`{ "operator": operator, "operands": [ ...CalendarQuery ] }`
|
||||
"""
|
||||
op = self.operator
|
||||
ops = self.operands
|
||||
return {
|
||||
"operator": op,
|
||||
"operands": [o.to_dict() if isinstance(o, CalendarQuery) else o for o in ops],
|
||||
}
|
||||
|
||||
|
||||
_CALENDAR_URL_ = f"{_QUERY1_URL_}/v1/finance/visualization"
|
||||
DATE_STR_FORMAT = "%Y-%m-%d"
|
||||
|
||||
PREDEFINED_CALENDARS = {
|
||||
"sp_earnings": {
|
||||
"sortField": "intradaymarketcap",
|
||||
"includeFields": [
|
||||
"ticker",
|
||||
"companyshortname",
|
||||
"intradaymarketcap",
|
||||
"eventname",
|
||||
"startdatetime",
|
||||
"startdatetimetype",
|
||||
"epsestimate",
|
||||
"epsactual",
|
||||
"epssurprisepct",
|
||||
],
|
||||
"nan_cols": ["Surprise (%)", "EPS Estimate", "Reported EPS"],
|
||||
"datetime_cols": ["Event Start Date"],
|
||||
"df_index": "Symbol",
|
||||
"renames": {
|
||||
"Surprise (%)": "Surprise(%)",
|
||||
"Company Name": "Company",
|
||||
"Market Cap (Intraday)": "Marketcap",
|
||||
},
|
||||
},
|
||||
"ipo_info": {
|
||||
"sortField": "startdatetime",
|
||||
"includeFields": [
|
||||
"ticker",
|
||||
"companyshortname",
|
||||
"exchange_short_name",
|
||||
"filingdate",
|
||||
"startdatetime",
|
||||
"amendeddate",
|
||||
"pricefrom",
|
||||
"priceto",
|
||||
"offerprice",
|
||||
"currencyname",
|
||||
"shares",
|
||||
"dealtype",
|
||||
],
|
||||
"nan_cols": ["Price From", "Price To", "Price", "Shares"],
|
||||
"datetime_cols": ["Filing Date", "Date", "Amended Date"],
|
||||
"df_index": "Symbol",
|
||||
"renames": {
|
||||
"Exchange Short Name": "Exchange",
|
||||
},
|
||||
},
|
||||
"economic_event": {
|
||||
"sortField": "startdatetime",
|
||||
"includeFields": [
|
||||
"econ_release",
|
||||
"country_code",
|
||||
"startdatetime",
|
||||
"period",
|
||||
"after_release_actual",
|
||||
"consensus_estimate",
|
||||
"prior_release_actual",
|
||||
"originally_reported_actual",
|
||||
],
|
||||
"nan_cols": ["Actual", "Market Expectation", "Prior to This", "Revised from"],
|
||||
"datetime_cols": ["Event Time"],
|
||||
"df_index": "Event",
|
||||
"renames": {
|
||||
"Country Code": "Region",
|
||||
"Market Expectation": "Expected",
|
||||
"Prior to This": "Last",
|
||||
"Revised from": "Revised",
|
||||
},
|
||||
},
|
||||
"splits": {
|
||||
"sortField": "startdatetime",
|
||||
"includeFields": [
|
||||
"ticker",
|
||||
"companyshortname",
|
||||
"startdatetime",
|
||||
"optionable",
|
||||
"old_share_worth",
|
||||
"share_worth",
|
||||
],
|
||||
"nan_cols": [],
|
||||
"datetime_cols": ["Payable On"],
|
||||
"df_index": "Symbol",
|
||||
"renames": {
|
||||
"Optionable?": "Optionable",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
class Calendars:
|
||||
"""
|
||||
Get economic calendars, for example, Earnings, IPO, Economic Events, Splits
|
||||
|
||||
### Simple example default params:
|
||||
```python
|
||||
import yfinance as yf
|
||||
calendars = yf.Calendars()
|
||||
earnings_calendar = calendars.get_earnings_calendar(limit=50)
|
||||
print(earnings_calendar)
|
||||
```"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
start: Optional[Union[str, datetime, date]] = None,
|
||||
end: Optional[Union[str, datetime, date]] = None,
|
||||
session: Optional[Session] = None,
|
||||
):
|
||||
"""
|
||||
:param str | datetime | date start: start date (default today) \
|
||||
eg. start="2025-11-08"
|
||||
:param str | datetime | date end: end date (default `start + 7 days`) \
|
||||
eg. end="2025-11-08"
|
||||
:param session: requests.Session object, optional
|
||||
"""
|
||||
|
||||
self._logger = get_yf_logger()
|
||||
self.session = session or Session()
|
||||
self._data: YfData = YfData(session=session)
|
||||
|
||||
_start = self._parse_date_param(start)
|
||||
_end = self._parse_date_param(end)
|
||||
self._start = _start or datetime.now().strftime(DATE_STR_FORMAT)
|
||||
self._end = _end or (datetime.strptime(self._start, DATE_STR_FORMAT) + timedelta(days=7)).strftime(DATE_STR_FORMAT)
|
||||
|
||||
if not start and end:
|
||||
self._logger.debug(f"Incomplete boundary: did not provide `start`, using today {self._start=} to {self._end=}")
|
||||
elif start and not end:
|
||||
self._logger.debug(f"Incomplete boundary: did not provide `end`, using {self._start=} to {self._end=}: +7 days from self._start")
|
||||
|
||||
self._most_active_qy: CalendarQuery = CalendarQuery("or", [])
|
||||
|
||||
self._cache_request_body = {}
|
||||
self.calendars: Dict[str, pd.DataFrame] = {}
|
||||
|
||||
def _parse_date_param(self, _date: Optional[Union[str, datetime, date, int]]) -> str:
|
||||
if not _date:
|
||||
return ""
|
||||
else:
|
||||
return _parse_user_dt(_date).strftime(DATE_STR_FORMAT)
|
||||
|
||||
def _get_data(
|
||||
self, calendar_type: str, query: CalendarQuery, limit=12, offset=0, force=False
|
||||
) -> pd.DataFrame:
|
||||
if calendar_type not in PREDEFINED_CALENDARS:
|
||||
raise YFException(f"Unknown calendar type: {calendar_type}")
|
||||
|
||||
params = {"lang": "en-US", "region": "US"}
|
||||
body = {
|
||||
"sortType": "DESC",
|
||||
"entityIdType": calendar_type,
|
||||
"sortField": PREDEFINED_CALENDARS[calendar_type]["sortField"],
|
||||
"includeFields": PREDEFINED_CALENDARS[calendar_type]["includeFields"],
|
||||
"size": min(limit, 100), # YF caps at 100, don't go higher
|
||||
"offset": offset,
|
||||
"query": query.to_dict(),
|
||||
}
|
||||
|
||||
if self._cache_request_body.get(calendar_type, None) and not force:
|
||||
cache_body = self._cache_request_body[calendar_type]
|
||||
if cache_body == body and calendar_type in self.calendars:
|
||||
# Uses cache if force=False and new request has same body as previous
|
||||
self._logger.debug(f"Getting {calendar_type=} from local cache")
|
||||
return self.calendars[calendar_type]
|
||||
self._cache_request_body[calendar_type] = body
|
||||
|
||||
self._logger.debug(f"Fetching {calendar_type=} with {limit=}")
|
||||
response: Response = self._data.post(_CALENDAR_URL_, params=params, body=body)
|
||||
|
||||
try:
|
||||
json_data = response.json()
|
||||
except json.JSONDecodeError:
|
||||
self._logger.error(f"{calendar_type}: Failed to retrieve calendar.")
|
||||
json_data = {}
|
||||
|
||||
# Error returned
|
||||
if json_data.get("finance", {}).get("error", {}):
|
||||
raise YFException(json_data.get("finance", {}).get("error", {}))
|
||||
|
||||
self.calendars[calendar_type] = self._create_df(json_data)
|
||||
return self._cleanup_df(calendar_type)
|
||||
|
||||
def _create_df(self, json_data: dict) -> pd.DataFrame:
|
||||
columns = []
|
||||
for col in json_data["finance"]["result"][0]["documents"][0]["columns"]:
|
||||
columns.append(col["label"])
|
||||
|
||||
if col["label"] == "Event Start Date" and col["type"] == "STRING":
|
||||
# Rename duplicate columns Event Start Date
|
||||
columns[-1] = "Timing"
|
||||
|
||||
rows = json_data["finance"]["result"][0]["documents"][0]["rows"]
|
||||
return pd.DataFrame(rows, columns=columns)
|
||||
|
||||
def _cleanup_df(self, calendar_type: str) -> pd.DataFrame:
|
||||
predef_cal: dict = PREDEFINED_CALENDARS[calendar_type]
|
||||
df: pd.DataFrame = self.calendars[calendar_type]
|
||||
if df.empty:
|
||||
return df
|
||||
|
||||
# Convert types
|
||||
nan_cols: list = predef_cal["nan_cols"]
|
||||
if nan_cols:
|
||||
df[nan_cols] = df[nan_cols].astype("float64").replace(0.0, np.nan)
|
||||
|
||||
# Format the dataframe
|
||||
df.set_index(predef_cal["df_index"], inplace=True)
|
||||
for rename_from, rename_to in predef_cal["renames"].items():
|
||||
df.rename(columns={rename_from: rename_to}, inplace=True)
|
||||
|
||||
for datetime_col in predef_cal["datetime_cols"]:
|
||||
df[datetime_col] = pd.to_datetime(df[datetime_col])
|
||||
|
||||
return df
|
||||
|
||||
@log_indent_decorator
|
||||
def _get_most_active_operands(
|
||||
self, _market_cap: Optional[float], force=False
|
||||
) -> CalendarQuery:
|
||||
"""
|
||||
Retrieve tickers from YF, converts them into operands accepted by YF.
|
||||
Saves the operands in self._most_active_qy.
|
||||
Will not re-query if already populated.
|
||||
|
||||
Used for earnings calendar optional filter.
|
||||
|
||||
:param force: if True, will re-query even if operands already exist
|
||||
:return: list of operands for active traded stocks
|
||||
"""
|
||||
if not self._most_active_qy.is_empty and not force:
|
||||
return self._most_active_qy
|
||||
|
||||
self._logger.debug("Fetching 200 most_active for earnings calendar")
|
||||
|
||||
try:
|
||||
json_raw: dict = screen(query="MOST_ACTIVES", count=200)
|
||||
except exceptions.HTTPError:
|
||||
self._logger.error("Failed to retrieve most active stocks.")
|
||||
return self._most_active_qy
|
||||
|
||||
raw = json_raw.get("quotes", [{}])
|
||||
|
||||
self._most_active_qy = CalendarQuery("or", [])
|
||||
for stock in raw:
|
||||
if type(stock) is not dict:
|
||||
continue
|
||||
|
||||
ticker = stock.get("symbol", "")
|
||||
t_market_cap = stock.get("marketCap", 0)
|
||||
# We filter market_cap here because we want to keep self._most_active_qy consistent
|
||||
if ticker and (_market_cap is None or t_market_cap >= _market_cap):
|
||||
self._most_active_qy.append(CalendarQuery("eq", ["ticker", ticker]))
|
||||
|
||||
return self._most_active_qy
|
||||
|
||||
def _get_startdatetime_operators(self, start=None, end=None) -> CalendarQuery:
|
||||
"""
|
||||
Get startdatetime operands for start/end dates.
|
||||
If no dates passed, defaults to internal date set on initialization.
|
||||
"""
|
||||
_start = self._parse_date_param(start)
|
||||
_end = self._parse_date_param(end)
|
||||
if (start and not end) or (end and not start):
|
||||
warnings.warn(
|
||||
"When prividing custom `start` and `end` parameters, you may want to specify both, to avoid unexpected behaviour.",
|
||||
UserWarning,
|
||||
stacklevel=2,
|
||||
)
|
||||
|
||||
return CalendarQuery(
|
||||
"and",
|
||||
[
|
||||
CalendarQuery("gte", ["startdatetime", _start or self._start]),
|
||||
CalendarQuery("lte", ["startdatetime", _end or self._end]),
|
||||
],
|
||||
)
|
||||
|
||||
### Manual getter functions:
|
||||
|
||||
@log_indent_decorator
|
||||
def get_earnings_calendar(
|
||||
self,
|
||||
market_cap: Optional[float] = None,
|
||||
filter_most_active: bool = True,
|
||||
start=None,
|
||||
end=None,
|
||||
limit=12,
|
||||
offset=0,
|
||||
force=False,
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
Retrieve earnings calendar from YF as a DataFrame.
|
||||
Will re-query every time it is called, overwriting previous data.
|
||||
|
||||
:param market_cap: market cap cutoff in USD, default None
|
||||
:param filter_most_active: will filter for actively traded stocks (default True)
|
||||
:param str | datetime | date start: overwrite start date (default set by __init__) \
|
||||
eg. start="2025-11-08"
|
||||
:param str | datetime | date end: overwrite end date (default set by __init__) \
|
||||
eg. end="2025-11-08"
|
||||
:param limit: maximum number of results to return (YF caps at 100)
|
||||
:param offset: offsets the results for pagination. YF default 0
|
||||
:param force: if True, will re-query even if cache already exists
|
||||
:return: DataFrame with earnings calendar
|
||||
"""
|
||||
_start = self._parse_date_param(start)
|
||||
_end = self._parse_date_param(end)
|
||||
if (start and not end) or (end and not start):
|
||||
warnings.warn(
|
||||
"When prividing custom `start` and `end` parameters, you may want to specify both, to avoid unexpected behaviour.",
|
||||
UserWarning,
|
||||
stacklevel=2,
|
||||
)
|
||||
|
||||
query = CalendarQuery(
|
||||
"and",
|
||||
[
|
||||
CalendarQuery("eq", ["region", "us"]),
|
||||
CalendarQuery(
|
||||
"or",
|
||||
[
|
||||
CalendarQuery("eq", ["eventtype", "EAD"]),
|
||||
CalendarQuery("eq", ["eventtype", "ERA"]),
|
||||
],
|
||||
),
|
||||
CalendarQuery("gte", ["startdatetime", _start or self._start]),
|
||||
CalendarQuery("lte", ["startdatetime", _end or self._end]),
|
||||
],
|
||||
)
|
||||
|
||||
if market_cap is not None:
|
||||
if market_cap < 10_000_000:
|
||||
warnings.warn(
|
||||
f"market_cap {market_cap} is very low, did you mean to set it higher?",
|
||||
UserWarning,
|
||||
stacklevel=2,
|
||||
)
|
||||
query.append(CalendarQuery("gte", ["intradaymarketcap", market_cap]))
|
||||
if filter_most_active and not offset:
|
||||
# YF does not like filter most active while offsetting
|
||||
query.append(self._get_most_active_operands(market_cap))
|
||||
|
||||
return self._get_data(
|
||||
calendar_type="sp_earnings",
|
||||
query=query,
|
||||
limit=limit,
|
||||
offset=offset,
|
||||
force=force,
|
||||
)
|
||||
|
||||
@log_indent_decorator
|
||||
def get_ipo_info_calendar(
|
||||
self, start=None, end=None, limit=12, offset=0, force=False
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
Retrieve IPOs calendar from YF as a Dataframe.
|
||||
|
||||
:param str | datetime | date start: overwrite start date (default set by __init__) \
|
||||
eg. start="2025-11-08"
|
||||
:param str | datetime | date end: overwrite end date (default set by __init__) \
|
||||
eg. end="2025-11-08"
|
||||
:param limit: maximum number of results to return (YF caps at 100)
|
||||
:param offset: offsets the results for pagination. YF default 0
|
||||
:param force: if True, will re-query even if cache already exists
|
||||
:return: DataFrame with IPOs calendar
|
||||
"""
|
||||
_start = self._parse_date_param(start)
|
||||
_end = self._parse_date_param(end)
|
||||
if (start and not end) or (end and not start):
|
||||
warnings.warn(
|
||||
"When prividing custom `start` and `end` parameters, you may want to specify both, to avoid unexpected behaviour.",
|
||||
UserWarning,
|
||||
stacklevel=2,
|
||||
)
|
||||
|
||||
query = CalendarQuery(
|
||||
"or",
|
||||
[
|
||||
CalendarQuery("gtelt", ["startdatetime", _start or self._start, _end or self._end]),
|
||||
CalendarQuery("gtelt", ["filingdate", _start or self._start, _end or self._end]),
|
||||
CalendarQuery("gtelt", ["amendeddate", _start or self._start, _end or self._end]),
|
||||
],
|
||||
)
|
||||
|
||||
return self._get_data(
|
||||
calendar_type="ipo_info",
|
||||
query=query,
|
||||
limit=limit,
|
||||
offset=offset,
|
||||
force=force,
|
||||
)
|
||||
|
||||
@log_indent_decorator
|
||||
def get_economic_events_calendar(
|
||||
self, start=None, end=None, limit=12, offset=0, force=False
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
Retrieve Economic Events calendar from YF as a DataFrame.
|
||||
|
||||
:param str | datetime | date start: overwrite start date (default set by __init__) \
|
||||
eg. start="2025-11-08"
|
||||
:param str | datetime | date end: overwrite end date (default set by __init__) \
|
||||
eg. end="2025-11-08"
|
||||
:param limit: maximum number of results to return (YF caps at 100)
|
||||
:param offset: offsets the results for pagination. YF default 0
|
||||
:param force: if True, will re-query even if cache already exists
|
||||
:return: DataFrame with Economic Events calendar
|
||||
"""
|
||||
return self._get_data(
|
||||
calendar_type="economic_event",
|
||||
query=self._get_startdatetime_operators(start, end),
|
||||
limit=limit,
|
||||
offset=offset,
|
||||
force=force,
|
||||
)
|
||||
|
||||
@log_indent_decorator
|
||||
def get_splits_calendar(
|
||||
self, start=None, end=None, limit=12, offset=0, force=False
|
||||
) -> pd.DataFrame:
|
||||
"""
|
||||
Retrieve Splits calendar from YF as a DataFrame.
|
||||
|
||||
:param str | datetime | date start: overwrite start date (default set by __init__) \
|
||||
eg. start="2025-11-08"
|
||||
:param str | datetime | date end: overwrite end date (default set by __init__) \
|
||||
eg. end="2025-11-08"
|
||||
:param limit: maximum number of results to return (YF caps at 100)
|
||||
:param offset: offsets the results for pagination. YF default 0
|
||||
:param force: if True, will re-query even if cache already exists
|
||||
:return: DataFrame with Splits calendar
|
||||
"""
|
||||
return self._get_data(
|
||||
calendar_type="splits",
|
||||
query=self._get_startdatetime_operators(start, end),
|
||||
limit=limit,
|
||||
offset=offset,
|
||||
force=force,
|
||||
)
|
||||
|
||||
### Easy / Default getter functions:
|
||||
|
||||
@property
|
||||
def earnings_calendar(self) -> pd.DataFrame:
|
||||
"""Earnings calendar with default settings."""
|
||||
if "sp_earnings" in self.calendars:
|
||||
return self.calendars["sp_earnings"]
|
||||
return self.get_earnings_calendar()
|
||||
|
||||
@property
|
||||
def ipo_info_calendar(self) -> pd.DataFrame:
|
||||
"""IPOs calendar with default settings."""
|
||||
if "ipo_info" in self.calendars:
|
||||
return self.calendars["ipo_info"]
|
||||
return self.get_ipo_info_calendar()
|
||||
|
||||
@property
|
||||
def economic_events_calendar(self) -> pd.DataFrame:
|
||||
"""Economic events calendar with default settings."""
|
||||
if "economic_event" in self.calendars:
|
||||
return self.calendars["economic_event"]
|
||||
return self.get_economic_events_calendar()
|
||||
|
||||
@property
|
||||
def splits_calendar(self) -> pd.DataFrame:
|
||||
"""Splits calendar with default settings."""
|
||||
if "splits" in self.calendars:
|
||||
return self.calendars["splits"]
|
||||
return self.get_splits_calendar()
|
||||
58
yfinance/config.py
Normal file
58
yfinance/config.py
Normal file
@@ -0,0 +1,58 @@
|
||||
import json
|
||||
|
||||
|
||||
class NestedConfig:
|
||||
def __init__(self, name, data):
|
||||
self.__dict__['name'] = name
|
||||
self.__dict__['data'] = data
|
||||
|
||||
def __getattr__(self, key):
|
||||
return self.data.get(key)
|
||||
|
||||
def __setattr__(self, key, value):
|
||||
self.data[key] = value
|
||||
|
||||
def __len__(self):
|
||||
return len(self.__dict__['data'])
|
||||
|
||||
def __repr__(self):
|
||||
return json.dumps(self.data, indent=4)
|
||||
|
||||
class ConfigMgr:
|
||||
def __init__(self):
|
||||
self._initialised = False
|
||||
|
||||
def _load_option(self):
|
||||
self._initialised = True # prevent infinite loop
|
||||
self.options = {}
|
||||
|
||||
# Initialise defaults
|
||||
n = self.__getattr__('network')
|
||||
n.proxy = None
|
||||
n.retries = 0
|
||||
d = self.__getattr__('debug')
|
||||
d.hide_exceptions = True
|
||||
d.logging = False
|
||||
|
||||
def __getattr__(self, key):
|
||||
if not self._initialised:
|
||||
self._load_option()
|
||||
|
||||
if key not in self.options:
|
||||
self.options[key] = {}
|
||||
return NestedConfig(key, self.options[key])
|
||||
|
||||
def __contains__(self, key):
|
||||
if not self._initialised:
|
||||
self._load_option()
|
||||
|
||||
return key in self.options
|
||||
|
||||
def __repr__(self):
|
||||
if not self._initialised:
|
||||
self._load_option()
|
||||
|
||||
all_options = self.options.copy()
|
||||
return json.dumps(all_options, indent=4)
|
||||
|
||||
YfConfig = ConfigMgr()
|
||||
@@ -159,153 +159,223 @@ quote_summary_valid_modules = (
|
||||
"futuresChain",
|
||||
)
|
||||
|
||||
# map last updated as of 2024.09.18
|
||||
# map last updated as of 2025.12.19
|
||||
SECTOR_INDUSTY_MAPPING = {
|
||||
'basic-materials': {'specialty-chemicals',
|
||||
'gold',
|
||||
'building-materials',
|
||||
'copper',
|
||||
'steel',
|
||||
'agricultural-inputs',
|
||||
'chemicals',
|
||||
'other-industrial-metals-mining',
|
||||
'lumber-wood-production',
|
||||
'aluminum',
|
||||
'other-precious-metals-mining',
|
||||
'coking-coal',
|
||||
'paper-paper-products',
|
||||
'silver'},
|
||||
'communication-services': {'internet-content-information',
|
||||
'telecom-services',
|
||||
'entertainment',
|
||||
'electronic-gaming-multimedia',
|
||||
'advertising-agencies',
|
||||
'broadcasting',
|
||||
'publishing'},
|
||||
'consumer-cyclical': {'internet-retail',
|
||||
'auto-manufacturers',
|
||||
'restaurants',
|
||||
'home-improvement-retail',
|
||||
'travel-services',
|
||||
'specialty-retail',
|
||||
'apparel-retail',
|
||||
'residential-construction',
|
||||
'footwear-accessories',
|
||||
'packaging-containers',
|
||||
'lodging',
|
||||
'auto-parts',
|
||||
'auto-truck-dealerships',
|
||||
'gambling',
|
||||
'resorts-casinos',
|
||||
'leisure',
|
||||
'apparel-manufacturing',
|
||||
'personal-services',
|
||||
'furnishings-fixtures-appliances',
|
||||
'recreational-vehicles',
|
||||
'luxury-goods',
|
||||
'department-stores',
|
||||
'textile-manufacturing'},
|
||||
'consumer-defensive': {'discount-stores',
|
||||
'beverages-non-alcoholic',
|
||||
'household-personal-products',
|
||||
'packaged-foods',
|
||||
'tobacco',
|
||||
'confectioners',
|
||||
'farm-products',
|
||||
'food-distribution',
|
||||
'grocery-stores',
|
||||
'beverages-brewers',
|
||||
'education-training-services',
|
||||
'beverages-wineries-distilleries'},
|
||||
'energy': {'oil-gas-integrated',
|
||||
'oil-gas-midstream',
|
||||
'oil-gas-e-p',
|
||||
'oil-gas-equipment-services',
|
||||
'oil-gas-refining-marketing',
|
||||
'uranium',
|
||||
'oil-gas-drilling',
|
||||
'thermal-coal'},
|
||||
'financial-services': {'banks-diversified',
|
||||
'credit-services',
|
||||
'asset-management',
|
||||
'insurance-diversified',
|
||||
'banks-regional',
|
||||
'capital-markets',
|
||||
'financial-data-stock-exchanges',
|
||||
'insurance-property-casualty',
|
||||
'insurance-brokers',
|
||||
'insurance-life',
|
||||
'insurance-specialty',
|
||||
'mortgage-finance',
|
||||
'insurance-reinsurance',
|
||||
'shell-companies',
|
||||
'financial-conglomerates'},
|
||||
'healthcare': {'drug-manufacturers-general',
|
||||
'healthcare-plans',
|
||||
'biotechnology',
|
||||
'medical-devices',
|
||||
'diagnostics-research',
|
||||
'medical-instruments-supplies',
|
||||
'medical-care-facilities',
|
||||
'drug-manufacturers-specialty-generic',
|
||||
'health-information-services',
|
||||
'medical-distribution',
|
||||
'pharmaceutical-retailers'},
|
||||
'industrials': {'aerospace-defense',
|
||||
'specialty-industrial-machinery',
|
||||
'railroads',
|
||||
'building-products-equipment',
|
||||
'farm-heavy-construction-machinery',
|
||||
'specialty-business-services',
|
||||
'integrated-freight-logistics',
|
||||
'waste-management',
|
||||
'conglomerates',
|
||||
'industrial-distribution',
|
||||
'engineering-construction',
|
||||
'rental-leasing-services',
|
||||
'consulting-services',
|
||||
'trucking',
|
||||
'electrical-equipment-parts',
|
||||
'airlines',
|
||||
'tools-accessories',
|
||||
'pollution-treatment-controls',
|
||||
'security-protection-services',
|
||||
'marine-shipping',
|
||||
'metal-fabrication',
|
||||
'infrastructure-operations',
|
||||
'staffing-employment-services',
|
||||
'airports-air-services',
|
||||
'business-equipment-supplies'},
|
||||
'real-estate': {'reit-specialty',
|
||||
'reit-industrial',
|
||||
'reit-retail',
|
||||
'reit-residential',
|
||||
'reit-healthcare-facilities',
|
||||
'real-estate-services',
|
||||
'reit-office',
|
||||
'reit-diversified',
|
||||
'reit-mortgage',
|
||||
'reit-hotel-motel',
|
||||
'real-estate-development',
|
||||
'real-estate-diversified'},
|
||||
'technology': {'software-infrastructure',
|
||||
'semiconductors',
|
||||
'consumer-electronics',
|
||||
'software-application',
|
||||
'information-technology-services',
|
||||
'semiconductor-equipment-materials',
|
||||
'communication-equipment',
|
||||
'computer-hardware',
|
||||
'electronic-components',
|
||||
'scientific-technical-instruments',
|
||||
'solar',
|
||||
'electronics-computer-distribution'},
|
||||
'utilities': {'utilities-regulated-electric',
|
||||
'utilities-renewable',
|
||||
'utilities-diversified',
|
||||
'utilities-regulated-gas',
|
||||
'utilities-independent-power-producers',
|
||||
'utilities-regulated-water'}
|
||||
'Basic Materials': {'Specialty Chemicals',
|
||||
'Gold',
|
||||
'Building Materials',
|
||||
'Copper',
|
||||
'Steel',
|
||||
'Agricultural Inputs',
|
||||
'Chemicals',
|
||||
'Other Industrial Metals & Mining',
|
||||
'Lumber & Wood Production',
|
||||
'Aluminum',
|
||||
'Other Precious Metals & Mining',
|
||||
'Coking Coal',
|
||||
'Paper & Paper Products',
|
||||
'Silver'},
|
||||
'Communication Services': {'Advertising Agencies',
|
||||
'Broadcasting',
|
||||
'Electronic Gaming & Multimedia',
|
||||
'Entertainment',
|
||||
'Internet Content & Information',
|
||||
'Publishing',
|
||||
'Telecom Services'},
|
||||
'Consumer Cyclical': {'Apparel Manufacturing',
|
||||
'Apparel Retail',
|
||||
'Auto & Truck Dealerships',
|
||||
'Auto Manufacturers',
|
||||
'Auto Parts',
|
||||
'Department Stores',
|
||||
'Footwear & Accessories',
|
||||
'Furnishings, Fixtures & Appliances',
|
||||
'Gambling',
|
||||
'Home Improvement Retail',
|
||||
'Internet Retail',
|
||||
'Leisure',
|
||||
'Lodging',
|
||||
'Luxury Goods',
|
||||
'Packaging & Containers',
|
||||
'Personal Services',
|
||||
'Recreational Vehicles',
|
||||
'Residential Construction',
|
||||
'Resorts & Casinos',
|
||||
'Restaurants',
|
||||
'Specialty Retail',
|
||||
'Textile Manufacturing',
|
||||
'Travel Services'},
|
||||
'Consumer Defensive': {'Beverages—Brewers',
|
||||
'Beverages—Non-Alcoholic',
|
||||
'Beverages—Wineries & Distilleries',
|
||||
'Confectioners',
|
||||
'Discount Stores',
|
||||
'Education & Training Services',
|
||||
'Farm Products',
|
||||
'Food Distribution',
|
||||
'Grocery Stores',
|
||||
'Household & Personal Products',
|
||||
'Packaged Foods',
|
||||
'Tobacco'},
|
||||
'Energy': {'Oil & Gas Drilling',
|
||||
'Oil & Gas E&P',
|
||||
'Oil & Gas Equipment & Services',
|
||||
'Oil & Gas Integrated',
|
||||
'Oil & Gas Midstream',
|
||||
'Oil & Gas Refining & Marketing',
|
||||
'Thermal Coal',
|
||||
'Uranium'},
|
||||
'Financial Services': {'Asset Management',
|
||||
'Banks—Diversified',
|
||||
'Banks—Regional',
|
||||
'Capital Markets',
|
||||
'Credit Services',
|
||||
'Financial Conglomerates',
|
||||
'Financial Data & Stock Exchanges',
|
||||
'Insurance Brokers',
|
||||
'Insurance—Diversified',
|
||||
'Insurance—Life',
|
||||
'Insurance—Property & Casualty',
|
||||
'Insurance—Reinsurance',
|
||||
'Insurance—Specialty',
|
||||
'Mortgage Finance',
|
||||
'Shell Companies'},
|
||||
'Healthcare': {'Biotechnology',
|
||||
'Diagnostics & Research',
|
||||
'Drug Manufacturers—General',
|
||||
'Drug Manufacturers—Specialty & Generic',
|
||||
'Health Information Services',
|
||||
'Healthcare Plans',
|
||||
'Medical Care Facilities',
|
||||
'Medical Devices',
|
||||
'Medical Instruments & Supplies',
|
||||
'Medical Distribution',
|
||||
'Pharmaceutical Retailers'},
|
||||
'Industrials': {'Aerospace & Defense',
|
||||
'Airlines',
|
||||
'Airports & Air Services',
|
||||
'Building Products & Equipment',
|
||||
'Business Equipment & Supplies',
|
||||
'Conglomerates',
|
||||
'Consulting Services',
|
||||
'Electrical Equipment & Parts',
|
||||
'Engineering & Construction',
|
||||
'Farm & Heavy Construction Machinery',
|
||||
'Industrial Distribution',
|
||||
'Infrastructure Operations',
|
||||
'Integrated Freight & Logistics',
|
||||
'Marine Shipping',
|
||||
'Metal Fabrication',
|
||||
'Pollution & Treatment Controls',
|
||||
'Railroads',
|
||||
'Rental & Leasing Services',
|
||||
'Security & Protection Services',
|
||||
'Specialty Business Services',
|
||||
'Specialty Industrial Machinery',
|
||||
'Staffing & Employment Services',
|
||||
'Tools & Accessories',
|
||||
'Trucking',
|
||||
'Waste Management'},
|
||||
'Real Estate': {'Real Estate—Development',
|
||||
'Real Estate Services',
|
||||
'Real Estate—Diversified',
|
||||
'REIT—Healthcare Facilities',
|
||||
'REIT—Hotel & Motel',
|
||||
'REIT—Industrial',
|
||||
'REIT—Office',
|
||||
'REIT—Residential',
|
||||
'REIT—Retail',
|
||||
'REIT—Mortgage',
|
||||
'REIT—Specialty',
|
||||
'REIT—Diversified'},
|
||||
'Technology': {'Communication Equipment',
|
||||
'Computer Hardware',
|
||||
'Consumer Electronics',
|
||||
'Electronic Components',
|
||||
'Electronics & Computer Distribution',
|
||||
'Information Technology Services',
|
||||
'Scientific & Technical Instruments',
|
||||
'Semiconductor Equipment & Materials',
|
||||
'Semiconductors',
|
||||
'Software—Application',
|
||||
'Software—Infrastructure',
|
||||
'Solar'},
|
||||
'Utilities': {'Utilities—Diversified',
|
||||
'Utilities—Independent Power Producers',
|
||||
'Utilities—Regulated Electric',
|
||||
'Utilities—Regulated Gas',
|
||||
'Utilities—Regulated Water',
|
||||
'Utilities—Renewable'},
|
||||
}
|
||||
SECTOR_INDUSTY_MAPPING_LC = {}
|
||||
for k in SECTOR_INDUSTY_MAPPING.keys():
|
||||
k2 = k.lower().replace('& ', '').replace('- ', '').replace(', ', ' ').replace(' ', '-')
|
||||
SECTOR_INDUSTY_MAPPING_LC[k2] = []
|
||||
for v in SECTOR_INDUSTY_MAPPING[k]:
|
||||
v2 = v.lower().replace('& ', '').replace('- ', '').replace(', ', ' ').replace(' ', '-')
|
||||
SECTOR_INDUSTY_MAPPING_LC[k2].append(v2)
|
||||
|
||||
# _MIC_TO_YAHOO_SUFFIX maps Market Identifier Codes (MIC) to Yahoo Finance market suffixes.
|
||||
# c.f. :
|
||||
# https://help.yahoo.com/kb/finance-for-web/SLN2310.html;_ylt=AwrJKiCZFo9g3Y8AsDWPAwx.;_ylu=Y29sbwMEcG9zAzEEdnRpZAMEc2VjA3Ny?locale=en_US
|
||||
# https://www.iso20022.org/market-identifier-codes
|
||||
|
||||
_MIC_TO_YAHOO_SUFFIX = {
|
||||
'XCBT': 'CBT', 'XCME': 'CME', 'IFUS': 'NYB', 'CECS': 'CMX', 'XNYM': 'NYM', 'XNYS': '', 'XNAS': '', # United States
|
||||
'XBUE': 'BA', # Argentina
|
||||
'XVIE': 'VI', # Austria
|
||||
'XASX': 'AX', 'XAUS': 'XA', # Australia
|
||||
'XBRU': 'BR', # Belgium
|
||||
'BVMF': 'SA', # Brazil
|
||||
'CNSX': 'CN', 'NEOE': 'NE', 'XTSE': 'TO', 'XTSX': 'V', # Canada
|
||||
'XSGO': 'SN', # Chile
|
||||
'XSHG': 'SS', 'XSHE': 'SZ', # China
|
||||
'XBOG': 'CL', # Colombia
|
||||
'XPRA': 'PR', # Czech Republic
|
||||
'XCSE': 'CO', # Denmark
|
||||
'XCAI': 'CA', # Egypt
|
||||
'XTAL': 'TL', # Estonia
|
||||
'CEUX': 'XD', 'XEUR': 'NX', # Europe (Cboe Europe, Euronext)
|
||||
'XHEL': 'HE', # Finland
|
||||
'XPAR': 'PA', # France
|
||||
'XBER': 'BE', 'XBMS': 'BM', 'XDUS': 'DU', 'XFRA': 'F', 'XHAM': 'HM', 'XHAN': 'HA', 'XMUN': 'MU', 'XSTU': 'SG', 'XETR': 'DE', # Germany
|
||||
'XATH': 'AT', # Greece
|
||||
'XHKG': 'HK', # Hong Kong
|
||||
'XBUD': 'BD', # Hungary
|
||||
'XICE': 'IC', # Iceland
|
||||
'XBOM': 'BO', 'XNSE': 'NS', # India
|
||||
'XIDX': 'JK', # Indonesia
|
||||
'XDUB': 'IR', # Ireland
|
||||
'XTAE': 'TA', # Israel
|
||||
'MTAA': 'MI', 'EUTL': 'TI', # Italy
|
||||
'XTKS': 'T', # Japan
|
||||
'XKFE': 'KW', # Kuwait
|
||||
'XRIS': 'RG', # Latvia
|
||||
'XVIL': 'VS', # Lithuania
|
||||
'XKLS': 'KL', # Malaysia
|
||||
'XMEX': 'MX', # Mexico
|
||||
'XAMS': 'AS', # Netherlands
|
||||
'XNZE': 'NZ', # New Zealand
|
||||
'XOSL': 'OL', # Norway
|
||||
'XPHS': 'PS', # Philippines
|
||||
'XWAR': 'WA', # Poland
|
||||
'XLIS': 'LS', # Portugal
|
||||
'XQAT': 'QA', # Qatar
|
||||
'XBSE': 'RO', # Romania
|
||||
'XSES': 'SI', # Singapore
|
||||
'XJSE': 'JO', # South Africa
|
||||
'XKRX': 'KS', 'KQKS': 'KQ', # South Korea
|
||||
'BMEX': 'MC', # Spain
|
||||
'XSAU': 'SR', # Saudi Arabia
|
||||
'XSTO': 'ST', # Sweden
|
||||
'XSWX': 'SW', # Switzerland
|
||||
'ROCO': 'TWO', 'XTAI': 'TW', # Taiwan
|
||||
'XBKK': 'BK', # Thailand
|
||||
'XIST': 'IS', # Turkey
|
||||
'XDFM': 'AE', # UAE
|
||||
'AQXE': 'AQ', 'XCHI': 'XC', 'XLON': 'L', 'ILSE': 'IL', # United Kingdom
|
||||
'XCAR': 'CR', # Venezuela
|
||||
'XSTC': 'VN' # Vietnam
|
||||
}
|
||||
|
||||
def merge_two_level_dicts(dict1, dict2):
|
||||
@@ -329,9 +399,10 @@ def merge_two_level_dicts(dict1, dict2):
|
||||
|
||||
EQUITY_SCREENER_EQ_MAP = {
|
||||
"exchange": {
|
||||
'ae': {'DFM'},
|
||||
'ar': {'BUE'},
|
||||
'at': {'VIE'},
|
||||
'au': {'ASX'},
|
||||
'au': {'ASX', 'CXA'},
|
||||
'be': {'BRU'},
|
||||
'br': {'SAO'},
|
||||
'ca': {'CNQ', 'NEO', 'TOR', 'VAN'},
|
||||
@@ -340,14 +411,14 @@ EQUITY_SCREENER_EQ_MAP = {
|
||||
'cn': {'SHH', 'SHZ'},
|
||||
'co': {'BVC'},
|
||||
'cz': {'PRA'},
|
||||
'de': {'BER', 'DUS', 'FRA', 'HAM', 'GER', 'MUN', 'STU'},
|
||||
'de': {'BER', 'DUS', 'EUX', 'FRA', 'HAM', 'HAN', 'GER', 'MUN', 'STU'},
|
||||
'dk': {'CPH'},
|
||||
'ee': {'TAL'},
|
||||
'eg': {'CAI'},
|
||||
'es': {'MCE'},
|
||||
'es': {'MAD', 'MCE'},
|
||||
'fi': {'HEL'},
|
||||
'fr': {'PAR'},
|
||||
'gb': {'AQS', 'IOB', 'LSE'},
|
||||
'fr': {'ENX', 'PAR'},
|
||||
'gb': {'AQS', 'CXE', 'IOB', 'LSE'},
|
||||
'gr': {'ATH'},
|
||||
'hk': {'HKG'},
|
||||
'hu': {'BUD'},
|
||||
@@ -356,26 +427,26 @@ EQUITY_SCREENER_EQ_MAP = {
|
||||
'il': {'TLV'},
|
||||
'in': {'BSE', 'NSI'},
|
||||
'is': {'ICE'},
|
||||
'it': {'MIL'},
|
||||
'jp': {'FKA', 'JPX', 'SAP'},
|
||||
'it': {'MDD', 'MIL', 'TLO'},
|
||||
'jp': {'FKA', 'JPX', 'OSA', 'SAP'},
|
||||
'kr': {'KOE', 'KSC'},
|
||||
'kw': {'KUW'},
|
||||
'lk': {},
|
||||
'lk': {'CSE'},
|
||||
'lt': {'LIT'},
|
||||
'lv': {'RIS'},
|
||||
'mx': {'MEX'},
|
||||
'my': {'KLS'},
|
||||
'nl': {'AMS'},
|
||||
'nl': {'AMS', 'DXE'},
|
||||
'no': {'OSL'},
|
||||
'nz': {'NZE'},
|
||||
'pe': {},
|
||||
'ph': {'PHP', 'PHS'},
|
||||
'pk': {},
|
||||
'pk': {'KAR'},
|
||||
'pl': {'WSE'},
|
||||
'pt': {'LIS'},
|
||||
'qa': {'DOH'},
|
||||
'ro': {'BVB'},
|
||||
'ru': {},
|
||||
'ru': {'MCX'},
|
||||
'sa': {'SAU'},
|
||||
'se': {'STO'},
|
||||
'sg': {'SES'},
|
||||
@@ -383,9 +454,9 @@ EQUITY_SCREENER_EQ_MAP = {
|
||||
'th': {'SET'},
|
||||
'tr': {'IST'},
|
||||
'tw': {'TAI', 'TWO'},
|
||||
'us': {'ASE', 'BTS', 'CXI', 'NCM', 'NGM', 'NMS', 'NYQ', 'OEM', 'OQB', 'OQX', 'PCX', 'PNK', 'YHD'},
|
||||
'us': {'ASE', 'BTS', 'CXI', 'NAE', 'NCM', 'NGM', 'NMS', 'NYQ', 'OEM', 'OQB', 'OQX', 'PCX', 'PNK', 'YHD'},
|
||||
've': {'CCS'},
|
||||
'vn': {},
|
||||
'vn': {'VSE'},
|
||||
'za': {'JNB'}
|
||||
},
|
||||
"sector": {
|
||||
@@ -393,6 +464,7 @@ EQUITY_SCREENER_EQ_MAP = {
|
||||
"Real Estate", "Technology", "Energy", "Utilities", "Financial Services",
|
||||
"Consumer Defensive", "Consumer Cyclical"
|
||||
},
|
||||
"industry": SECTOR_INDUSTY_MAPPING,
|
||||
"peer_group": {
|
||||
"US Fund Equity Energy",
|
||||
"US CE Convertibles",
|
||||
@@ -504,7 +576,65 @@ ordered_keys = ['region'] + [k for k in EQUITY_SCREENER_EQ_MAP.keys() if k != 'r
|
||||
EQUITY_SCREENER_EQ_MAP = {k:EQUITY_SCREENER_EQ_MAP[k] for k in ordered_keys}
|
||||
FUND_SCREENER_EQ_MAP = {
|
||||
"exchange": {
|
||||
'us': {'NAS'}
|
||||
'ae': {'DFM'},
|
||||
'ar': {'BUE'},
|
||||
'at': {'VIE'},
|
||||
'au': {'ASX','CXA'},
|
||||
'be': {'BRU'},
|
||||
'br': {'SAO'},
|
||||
'ca': {'CNQ','NEO','TOR','VAN'},
|
||||
'ch': {'EBS'},
|
||||
'cl': {'SGO'},
|
||||
'co': {'BVC'},
|
||||
'cn': {'SHH','SHZ'},
|
||||
'cz': {'PRA'},
|
||||
'de': {'BER','DUS','EUX','FRA','GER','HAM','HAN','MUN','STU',},
|
||||
'dk': {'CPH'},
|
||||
'ee': {'TAL'},
|
||||
'eg': {'CAI'},
|
||||
'es': {'BAR','MAD','MCE'},
|
||||
'fi': {'HEL'},
|
||||
'fr': {'ENX','PAR'},
|
||||
'gb': {'CXE','IOB','LSE'},
|
||||
'gr': {'ATH'},
|
||||
'hk': {'HKG'},
|
||||
'hu': {'BUD'},
|
||||
'id': {'JKT'},
|
||||
'ie': {'ISE'},
|
||||
'il': {'TLV'},
|
||||
'in': {'BSE','NSI'},
|
||||
'is': {'ICE'},
|
||||
'it': {'MIL'},
|
||||
'jp': {'FKA','JPX','OSA','SAP'},
|
||||
'kr': {'KOE','KSC'},
|
||||
'kw': {'KUW'},
|
||||
'lk': {'CSE'},
|
||||
'lt': {'LIT'},
|
||||
'lv': {'RIS'},
|
||||
'mx': {'MEX'},
|
||||
'my': {'KLS'},
|
||||
'nl': {'AMS'},
|
||||
'no': {'OSL'},
|
||||
'nz': {'NZE'},
|
||||
'pe': {''},
|
||||
'ph': {'PHP', 'PHS'},
|
||||
'pk': {'KAR'},
|
||||
'pl': {'WSE'},
|
||||
'pt': {'LIS'},
|
||||
'qa': {'DOH'},
|
||||
'ro': {'BVB'},
|
||||
'ru': {'MCX'},
|
||||
'sa': {'SAU'},
|
||||
'se': {'STO'},
|
||||
'sg': {'SES'},
|
||||
'sr': {''},
|
||||
'th': {'SET'},
|
||||
'tr': {'IST'},
|
||||
'tw': {'TAI','TWO'},
|
||||
'us': {'ASE','NAS','NCM','NGM','NMS','NYQ','OEM','OGM','OQB','PNK','WCB',},
|
||||
've': {'CCS'},
|
||||
'vn': {'VSE'},
|
||||
'za': {'JNB'}
|
||||
}
|
||||
}
|
||||
COMMON_SCREENER_FIELDS = {
|
||||
@@ -529,7 +659,8 @@ EQUITY_SCREENER_FIELDS = {
|
||||
"eq_fields": {
|
||||
"region",
|
||||
"sector",
|
||||
"peer_group"},
|
||||
"peer_group",
|
||||
"industry"},
|
||||
"price":{
|
||||
"lastclosemarketcap.lasttwelvemonths",
|
||||
"percentchange",
|
||||
|
||||
162
yfinance/data.py
162
yfinance/data.py
@@ -1,16 +1,32 @@
|
||||
import functools
|
||||
from functools import lru_cache
|
||||
import socket
|
||||
import time as _time
|
||||
|
||||
from curl_cffi import requests
|
||||
from urllib.parse import urlsplit, urljoin
|
||||
from bs4 import BeautifulSoup
|
||||
import datetime
|
||||
|
||||
from frozendict import frozendict
|
||||
|
||||
from . import utils, cache
|
||||
from .config import YfConfig
|
||||
import threading
|
||||
|
||||
from .exceptions import YFRateLimitError, YFDataException
|
||||
from .exceptions import YFException, YFDataException, YFRateLimitError
|
||||
|
||||
|
||||
def _is_transient_error(exception):
|
||||
"""Check if error is transient (network/timeout) and should be retried."""
|
||||
if isinstance(exception, (TimeoutError, socket.error, OSError)):
|
||||
return True
|
||||
error_type_name = type(exception).__name__
|
||||
transient_error_types = {
|
||||
'Timeout', 'TimeoutError', 'ConnectionError', 'ConnectTimeout',
|
||||
'ReadTimeout', 'ChunkedEncodingError', 'RemoteDisconnected',
|
||||
}
|
||||
return error_type_name in transient_error_types
|
||||
|
||||
cache_maxsize = 64
|
||||
|
||||
@@ -53,9 +69,6 @@ class SingletonMeta(type):
|
||||
if 'session' in kwargs or (args and len(args) > 0):
|
||||
session = kwargs.get('session') if 'session' in kwargs else args[0]
|
||||
cls._instances[cls]._set_session(session)
|
||||
if 'proxy' in kwargs or (args and len(args) > 1):
|
||||
proxy = kwargs.get('proxy') if 'proxy' in kwargs else args[1]
|
||||
cls._instances[cls]._set_proxy(proxy)
|
||||
return cls._instances[cls]
|
||||
|
||||
|
||||
@@ -65,7 +78,7 @@ class YfData(metaclass=SingletonMeta):
|
||||
Singleton means one session one cookie shared by all threads.
|
||||
"""
|
||||
|
||||
def __init__(self, session=None, proxy=None):
|
||||
def __init__(self, session=None):
|
||||
self._crumb = None
|
||||
self._cookie = None
|
||||
|
||||
@@ -76,9 +89,8 @@ class YfData(metaclass=SingletonMeta):
|
||||
|
||||
self._cookie_lock = threading.Lock()
|
||||
|
||||
self._session, self._proxy = None, None
|
||||
self._session = None
|
||||
self._set_session(session or requests.Session(impersonate="chrome"))
|
||||
self._set_proxy(proxy)
|
||||
|
||||
def _set_session(self, session):
|
||||
if session is None:
|
||||
@@ -102,17 +114,8 @@ class YfData(metaclass=SingletonMeta):
|
||||
|
||||
with self._cookie_lock:
|
||||
self._session = session
|
||||
if self._proxy is not None:
|
||||
self._session.proxies = self._proxy
|
||||
|
||||
def _set_proxy(self, proxy=None):
|
||||
with self._cookie_lock:
|
||||
if proxy is not None:
|
||||
proxy = {'http': proxy, 'https': proxy} if isinstance(proxy, str) else proxy
|
||||
else:
|
||||
proxy = {}
|
||||
self._proxy = proxy
|
||||
self._session.proxies = proxy
|
||||
if YfConfig.network.proxy is not None:
|
||||
self._session.proxies = YfConfig.network.proxy
|
||||
|
||||
def _set_cookie_strategy(self, strategy, have_lock=False):
|
||||
if strategy == self._cookie_strategy:
|
||||
@@ -197,8 +200,10 @@ class YfData(metaclass=SingletonMeta):
|
||||
url='https://fc.yahoo.com',
|
||||
timeout=timeout,
|
||||
allow_redirects=True)
|
||||
except requests.exceptions.DNSError:
|
||||
# Possible because url on some privacy/ad blocklists
|
||||
except requests.exceptions.DNSError as e:
|
||||
# Possible because url on some privacy/ad blocklists.
|
||||
# Can ignore because have second strategy.
|
||||
utils.get_yf_logger().debug("Handling DNS error on cookie fetch: " + str(e))
|
||||
return False
|
||||
self._save_cookie_curlCffi()
|
||||
return True
|
||||
@@ -367,14 +372,24 @@ class YfData(metaclass=SingletonMeta):
|
||||
|
||||
@utils.log_indent_decorator
|
||||
def get(self, url, params=None, timeout=30):
|
||||
return self._make_request(url, request_method = self._session.get, params=params, timeout=timeout)
|
||||
response = self._make_request(url, request_method = self._session.get, params=params, timeout=timeout)
|
||||
|
||||
# Accept cookie-consent if redirected to consent page
|
||||
if not self._is_this_consent_url(response.url):
|
||||
# "Consent Page not detected"
|
||||
pass
|
||||
else:
|
||||
# "Consent Page detected"
|
||||
response = self._accept_consent_form(response, timeout)
|
||||
|
||||
return response
|
||||
|
||||
@utils.log_indent_decorator
|
||||
def post(self, url, body, params=None, timeout=30):
|
||||
return self._make_request(url, request_method = self._session.post, body=body, params=params, timeout=timeout)
|
||||
def post(self, url, body=None, params=None, timeout=30, data=None):
|
||||
return self._make_request(url, request_method = self._session.post, body=body, params=params, timeout=timeout, data=data)
|
||||
|
||||
@utils.log_indent_decorator
|
||||
def _make_request(self, url, request_method, body=None, params=None, timeout=30):
|
||||
def _make_request(self, url, request_method, body=None, params=None, timeout=30, data=None):
|
||||
# Important: treat input arguments as immutable.
|
||||
|
||||
if len(url) > 200:
|
||||
@@ -383,10 +398,13 @@ class YfData(metaclass=SingletonMeta):
|
||||
utils.get_yf_logger().debug(f'url={url}')
|
||||
utils.get_yf_logger().debug(f'params={params}')
|
||||
|
||||
# sync with config
|
||||
self._session.proxies = YfConfig.network.proxy
|
||||
|
||||
if params is None:
|
||||
params = {}
|
||||
if 'crumb' in params:
|
||||
raise Exception("Don't manually add 'crumb' to params dict, let data.py handle it")
|
||||
raise YFException("Don't manually add 'crumb' to params dict, let data.py handle it")
|
||||
|
||||
crumb, strategy = self._get_cookie_and_crumb()
|
||||
if crumb is not None:
|
||||
@@ -402,8 +420,20 @@ class YfData(metaclass=SingletonMeta):
|
||||
|
||||
if body:
|
||||
request_args['json'] = body
|
||||
|
||||
if data:
|
||||
request_args['data'] = data
|
||||
request_args['headers'] = {"Content-Type": "application/json"}
|
||||
|
||||
response = request_method(**request_args)
|
||||
for attempt in range(YfConfig.network.retries + 1):
|
||||
try:
|
||||
response = request_method(**request_args)
|
||||
break
|
||||
except Exception as e:
|
||||
if _is_transient_error(e) and attempt < YfConfig.network.retries:
|
||||
_time.sleep(2 ** attempt)
|
||||
else:
|
||||
raise
|
||||
utils.get_yf_logger().debug(f'response code={response.status_code}')
|
||||
if response.status_code >= 400:
|
||||
# Retry with other cookie strategy
|
||||
@@ -432,3 +462,83 @@ class YfData(metaclass=SingletonMeta):
|
||||
response = self.get(url, params=params, timeout=timeout)
|
||||
response.raise_for_status()
|
||||
return response.json()
|
||||
|
||||
def _is_this_consent_url(self, response_url: str) -> bool:
|
||||
"""
|
||||
Check if given response_url is consent page
|
||||
|
||||
Args:
|
||||
response_url (str) : response.url
|
||||
|
||||
Returns:
|
||||
True : This is cookie-consent page
|
||||
False : This is not cookie-consent page
|
||||
"""
|
||||
try:
|
||||
return urlsplit(response_url).hostname and urlsplit(
|
||||
response_url
|
||||
).hostname.endswith("consent.yahoo.com")
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
def _accept_consent_form(
|
||||
self, consent_resp: requests.Response, timeout: int
|
||||
) -> requests.Response:
|
||||
"""
|
||||
Click 'Accept all' to cookie-consent form and return response object.
|
||||
|
||||
Args:
|
||||
consent_resp (requests.Response) : Response instance of cookie-consent page
|
||||
timeout (int) : Raise TimeoutError if post doesn't respond
|
||||
|
||||
Returns:
|
||||
response (requests.Response) : Reponse instance received from the server after accepting cookie-consent post.
|
||||
"""
|
||||
soup = BeautifulSoup(consent_resp.text, "html.parser")
|
||||
|
||||
# Heuristic: pick the first form; Yahoo's CMP tends to have a single form for consent
|
||||
form = soup.find("form")
|
||||
if not form:
|
||||
return consent_resp
|
||||
|
||||
# action : URL to send "Accept Cookies"
|
||||
action = form.get("action") or consent_resp.url
|
||||
action = urljoin(consent_resp.url, action)
|
||||
|
||||
# Collect inputs (hidden tokens, etc.)
|
||||
"""
|
||||
<input name="csrfToken" type="hidden" value="..."/>
|
||||
<input name="sessionId" type="hidden" value="..."/>
|
||||
<input name="originalDoneUrl" type="hidden" value="..."/>
|
||||
<input name="namespace" type="hidden" value="yahoo"/>
|
||||
"""
|
||||
data = {}
|
||||
for inp in form.find_all("input"):
|
||||
name = inp.get("name")
|
||||
if not name:
|
||||
continue
|
||||
typ = (inp.get("type") or "text").lower()
|
||||
val = inp.get("value") or ""
|
||||
|
||||
if typ in ("checkbox", "radio"):
|
||||
# If it's clearly an "agree"/"accept" field or already checked, include it
|
||||
if (
|
||||
"agree" in name.lower()
|
||||
or "accept" in name.lower()
|
||||
or inp.has_attr("checked")
|
||||
):
|
||||
data[name] = val if val != "" else "1"
|
||||
else:
|
||||
data[name] = val
|
||||
|
||||
# If no explicit agree/accept in inputs, add a best-effort flag
|
||||
lowered = {k.lower() for k in data.keys()}
|
||||
if not any(("agree" in k or "accept" in k) for k in lowered):
|
||||
data["agree"] = "1"
|
||||
|
||||
# Submit the form with "Referer". Some servers check this header as a simple CSRF protection measure.
|
||||
headers = {"Referer": consent_resp.url}
|
||||
response = self._session.post(
|
||||
action, data=data, headers=headers, timeout=timeout, allow_redirects=True
|
||||
)
|
||||
return response
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
from abc import ABC, abstractmethod
|
||||
import pandas as _pd
|
||||
from typing import Dict, List, Optional
|
||||
import warnings
|
||||
|
||||
from ..const import _QUERY1_URL_, _SENTINEL_
|
||||
from ..const import _QUERY1_URL_
|
||||
from ..data import YfData
|
||||
from ..ticker import Ticker
|
||||
|
||||
@@ -15,9 +14,9 @@ class Domain(ABC):
|
||||
and methods for fetching and parsing data. Derived classes must implement the `_fetch_and_parse()` method.
|
||||
"""
|
||||
|
||||
def __init__(self, key: str, session=None, proxy=_SENTINEL_):
|
||||
def __init__(self, key: str, session=None):
|
||||
"""
|
||||
Initializes the Domain object with a key, session, and proxy.
|
||||
Initializes the Domain object with a key, session.
|
||||
|
||||
Args:
|
||||
key (str): Unique key identifying the domain entity.
|
||||
@@ -26,9 +25,6 @@ class Domain(ABC):
|
||||
self._key: str = key
|
||||
self.session = session
|
||||
self._data: YfData = YfData(session=session)
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
self._name: Optional[str] = None
|
||||
self._symbol: Optional[str] = None
|
||||
|
||||
@@ -2,10 +2,9 @@ from __future__ import print_function
|
||||
|
||||
import pandas as _pd
|
||||
from typing import Dict, Optional
|
||||
import warnings
|
||||
|
||||
from .. import utils
|
||||
from ..const import _SENTINEL_
|
||||
from ..config import YfConfig
|
||||
from ..data import YfData
|
||||
|
||||
from .domain import Domain, _QUERY_URL_
|
||||
@@ -15,15 +14,12 @@ class Industry(Domain):
|
||||
Represents an industry within a sector.
|
||||
"""
|
||||
|
||||
def __init__(self, key, session=None, proxy=_SENTINEL_):
|
||||
def __init__(self, key, session=None):
|
||||
"""
|
||||
Args:
|
||||
key (str): The key identifier for the industry.
|
||||
session (optional): The session to use for requests.
|
||||
"""
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
YfData(proxy=proxy)
|
||||
YfData(session=session)
|
||||
super(Industry, self).__init__(key, session)
|
||||
self._query_url = f'{_QUERY_URL_}/industries/{self._key}'
|
||||
@@ -96,7 +92,7 @@ class Industry(Domain):
|
||||
Returns:
|
||||
Optional[pd.DataFrame]: DataFrame containing parsed top performing companies data.
|
||||
"""
|
||||
compnaies_column = ['symbol','name','ytd return',' last price','target price']
|
||||
compnaies_column = ['symbol','name','ytd return','last price','target price']
|
||||
compnaies_values = [(c.get('symbol', None),
|
||||
c.get('name', None),
|
||||
c.get('ytdReturn',{}).get('raw', None),
|
||||
@@ -118,7 +114,7 @@ class Industry(Domain):
|
||||
Returns:
|
||||
Optional[pd.DataFrame]: DataFrame containing parsed top growth companies data.
|
||||
"""
|
||||
compnaies_column = ['symbol','name','ytd return',' growth estimate']
|
||||
compnaies_column = ['symbol','name','ytd return','growth estimate']
|
||||
compnaies_values = [(c.get('symbol', None),
|
||||
c.get('name', None),
|
||||
c.get('ytdReturn',{}).get('raw', None),
|
||||
@@ -147,6 +143,8 @@ class Industry(Domain):
|
||||
|
||||
return result
|
||||
except Exception as e:
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
logger = utils.get_yf_logger()
|
||||
logger.error(f"Failed to get industry data for '{self._key}' reason: {e}")
|
||||
logger.debug("Got response: ")
|
||||
|
||||
@@ -1,20 +1,18 @@
|
||||
import datetime as dt
|
||||
import json as _json
|
||||
import warnings
|
||||
|
||||
from ..const import _QUERY1_URL_, _SENTINEL_
|
||||
from ..config import YfConfig
|
||||
from ..const import _QUERY1_URL_
|
||||
from ..data import utils, YfData
|
||||
from ..exceptions import YFDataException
|
||||
|
||||
class Market:
|
||||
def __init__(self, market:'str', session=None, proxy=_SENTINEL_, timeout=30):
|
||||
def __init__(self, market:'str', session=None, timeout=30):
|
||||
self.market = market
|
||||
self.session = session
|
||||
self.timeout = timeout
|
||||
|
||||
self._data = YfData(session=self.session)
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
self._logger = utils.get_yf_logger()
|
||||
|
||||
@@ -24,12 +22,12 @@ class Market:
|
||||
def _fetch_json(self, url, params):
|
||||
data = self._data.cache_get(url=url, params=params, timeout=self.timeout)
|
||||
if data is None or "Will be right back" in data.text:
|
||||
raise RuntimeError("*** YAHOO! FINANCE IS CURRENTLY DOWN! ***\n"
|
||||
"Our engineers are working quickly to resolve "
|
||||
"the issue. Thank you for your patience.")
|
||||
raise YFDataException("*** YAHOO! FINANCE IS CURRENTLY DOWN! ***")
|
||||
try:
|
||||
return data.json()
|
||||
except _json.JSONDecodeError:
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
self._logger.error(f"{self.market}: Failed to retrieve market data and recieved faulty data.")
|
||||
return {}
|
||||
|
||||
@@ -66,6 +64,8 @@ class Market:
|
||||
self._summary = self._summary['marketSummaryResponse']['result']
|
||||
self._summary = {x['exchange']:x for x in self._summary}
|
||||
except Exception as e:
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
self._logger.error(f"{self.market}: Failed to parse market summary")
|
||||
self._logger.debug(f"{type(e)}: {e}")
|
||||
|
||||
@@ -75,18 +75,22 @@ class Market:
|
||||
self._status = self._status['finance']['marketTimes'][0]['marketTime'][0]
|
||||
self._status['timezone'] = self._status['timezone'][0]
|
||||
del self._status['time'] # redundant
|
||||
try:
|
||||
self._status.update({
|
||||
"open": dt.datetime.fromisoformat(self._status["open"]),
|
||||
"close": dt.datetime.fromisoformat(self._status["close"]),
|
||||
"tz": dt.timezone(dt.timedelta(hours=int(self._status["timezone"]["gmtoffset"]))/1000, self._status["timezone"]["short"])
|
||||
})
|
||||
except Exception as e:
|
||||
self._logger.error(f"{self.market}: Failed to update market status")
|
||||
self._logger.debug(f"{type(e)}: {e}")
|
||||
except Exception as e:
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
self._logger.error(f"{self.market}: Failed to parse market status")
|
||||
self._logger.debug(f"{type(e)}: {e}")
|
||||
try:
|
||||
self._status.update({
|
||||
"open": dt.datetime.fromisoformat(self._status["open"]),
|
||||
"close": dt.datetime.fromisoformat(self._status["close"]),
|
||||
"tz": dt.timezone(dt.timedelta(hours=int(self._status["timezone"]["gmtoffset"]))/1000, self._status["timezone"]["short"])
|
||||
})
|
||||
except Exception as e:
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
self._logger.error(f"{self.market}: Failed to update market status")
|
||||
self._logger.debug(f"{type(e)}: {e}")
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -2,10 +2,9 @@ from __future__ import print_function
|
||||
|
||||
import pandas as _pd
|
||||
from typing import Dict, Optional
|
||||
import warnings
|
||||
|
||||
from ..const import SECTOR_INDUSTY_MAPPING, _SENTINEL_
|
||||
from ..data import YfData
|
||||
from ..config import YfConfig
|
||||
from ..const import SECTOR_INDUSTY_MAPPING_LC
|
||||
from ..utils import dynamic_docstring, generate_list_table_from_dict, get_yf_logger
|
||||
|
||||
from .domain import Domain, _QUERY_URL_
|
||||
@@ -16,22 +15,17 @@ class Sector(Domain):
|
||||
such as top ETFs, top mutual funds, and industry data.
|
||||
"""
|
||||
|
||||
def __init__(self, key, session=None, proxy=_SENTINEL_):
|
||||
def __init__(self, key, session=None):
|
||||
"""
|
||||
Args:
|
||||
key (str): The key representing the sector.
|
||||
session (requests.Session, optional): A session for making requests. Defaults to None.
|
||||
proxy (dict, optional): A dictionary containing proxy settings for the request. Defaults to None.
|
||||
|
||||
.. seealso::
|
||||
|
||||
:attr:`Sector.industries <yfinance.Sector.industries>`
|
||||
Map of sector and industry
|
||||
"""
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
YfData(session=session, proxy=proxy)
|
||||
|
||||
super(Sector, self).__init__(key, session)
|
||||
self._query_url: str = f'{_QUERY_URL_}/sectors/{self._key}'
|
||||
self._top_etfs: Optional[Dict] = None
|
||||
@@ -69,7 +63,7 @@ class Sector(Domain):
|
||||
self._ensure_fetched(self._top_mutual_funds)
|
||||
return self._top_mutual_funds
|
||||
|
||||
@dynamic_docstring({"sector_industry": generate_list_table_from_dict(SECTOR_INDUSTY_MAPPING,bullets=True)})
|
||||
@dynamic_docstring({"sector_industry": generate_list_table_from_dict(SECTOR_INDUSTY_MAPPING_LC,bullets=True)})
|
||||
@property
|
||||
def industries(self) -> _pd.DataFrame:
|
||||
"""
|
||||
@@ -148,6 +142,8 @@ class Sector(Domain):
|
||||
self._industries = self._parse_industries(data.get('industries', {}))
|
||||
|
||||
except Exception as e:
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
logger = get_yf_logger()
|
||||
logger.error(f"Failed to get sector data for '{self._key}' reason: {e}")
|
||||
logger.debug("Got response: ")
|
||||
|
||||
@@ -7,6 +7,7 @@ from websockets.sync.client import connect as sync_connect
|
||||
from websockets.asyncio.client import connect as async_connect
|
||||
|
||||
from yfinance import utils
|
||||
from yfinance.config import YfConfig
|
||||
from yfinance.pricing_pb2 import PricingData
|
||||
from google.protobuf.json_format import MessageToDict
|
||||
|
||||
@@ -27,6 +28,8 @@ class BaseWebSocket:
|
||||
pricing_data.ParseFromString(decoded_bytes)
|
||||
return MessageToDict(pricing_data, preserving_proto_field_name=True)
|
||||
except Exception as e:
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
self.logger.error("Failed to decode message: %s", e, exc_info=True)
|
||||
if self.verbose:
|
||||
print("Failed to decode message: %s", e)
|
||||
@@ -61,6 +64,8 @@ class AsyncWebSocket(BaseWebSocket):
|
||||
if self.verbose:
|
||||
print("Connected to WebSocket.")
|
||||
except Exception as e:
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
self.logger.error("Failed to connect to WebSocket: %s", e, exc_info=True)
|
||||
if self.verbose:
|
||||
print(f"Failed to connect to WebSocket: {e}")
|
||||
@@ -79,6 +84,8 @@ class AsyncWebSocket(BaseWebSocket):
|
||||
if self.verbose:
|
||||
print(f"Heartbeat subscription sent for symbols: {self._subscriptions}")
|
||||
except Exception as e:
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
self.logger.error("Error in heartbeat subscription: %s", e, exc_info=True)
|
||||
if self.verbose:
|
||||
print(f"Error in heartbeat subscription: {e}")
|
||||
@@ -162,6 +169,8 @@ class AsyncWebSocket(BaseWebSocket):
|
||||
else:
|
||||
self._message_handler(decoded_message)
|
||||
except Exception as handler_exception:
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
self.logger.error("Error in message handler: %s", handler_exception, exc_info=True)
|
||||
if self.verbose:
|
||||
print("Error in message handler:", handler_exception)
|
||||
@@ -176,6 +185,8 @@ class AsyncWebSocket(BaseWebSocket):
|
||||
break
|
||||
|
||||
except Exception as e:
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
self.logger.error("Error while listening to messages: %s", e, exc_info=True)
|
||||
if self.verbose:
|
||||
print("Error while listening to messages: %s", e)
|
||||
@@ -301,6 +312,8 @@ class WebSocket(BaseWebSocket):
|
||||
try:
|
||||
message_handler(decoded_message)
|
||||
except Exception as handler_exception:
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
self.logger.error("Error in message handler: %s", handler_exception, exc_info=True)
|
||||
if self.verbose:
|
||||
print("Error in message handler:", handler_exception)
|
||||
@@ -314,6 +327,8 @@ class WebSocket(BaseWebSocket):
|
||||
break
|
||||
|
||||
except Exception as e:
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
self.logger.error("Error while listening to messages: %s", e, exc_info=True)
|
||||
if self.verbose:
|
||||
print("Error while listening to messages: %s", e)
|
||||
|
||||
@@ -21,12 +21,12 @@
|
||||
|
||||
import json as _json
|
||||
import pandas as pd
|
||||
import warnings
|
||||
|
||||
from . import utils
|
||||
from .const import _QUERY1_URL_, _SENTINEL_
|
||||
from .config import YfConfig
|
||||
from .const import _QUERY1_URL_
|
||||
from .data import YfData
|
||||
from .exceptions import YFException
|
||||
from .exceptions import YFDataException
|
||||
|
||||
LOOKUP_TYPES = ["all", "equity", "mutualfund", "etf", "index", "future", "currency", "cryptocurrency"]
|
||||
|
||||
@@ -38,19 +38,14 @@ class Lookup:
|
||||
:param query: The search query for financial data lookup.
|
||||
:type query: str
|
||||
:param session: Custom HTTP session for requests (default None).
|
||||
:param proxy: Proxy settings for requests (default None).
|
||||
:param timeout: Request timeout in seconds (default 30).
|
||||
:param raise_errors: Raise exceptions on error (default True).
|
||||
"""
|
||||
|
||||
def __init__(self, query: str, session=None, proxy=_SENTINEL_, timeout=30, raise_errors=True):
|
||||
def __init__(self, query: str, session=None, timeout=30, raise_errors=True):
|
||||
self.session = session
|
||||
self._data = YfData(session=self.session)
|
||||
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
self.query = query
|
||||
|
||||
self.timeout = timeout
|
||||
@@ -81,18 +76,19 @@ class Lookup:
|
||||
|
||||
data = self._data.get(url=url, params=params, timeout=self.timeout)
|
||||
if data is None or "Will be right back" in data.text:
|
||||
raise RuntimeError("*** YAHOO! FINANCE IS CURRENTLY DOWN! ***\n"
|
||||
"Our engineers are working quickly to resolve "
|
||||
"the issue. Thank you for your patience.")
|
||||
raise YFDataException("*** YAHOO! FINANCE IS CURRENTLY DOWN! ***")
|
||||
try:
|
||||
data = data.json()
|
||||
except _json.JSONDecodeError:
|
||||
self._logger.error(f"{self.query}: Failed to retrieve lookup results and received faulty response instead.")
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
self._logger.error(f"{self.ticker}: 'lookup' fetch received faulty data")
|
||||
data = {}
|
||||
|
||||
# Error returned
|
||||
if data.get("finance", {}).get("error", {}):
|
||||
raise YFException(data.get("finance", {}).get("error", {}))
|
||||
error = data.get("finance", {}).get("error", {})
|
||||
raise YFDataException(f"{self.ticker}: 'lookup' fetch returned error: {error}")
|
||||
|
||||
self._cache[cache_key] = data
|
||||
return data
|
||||
|
||||
@@ -25,7 +25,6 @@ import logging
|
||||
import time as _time
|
||||
import traceback
|
||||
from typing import Union
|
||||
import warnings
|
||||
|
||||
import multitasking as _multitasking
|
||||
import pandas as _pd
|
||||
@@ -34,13 +33,13 @@ from curl_cffi import requests
|
||||
from . import Ticker, utils
|
||||
from .data import YfData
|
||||
from . import shared
|
||||
from .const import _SENTINEL_
|
||||
from .config import YfConfig
|
||||
|
||||
@utils.log_indent_decorator
|
||||
def download(tickers, start=None, end=None, actions=False, threads=True,
|
||||
ignore_tz=None, group_by='column', auto_adjust=None, back_adjust=False,
|
||||
ignore_tz=None, group_by='column', auto_adjust=True, back_adjust=False,
|
||||
repair=False, keepna=False, progress=True, period=None, interval="1d",
|
||||
prepost=False, proxy=_SENTINEL_, rounding=False, timeout=10, session=None,
|
||||
prepost=False, rounding=False, timeout=10, session=None,
|
||||
multi_level_index=True) -> Union[_pd.DataFrame, None]:
|
||||
"""
|
||||
Download yahoo tickers
|
||||
@@ -96,16 +95,8 @@ def download(tickers, start=None, end=None, actions=False, threads=True,
|
||||
session = session or requests.Session(impersonate="chrome")
|
||||
|
||||
# Ensure data initialised with session.
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=3)
|
||||
YfData(proxy=proxy)
|
||||
YfData(session=session)
|
||||
|
||||
if auto_adjust is None:
|
||||
# Warn users that default has changed to True
|
||||
warnings.warn("YF.download() has changed argument auto_adjust default to True", FutureWarning, stacklevel=3)
|
||||
auto_adjust = True
|
||||
|
||||
if logger.isEnabledFor(logging.DEBUG):
|
||||
if threads:
|
||||
# With DEBUG, each thread generates a lot of log messages.
|
||||
@@ -261,7 +252,7 @@ def _realign_dfs():
|
||||
@_multitasking.task
|
||||
def _download_one_threaded(ticker, start=None, end=None,
|
||||
auto_adjust=False, back_adjust=False, repair=False,
|
||||
actions=False, progress=True, period="max",
|
||||
actions=False, progress=True, period=None,
|
||||
interval="1d", prepost=False,
|
||||
keepna=False, rounding=False, timeout=10):
|
||||
_download_one(ticker, start, end, auto_adjust, back_adjust, repair,
|
||||
@@ -273,25 +264,27 @@ def _download_one_threaded(ticker, start=None, end=None,
|
||||
|
||||
def _download_one(ticker, start=None, end=None,
|
||||
auto_adjust=False, back_adjust=False, repair=False,
|
||||
actions=False, period="max", interval="1d",
|
||||
actions=False, period=None, interval="1d",
|
||||
prepost=False, rounding=False,
|
||||
keepna=False, timeout=10):
|
||||
data = None
|
||||
|
||||
backup = YfConfig.network.hide_exceptions
|
||||
YfConfig.network.hide_exceptions = False
|
||||
try:
|
||||
data = Ticker(ticker).history(
|
||||
period=period, interval=interval,
|
||||
start=start, end=end, prepost=prepost,
|
||||
actions=actions, auto_adjust=auto_adjust,
|
||||
back_adjust=back_adjust, repair=repair,
|
||||
rounding=rounding, keepna=keepna, timeout=timeout,
|
||||
raise_errors=True
|
||||
rounding=rounding, keepna=keepna, timeout=timeout
|
||||
)
|
||||
shared._DFS[ticker.upper()] = data
|
||||
except Exception as e:
|
||||
# glob try/except needed as current thead implementation breaks if exception is raised.
|
||||
shared._DFS[ticker.upper()] = utils.empty_df()
|
||||
shared._ERRORS[ticker.upper()] = repr(e)
|
||||
shared._TRACEBACKS[ticker.upper()] = traceback.format_exc()
|
||||
else:
|
||||
shared._DFS[ticker.upper()] = data
|
||||
|
||||
YfConfig.network.hide_exceptions = backup
|
||||
|
||||
return data
|
||||
|
||||
@@ -1,20 +1,16 @@
|
||||
import curl_cffi
|
||||
import pandas as pd
|
||||
import warnings
|
||||
|
||||
from yfinance import utils
|
||||
from yfinance.const import quote_summary_valid_modules, _SENTINEL_
|
||||
from yfinance.config import YfConfig
|
||||
from yfinance.const import quote_summary_valid_modules
|
||||
from yfinance.data import YfData
|
||||
from yfinance.exceptions import YFException
|
||||
from yfinance.scrapers.quote import _QUOTE_SUMMARY_URL_
|
||||
|
||||
class Analysis:
|
||||
|
||||
def __init__(self, data: YfData, symbol: str, proxy=_SENTINEL_):
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
data._set_proxy(proxy)
|
||||
|
||||
def __init__(self, data: YfData, symbol: str):
|
||||
self._data = data
|
||||
self._symbol = symbol
|
||||
|
||||
@@ -84,6 +80,8 @@ class Analysis:
|
||||
data = self._fetch(['financialData'])
|
||||
data = data['quoteSummary']['result'][0]['financialData']
|
||||
except (TypeError, KeyError):
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
self._analyst_price_targets = {}
|
||||
return self._analyst_price_targets
|
||||
|
||||
@@ -107,6 +105,8 @@ class Analysis:
|
||||
data = self._fetch(['earningsHistory'])
|
||||
data = data['quoteSummary']['result'][0]['earningsHistory']['history']
|
||||
except (TypeError, KeyError):
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
self._earnings_history = pd.DataFrame()
|
||||
return self._earnings_history
|
||||
|
||||
@@ -143,6 +143,8 @@ class Analysis:
|
||||
trends = self._fetch(['industryTrend', 'sectorTrend', 'indexTrend'])
|
||||
trends = trends['quoteSummary']['result'][0]
|
||||
except (TypeError, KeyError):
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
self._growth_estimates = pd.DataFrame()
|
||||
return self._growth_estimates
|
||||
|
||||
@@ -180,7 +182,9 @@ class Analysis:
|
||||
try:
|
||||
result = self._data.get_raw_json(_QUOTE_SUMMARY_URL_ + f"/{self._symbol}", params=params_dict)
|
||||
except curl_cffi.requests.exceptions.HTTPError as e:
|
||||
utils.get_yf_logger().error(str(e))
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
utils.get_yf_logger().error(str(e) + e.response.text)
|
||||
return None
|
||||
return result
|
||||
|
||||
@@ -189,4 +193,6 @@ class Analysis:
|
||||
data = self._fetch(['earningsTrend'])
|
||||
self._earnings_trend = data['quoteSummary']['result'][0]['earningsTrend']['trend']
|
||||
except (TypeError, KeyError):
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
self._earnings_trend = []
|
||||
|
||||
@@ -5,16 +5,13 @@ import warnings
|
||||
import pandas as pd
|
||||
|
||||
from yfinance import utils, const
|
||||
from yfinance.config import YfConfig
|
||||
from yfinance.data import YfData
|
||||
from yfinance.exceptions import YFException, YFNotImplementedError
|
||||
|
||||
class Fundamentals:
|
||||
|
||||
def __init__(self, data: YfData, symbol: str, proxy=const._SENTINEL_):
|
||||
if proxy is not const._SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
data._set_proxy(proxy)
|
||||
|
||||
def __init__(self, data: YfData, symbol: str):
|
||||
self._data = data
|
||||
self._symbol = symbol
|
||||
|
||||
@@ -51,31 +48,19 @@ class Financials:
|
||||
self._balance_sheet_time_series = {}
|
||||
self._cash_flow_time_series = {}
|
||||
|
||||
def get_income_time_series(self, freq="yearly", proxy=const._SENTINEL_) -> pd.DataFrame:
|
||||
if proxy is not const._SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
def get_income_time_series(self, freq="yearly") -> pd.DataFrame:
|
||||
res = self._income_time_series
|
||||
if freq not in res:
|
||||
res[freq] = self._fetch_time_series("income", freq)
|
||||
return res[freq]
|
||||
|
||||
def get_balance_sheet_time_series(self, freq="yearly", proxy=const._SENTINEL_) -> pd.DataFrame:
|
||||
if proxy is not const._SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
def get_balance_sheet_time_series(self, freq="yearly") -> pd.DataFrame:
|
||||
res = self._balance_sheet_time_series
|
||||
if freq not in res:
|
||||
res[freq] = self._fetch_time_series("balance-sheet", freq)
|
||||
return res[freq]
|
||||
|
||||
def get_cash_flow_time_series(self, freq="yearly", proxy=const._SENTINEL_) -> pd.DataFrame:
|
||||
if proxy is not const._SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
def get_cash_flow_time_series(self, freq="yearly") -> pd.DataFrame:
|
||||
res = self._cash_flow_time_series
|
||||
if freq not in res:
|
||||
res[freq] = self._fetch_time_series("cash-flow", freq)
|
||||
@@ -104,6 +89,8 @@ class Financials:
|
||||
if statement is not None:
|
||||
return statement
|
||||
except YFException as e:
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
utils.get_yf_logger().error(f"{self._symbol}: Failed to create {name} financials table for reason: {e}")
|
||||
return pd.DataFrame()
|
||||
|
||||
@@ -117,6 +104,8 @@ class Financials:
|
||||
try:
|
||||
return self._get_financials_time_series(timescale, keys)
|
||||
except Exception:
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
pass
|
||||
|
||||
def _get_financials_time_series(self, timescale, keys: list) -> pd.DataFrame:
|
||||
@@ -159,6 +148,10 @@ class Financials:
|
||||
|
||||
df.index = df.index.str.replace("^" + timescale, "", regex=True)
|
||||
|
||||
# Ensure float type, not object
|
||||
for d in df.columns:
|
||||
df[d] = df[d].astype('float')
|
||||
|
||||
# Reorder table to match order on Yahoo website
|
||||
df = df.reindex([k for k in keys if k in df.index])
|
||||
df = df[sorted(df.columns, reverse=True)]
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import pandas as pd
|
||||
from typing import Dict, Optional
|
||||
import warnings
|
||||
|
||||
from yfinance import utils
|
||||
from yfinance.const import _BASE_URL_, _SENTINEL_
|
||||
from yfinance.config import YfConfig
|
||||
from yfinance.const import _BASE_URL_
|
||||
from yfinance.data import YfData
|
||||
from yfinance.exceptions import YFDataException
|
||||
|
||||
@@ -17,7 +17,7 @@ class FundsData:
|
||||
Notes:
|
||||
- fundPerformance module is not implemented as better data is queryable using history
|
||||
"""
|
||||
def __init__(self, data: YfData, symbol: str, proxy=_SENTINEL_):
|
||||
def __init__(self, data: YfData, symbol: str):
|
||||
"""
|
||||
Args:
|
||||
data (YfData): The YfData object for fetching data.
|
||||
@@ -25,9 +25,6 @@ class FundsData:
|
||||
"""
|
||||
self._data = data
|
||||
self._symbol = symbol
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
# quoteType
|
||||
self._quote_type = None
|
||||
@@ -193,8 +190,12 @@ class FundsData:
|
||||
self._parse_top_holdings(data["topHoldings"])
|
||||
self._parse_fund_profile(data["fundProfile"])
|
||||
except KeyError:
|
||||
raise YFDataException("No Fund data found.")
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
raise YFDataException(f"{self._symbol}: No Fund data found.")
|
||||
except Exception as e:
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
logger = utils.get_yf_logger()
|
||||
logger.error(f"Failed to get fund data for '{self._symbol}' reason: {e}")
|
||||
logger.debug("Got response: ")
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,9 +1,9 @@
|
||||
import curl_cffi
|
||||
import pandas as pd
|
||||
import warnings
|
||||
|
||||
from yfinance import utils
|
||||
from yfinance.const import _BASE_URL_, _SENTINEL_
|
||||
from yfinance.config import YfConfig
|
||||
from yfinance.const import _BASE_URL_
|
||||
from yfinance.data import YfData
|
||||
from yfinance.exceptions import YFDataException
|
||||
|
||||
@@ -12,12 +12,9 @@ _QUOTE_SUMMARY_URL_ = f"{_BASE_URL_}/v10/finance/quoteSummary"
|
||||
class Holders:
|
||||
_SCRAPE_URL_ = 'https://finance.yahoo.com/quote'
|
||||
|
||||
def __init__(self, data: YfData, symbol: str, proxy=_SENTINEL_):
|
||||
def __init__(self, data: YfData, symbol: str):
|
||||
self._data = data
|
||||
self._symbol = symbol
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
data._set_proxy(proxy)
|
||||
|
||||
self._major = None
|
||||
self._major_direct_holders = None
|
||||
@@ -75,7 +72,9 @@ class Holders:
|
||||
try:
|
||||
result = self._fetch()
|
||||
except curl_cffi.requests.exceptions.HTTPError as e:
|
||||
utils.get_yf_logger().error(str(e))
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
utils.get_yf_logger().error(str(e) + e.response.text)
|
||||
|
||||
self._major = pd.DataFrame()
|
||||
self._major_direct_holders = pd.DataFrame()
|
||||
@@ -98,6 +97,8 @@ class Holders:
|
||||
self._parse_insider_holders(data.get("insiderHolders", {}))
|
||||
self._parse_net_share_purchase_activity(data.get("netSharePurchaseActivity", {}))
|
||||
except (KeyError, IndexError):
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
raise YFDataException("Failed to parse holders json data.")
|
||||
|
||||
@staticmethod
|
||||
|
||||
@@ -3,10 +3,10 @@ import datetime
|
||||
import json
|
||||
import numpy as _np
|
||||
import pandas as pd
|
||||
import warnings
|
||||
|
||||
from yfinance import utils
|
||||
from yfinance.const import quote_summary_valid_modules, _BASE_URL_, _QUERY1_URL_, _SENTINEL_
|
||||
from yfinance.config import YfConfig
|
||||
from yfinance.const import quote_summary_valid_modules, _BASE_URL_, _QUERY1_URL_
|
||||
from yfinance.data import YfData
|
||||
from yfinance.exceptions import YFDataException, YFException
|
||||
|
||||
@@ -26,11 +26,8 @@ _QUOTE_SUMMARY_URL_ = f"{_BASE_URL_}/v10/finance/quoteSummary"
|
||||
class FastInfo:
|
||||
# Contain small subset of info[] items that can be fetched faster elsewhere.
|
||||
# Imitates a dict.
|
||||
def __init__(self, tickerBaseObject, proxy=_SENTINEL_):
|
||||
def __init__(self, tickerBaseObject):
|
||||
self._tkr = tickerBaseObject
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._tkr._data._set_proxy(proxy)
|
||||
|
||||
self._prices_1y = None
|
||||
self._prices_1wk_1h_prepost = None
|
||||
@@ -106,7 +103,7 @@ class FastInfo:
|
||||
|
||||
def __getitem__(self, k):
|
||||
if not isinstance(k, str):
|
||||
raise KeyError("key must be a string")
|
||||
raise KeyError(f"key must be a string not '{type(k)}'")
|
||||
if k not in self._keys:
|
||||
raise KeyError(f"'{k}' not valid key. Examine 'FastInfo.keys()'")
|
||||
if k in self._cc_to_sc_key:
|
||||
@@ -467,8 +464,6 @@ class FastInfo:
|
||||
except Exception as e:
|
||||
if "Cannot retrieve share count" in str(e):
|
||||
shares = None
|
||||
elif "failed to decrypt Yahoo" in str(e):
|
||||
shares = None
|
||||
else:
|
||||
raise
|
||||
|
||||
@@ -486,12 +481,9 @@ class FastInfo:
|
||||
|
||||
|
||||
class Quote:
|
||||
def __init__(self, data: YfData, symbol: str, proxy=_SENTINEL_):
|
||||
def __init__(self, data: YfData, symbol: str):
|
||||
self._data = data
|
||||
self._symbol = symbol
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
self._info = None
|
||||
self._retired_info = None
|
||||
@@ -523,6 +515,8 @@ class Quote:
|
||||
try:
|
||||
data = result["quoteSummary"]["result"][0]
|
||||
except (KeyError, IndexError):
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
raise YFDataException(f"Failed to parse json response from Yahoo Finance: {result}")
|
||||
self._sustainability = pd.DataFrame(data)
|
||||
return self._sustainability
|
||||
@@ -537,6 +531,8 @@ class Quote:
|
||||
try:
|
||||
data = result["quoteSummary"]["result"][0]["recommendationTrend"]["trend"]
|
||||
except (KeyError, IndexError):
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
raise YFDataException(f"Failed to parse json response from Yahoo Finance: {result}")
|
||||
self._recommendations = pd.DataFrame(data)
|
||||
return self._recommendations
|
||||
@@ -558,6 +554,8 @@ class Quote:
|
||||
df.index = pd.to_datetime(df.index, unit='s')
|
||||
self._upgrades_downgrades = df
|
||||
except (KeyError, IndexError):
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
raise YFDataException(f"Failed to parse json response from Yahoo Finance: {result}")
|
||||
return self._upgrades_downgrades
|
||||
|
||||
@@ -589,7 +587,9 @@ class Quote:
|
||||
try:
|
||||
result = self._data.get_raw_json(_QUOTE_SUMMARY_URL_ + f"/{self._symbol}", params=params_dict)
|
||||
except curl_cffi.requests.exceptions.HTTPError as e:
|
||||
utils.get_yf_logger().error(str(e))
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
utils.get_yf_logger().error(str(e) + e.response.text)
|
||||
return None
|
||||
return result
|
||||
|
||||
@@ -598,7 +598,9 @@ class Quote:
|
||||
try:
|
||||
result = self._data.get_raw_json(f"{_QUERY1_URL_}/v7/finance/quote?", params=params_dict)
|
||||
except curl_cffi.requests.exceptions.HTTPError as e:
|
||||
utils.get_yf_logger().error(str(e))
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
utils.get_yf_logger().error(str(e) + e.response.text)
|
||||
return None
|
||||
return result
|
||||
|
||||
@@ -740,6 +742,8 @@ class Quote:
|
||||
self._calendar['Revenue Low'] = earnings.get('revenueLow', None)
|
||||
self._calendar['Revenue Average'] = earnings.get('revenueAverage', None)
|
||||
except (KeyError, IndexError):
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
raise YFDataException(f"Failed to parse json response from Yahoo Finance: {result}")
|
||||
|
||||
|
||||
|
||||
@@ -165,7 +165,7 @@ class EquityQuery(QueryBase):
|
||||
"""
|
||||
return EQUITY_SCREENER_FIELDS
|
||||
|
||||
@dynamic_docstring({"valid_values_table": generate_list_table_from_dict_universal(EQUITY_SCREENER_EQ_MAP, concat_keys=['exchange'])})
|
||||
@dynamic_docstring({"valid_values_table": generate_list_table_from_dict_universal(EQUITY_SCREENER_EQ_MAP, concat_keys=['exchange', 'industry'])})
|
||||
@property
|
||||
def valid_values(self) -> Dict:
|
||||
"""
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
import curl_cffi
|
||||
from typing import Union
|
||||
import warnings
|
||||
from json import dumps
|
||||
|
||||
from yfinance.const import _QUERY1_URL_, _SENTINEL_
|
||||
from yfinance.const import _QUERY1_URL_
|
||||
from yfinance.data import YfData
|
||||
from ..utils import dynamic_docstring, generate_list_table_from_dict_universal
|
||||
|
||||
@@ -59,7 +60,7 @@ def screen(query: Union[str, EquityQuery, FundQuery],
|
||||
sortAsc: bool = None,
|
||||
userId: str = None,
|
||||
userIdType: str = None,
|
||||
session = None, proxy = _SENTINEL_):
|
||||
session = None):
|
||||
"""
|
||||
Run a screen: predefined query, or custom query.
|
||||
|
||||
@@ -111,11 +112,7 @@ def screen(query: Union[str, EquityQuery, FundQuery],
|
||||
{predefined_screeners}
|
||||
"""
|
||||
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
_data = YfData(session=session, proxy=proxy)
|
||||
else:
|
||||
_data = YfData(session=session)
|
||||
_data = YfData(session=session)
|
||||
|
||||
# Only use defaults when user NOT give a predefined, because
|
||||
# Yahoo's predefined endpoint auto-applies defaults. Also,
|
||||
@@ -198,10 +195,11 @@ def screen(query: Union[str, EquityQuery, FundQuery],
|
||||
elif isinstance(post_query['query'], FndQy):
|
||||
post_query['quoteType'] = 'MUTUALFUND'
|
||||
post_query['query'] = post_query['query'].to_dict()
|
||||
data = dumps(post_query, separators=(",", ":"), ensure_ascii=False)
|
||||
|
||||
# Fetch
|
||||
response = _data.post(_SCREENER_URL_,
|
||||
body=post_query,
|
||||
data=data,
|
||||
params=params_dict)
|
||||
response.raise_for_status()
|
||||
return response.json()['finance']['result'][0]
|
||||
|
||||
@@ -20,17 +20,18 @@
|
||||
#
|
||||
|
||||
import json as _json
|
||||
import warnings
|
||||
|
||||
from . import utils
|
||||
from .const import _BASE_URL_, _SENTINEL_
|
||||
from .config import YfConfig
|
||||
from .const import _BASE_URL_
|
||||
from .data import YfData
|
||||
from .exceptions import YFDataException
|
||||
|
||||
|
||||
class Search:
|
||||
def __init__(self, query, max_results=8, news_count=8, lists_count=8, include_cb=True, include_nav_links=False,
|
||||
include_research=False, include_cultural_assets=False, enable_fuzzy_query=False, recommended=8,
|
||||
session=None, proxy=_SENTINEL_, timeout=30, raise_errors=True):
|
||||
session=None, timeout=30, raise_errors=True):
|
||||
"""
|
||||
Fetches and organizes search results from Yahoo Finance, including stock quotes and news articles.
|
||||
|
||||
@@ -52,10 +53,6 @@ class Search:
|
||||
self.session = session
|
||||
self._data = YfData(session=self.session)
|
||||
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
|
||||
self.query = query
|
||||
self.max_results = max_results
|
||||
self.enable_fuzzy_query = enable_fuzzy_query
|
||||
@@ -104,13 +101,13 @@ class Search:
|
||||
|
||||
data = self._data.cache_get(url=url, params=params, timeout=self.timeout)
|
||||
if data is None or "Will be right back" in data.text:
|
||||
raise RuntimeError("*** YAHOO! FINANCE IS CURRENTLY DOWN! ***\n"
|
||||
"Our engineers are working quickly to resolve "
|
||||
"the issue. Thank you for your patience.")
|
||||
raise YFDataException("*** YAHOO! FINANCE IS CURRENTLY DOWN! ***")
|
||||
try:
|
||||
data = data.json()
|
||||
except _json.JSONDecodeError:
|
||||
self._logger.error(f"{self.query}: Failed to retrieve search results and received faulty response instead.")
|
||||
if not YfConfig.debug.hide_exceptions:
|
||||
raise
|
||||
self._logger.error(f"{self.query}: 'search' fetch received faulty data")
|
||||
data = {}
|
||||
|
||||
self._response = data
|
||||
|
||||
@@ -22,20 +22,16 @@
|
||||
from __future__ import print_function
|
||||
|
||||
from collections import namedtuple as _namedtuple
|
||||
import warnings
|
||||
|
||||
import pandas as _pd
|
||||
|
||||
from .base import TickerBase
|
||||
from .const import _BASE_URL_, _SENTINEL_
|
||||
from .const import _BASE_URL_
|
||||
from .scrapers.funds import FundsData
|
||||
|
||||
|
||||
class Ticker(TickerBase):
|
||||
def __init__(self, ticker, session=None, proxy=_SENTINEL_):
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
def __init__(self, ticker, session=None):
|
||||
super(Ticker, self).__init__(ticker, session=session)
|
||||
self._expirations = {}
|
||||
self._underlying = {}
|
||||
|
||||
@@ -21,12 +21,9 @@
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
import warnings
|
||||
|
||||
from . import Ticker, multi
|
||||
from .live import WebSocket
|
||||
from .data import YfData
|
||||
from .const import _SENTINEL_
|
||||
|
||||
|
||||
class Tickers:
|
||||
@@ -49,38 +46,25 @@ class Tickers:
|
||||
# "Tickers", ticker_objects.keys(), rename=True
|
||||
# )(*ticker_objects.values())
|
||||
|
||||
def history(self, period="1mo", interval="1d",
|
||||
def history(self, period=None, interval="1d",
|
||||
start=None, end=None, prepost=False,
|
||||
actions=True, auto_adjust=True, repair=False,
|
||||
proxy=_SENTINEL_,
|
||||
threads=True, group_by='column', progress=True,
|
||||
timeout=10, **kwargs):
|
||||
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
proxy = _SENTINEL_
|
||||
|
||||
return self.download(
|
||||
period, interval,
|
||||
start, end, prepost,
|
||||
actions, auto_adjust, repair,
|
||||
proxy,
|
||||
threads, group_by, progress,
|
||||
timeout, **kwargs)
|
||||
|
||||
def download(self, period="1mo", interval="1d",
|
||||
def download(self, period=None, interval="1d",
|
||||
start=None, end=None, prepost=False,
|
||||
actions=True, auto_adjust=True, repair=False,
|
||||
proxy=_SENTINEL_,
|
||||
threads=True, group_by='column', progress=True,
|
||||
timeout=10, **kwargs):
|
||||
|
||||
if proxy is not _SENTINEL_:
|
||||
warnings.warn("Set proxy via new config function: yf.set_config(proxy=proxy)", DeprecationWarning, stacklevel=2)
|
||||
self._data._set_proxy(proxy)
|
||||
proxy = _SENTINEL_
|
||||
|
||||
data = multi.download(self.symbols,
|
||||
start=start, end=end,
|
||||
actions=actions,
|
||||
|
||||
@@ -31,6 +31,7 @@ from functools import wraps
|
||||
from inspect import getmembers
|
||||
from types import FunctionType
|
||||
from typing import List, Optional
|
||||
import warnings
|
||||
|
||||
import numpy as _np
|
||||
import pandas as _pd
|
||||
@@ -39,6 +40,8 @@ from dateutil.relativedelta import relativedelta
|
||||
from pytz import UnknownTimeZoneError
|
||||
|
||||
from yfinance import const
|
||||
from yfinance.exceptions import YFException
|
||||
from yfinance.config import YfConfig
|
||||
|
||||
# From https://stackoverflow.com/a/59128615
|
||||
def attributes(obj):
|
||||
@@ -146,6 +149,12 @@ class YFLogFormatter(logging.Filter):
|
||||
def get_yf_logger():
|
||||
global yf_logger
|
||||
global yf_log_indented
|
||||
|
||||
if yf_log_indented and not YfConfig.debug.logging:
|
||||
_disable_debug_mode()
|
||||
elif YfConfig.debug.logging and not yf_log_indented:
|
||||
_enable_debug_mode()
|
||||
|
||||
if yf_log_indented:
|
||||
yf_logger = get_indented_logger('yfinance')
|
||||
elif yf_logger is None:
|
||||
@@ -155,6 +164,10 @@ def get_yf_logger():
|
||||
|
||||
|
||||
def enable_debug_mode():
|
||||
warnings.warn("enable_debug_mode() is replaced by: yf.config.debug.logging = True (or False to disable)", DeprecationWarning)
|
||||
_enable_debug_mode()
|
||||
|
||||
def _enable_debug_mode():
|
||||
global yf_logger
|
||||
global yf_log_indented
|
||||
if not yf_log_indented:
|
||||
@@ -170,6 +183,16 @@ def enable_debug_mode():
|
||||
yf_log_indented = True
|
||||
|
||||
|
||||
def _disable_debug_mode():
|
||||
global yf_logger
|
||||
global yf_log_indented
|
||||
if yf_log_indented:
|
||||
yf_logger = logging.getLogger('yfinance')
|
||||
yf_logger.setLevel(logging.NOTSET)
|
||||
yf_logger = None
|
||||
yf_log_indented = False
|
||||
|
||||
|
||||
def is_isin(string):
|
||||
return bool(_re.match("^([A-Z]{2})([A-Z0-9]{9})([0-9])$", string))
|
||||
|
||||
@@ -399,20 +422,23 @@ def snake_case_2_camelCase(s):
|
||||
return sc
|
||||
|
||||
|
||||
def _parse_user_dt(dt, exchange_tz):
|
||||
def _parse_user_dt(dt, exchange_tz=_tz.utc):
|
||||
if isinstance(dt, int):
|
||||
# Should already be epoch, test with conversion:
|
||||
_datetime.datetime.fromtimestamp(dt)
|
||||
dt = _pd.Timestamp(dt, unit="s", tz=exchange_tz)
|
||||
else:
|
||||
# Convert str/date -> datetime, set tzinfo=exchange, get timestamp:
|
||||
if isinstance(dt, str):
|
||||
dt = _datetime.datetime.strptime(str(dt), '%Y-%m-%d')
|
||||
if isinstance(dt, _datetime.date) and not isinstance(dt, _datetime.datetime):
|
||||
dt = _datetime.datetime.combine(dt, _datetime.time(0))
|
||||
if isinstance(dt, _datetime.datetime) and dt.tzinfo is None:
|
||||
# Assume user is referring to exchange's timezone
|
||||
dt = _tz.timezone(exchange_tz).localize(dt)
|
||||
dt = int(dt.timestamp())
|
||||
if isinstance(dt, _datetime.datetime):
|
||||
if dt.tzinfo is None:
|
||||
# Assume user is referring to exchange's timezone
|
||||
dt = _pd.Timestamp(dt).tz_localize(exchange_tz)
|
||||
else:
|
||||
dt = _pd.Timestamp(dt).tz_convert(exchange_tz)
|
||||
else: # if we reached here, then it hasn't been any known type
|
||||
raise ValueError(f"Unable to parse input dt {dt} of type {type(dt)}")
|
||||
return dt
|
||||
|
||||
|
||||
@@ -575,7 +601,8 @@ def fix_Yahoo_returning_prepost_unrequested(quotes, interval, tradingPeriods):
|
||||
quotes.index = idx
|
||||
# "end" = end of regular trading hours (including any auction)
|
||||
f_drop = quotes.index >= quotes["end"]
|
||||
f_drop = f_drop | (quotes.index < quotes["start"])
|
||||
td = _interval_to_timedelta(interval)
|
||||
f_drop = f_drop | (quotes.index + td <= quotes["start"])
|
||||
if f_drop.any():
|
||||
# When printing report, ignore rows that were already NaNs:
|
||||
# f_na = quotes[["Open","Close"]].isna().all(axis=1)
|
||||
@@ -699,14 +726,10 @@ def fix_Yahoo_returning_live_separate(quotes, interval, tz_exchange, prepost, re
|
||||
|
||||
|
||||
def safe_merge_dfs(df_main, df_sub, interval):
|
||||
if df_sub.empty:
|
||||
raise Exception("No data to merge")
|
||||
if df_main.empty:
|
||||
return df_main
|
||||
|
||||
data_cols = [c for c in df_sub.columns if c not in df_main]
|
||||
if len(data_cols) > 1:
|
||||
raise Exception("Expected 1 data col")
|
||||
data_col = data_cols[0]
|
||||
|
||||
df_main = df_main.sort_index()
|
||||
@@ -747,6 +770,13 @@ def safe_merge_dfs(df_main, df_sub, interval):
|
||||
if df_sub.empty:
|
||||
df_main['Dividends'] = 0.0
|
||||
return df_main
|
||||
|
||||
# df_sub changed so recalc indices:
|
||||
df_main['_date'] = df_main.index.date
|
||||
df_sub['_date'] = df_sub.index.date
|
||||
indices = _np.searchsorted(_np.append(df_main['_date'], [df_main['_date'].iloc[-1]+td]), df_sub['_date'], side='left')
|
||||
df_main = df_main.drop('_date', axis=1)
|
||||
df_sub = df_sub.drop('_date', axis=1)
|
||||
else:
|
||||
empty_row_data = {**{c:[_np.nan] for c in const._PRICE_COLNAMES_}, 'Volume':[0]}
|
||||
if interval == '1d':
|
||||
@@ -783,7 +813,7 @@ def safe_merge_dfs(df_main, df_sub, interval):
|
||||
f_outOfRange = indices == -1
|
||||
if f_outOfRange.any():
|
||||
if intraday or interval in ['1d', '1wk']:
|
||||
raise Exception(f"The following '{data_col}' events are out-of-range, did not expect with interval {interval}: {df_sub.index[f_outOfRange]}")
|
||||
raise YFException(f"The following '{data_col}' events are out-of-range, did not expect with interval {interval}: {df_sub.index[f_outOfRange]}")
|
||||
get_yf_logger().debug(f'Discarding these {data_col} events:' + '\n' + str(df_sub[f_outOfRange]))
|
||||
df_sub = df_sub[~f_outOfRange].copy()
|
||||
indices = indices[~f_outOfRange]
|
||||
@@ -805,7 +835,7 @@ def safe_merge_dfs(df_main, df_sub, interval):
|
||||
df = df.groupby("_NewIndex").prod()
|
||||
df.index.name = None
|
||||
else:
|
||||
raise Exception(f"New index contains duplicates but unsure how to aggregate for '{data_col_name}'")
|
||||
raise YFException(f"New index contains duplicates but unsure how to aggregate for '{data_col_name}'")
|
||||
if "_NewIndex" in df.columns:
|
||||
df = df.drop("_NewIndex", axis=1)
|
||||
return df
|
||||
@@ -817,7 +847,7 @@ def safe_merge_dfs(df_main, df_sub, interval):
|
||||
f_na = df[data_col].isna()
|
||||
data_lost = sum(~f_na) < df_sub.shape[0]
|
||||
if data_lost:
|
||||
raise Exception('Data was lost in merge, investigate')
|
||||
raise YFException('Data was lost in merge, investigate')
|
||||
|
||||
return df
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
version = "0.2.64"
|
||||
version = "1.0"
|
||||
|
||||
Reference in New Issue
Block a user