Showing preview only (5,091K chars total). Download the full file or copy to clipboard to get everything.
Repository: ranaroussi/yfinance
Branch: main
Commit: 4013a4fd745f
Files: 190
Total size: 4.8 MB
Directory structure:
gitextract_vs6ka022/
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ └── bug_report.yaml
│ ├── dependabot.yml
│ └── workflows/
│ ├── auto_close_default_issues.yml
│ ├── deploy_doc.yml
│ ├── pyright.yml
│ ├── pytest.yml.disabled
│ ├── python-publish.yml
│ └── ruff.yml
├── .gitignore
├── .travis.yml
├── CHANGELOG.rst
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE.txt
├── MANIFEST.in
├── README.md
├── doc/
│ ├── Makefile
│ ├── make.bat
│ └── source/
│ ├── _static/
│ │ └── yfinance.css
│ ├── _templates/
│ │ └── autosummary/
│ │ └── class.rst
│ ├── advanced/
│ │ ├── caching.rst
│ │ ├── config.rst
│ │ ├── index.rst
│ │ ├── logging.rst
│ │ ├── multi_level_columns.rst
│ │ └── price_repair.rst
│ ├── conf.py
│ ├── development/
│ │ ├── code.rst
│ │ ├── documentation.rst
│ │ ├── index.rst
│ │ ├── running.rst
│ │ └── testing.rst
│ ├── index.rst
│ └── reference/
│ ├── examples/
│ │ ├── calendars.py
│ │ ├── download.py
│ │ ├── funds_data.py
│ │ ├── live_async.py
│ │ ├── live_sync.py
│ │ ├── lookup.py
│ │ ├── market.py
│ │ ├── proxy.py
│ │ ├── search.py
│ │ ├── sector_industry.py
│ │ ├── sector_industry_ticker.py
│ │ ├── ticker.py
│ │ └── tickers.py
│ ├── index.rst
│ ├── yfinance.analysis.rst
│ ├── yfinance.calendars.rst
│ ├── yfinance.financials.rst
│ ├── yfinance.functions.rst
│ ├── yfinance.funds_data.rst
│ ├── yfinance.market.rst
│ ├── yfinance.price_history.rst
│ ├── yfinance.screener.rst
│ ├── yfinance.search.rst
│ ├── yfinance.sector_industry.rst
│ ├── yfinance.stock.rst
│ ├── yfinance.ticker_tickers.rst
│ └── yfinance.websocket.rst
├── meta.yaml
├── pyrightconfig.json
├── requirements.txt
├── setup.cfg
├── setup.py
├── tests/
│ ├── __init__.py
│ ├── context.py
│ ├── data/
│ │ ├── 1398-HK-1d-bad-div-fixed.csv
│ │ ├── 1398-HK-1d-bad-div.csv
│ │ ├── 3988-HK-1d-bad-div-fixed.csv
│ │ ├── 3988-HK-1d-bad-div.csv
│ │ ├── 4063-T-1d-bad-div-fixed.csv
│ │ ├── 4063-T-1d-bad-div.csv
│ │ ├── 4063-T-1d-bad-stock-split-fixed.csv
│ │ ├── 4063-T-1d-bad-stock-split.csv
│ │ ├── 8TRA-DE-1d-missing-div-adjust-fixed.csv
│ │ ├── 8TRA-DE-1d-missing-div-adjust.csv
│ │ ├── ABDP-L-1d-bad-div-fixed.csv
│ │ ├── ABDP-L-1d-bad-div.csv
│ │ ├── ADIG-L-1d-bad-div-fixed.csv
│ │ ├── ADIG-L-1d-bad-div.csv
│ │ ├── AET-L-1d-100x-error-fixed.csv
│ │ ├── AET-L-1d-100x-error.csv
│ │ ├── ALPHA-PA-1d-bad-stock-split-fixed.csv
│ │ ├── ALPHA-PA-1d-bad-stock-split.csv
│ │ ├── AV-L-1wk-bad-stock-split-fixed.csv
│ │ ├── AV-L-1wk-bad-stock-split.csv
│ │ ├── CALM-1d-no-bad-divs.csv
│ │ ├── CLC-L-1d-bad-div-fixed.csv
│ │ ├── CLC-L-1d-bad-div.csv
│ │ ├── CNE-L-1d-bad-stock-split-fixed.csv
│ │ ├── CNE-L-1d-bad-stock-split.csv
│ │ ├── DEX-AX-1d-bad-stock-split-fixed.csv
│ │ ├── DEX-AX-1d-bad-stock-split.csv
│ │ ├── DODFX-1d-cg-double-count-fixed.csv
│ │ ├── DODFX-1d-cg-double-count.csv
│ │ ├── ELCO-L-1d-bad-div-fixed.csv
│ │ ├── ELCO-L-1d-bad-div.csv
│ │ ├── EWG-1d-no-bad-divs.csv
│ │ ├── HSBK-IL-1d-no-bad-divs.csv
│ │ ├── IBE-MC-1d-no-bad-divs.csv
│ │ ├── JENYX-1d-cg-double-count-fixed.csv
│ │ ├── JENYX-1d-cg-double-count.csv
│ │ ├── KAP-IL-1d-bad-div-fixed.csv
│ │ ├── KAP-IL-1d-bad-div.csv
│ │ ├── KEN-TA-1d-bad-div-fixed.csv
│ │ ├── KEN-TA-1d-bad-div.csv
│ │ ├── KME-MI-1d-bad-div-fixed.csv
│ │ ├── KME-MI-1d-bad-div.csv
│ │ ├── KMR-L-1d-no-bad-divs.csv
│ │ ├── LA-V-1d-bad-stock-split-fixed.csv
│ │ ├── LA-V-1d-bad-stock-split.csv
│ │ ├── LSC-L-1d-bad-div-fixed.csv
│ │ ├── LSC-L-1d-bad-div.csv
│ │ ├── MOB-ST-1d-bad-stock-split-fixed.csv
│ │ ├── MOB-ST-1d-bad-stock-split.csv
│ │ ├── NVT-L-1d-bad-div-fixed.csv
│ │ ├── NVT-L-1d-bad-div.csv
│ │ ├── PSH-L-1d-bad-div-fixed.csv
│ │ ├── PSH-L-1d-bad-div.csv
│ │ ├── REL-L-1d-bad-div-fixed.csv
│ │ ├── REL-L-1d-bad-div.csv
│ │ ├── RGL-L-1d-bad-div-fixed.csv
│ │ ├── RGL-L-1d-bad-div.csv
│ │ ├── SAND-1d-bad-div-fixed.csv
│ │ ├── SAND-1d-bad-div.csv
│ │ ├── SCR-TO-1d-bad-div-fixed.csv
│ │ ├── SCR-TO-1d-bad-div.csv
│ │ ├── SERE-L-1d-bad-div-fixed.csv
│ │ ├── SERE-L-1d-bad-div.csv
│ │ ├── SPM-MI-1d-bad-stock-split-fixed.csv
│ │ ├── SPM-MI-1d-bad-stock-split.csv
│ │ ├── SSW-JO-1d-100x-error-fixed.csv
│ │ ├── SSW-JO-1d-100x-error.csv
│ │ ├── TEM-L-1d-bad-div-fixed.csv
│ │ ├── TEM-L-1d-bad-div.csv
│ │ ├── TENT-L-1d-bad-div-fixed.csv
│ │ ├── TENT-L-1d-bad-div.csv
│ │ ├── TEP-PA-1d-bad-div-fixed.csv
│ │ ├── TEP-PA-1d-bad-div.csv
│ │ ├── TISG-MI-1d-no-bad-divs.csv
│ │ ├── VWILX-1d-cg-double-count-fixed.csv
│ │ └── VWILX-1d-cg-double-count.csv
│ ├── test_cache.py
│ ├── test_cache_noperms.py
│ ├── test_calendars.py
│ ├── test_live.py
│ ├── test_lookup.py
│ ├── test_price_repair.py
│ ├── test_prices.py
│ ├── test_screener.py
│ ├── test_search.py
│ ├── test_ticker.py
│ └── test_utils.py
└── yfinance/
├── __init__.py
├── base.py
├── cache.py
├── calendars.py
├── config.py
├── const.py
├── data.py
├── domain/
│ ├── __init__.py
│ ├── domain.py
│ ├── industry.py
│ ├── market.py
│ └── sector.py
├── exceptions.py
├── live.py
├── lookup.py
├── multi.py
├── pricing.proto
├── pricing_pb2.py
├── scrapers/
│ ├── __init__.py
│ ├── analysis.py
│ ├── fundamentals.py
│ ├── funds.py
│ ├── history.py
│ ├── holders.py
│ ├── quote.py
│ └── yahoo-keys.txt
├── screener/
│ ├── __init__.py
│ ├── query.py
│ └── screener.py
├── search.py
├── shared.py
├── ticker.py
├── tickers.py
├── utils.py
└── version.py
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/FUNDING.yml
================================================
# # These are supported funding model platforms
# github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
# patreon: # Replace with a single Patreon username
# open_collective: # Replace with a single Open Collective username
# ko_fi: # Replace with a single Ko-fi username
# tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
# community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
# liberapay: # Replace with a single Liberapay username
# issuehunt: # Replace with a single IssueHunt username
# otechie: # Replace with a single Otechie username
# custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
patreon: ranaroussi
custom: ['https://paypal.me/ranaroussi']
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yaml
================================================
name: Bug report
description: Report a bug in our project
labels: ["bug"]
body:
- type: markdown
attributes:
value: |
# !!! IMPORTANT !!! FOLLOW THESE INSTRUCTIONS CAREFULLY !!!
### Are you up-to-date?
Upgrade to the latest version: `$ pip install yfinance --upgrade --no-cache-dir`
Confirm latest version by running: `import yfinance as yf ; print(yf.__version__)` and comparing against [PyPI](https://pypi.org/project/yfinance/#history).
### Does Yahoo actually have the data?
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.
### 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?
Yahoo Finance free service has rate-limiting https://github.com/ranaroussi/yfinance/discussions/1513. Once limit hit, Yahoo can delay, block, or return bad data -> not a `yfinance` bug.
### Does issue already exist?
Use the search tool. Don't duplicate existing issues.
- type: markdown
attributes:
value: |
---
## Still think it's a bug?
Provide the following as best you can:
- type: textarea
id: summary
attributes:
label: "Describe bug"
validations:
required: true
- type: textarea
id: code
attributes:
label: "Simple code that reproduces your problem"
description: "Provide a snippet of code that we can copy-paste-run. Wrap code in Python Markdown code blocks for proper formatting (```` ```python ... ``` ````)."
validations:
required: true
- type: textarea
id: debug-log
attributes:
label: "Debug log with debug logging enabled"
description: |
Enable debug logging, reproduce the issue, then paste the full output:
import yfinance as yf
yf.config.debug.logging = True
Context: https://ranaroussi.github.io/yfinance/advanced/logging.html
validations:
required: true
- type: textarea
id: bad-data-proof
attributes:
label: "Bad data proof"
description: "If yfinance returning bad data, show proof of good data on Yahoo Finance website here."
validations:
required: false
- type: input
id: version-yfinance
attributes:
label: "`yfinance` version"
validations:
required: true
- type: input
id: version-python
attributes:
label: "Python version"
validations:
required: false
- type: input
id: os
attributes:
label: "Operating system"
validations:
required: false
================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
- package-ecosystem: pip
directory: "/"
schedule:
interval: daily
open-pull-requests-limit: 10
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
================================================
FILE: .github/workflows/auto_close_default_issues.yml
================================================
name: Auto-close issues using default template
on:
issues:
types: [opened]
jobs:
check-template:
runs-on: ubuntu-latest
steps:
- name: Check if issue uses custom template
uses: actions/github-script@v8
with:
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
const hasCustomFields = body.includes('### Describe bug') ||
body.includes('### Simple code that reproduces');
// 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 be a bug report but doesn\'t use our bug report template. Resubmit with our custom bug report form..'
});
await github.rest.issues.update({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
state: 'closed'
});
}
================================================
FILE: .github/workflows/deploy_doc.yml
================================================
name: Build and Deploy Sphinx Docs
on:
push:
branches:
- main
# - dev-documented
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Check out the repository
uses: actions/checkout@v6
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: '3.x'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install Sphinx==8.0.2 pydata-sphinx-theme==0.15.4 Jinja2==3.1.4 sphinx-copybutton==0.5.2
- name: Build Sphinx documentation
run: |
sphinx-build -b html doc/source doc/_build/html -v
- name: List generated HTML files
run: |
ls -l -R doc/_build/html
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_branch: documentation
publish_dir: doc/_build/html
destination_dir: docs
enable_jekyll: false
================================================
FILE: .github/workflows/pyright.yml
================================================
name: Pyright
on:
pull_request:
branches:
- master
- main
- dev
jobs:
pyright:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Set up Python
uses: actions/setup-python@v6
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pyright
- name: Run Pyright
run: pyright . --level error
================================================
FILE: .github/workflows/pytest.yml.disabled
================================================
name: Pytest
on:
pull_request:
branches:
- master
- main
- dev
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.12"
cache: 'pip'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt pytest
- name: Run non-cache tests
run: pytest tests/ --ignore tests/test_cache.py --ignore tests/test_price_repair.py
- name: Run cache tests
run: |
pytest tests/test_cache.py::TestCache
pytest tests/test_cache.py::TestCacheNoPermission
================================================
FILE: .github/workflows/python-publish.yml
================================================
# This workflow will upload a Python Package using Twine when a release is created
# For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries
name: Upload Python Package
on:
release:
types: [created]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: '3.x'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install setuptools wheel twine
- name: Build and publish
env:
TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
run: |
python setup.py sdist bdist_wheel
twine upload dist/*
================================================
FILE: .github/workflows/ruff.yml
================================================
name: Ruff
on:
pull_request:
branches:
- master
- main
- dev
jobs:
ruff:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: astral-sh/ruff-action@v3
with:
args: check --ignore E702 . --exclude yfinance/pricing_pb2.py
================================================
FILE: .gitignore
================================================
__pycache__/*
yfinance/__pycache__/*
dist
yfinance.egg-info
*.pyc
.coverage
.idea/
.vscode/
build/
*.html
*.css
test.ipynb
# Environments
.env
.venv
env/
venv/
ENV/
# Documentation
/doc/build/
/doc/_build/
/doc/source/reference/api
!yfinance.css
!/doc/source/development/assets/branches.png
================================================
FILE: .travis.yml
================================================
language: python
sudo: true
fast_finish: true
matrix:
include:
- python: 2.7
- python: 3.6
- python: 3.7
- python: 3.8
- python: 3.9
dist: xenial
sudo: true
install:
- pip install Cython
- pip install pytest>=4.6
- pip install pytest-cov
- pip install coveralls
- pip install -r requirements.txt
- pip install .
script:
- pytest --cov=yfinance/
after_success:
- coveralls
branches:
only:
- main
notifications:
slack: tradologics:HcnS6XusfcuS02waQPCG18oc
webhooks:
on_success: change # options: [always|never|change] default: always
on_failure: always # options: [always|never|change] default: always
on_start: never # options: [always|never|change] default: always
================================================
FILE: CHANGELOG.rst
================================================
Change Log
===========
1.2.0
-----
Features:
- update exchange maps for equities and mutual funds. #2685
Fixes:
- handle Pandas to_numpy() returning read-only #2697
1.1.0
-----
Features:
- New price repair: capital gains double-counting #2667
Fixes:
- Fix Saudi Arabia MIC Code #2665 @salsugair
- Add config to __all__ #2673 @kbluck
- Fix Python 3.9 compatibility regression in calendars.py #2674 @orionnelson
- Improve stock-split repair false-positives #2668
- Docs for capital-gains repair; Fix warnings in price-repair 27cb8aa
Already in main:
- Upgrade to Pandas 3.0 (Fixes #2679) #2683
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:
- handle dividends with FX, convert if repair=True #2549
- fix 'period' arg when start or end set #2550
earnings_dates: handle 'Event Type' properly #2555
0.2.63
------
Fix download(ISIN) # 2531
0.2.62
------
Fix prices 'period=max' sometimes failing # 2509
ISIN cache #2516
Proxy:
- fix false 'proxy deprecated' messages
- fix ISIN + proxy #2514
- replace print_once with warnings #2523
Error handling:
- detect rate-limit during crumb fetch #2491
- replace requests.HTTPError with curl_cffi
0.2.61
------
Fix ALL type hints in websocket #2493
0.2.60
------
Fix cookie reuse, and handle DNS blocking fc.yahoo.com #2483
Fixes for websocket:
- relax protobuf version #2485
- increase websockets version #2485
- fix type hints #2488
Fix predefined screen offset #2440
0.2.59
------
Fix the fix for rate-limit #2452
Feature: live price data websocket #2201
0.2.58
------
Fix false rate-limit problem #2430
Fix predefined screen size/count #2425
0.2.57
------
Fix proxy msg & pass-thru #2418
0.2.56
------
Features:
- Ticker lookups #2364
- Config #2391
Fixes:
- converting end epoch to localized dt #2378
- info IndexError #2382
- AttributeError: module 'requests.cookies' has no attribute 'update' #2388
- fix_Yahoo_returning_live_separate() #2389
0.2.55
------
Features
- TTM financials #2321
Fixes
- info IndexError #2354
- earnings dates TZ #2366
- price repair tweaks & fixes #2368
- history caching #2345
- backup fetch TZ from info #2369
Maintenance
- log user agent #2326
0.2.54
------
Hotfix user-agent #2277
0.2.53
------
Fixes:
- Fix: Failed to parse holders JSON data #2234
- Fix: Bad data in Holders #2244
- Stop CSRF-cookie-fetch fail killing yfinance #2249
- Fix Market Docs #2250
- Fix: Broken "See also" links in documentation #2253
- Fix: Interval check and error message formatting in multi.py #2256
Improve:
- Add pre- / post-stock prices (and other useful information) #2212
- Warn user when use download() without specifying auto_adjust #2230
- Refactor: Earnings Dates – Switch to API Fetching #2247
- Improve prices div repair #2260
Maintenance:
- Add GitHub Actions workflow and fix failing tests #2233
0.2.52
------
Features:
- Improve Screener & docs #2207
- Add Market summary & status #2175
- Support custom period in Ticker.history() #2192
- raise YfRateLimitError if rate limited #2108
- add more options to Search #2191
Fixes:
- remove hardcoded keys in Analysis #2194
- handle Yahoo changed Search response #2202
Maintenance:
- add optional dependencies to requirements.txt #2199
0.2.51
------
Features:
- Screener tweaks #2168
- Search #2160
- get_news() expose count #2173
Fixes:
- earnings_dates #2169
0.2.50
------
Fixes:
- price repair #2111 #2139
- download() appearance 2109
- isin() error #2099
- growth_estimates #2127
Also new docs #2132
0.2.49
------
Fix prices-clean rarely discarding good data #2122
0.2.47 and 0.2.48
-----------------
Add yf.download(multi_level_index)
0.2.46
------
Fix regression in 0.2.45 #2094
0.2.45
------
Features:
- Screener #2066 @ericpien
Fixes
- Tickers keyerror #2068 @antoniouaa
- IndexError in some history() debug messages #2087
- improve dividend repair #2090
Maintenance
- fix unit tests contextual imports #2067
- fix typos #2072 @algonell
- add Pyright type checking #2059 @marco-carvalho
0.2.44
------
Features:
- fetch funds #2041
- fetch sector & industry #2058
Fixes:
- improve dividend repair #2062
0.2.43
------
Fix price-repair bug introduced in 0.2.42 #2036
0.2.42
------
Features:
- fetch SEC filings #2009
- fetch analysis #2023 @Fidasek009
- price repair extended to dividends & adjust #2031
Fixes:
- fix error on empty options chain #1995 @stevenbischoff
- use dict.get() to safely access key in Holders #2013 @ericpien
- fix datetime conversion with mixed timezones when ignore_tz is False #2016 @mreiche
- handle faulty response object when getting news. #2021 @ericpien
Maintenance:
- prices: improve exceptions and logging #2000
0.2.41
------
Improvements:
- add keys to financials #1965 #1985
- fetch Sustainability #1959
- improve price-repair-zeroes #1990
Fixes (prices):
- fetching when period='max' #1967
- metadata: Fix '1wk is invalid' & repeated calls #1970
- Pandas warnings #1955 #1981
- price repair syntax errors #1989
Maintenance:
- deprecate Ticker.earnings #1977
0.2.40
------
Fix typo in 0.2.39 c7af213
0.2.39
------
Fixes:
- Fix switching session from/to requests_cache #1930
Price repair:
- Fix potential for price repair to discard price=0 rows #1874
- Don't price-repair FX volume=0, is normal #1920
- Improve 'sudden change' repair for splits & currency #1931
Information:
- Fix help(yf.download) not showing the information about the function #1913 @vittoboa
- Add more specific error throwing based on PR 1918 #1928 @elibroftw @marcofognog
Maintenance:
- Replace dead 'appdirs' package with 'platformdirs' #1896
- Deprecate 'pandas_datareader', remove a deprecated argument #1897
- Fix: datetime.datetime.utcnow() is deprecated ... #1922
0.2.38
------
Fix holders & insiders #1908
0.2.37
------
Small fixes:
- Fix Pandas warnings #1838 #1844
- Fix price repair bug, typos, refactor #1866 #1865 #1849
- Stop disabling logging #1841
0.2.36
------
Small fixes:
- Update README.md for better copy-ability #1823
- Name download() column levels #1795
- Fix history(keepna=False) when repair=True #1824
- Replace empty list with empty pd.Series #1724
- Handle peewee with old sqlite #1827
- Fix JSON error handling #1830 #1833
0.2.35
------
Internal fixes for 0.2.34
0.2.34
------
Features:
- Add Recommendations Trend Summary #1754
- Add Recommendation upgrades & downgrades #1773
- Add Insider Roster & Transactions #1772
- Moved download() progress bar to STDERR #1776
- PIP optional dependencies #1771
- Set sensible min versions for optional 'nospam' reqs #1807
Fixes
- Fix download() DatetimeIndex on invalid symbols #1779
- Fix invalid date entering cache DB #1796
- Fix Ticker.calendar fetch #1790
- Fixed adding complementary to info #1774
- Ticker.earnings_dates: fix warning "Value 'NaN' has dtype incompatible with float64" #1810
- Minor fixes for price repair and related tests #1768
- Fix price repair div adjust #1798
- Fix 'raise_errors' argument ignored in Ticker.history() #1806
Maintenance
- Fix regression: _get_ticker_tz() args were being swapped. Improve its unit test #1793
- Refactor Ticker proxy #1711
- Add Ruff linter checks #1756
- Resolve Pandas FutureWarnings #1766
0.2.33
------
Cookie fixes:
- fix backup strategy #1759
- fix Ticker(ISIN) #1760
0.2.32
------
Add cookie & crumb to requests #1657
0.2.31
------
- Fix TZ cache exception blocking import #1705 #1709
- Fix merging pre-market events with intraday prices #1703
0.2.30
------
- Fix OperationalError #1698
0.2.29
------
- Fix pandas warning when retrieving quotes. #1672
- Replace sqlite3 with peewee for 100% thread-safety #1675
- Fix merging events with intraday prices #1684
- Fix error when calling enable_debug_mode twice #1687
- Price repair fixes #1688
0.2.28
------
- Fix TypeError: 'FastInfo' object is not callable #1636
- Improve & fix price repair #1633 #1660
- option_chain() also return underlying data #1606
0.2.27
------
Bug fixes:
- fix merging 1d-prices with out-of-range divs/splits #1635
- fix multithread error 'tz already in cache' #1648
0.2.26
------
Proxy improvements
- bug fixes #1371
- security fix #1625
0.2.25
------
Fix single ISIN as ticker #1611
Fix 'Only 100 years allowed' error #1576
0.2.24
------
Fix info[] missing values #1603
0.2.23
------
Fix 'Unauthorized' error #1595
0.2.22
------
Fix unhandled 'sqlite3.DatabaseError' #1574
0.2.21
------
Fix financials tables #1568
Price repair update: fix Yahoo messing up dividend and split adjustments #1543
Fix logging behaviour #1562
Fix merge future div/split into prices #1567
0.2.20
------
Switch to `logging` module #1493 #1522 #1541
Price history:
- optimise #1514
- fixes #1523
- fix TZ-cache corruption #1528
0.2.18
------
Fix 'fast_info' error '_np not found' #1496
Fix bug in timezone cache #1498
0.2.17
------
Fix prices error with Pandas 2.0 #1488
0.2.16
------
Fix 'fast_info deprecated' msg appearing at Ticker() init
0.2.15
------
Restore missing Ticker.info keys #1480
0.2.14
------
Fix Ticker.info dict by fetching from API #1461
0.2.13
------
Price bug fixes:
- fetch big-interval with Capital Gains #1455
- merging dividends & splits with prices #1452
0.2.12
------
Disable annoying 'backup decrypt' msg
0.2.11
------
Fix history_metadata accesses for unusual symbols #1411
0.2.10
------
General
- allow using sqlite3 < 3.8.2 #1380
- add another backup decrypt option #1379
Prices
- restore original download() timezone handling #1385
- fix & improve price repair #1289 2a2928b 86d6acc
- drop intraday intervals if in post-market but prepost=False #1311
Info
- fast_info improvements:
- add camelCase keys, add dict functions values() & items() #1368
- fix fast_info["previousClose"] #1383
- catch TypeError Exception #1397
0.2.9
-----
- Fix fast_info bugs #1362
0.2.7
-----
- Fix Yahoo decryption, smarter this time #1353
- Rename basic_info -> fast_info #1354
0.2.6
-----
- Fix Ticker.basic_info lazy-loading #1342
0.2.5
-----
- Fix Yahoo data decryption again #1336
- New: Ticker.basic_info - faster Ticker.info #1317
0.2.4
-----
- Fix Yahoo data decryption #1297
- New feature: 'Ticker.get_shares_full()' #1301
- Improve caching of financials data #1284
- Restore download() original alignment behaviour #1283
- Fix the database lock error in multithread download #1276
0.2.3
-----
- Make financials API '_' use consistent
0.2.2
-----
- Restore 'financials' attribute (map to 'income_stmt')
0.2.1
-----
Release!
0.2.0rc5
--------
- Improve financials error handling #1243
- Fix '100x price' repair #1244
0.2.0rc4
--------
- Access to old financials tables via `get_income_stmt(legacy=True)`
- Optimise scraping financials & fundamentals, 2x faster
- Add 'capital gains' alongside dividends & splits for ETFs, and metadata available via `history_metadata`, plus a bunch of price fixes
For full list of changes see #1238
0.2.0rc2
--------
Financials
- fix financials tables to match website #1128 #1157
- lru_cache to optimise web requests #1147
Prices
- improve price repair #1148
- fix merging dividends/splits with day/week/monthly prices #1161
- fix the Yahoo DST fixes #1143
- improve bad/delisted ticker handling #1140
Misc
- fix 'trailingPegRatio' #1138
- improve error handling #1118
0.2.0rc1
--------
Jumping to 0.2 for this big update. 0.1.* will continue to receive bug-fixes
- timezone cache performance massively improved. Thanks @fredrik-corneliusson #1113 #1112 #1109 #1105 #1099
- price repair feature #1110
- fix merging of dividends/splits with prices #1069 #1086 #1102
- fix Yahoo returning latest price interval across 2 rows #1070
- optional: raise errors as exceptions: raise_errors=True #1104
- add proper unit tests #1069
0.1.81
------
- Fix unhandled tz-cache exception #1107
0.1.80
------
- Fix `download(ignore_tz=True)` for single ticker #1097
- Fix rare case of error "Cannot infer DST time" #1100
0.1.79
------
- Fix when Yahoo returns price=NaNs on dividend day
0.1.78
------
- Fix download() when different timezones #1085
0.1.77
------
- Fix user experience bug #1078
0.1.75
------
- Fixed datetime-related issues: #1048
- Add 'keepna' argument #1032
- Speedup Ticker() creation #1042
- Improve a bugfix #1033
0.1.74
------
- Fixed bug introduced in 0.1.73 (sorry :/)
0.1.73
------
- Merged several PR that fixed misc issues
0.1.72
------
- Misc bugfixs
0.1.71
------
- Added Tickers(…).news()
- Return empty DF if YF missing earnings dates
- Fix EPS % to 0->1
- Fix timezone handling
- Fix handling of missing data
- Clean&format earnings_dates table
- Add ``.get_earnings_dates()`` to retrieve earnings calendar
- Added ``.get_earnings_history()`` to fetch earnings data
0.1.70
------
- Bug fixed - Closes #937
0.1.69
------
- Bug fixed - #920
0.1.68
------
- Upgraded requests dependency
- Removed Python 3.5 support
0.1.67
------
- Added legal disclaimers to make sure people are aware that this library is not affiliated, endorsed, or vetted by Yahoo, Inc.
0.1.66
------
- Merged PR to allow yfinance to be pickled
0.1.65
------
- Merged PRs to fix some bugs
- Added lookup by ISIN ``utils.get_all_by_isin(...)``, ``utils.get_ticker_by_isin(...)``, ``utils.get_info_by_isin(...)``, ``utils.get_news_by_isin(...)``
- ``yf.Ticker``, ``yf.Tickers``, and ``yf.download`` will auto-detect ISINs and convert them to tickers
- Propagating timeout parameter through code, setting request.get(timeout)
- Adds ``Ticker.analysis`` and ``Ticker.get_analysis(...)``
0.1.64
------
- Merged PRs to fix some bugs
- Added ``Ticker.stats()`` method
- Added ``Ticker.news`` property
- Providing topHoldings for ETFs
- Replaceed drop duplicate prices with indexes
- Added pre-market price to ``Ticker.info``
0.1.63
------
- Duplicates and missing rows cleanup
0.1.62
------
- Added UserAgent to all requests (via ```utils.user_agent_headers```)
0.1.61
------
- Switched to using ```query2.finance.yahoo.com```, which used HTTP/1.1
0.1.60
------
- Gracefully fail on misc operations (options, auto/back adjustments, etc)
- Added financial data to ```info()```
- Using session headers
- Get price even if open price not available
- Argument added for silencing error printing
- Merged PRs to fix some bugs
0.1.59
------
- Added custom requests session instance support in holders
0.1.58
------
- Allow specifying a custom requests session instance
0.1.57
------
- Added Conversion rate hint using 'financialCurrency' property in earnings
- Add important try+catch statements
- Fixed issue with 1 hour interval
- Merged PRs to fix some bugs
- Fixed issue with special characters in tickers
0.1.56
------
- Updated numpy version
- Merged PRs to fix some bugs
0.1.55
------
- Fixed institutional investors and mutual fund holders issue (#459)
- Fix for UTC timestamps in options chains (#429)
0.1.54
------
- ISIN lookup working with intl. tickers
0.1.53
------
- Added ``Ticker.isin`` + ``Ticker.get_isin(...)``. This is still experimental. Do not rely on it for production.
- Bug fixed: holders were always returning results for MSFT
0.1.52
------
- Improved JSON regex parsing
0.1.51
------
- Added holdings data (``Ticker.major_holders`` and ``Ticker.institutional_holders``)
- Added logo url to ``Ticker.info``
- Handling different date formats in fundamentals
- Faster JSON parsing using regex
- Trying to re-download JSON twice before giving up
- Using ujson instead of json if installed
- Fixed (more) ``ticker.info`` issues
- Misc bugfixes
0.1.50
------
- Fixed ``ticker.info`` issues
- Handle sustainability index error
- Added test script based on @GregoryMorse's pull request
0.1.49
------
- Fixed ``elementwise comparison`` warning
0.1.48
------
- Fixed issues related to non-publicly traded tickers (crypto, currency, etc)
0.1.47
------
- Fixed options-related bug that was caused by code refactoring
0.1.46
------
- Rerwote all fundamental-related methods, which now support quarterly financials, cashflow, balance sheets, and earnings, analysts recommendations, and earnings calendar data
- Code refactoring
0.1.45
------
- Added sustainability data/error handling for ETF/MF (by GregoryMorse)
- Avoid rounding the values retrieved from Yahoo by default (by aglebov)
- Added 'rename=True' for the namedtuple (raffieeey)
0.1.44
------
- Improved ``Tickers`` module (see https://github.com/ranaroussi/yfinance/issues/86)
- Misc bugfixes
0.1.43
------
- Bugfixes
0.1.42
------
- Fix data realignment when Yahoo returns with missing/malform data
0.1.41
------
- Added methods for downloading option chain
0.1.40
------
- Fixed issue related to threads when downloading many symbols
- Fix issue relared to missing data
0.1.39
------
- Added ``Ticker('XXX').financials``, ``Ticker('XXX').balance_sheet``, and ``Ticker('XXX').cashflow``
- Proxy can be used when downloading actions
0.1.38
------
- Making sure tickers are always uppercase
- Added Tickers to ``__all__``
- Updated readme to reflect current library structure
0.1.37
------
- Overriding old ``pandas_datareader.data.DataReader`` when calling ``pdr_override()``
- ``Tickers()`` returns a named tuple of ``Ticker()`` objects
0.1.36
------
- Package renamed to ``yfinance``
- Added option to specify proxy server
0.1.35
------
- Updated requirements
0.1.34
------
- Intercept yahoo "site down" message
- Better period handling
- Threading is True by default
0.1.33
------
- Better error handling
0.1.32
------
- Better error handling
- Updated min. versions for requirements
0.1.31
------
- Include ticker in error message if error is raised
0.1.30
------
- Fixed Yahoo!'s 30m bars being returned as 60m/15m
0.1.29
------
- Fixed issue with Pandas "DataFrame constructor not properly called!"
- If ``threads`` is set to True, it will default to number of tickers (max = @ of CPU cores)
0.1.28
------
- Threading defaults to ``False``
0.1.27
------
- Threading is back :)
0.1.26
------
- Fixed weird bug with Yahoo!, which is returning 60m interval when requesting for 30m interval, by requesting 15m interval and resampling the returned data
- ``Ticker.history()`` auto-adjusts data by default
0.1.21 - 0.1.25
------
- Bugfixs
0.1.2
------
- Round prices based on metadata decimals
0.1.1
------
- Setting Volume colume as np.int64 dtype to avoid integer overflow on Windows
0.1.0
-------
- Works with v8 API
- Introduced Ticker module
- Complete re-write of the entire code
- Skipped a bunch of version :)
0.0.22
-------
- Deprecated Panel support
0.0.21
-------
- Code cleanup
0.0.20
-------
- Fixed issue with progress bar (issue #42)
0.0.19
-------
- Misc bugfixes
0.0.18
-------
- Minor Bugfixes
- Added deprecation warning for future versions regarding auto-overriding pandas_datareader
0.0.17
-------
- Handles duplicate index
0.0.16
-------
- Progress bar bugfix
0.0.15
-------
- Bugfix (closing issue #11)
0.0.14
-------
- Added support for Python 2.7
- Confirming valid data returned before adding it to ``_DFS_``
0.0.13
-------
- Removed debugging code
0.0.12
-------
- Minor bug fix (closing #6)
0.0.11
-------
- Downloads ONLY dividend and stock splits data using ``actions='only'``)
0.0.10
-------
- Downloads dividend and stock splits data (use ``actions=True``)
0.0.9
-------
- Add ``threads`` parameter to ``download()`` (# of threads to use)
0.0.8
-------
- Removed 5 second wait for every failed fetch
- Reduced TTL for Yahoo!'s cookie
- Keeps track of failed downloads and tries to re-download all failed downloads one more time before giving up
- Added progress bar (can be turned off using ``progress=False``)
0.0.7
-------
- ``pandas_datareader`` is optional (can be called via ``download()`` or via ``pdr.get_data_yahoo()``)
- Tries to re-fetch Yahoo cookie in case of timeout/error
0.0.6
-------
- Forcing index to be of datetime type
0.0.5
-------
- Works using ``requests`` = no need for Selenium, PyVirtualDisplay, or Chrome Driver
0.0.4
-------
- Removed ALL debugging code :)
0.0.3
-------
- Removed debugging code
0.0.2
-------
- Option to explicitly specify the location of the Chrome driver
0.0.1
-------
- Initial release (alpha)
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Code of Conduct
## Submitting a new issue
* Search through existing Issues and Discussions, in case your issue already exists and a solution is being developed.
* Ensure you read & follow the template form.
* Consider you may be the best person to investigate and fix.
## Contributing to an existing Issue
* Read the entire thread.
* Ensure your comment is contributing something new/useful. Remember you can simply react to other comments.
* Be concise:
- use the formatting options
- if replying to a big comment, instead of quoting it, link to it
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing
yfinance relies on the community to investigate bugs and contribute code.
This is a quick short guide, full guide at https://ranaroussi.github.io/yfinance/development/index.html
## Branches
YFinance uses a two-layer branch model:
* **dev**: new features & most bug-fixes merged here, tested together, conflicts fixed, etc.
* **main**: stable branch where PIP releases are created.
## Running a branch
```bash
pip install git+ranaroussi/yfinance.git@dev # <- dev branch
```
https://ranaroussi.github.io/yfinance/development/running.html
### I'm a GitHub newbie, how do I contribute code?
1. Fork this project. If already forked, remember to `Sync fork`
2. Implement your change in your fork, ideally in a specific branch
3. Create a [Pull Request](https://github.com/ranaroussi/yfinance/pulls), from your fork to this project. If addressing an Issue, link to it
https://ranaroussi.github.io/yfinance/development/code.html
## Documentation website
The new docs website is generated automatically from code. https://ranaroussi.github.io/yfinance/index.html
Remember to updates docs when you change code, and check docs locally.
https://ranaroussi.github.io/yfinance/development/documentation.html
## Git tricks
Help keep the Git commit history and [network graph](https://github.com/ranaroussi/yfinance/network) compact:
* got a long descriptive commit message? `git commit -m "short sentence summary" -m "full commit message"`
* combine multiple commits into 1 with `git squash`
* `git rebase` is your friend: change base branch, or "merge in" updates
https://ranaroussi.github.io/yfinance/development/code.html#git-stuff
## Unit tests
Tests have been written using the built-in Python module `unittest`. Examples:
* Run all tests: `python -m unittest discover -s tests`
https://ranaroussi.github.io/yfinance/development/testing.html
> See the [Developer Guide](https://ranaroussi.github.io/yfinance/development/contributing.html#GIT-STUFF) for more information.
================================================
FILE: LICENSE.txt
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: MANIFEST.in
================================================
# Include the license file
include LICENSE.txt
# Include the data files
recursive-include data *
================================================
FILE: README.md
================================================
<img src="./doc/yfinance-gh-logo-dark.webp#gh-dark-mode-only" height="100">
<img src="./doc/yfinance-gh-logo-light.webp#gh-light-mode-only" height="100">
# Download market data from Yahoo! Finance's API
<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=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).
---
> [!IMPORTANT]
> **Yahoo!, Y!Finance, and Yahoo! finance are registered trademarks of Yahoo, Inc.**
>
> 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 intended for research and educational purposes.
>
> **You should refer to Yahoo!'s terms of use** ([here](https://policies.yahoo.com/us/en/yahoo/terms/product-atos/apiforydn/index.htm), [here](https://legal.yahoo.com/us/en/yahoo/terms/otos/index.html), and [here](https://policies.yahoo.com/us/en/yahoo/terms/index.htm)) **for details on your rights to use the actual data downloaded.
>
> Remember - the Yahoo! finance API is intended for personal use only.**
---
> [!TIP]
> THE NEW DOCUMENTATION WEBSITE IS NOW LIVE! 🤘
>
> Visit [**ranaroussi.github.io/yfinance**](https://ranaroussi.github.io/yfinance)
---
## Main components
- `Ticker`: single ticker data
- `Tickers`: multiple tickers' data
- `download`: download market data for multiple tickers
- `Market`: get information about a market
- `WebSocket` and `AsyncWebSocket`: live streaming data
- `Search`: quotes and news from search
- `Sector` and `Industry`: sector and industry information
- `EquityQuery` and `Screener`: build query to screen market
## Installation
Install `yfinance` from PYPI using `pip`:
``` {.sourceCode .bash}
$ pip install yfinance
```
### [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)
---

---
### Legal Stuff
**yfinance** is distributed under the **Apache Software License**. See
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
intended for research and educational purposes. You should refer to Yahoo!'s terms of use
([here](https://policies.yahoo.com/us/en/yahoo/terms/product-atos/apiforydn/index.htm),
[here](https://legal.yahoo.com/us/en/yahoo/terms/otos/index.html), and
[here](https://policies.yahoo.com/us/en/yahoo/terms/index.htm)) for
details on your rights to use the actual data downloaded.
---
### P.S.
Please drop me a note with any feedback you have.
**Ran Aroussi**
================================================
FILE: doc/Makefile
================================================
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line, and also
# from the environment for the first two.
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
SOURCEDIR = source
BUILDDIR = build
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
.PHONY: help Makefile
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
================================================
FILE: doc/make.bat
================================================
@ECHO OFF
pushd %~dp0
REM Command file for Sphinx documentation
if "%SPHINXBUILD%" == "" (
set SPHINXBUILD=sphinx-build
)
set SOURCEDIR=source
set BUILDDIR=build
%SPHINXBUILD% >NUL 2>NUL
if errorlevel 9009 (
echo.
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
echo.installed, then set the SPHINXBUILD environment variable to point
echo.to the full path of the 'sphinx-build' executable. Alternatively you
echo.may add the Sphinx directory to PATH.
echo.
echo.If you don't have Sphinx installed, grab it from
echo.https://www.sphinx-doc.org/
exit /b 1
)
if "%1" == "" goto help
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
goto end
:help
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
:end
popd
================================================
FILE: doc/source/_static/yfinance.css
================================================
/* Hide the "Section Navigation" title */
p.bd-links__title {
display: none;
}
================================================
FILE: doc/source/_templates/autosummary/class.rst
================================================
:orphan:
{{ objname | escape | underline }}
.. currentmodule:: {{ module }}
.. autoclass:: {{ objname }}
:exclude-members: {% for item in attributes %}{{ item }}{% if not loop.last %}, {% endif %}{% endfor %}
{% block attributes %}
{% if attributes %}
.. rubric:: Attributes
{% for item in attributes %}
.. autoattribute:: {{ item }}
:noindex:
{%- endfor %}
{% endif %}
{% endblock attributes %}
{% block methods %}
{% if methods %}
.. rubric:: Methods
{% for item in methods %}
.. automethod:: {{ item }}
:noindex:
{%- endfor %}
{% endif %}
{% endblock methods %}
================================================
FILE: doc/source/advanced/caching.rst
================================================
Caching
=======
Persistent Cache
----------------
To reduce Yahoo, yfinance store some data locally: timezones to localize dates, and cookie. Cache location is:
- Windows = C:/Users/\<USER\>/AppData/Local/py-yfinance
- Linux = /home/\<USER\>/.cache/py-yfinance
- MacOS = /Users/\<USER\>/Library/Caches/py-yfinance
You can direct cache to use a different location with :attr:`set_tz_cache_location <yfinance.set_tz_cache_location>`:
.. code-block:: python
import yfinance as yf
yf.set_tz_cache_location("custom/cache/location")
================================================
FILE: doc/source/advanced/config.rst
================================================
******
Config
******
`yfinance` has a new global config for sharing common values:
.. code-block:: python
>>> 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
================================================
FILE: doc/source/advanced/index.rst
================================================
========
Advanced
========
.. toctree::
:maxdepth: 2
logging
config
caching
multi_level_columns
price_repair
================================================
FILE: doc/source/advanced/logging.rst
================================================
Logging
=======
`yfinance` uses the `logging` module to handle messages. By default, only errors are logged.
If debugging, you can switch to debug mode with custom formatting using:
.. code-block:: python
import yfinance as yf
yf.config.debug.logging = True
================================================
FILE: doc/source/advanced/multi_level_columns.rst
================================================
************************
Multi-Level Column Index
************************
The following answer on Stack Overflow is for `How to deal with
multi-level column names downloaded with yfinance? <https://stackoverflow.com/questions/63107801>`_
- `yfinance` returns a `pandas.DataFrame` with multi-level column names, with a level for the ticker and a level for the stock price data
The answer discusses:
- How to correctly read the multi-level columns after saving the dataframe to a csv with `pandas.DataFrame.to_csv`
- How to download single or multiple tickers into a singledataframe with single level column names and a ticker column
================================================
FILE: doc/source/advanced/price_repair.rst
================================================
************
Price Repair
************
The new argument ``repair=True`` in ``history()`` and ``download()`` will attempt to fix a variety of price errors caused by Yahoo. Only US market data appears perfect, I guess Yahoo doesn't care much about rest of world?
The returned table will have a new column ``Repaired?`` that specifies if row was repaired.
Price repair
============
Missing dividend adjustment
---------------------------
If dividend in data but preceding ``Adj Close`` = ``Close``, then manually apply dividend-adjustment to ``Adj Close``.
Note: ``Repaired?`` is NOT set to ``True`` because fix only changes ``Adj Close``
.. figure:: /_static/images/repair-prices-missing-div-adjust.png
:alt: 8TRA.DE: repair missing dividend adjustment
:width: 80%
:align: left
8TRA.DE
.. container:: clearer
..
Missing split adjustment
------------------------
If stock split in data but preceding price data is not adjusted, then manually apply stock split.
Requires date range include 1 day after stock split for calibration - sometimes Yahoo fails to adjust prices on stock split day.
.. figure:: /_static/images/repair-prices-missing-split-adjust.png
:alt: MOB.ST: repair missing split adjustment
:width: 80%
:align: left
MOB.ST
.. container:: clearer
..
Missing data
------------
If price data is clearly missing or corrupt, then reconstructed using smaller interval e.g. ``1h`` to fix ``1d`` data.
.. figure:: /_static/images/repair-prices-missing-row.png
:alt: 1COV.DE: repair missing row
:width: 80%
:align: left
1COV.DE missing row
.. container:: clearer
..
.. figure:: /_static/images/repair-prices-missing-volume-intraday.png
:alt: 1COV.DE: repair missing Volume, but intraday price changed
:width: 80%
:align: left
1COV.DE missing Volume, but intraday price changed
.. container:: clearer
..
.. figure:: /_static/images/repair-prices-missing-volume-daily.png
:alt: 0316.HK: repair missing Volume, but daily price changed
:width: 80%
:align: left
0316.HK missing Volume, but daily price changed
.. container:: clearer
..
100x errors
-----------
Sometimes Yahoo mixes up currencies e.g. $/cents or £/pence. So some prices are 100x wrong.
Sometimes they are spread randomly through data - these detected with ``scipy`` module.
Other times they are in a block, because Yahoo decided one day to permanently switch currency.
.. figure:: /_static/images/repair-prices-100x.png
:alt: AET.L: repair 100x
:width: 80%
:align: left
AET.L
Price reconstruction - algorithm notes
--------------------------------------
Spam minimised by grouping fetches. Tries to be aware of data limits e.g. ``1h`` cannot be fetched beyond 2 years.
If Yahoo eventually does fix the bad data that required reconstruction, you will see it's slightly different to reconstructed prices and volume often significantly different. Best I can do, and beats missing data.
Dividend repair (new)
=====================
Fix errors in dividends:
1. adjustment missing or 100x too small/big for the dividend
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.
IMPORTANT - false positives
---------------------------
Because fixing (3) relies on price action, there is a chance of a "false positive" (FP) - thinking an error exists when data is good.
FP rate increases with longer intervals, so only 1d intervals are repaired. If you request repair on multiday intervals (weekly etc), then: 1d is fetched from Yahoo, repaired, then resampled - **this has nice side-effect of solving Yahoo's flawed way of div-adjusting multiday intervals.**
FP rate on 1d is tiny. They tend to happen with tiny dividends e.g. 0.5%, mistaking normal price volatility for an ex-div drop 100x bigger than the dividend, causing repair of the "too small" dividend (repair logic already tries to account for normal volatility by subtracting median). Either accept the risk, or fetch 6-12 months of prices with at least 2 dividends - then can analyse the dividends together to identify false positives.
Adjustment missing
------------------
1398.HK
.. code-block:: text
# ORIGINAL:
Close Adj Close Dividends
2024-07-08 00:00:00+08:00 4.33 4.33 0.335715
2024-07-04 00:00:00+08:00 4.83 4.83 0.000000
.. code-block:: text
# REPAIRED:
Close Adj Close Dividends
2024-07-08 00:00:00+08:00 4.33 4.330000 0.335715
2024-07-04 00:00:00+08:00 4.83 4.494285 0.000000
Adjustment too small
--------------------
3IN.L
.. code-block:: text
# ORIGINAL:
Close Adj Close Dividends
2024-06-13 00:00:00+01:00 3.185 3.185000 0.05950
2024-06-12 00:00:00+01:00 3.270 3.269405 0.00000
.. code-block:: text
# REPAIRED:
Close Adj Close Dividends
2024-06-13 00:00:00+01:00 3.185 3.185000 0.05950
2024-06-12 00:00:00+01:00 3.270 3.210500 0.00000
Duplicate (within 7 days)
-------------------------
ALC.SW
.. code-block:: text
# ORIGINAL:
Close Adj Close Dividends
2023-05-10 00:00:00+02:00 70.580002 70.352142 0.21
2023-05-09 00:00:00+02:00 65.739998 65.318443 0.21
2023-05-08 00:00:00+02:00 66.379997 65.745682 0.00
.. code-block:: text
# REPAIRED:
Close Adj Close Dividends
2023-05-10 00:00:00+02:00 70.580002 70.352142 0.00
2023-05-09 00:00:00+02:00 65.739998 65.527764 0.21
2023-05-08 00:00:00+02:00 66.379997 65.956371 0.00
Dividend too big
----------------
HLCL.L
.. code-block:: text
# ORIGINAL:
Close Adj Close Dividends
2024-06-27 00:00:00+01:00 2.360 2.3600 1.78
2024-06-26 00:00:00+01:00 2.375 2.3572 0.00
# REPAIRED:
Close Adj Close Dividends
2024-06-27 00:00:00+01:00 2.360 2.3600 0.0178
2024-06-26 00:00:00+01:00 2.375 2.3572 0.0000
Dividend & adjust too big
-------------------------
LTI.L
.. code-block:: text
# ORIGINAL:
Close Adj Close Adj Dividends
2024-08-08 00:00:00+01:00 768.0 768.0 1.0000 5150.0
2024-08-07 00:00:00+01:00 819.0 -4331.0 -5.2882 0.0
Close Adj Close Adj Dividends
2024-08-08 00:00:00+01:00 768.0 768.0 1.0000 51.5
2024-08-07 00:00:00+01:00 819.0 767.5 0.9371 0.0
Dividend too small
------------------
BVT.L
.. code-block:: text
# ORIGINAL:
Close Adj Close Adj Dividends
2022-02-03 00:00:00+00:00 0.7534 0.675197 0.8962 0.00001
2022-02-01 00:00:00+00:00 0.7844 0.702970 0.8962 0.00000
.. code-block:: text
# REPAIRED:
Close Adj Close Adj Dividends
2022-02-03 00:00:00+00:00 0.7534 0.675197 0.8962 0.001
2022-02-01 00:00:00+00:00 0.7844 0.702075 0.8950 0.000
Adjusted 2x on day before
-------------------------
clue: Close < Low
2020.OL
.. code-block:: text
# ORIGINAL:
Low Close Adj Close Dividends
2023-12-21 00:00:00+01:00 120.199997 121.099998 118.868782 0.18
2023-12-20 00:00:00+01:00 122.000000 121.900002 119.477371 0.00
.. code-block:: text
# REPAIRED:
Low Close Adj Close Dividends
2023-12-21 00:00:00+01:00 120.199997 121.099998 118.868782 0.18
2023-12-20 00:00:00+01:00 122.000000 122.080002 119.654045 0.00
ex-div date wrong
-----------------
TETY.ST
.. code-block:: text
# ORIGINAL:
Close Adj Close Dividends
2022-06-22 00:00:00+02:00 66.699997 60.085415 0.0
2022-06-21 00:00:00+02:00 71.599998 64.499489 0.0
2022-06-20 00:00:00+02:00 71.800003 64.679657 5.0
2022-06-17 00:00:00+02:00 71.000000 59.454838 0.0
.. code-block:: text
# REPAIRED:
Close Adj Close Dividends
2022-06-22 00:00:00+02:00 66.699997 60.085415 5.0
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
================================================
FILE: doc/source/conf.py
================================================
import os
import sys
sys.path.insert(0, os.path.abspath('../..'))
# Configuration file for the Sphinx documentation builder.
#
# For the full list of built-in configuration values, see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html
# -- Project information -----------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
project = 'yfinance / Pythonic access to market data'
copyright = '2017-2025 Ran Aroussi'
author = 'Ran Aroussi'
# -- General configuration ---------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
extensions = ['sphinx.ext.autodoc',
'sphinx.ext.napoleon',
"sphinx.ext.githubpages",
"sphinx.ext.autosectionlabel",
"sphinx.ext.autosummary",
"sphinx_copybutton"]
templates_path = ['_templates']
exclude_patterns = []
autoclass_content = 'both'
autosummary_generate = True
autodoc_default_options = {
'exclude-members': '__init__',
'members': True,
}
# -- Options for HTML output -------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
html_title = 'yfinance'
html_theme = 'pydata_sphinx_theme'
html_theme_options = {
"github_url": "https://github.com/ranaroussi/yfinance",
"navbar_align": "left",
"logo": {
"image_light": "_static/logo-light.webp",
"image_dark": "_static/logo-dark.webp"
}
}
html_static_path = ['_static']
html_css_files = ['yfinance.css']
================================================
FILE: doc/source/development/code.rst
================================================
****
Code
****
To support rapid development without breaking stable versions, this project uses a two-layer branch model:
.. image:: assets/branches.png
:alt: Branching Model
`Inspiration <https://miro.medium.com/max/700/1*2YagIpX6LuauC3ASpwHekg.png>`_
- **dev**: New features and some bug fixes are merged here. This branch allows collective testing, conflict resolution, and further stabilization before merging into the stable branch.
- **main**: Stable branch where PIP releases are created.
By default, branches target **main**, but most contributions should target **dev**.
**Exceptions**:
Direct merges to **main** are allowed if:
- `yfinance` is massively broken
- Part of `yfinance` is broken, and the fix is simple and isolated
- Not updating the code (e.g. docs)
Creating your branch
--------------------
1. Fork the repository on GitHub. If already forked, remember to ``Sync fork``
2. Clone your forked repository:
.. code-block:: bash
git clone https://github.com/{user}/{repo}.git
3. Create a new branch for your feature or bug fix, from appropriate base branch:
.. code-block:: bash
git checkout {base e.g. dev}
git pull
git checkout -b {your branch}
4. Make your changes, commit them, and push your branch to GitHub. To keep the commit history and `network graph <https://github.com/ranaroussi/yfinance/network>`_ compact, give your commits a very short summary then description:
.. code-block:: bash
git commit -m "short sentence summary" -m "full commit message"
# Long message can be multiple lines (tip: copy-paste)
6. `Open a pull request on Github <https://github.com/ranaroussi/yfinance/pulls>`_.
Running a branch
----------------
Please see `this page </development/running>`_.
Git stuff
---------
- You might be asked to move your branch from ``main`` to ``dev``. This is a ``git rebase``. Remember to update **all** branches involved.
.. code-block:: bash
# update all branches:
git checkout main
git pull
git checkout dev
git pull
# rebase from main to dev:
git checkout {your branch}
git pull
git rebase --onto dev main {your branch}
git push --force-with-lease origin {your branch}
- ``git rebase`` can also be used to update your branch with new commits from base, but without adding a commit to your branch history like git merge does. This keeps history clean and avoids future merge problems.
.. code-block:: bash
git checkout {base branch e.g. dev}
git pull
git checkout {your branch}
git rebase {base}
git push --force-with-lease origin {your branch}
- ``git squash`` tiny or negligible commits with meaningful ones, or to combine successive related commits. `git squash guide <https://docs.gitlab.com/ee/topics/git/git_rebase.html#interactive-rebase>`_
.. code-block:: bash
git rebase -i HEAD~2
git push --force-with-lease origin {your branch}
================================================
FILE: doc/source/development/documentation.rst
================================================
*************
Documentation
*************
.. contents:: Documentation:
:local:
About documentation
-------------------
* yfinance documentation is written in reStructuredText (rst) and built using Sphinx.
* The documentation file is in ``doc/source/..``.
* Most of the notes under API References read from class and methods docstrings. These documentations, found in ``doc/source/reference/api`` is autogenerated by Sphinx and not included in git.
Building documentation locally
-------------------------------
To build the documentation locally, follow these steps:
1. **Install Required Dependencies**:
* Make sure ``Sphinx`` and any other dependencies are installed. If a ``requirements.txt`` file is available, you can install dependencies by running:
.. code-block:: bash
pip install -r requirements.txt
pip install Sphinx==8.0.2 pydata-sphinx-theme==0.15.4 Jinja2==3.1.4 sphinx-copybutton==0.5.2
2. **Build with Sphinx**:
* After dependencies are installed, use the sphinx-build command to generate HTML documentation.
* Go to ``doc/`` directory Run:
.. code-block:: bash
sphinx-build -b html doc/source doc/_build/html
3. **View Documentation Locally**:
.. code-block:: bash
python -m http.server -d ./doc/_build/html
Then open "localhost:8000" in browser
Publishing documentation
------------------------
Merge into ``main`` branch triggers auto-generating documentation by action ``.github/workflows/deploy_doc.yml``.
This publishes the generated HTML into branch ``documentation``.
1. Review the changes locally and push to ``dev``.
2. When ``dev`` gets merged to ``main``, GitHub Actions workflow is automated to build documentation.
================================================
FILE: doc/source/development/index.rst
================================================
===========
Development
===========
yfinance relies on the community to investigate bugs and contribute code. Here's how you can help:
.. toctree::
:maxdepth: 1
code
running
documentation
testing
================================================
FILE: doc/source/development/running.rst
================================================
Running a branch
================
With PIP
--------
.. code-block:: bash
pip install git+https://github.com/{user}/{repo}.git@{branch}
E.g.:
.. code-block:: bash
pip install git+https://github.com/ranaroussi/yfinance.git@feature/name
With Git
--------
1: Download from GitHub:
.. code-block:: bash
git clone https://github.com/{user}/{repo}.git
pip install -r ./yfinance/requirements.txt
Or if a specific branch:
.. code-block:: bash
git clone -b {branch} https://github.com/{user}/{repo}.git
pip install -r ./yfinance/requirements.txt
.. NOTE::
Only do the next part if you are installing globally
If you are installing for 1 specific project, then you can skip this step
and just `git clone` in the project directory
2. Add download location to Python search path
Two different ways, choose one:
1) Add path to ``PYTHONPATH`` environment variable
2) Add to top of Python file:
.. code-block:: python
import sys
sys.path.insert(0, "path/to/downloaded/yfinance")
3: Verify
.. code-block:: python
import yfinance
print(yfinance)
Output should be:
`<module 'yfinance' from 'path/to/downloaded/yfinance/yfinance/__init__.py'>`
If output looks like this then you did step 2 wrong
`<module 'yfinance' from '.../lib/python3.10/site-packages/yfinance/__init__.py'>`
================================================
FILE: doc/source/development/testing.rst
================================================
Unit Tests
----------
Tests are written using Python's `unittest` module. Here are some ways to run tests:
- **Run all price tests**:
.. code-block:: bash
python -m unittest tests.test_prices
- **Run a subset of price tests**:
.. code-block:: bash
python -m unittest tests.test_prices.TestPriceRepair
- **Run a specific test**:
.. code-block:: bash
python -m unittest tests.test_prices_repair.TestPriceRepair.test_ticker_missing
- **General command**:
..code-block:: bash
python -m unittest tests.{file}.{class}.{method}
- **Run all tests**:
.. code-block:: bash
python -m unittest discover -s tests
.. note::
The tests are currently failing already
Standard result:
**Failures:** 11
**Errors:** 93
**Skipped:** 1
.. seealso::
See the ` ``unittest`` module <https://docs.python.org/3/library/unittest.html>`_ for more information.
================================================
FILE: doc/source/index.rst
================================================
yfinance documentation
======================
Download Market Data from Yahoo! Finance's API
----------------------------------------------
.. admonition:: IMPORTANT LEGAL DISCLAIMER
**Yahoo!, Y!Finance, and Yahoo! finance are registered trademarks of Yahoo, Inc.**
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
intended for research and educational purposes.
**You should refer to Yahoo!'s terms of use**
(`here <https://policies.yahoo.com/us/en/yahoo/terms/product-atos/apiforydn/index.htm>`__),
(`here <https://legal.yahoo.com/us/en/yahoo/terms/otos/index.html>`__),
and (`here <https://policies.yahoo.com/us/en/yahoo/terms/index.htm>`__)
for details on your rights to use the actual data downloaded.
Remember - the Yahoo! finance API is intended for personal use only.
Install
-------
.. code-block:: bash
$ pip install yfinance
Quick start
-----------
Showing a small sample of yfinance API, the full API is much bigger and covered in :doc:`reference/index`.
.. code-block:: python
import yfinance as yf
dat = yf.Ticker("MSFT")
One ticker symbol
.. code-block:: python
dat = yf.Ticker("MSFT")
dat.info
dat.calendar
dat.analyst_price_targets
dat.quarterly_income_stmt
dat.history(period='1mo')
dat.option_chain(dat.options[0]).calls
Multiple ticker symbols
.. code-block:: python
tickers = yf.Tickers('MSFT AAPL GOOG')
tickers.tickers['MSFT'].info
yf.download(['MSFT', 'AAPL', 'GOOG'], period='1mo')
Funds
.. code-block:: python
spy = yf.Ticker('SPY').funds_data
spy.description
spy.top_holdings
.. toctree::
:maxdepth: 1
:titlesonly:
advanced/index
reference/index
development/index
================================================
FILE: doc/source/reference/examples/calendars.py
================================================
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()]
================================================
FILE: doc/source/reference/examples/download.py
================================================
import yfinance as yf
data = yf.download("SPY AAPL", period="1mo")
================================================
FILE: doc/source/reference/examples/funds_data.py
================================================
import yfinance as yf
spy = yf.Ticker('SPY')
data = spy.funds_data
# show fund description
data.description
# show operational information
data.fund_overview
data.fund_operations
# show holdings related information
data.asset_classes
data.top_holdings
data.equity_holdings
data.bond_holdings
data.bond_ratings
data.sector_weightings
================================================
FILE: doc/source/reference/examples/live_async.py
================================================
import asyncio
import yfinance as yf
# define your message callback
def message_handler(message):
print("Received message:", message)
async def main():
# =======================
# With Context Manager
# =======================
async with yf.AsyncWebSocket() as ws:
await ws.subscribe(["AAPL", "BTC-USD"])
await ws.listen()
# =======================
# Without Context Manager
# =======================
ws = yf.AsyncWebSocket()
await ws.subscribe(["AAPL", "BTC-USD"])
await ws.listen()
asyncio.run(main())
================================================
FILE: doc/source/reference/examples/live_sync.py
================================================
import yfinance as yf
# define your message callback
def message_handler(message):
print("Received message:", message)
# =======================
# With Context Manager
# =======================
with yf.WebSocket() as ws:
ws.subscribe(["AAPL", "BTC-USD"])
ws.listen(message_handler)
# =======================
# Without Context Manager
# =======================
ws = yf.WebSocket()
ws.subscribe(["AAPL", "BTC-USD"])
ws.listen(message_handler)
================================================
FILE: doc/source/reference/examples/lookup.py
================================================
import yfinance as yf
# Get All
all = yf.Lookup("AAPL").all
all = yf.Lookup("AAPL").get_all(count=100)
# Get Stocks
stock = yf.Lookup("AAPL").stock
stock = yf.Lookup("AAPL").get_stock(count=100)
# Get Mutual Funds
mutualfund = yf.Lookup("AAPL").mutualfund
mutualfund = yf.Lookup("AAPL").get_mutualfund(count=100)
# Get ETFs
etf = yf.Lookup("AAPL").etf
etf = yf.Lookup("AAPL").get_etf(count=100)
# Get Indices
index = yf.Lookup("AAPL").index
index = yf.Lookup("AAPL").get_index(count=100)
# Get Futures
future = yf.Lookup("AAPL").future
future = yf.Lookup("AAPL").get_future(count=100)
# Get Currencies
currency = yf.Lookup("AAPL").currency
currency = yf.Lookup("AAPL").get_currency(count=100)
# Get Cryptocurrencies
cryptocurrency = yf.Lookup("AAPL").cryptocurrency
cryptocurrency = yf.Lookup("AAPL").get_cryptocurrency(count=100)
================================================
FILE: doc/source/reference/examples/market.py
================================================
import yfinance as yf
EUROPE = yf.Market("EUROPE")
status = EUROPE.status
summary = EUROPE.summary
================================================
FILE: doc/source/reference/examples/proxy.py
================================================
import yfinance as yf
msft = yf.Ticker("MSFT")
msft.history(..., proxy="PROXY_SERVER")
msft.get_actions(proxy="PROXY_SERVER")
msft.get_dividends(proxy="PROXY_SERVER")
msft.get_splits(proxy="PROXY_SERVER")
msft.get_capital_gains(proxy="PROXY_SERVER")
msft.get_balance_sheet(proxy="PROXY_SERVER")
msft.get_cashflow(proxy="PROXY_SERVER")
msft.option_chain(..., proxy="PROXY_SERVER")
...
================================================
FILE: doc/source/reference/examples/search.py
================================================
import yfinance as yf
# get list of quotes
quotes = yf.Search("AAPL", max_results=10).quotes
# get list of news
news = yf.Search("Google", news_count=10).news
# get list of related research
research = yf.Search("apple", include_research=True).research
================================================
FILE: doc/source/reference/examples/sector_industry.py
================================================
import yfinance as yf
tech = yf.Sector('technology')
software = yf.Industry('software-infrastructure')
# Common information
tech.key
tech.name
tech.symbol
tech.ticker
tech.overview
tech.top_companies
tech.research_reports
# Sector information
tech.top_etfs
tech.top_mutual_funds
tech.industries
# Industry information
software.sector_key
software.sector_name
software.top_performing_companies
software.top_growth_companies
================================================
FILE: doc/source/reference/examples/sector_industry_ticker.py
================================================
import yfinance as yf
# Ticker to Sector and Industry
msft = yf.Ticker('MSFT')
tech = yf.Sector(msft.info.get('sectorKey'))
software = yf.Industry(msft.info.get('industryKey'))
# Sector and Industry to Ticker
tech_ticker = tech.ticker
tech_ticker.info
software_ticker = software.ticker
software_ticker.history()
================================================
FILE: doc/source/reference/examples/ticker.py
================================================
import yfinance as yf
dat = yf.Ticker("MSFT")
# get historical market data
dat.history(period='1mo')
# options
dat.option_chain(dat.options[0]).calls
# get financials
dat.balance_sheet
dat.quarterly_income_stmt
# dates
dat.calendar
# general info
dat.info
# analysis
dat.analyst_price_targets
# websocket
dat.live()
================================================
FILE: doc/source/reference/examples/tickers.py
================================================
import yfinance as yf
tickers = yf.Tickers('msft aapl goog')
# access each ticker using (example)
tickers.tickers['MSFT'].info
tickers.tickers['AAPL'].history(period="1mo")
tickers.tickers['GOOG'].actions
# websocket
tickers.live()
================================================
FILE: doc/source/reference/index.rst
================================================
=============
API Reference
=============
Overview
--------
The `yfinance` package provides easy access to Yahoo! Finance's API to retrieve market data. It includes classes and functions for downloading historical market data, accessing ticker information, managing cache, and more.
Public API
==========
The following are the publicly available classes, and functions exposed by the `yfinance` package:
- :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.
- :class:`WebSocket <yfinance.WebSocket>`: Class for synchronously streaming live market data.
- :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:`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.
- :attr:`config.debug.logging <yfinance.config>`: Enable verbose debug logging (``yf.config.debug.logging = True``).
- :attr:`set_tz_cache_location <yfinance.set_tz_cache_location>`: Function to set the timezone cache location.
.. toctree::
:maxdepth: 1
:hidden:
yfinance.ticker_tickers
yfinance.stock
yfinance.market
yfinance.calendars
yfinance.financials
yfinance.analysis
yfinance.search
yfinance.lookup
yfinance.websocket
yfinance.sector_industry
yfinance.screener
yfinance.functions
yfinance.funds_data
yfinance.price_history
================================================
FILE: doc/source/reference/yfinance.analysis.rst
================================================
===================
Analysis & Holdings
===================
.. currentmodule:: yfinance.Ticker
Analysis
--------
.. autosummary::
:toctree: api/
:recursive:
get_recommendations
recommendations
get_recommendations_summary
recommendations_summary
get_upgrades_downgrades
upgrades_downgrades
get_sustainability
sustainability
get_analyst_price_targets
analyst_price_targets
get_earnings_estimate
earnings_estimate
get_revenue_estimate
revenue_estimate
get_earnings_history
earnings_history
get_eps_trend
eps_trend
get_eps_revisions
eps_revisions
get_growth_estimates
growth_estimates
Holdings
--------
.. autosummary::
:toctree: api/
:recursive:
get_funds_data
funds_data
.. seealso::
:meth:`yfinance.scrapers.funds.FundsData`
.. autosummary::
:toctree: api/
:recursive:
get_insider_purchases
insider_purchases
get_insider_transactions
insider_transactions
get_insider_roster_holders
insider_roster_holders
get_major_holders
major_holders
get_institutional_holders
institutional_holders
get_mutualfund_holders
mutualfund_holders
================================================
FILE: doc/source/reference/yfinance.calendars.rst
================================================
=====================
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
================================================
FILE: doc/source/reference/yfinance.financials.rst
================================================
==========
Financials
==========
.. currentmodule:: yfinance.Ticker
.. autosummary::
:toctree: api/
:recursive:
get_income_stmt
income_stmt
quarterly_income_stmt
ttm_income_stmt
get_balance_sheet
balance_sheet
get_cashflow
cashflow
quarterly_cashflow
ttm_cashflow
get_earnings
earnings
calendar
get_earnings_dates
earnings_dates
get_sec_filings
sec_filings
================================================
FILE: doc/source/reference/yfinance.functions.rst
================================================
=========================
Functions and Utilities
=========================
.. currentmodule:: yfinance
Download Market Data
~~~~~~~~~~~~~~~~~~~~~
The `download` function allows you to retrieve market data for multiple tickers at once.
.. autosummary::
:toctree: api/
download
Enable Debug Mode
~~~~~~~~~~~~~~~~~
Enables logging of debug information for the `yfinance` package.
.. autosummary::
:toctree: api/
enable_debug_mode
Set Timezone Cache Location
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sets the cache location for timezone data.
.. autosummary::
:toctree: api/
set_tz_cache_location
================================================
FILE: doc/source/reference/yfinance.funds_data.rst
================================================
====================
`FundsData` class
====================
.. currentmodule:: yfinance.scrapers.funds
.. autosummary::
:toctree: api/
:recursive:
FundsData
================================================
FILE: doc/source/reference/yfinance.market.rst
================================================
=====================
Market
=====================
.. currentmodule:: yfinance
Class
------------
The `Market` class, allows you to access market data in a Pythonic way.
.. autosummary::
:toctree: api/
Market
Market Sample Code
------------------
.. literalinclude:: examples/market.py
:language: python
Markets
------------
There are 8 different markets available in Yahoo Finance.
* US
* GB
\
* ASIA
* EUROPE
\
* RATES
* COMMODITIES
* CURRENCIES
* CRYPTOCURRENCIES
================================================
FILE: doc/source/reference/yfinance.price_history.rst
================================================
====================
`PriceHistory` class
====================
.. currentmodule:: yfinance.scrapers.history
.. autoclass:: PriceHistory
:members:
:undoc-members:
================================================
FILE: doc/source/reference/yfinance.screener.rst
================================================
=========================
Screener & Query
=========================
.. currentmodule:: yfinance
Query Market Data
~~~~~~~~~~~~~~~~~~~~~
The `Sector` and `Industry` modules allow you to access the sector and industry information.
.. autosummary::
:toctree: api/
EquityQuery
FundQuery
screen
.. seealso::
:attr:`EquityQuery.valid_fields <yfinance.EquityQuery.valid_fields>`
supported operand values for query
:attr:`EquityQuery.valid_values <yfinance.EquityQuery.valid_values>`
supported `EQ query operand parameters`
:attr:`FundQuery.valid_fields <yfinance.FundQuery.valid_fields>`
supported operand values for query
:attr:`FundQuery.valid_values <yfinance.FundQuery.valid_values>`
supported `EQ query operand parameters`
================================================
FILE: doc/source/reference/yfinance.search.rst
================================================
=====================
Search & Lookup
=====================
.. currentmodule:: yfinance
Class
------------
The `Search` module, allows you to access search data in a Pythonic way.
.. autosummary::
:toctree: api/
Search
The `Lookup` module, allows you to look up tickers in a Pythonic way.
.. autosummary::
:toctree: api/
Lookup
Sample Code
------------------
The `Search` module, allows you to access search data in a Pythonic way.
.. literalinclude:: examples/search.py
:language: python
The `Lookup` module, allows you to look up tickers in a Pythonic way.
.. literalinclude:: examples/lookup.py
:language: python
================================================
FILE: doc/source/reference/yfinance.sector_industry.rst
================================================
=======================
Sector and Industry
=======================
.. currentmodule:: yfinance
Sector class
--------------
The `Sector` and `Industry` modules provide access to the Sector and Industry information.
.. autosummary::
:toctree: api/
:recursive:
Sector
Industry
.. seealso::
:attr:`Sector.industries <yfinance.Sector.industries>`
Map of sector and industry
Sample Code
---------------------
To initialize, use the relevant sector or industry key as below.
.. literalinclude:: examples/sector_industry.py
:language: python
The modules can be chained with Ticker as below.
.. literalinclude:: examples/sector_industry_ticker.py
:language: python
================================================
FILE: doc/source/reference/yfinance.stock.rst
================================================
=====
Stock
=====
.. currentmodule:: yfinance.Ticker
Ticker stock methods
--------------------
.. autosummary::
:toctree: api/
:recursive:
get_isin
isin
history
.. seealso::
:meth:`yfinance.scrapers.history.PriceHistory.history`
Documentation for history
:doc:`../advanced/price_repair`
Documentation for price repair
.. autosummary::
:toctree: api/
:recursive:
get_history_metadata
get_dividends
dividends
get_splits
splits
get_actions
actions
get_capital_gains
capital_gains
get_shares_full
get_info
info
get_fast_info
fast_info
get_news
news
================================================
FILE: doc/source/reference/yfinance.ticker_tickers.rst
================================================
=====================
Ticker and Tickers
=====================
.. currentmodule:: yfinance
Class
------------
The `Ticker` module, allows you to access ticker data in a Pythonic way.
.. autosummary::
:toctree: api/
Ticker
Tickers
Ticker Sample Code
------------------
The `Ticker` module, allows you to access ticker data in a Pythonic way.
.. literalinclude:: examples/ticker.py
:language: python
To initialize multiple `Ticker` objects, use
.. literalinclude:: examples/tickers.py
:language: python
For tickers that are ETFs/Mutual Funds, `Ticker.funds_data` provides access to fund related data.
Funds' Top Holdings and other data with category average is returned as `pd.DataFrame`.
.. literalinclude:: examples/funds_data.py
:language: python
If you want to use a proxy server for downloading data, use:
.. literalinclude:: examples/proxy.py
:language: python
To initialize multiple `Ticker` objects, use `Tickers` module
.. literalinclude:: examples/tickers.py
:language: python
================================================
FILE: doc/source/reference/yfinance.websocket.rst
================================================
=====================
WebSocket
=====================
.. currentmodule:: yfinance
The `WebSocket` module allows you to stream live price data from Yahoo Finance using both synchronous and asynchronous clients.
Classes
------------
.. autosummary::
:toctree: api/
WebSocket
AsyncWebSocket
Synchronous WebSocket
----------------------
The `WebSocket` class provides a synchronous interface for subscribing to price updates.
Sample Code:
.. literalinclude:: examples/live_sync.py
:language: python
Asynchronous WebSocket
-----------------------
The `AsyncWebSocket` class provides an asynchronous interface for subscribing to price updates.
Sample Code:
.. literalinclude:: examples/live_async.py
:language: python
.. note::
If you're running asynchronous code in a Jupyter notebook, you may encounter issues with event loops. To resolve this, you need to import and apply `nest_asyncio` to allow nested event loops.
Add the following code before running asynchronous operations:
.. code-block:: python
import nest_asyncio
nest_asyncio.apply()
================================================
FILE: meta.yaml
================================================
{% set name = "yfinance" %}
{% set version = "1.2.0" %}
package:
name: "{{ name|lower }}"
version: "{{ version }}"
source:
url: "https://pypi.io/packages/source/{{ name[0] }}/{{ name }}/{{ name }}-{{ version }}.tar.gz"
sha256: "207da19e87792bf742d2744eee2fe18169853c1b82cfe14a9a7cfb8d05f09137"
build:
noarch: python
number: 0
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
- requests >=2.31
- multitasking >=0.0.7
- lxml >=4.9.1
- platformdirs >=2.0.0
- pytz >=2022.5
- frozendict >=2.3.4
- beautifulsoup4 >=4.11.1
- html5lib >=1.1
- curl_cffi >=0.7,<0.14
- peewee >=3.16.2
- pip
- python
run:
- pandas >=1.3.0
- numpy >=1.16.5
- requests >=2.31
- multitasking >=0.0.7
- lxml >=4.9.1
- platformdirs >=2.0.0
- pytz >=2022.5
- frozendict >=2.3.4
- beautifulsoup4 >=4.11.1
- html5lib >=1.1
- curl_cffi >=0.7,<0.14
- peewee >=3.16.2
- python
test:
imports:
- yfinance
about:
home: "https://github.com/ranaroussi/yfinance"
license: "Apache Software"
license_family: "APACHE"
license_file: ""
summary: "Yahoo! Finance market data downloader"
description:
doc_url: "https://github.com/ranaroussi/yfinance"
dev_url: "https://pypi.python.org/pypi/yfinance"
doc_source_url: https://github.com/ranaroussi/yfinance/blob/master/README.rst
extra:
recipe-maintainers:
- ranaroussi
================================================
FILE: pyrightconfig.json
================================================
{
"typeCheckingMode": "basic",
"reportGeneralTypeIssues": "warning",
"reportArgumentType": "warning",
"reportOptionalMemberAccess": "warning",
"reportOperatorIssue": "warning",
"reportAttributeAccessIssue": "warning",
"reportMissingImports": "warning",
"reportReturnType": "warning",
"reportAssignmentType": "warning",
"reportOptionalSubscript": "warning",
"reportOptionalIterable": "warning",
"reportCallIssue": "warning",
"reportUnhashable": "warning"
}
================================================
FILE: requirements.txt
================================================
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
beautifulsoup4>=4.11.1
peewee>=3.16.2
requests_cache>=1.0
requests_ratelimiter>=0.3.1
scipy>=1.6.3
# curl_cffi 0.14 has major problems, see their Github
curl_cffi>=0.7,<0.14
protobuf>=3.19.0
websockets>=13.0
================================================
FILE: setup.cfg
================================================
[bdist_wheel]
# This flag says that the code is written to work on both Python 2 and Python
# 3. If at all possible, it is good practice to do this. If you cannot, you
# will need to generate wheels for each Python version that you support.
universal=1
================================================
FILE: setup.py
================================================
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#
# yfinance - market data downloader
# https://github.com/ranaroussi/yfinance
"""yfinance - market data downloader"""
from setuptools import setup, find_packages
# from codecs import open
import io
from os import path
# --- get version ---
version = "unknown"
with open("yfinance/version.py") as f:
line = f.read().strip()
version = line.replace("version = ", "").replace('"', '')
# --- /get version ---
here = path.abspath(path.dirname(__file__))
# Get the long description from the README file
with io.open(path.join(here, 'README.md'), encoding='utf-8') as f:
long_description = f.read()
setup(
name='yfinance',
version=version,
description='Download market data from Yahoo! Finance API',
long_description=long_description,
long_description_content_type='text/markdown',
url='https://github.com/ranaroussi/yfinance',
author='Ran Aroussi',
author_email='ran@aroussi.com',
license='Apache',
classifiers=[
'License :: OSI Approved :: Apache Software License',
# 'Development Status :: 3 - Alpha',
'Development Status :: 4 - Beta',
# 'Development Status :: 5 - Production/Stable',
'Operating System :: OS Independent',
'Intended Audience :: Developers',
'Topic :: Office/Business :: Financial',
'Topic :: Office/Business :: Financial :: Investment',
'Topic :: Scientific/Engineering :: Interface Engine/Protocol Translator',
'Topic :: Software Development :: Libraries',
'Topic :: Software Development :: Libraries :: Python Modules',
'Programming Language :: Python :: 3.6',
'Programming Language :: Python :: 3.7',
'Programming Language :: Python :: 3.8',
'Programming Language :: Python :: 3.9',
'Programming Language :: Python :: 3.10',
],
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,<0.14',
'protobuf>=3.19.0', 'websockets>=13.0'],
extras_require={
'nospam': ['requests_cache>=1.0', 'requests_ratelimiter>=0.3.1'],
'repair': ['scipy>=1.6.3'],
},
# Include protobuf files for websocket support
package_data={
'yfinance': ['pricing.proto', 'pricing_pb2.py'],
},
include_package_data=True,
# Note: Pandas.read_html() needs html5lib & beautifulsoup4
entry_points={
'console_scripts': [
'sample=sample:main',
],
},
)
print("""
NOTE: yfinance is not affiliated, endorsed, or vetted by Yahoo, Inc.
You should refer to Yahoo!'s terms of use for details on your rights
to use the actual data downloaded.""")
================================================
FILE: tests/__init__.py
================================================
================================================
FILE: tests/context.py
================================================
# -*- coding: utf-8 -*-
import platformdirs as _ad
import datetime as _dt
import sys
import os
import yfinance
# from requests_ratelimiter import LimiterSession
# from pyrate_limiter import Duration, RequestRate, Limiter
_parent_dp = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
_src_dp = _parent_dp
sys.path.insert(0, _src_dp)
# Optional: see the exact requests that are made during tests:
# import logging
# logging.basicConfig(level=logging.DEBUG)
# Use adjacent cache folder for testing, delete if already exists and older than today
testing_cache_dirpath = os.path.join(_ad.user_cache_dir(), "py-yfinance-testing")
yfinance.set_tz_cache_location(testing_cache_dirpath)
if os.path.isdir(testing_cache_dirpath):
mtime = _dt.datetime.fromtimestamp(os.path.getmtime(testing_cache_dirpath))
if mtime.date() < _dt.date.today():
import shutil
shutil.rmtree(testing_cache_dirpath)
# Since switching to curl_cffi, the requests_ratelimiter|cache won't work.
session_gbl = None
# # Setup a session to only rate-limit
# history_rate = RequestRate(1, Duration.SECOND)
# limiter = Limiter(history_rate)
# session_gbl = LimiterSession(limiter=limiter)
# # Use this instead if you also want caching:
# from requests_cache import CacheMixin, SQLiteCache
# from requests_ratelimiter import LimiterMixin
# from requests import Session
# from pyrate_limiter import MemoryQueueBucket
# class CachedLimiterSession(CacheMixin, LimiterMixin, Session):
# pass
# cache_fp = os.path.join(testing_cache_dirpath, "unittests-cache")
# session_gbl = CachedLimiterSession(
# limiter=limiter,
# bucket_class=MemoryQueueBucket,
# backend=SQLiteCache(cache_fp, expire_after=_dt.timedelta(hours=1)),
# )
================================================
FILE: tests/data/1398-HK-1d-bad-div-fixed.csv
================================================
Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Repaired?
2022-01-03 00:00:00+08:00,4.449999809265137,4.449999809265137,4.400000095367432,4.420000076293945,3.504674898559325,42688622.0,0.0,0.0,True
2022-01-04 00:00:00+08:00,4.429999828338623,4.449999809265137,4.389999866485596,4.440000057220459,3.520532966294506,146990360.0,0.0,0.0,True
2022-01-05 00:00:00+08:00,4.449999809265137,4.550000190734863,4.440000057220459,4.519999980926514,3.5839656809292446,312079015.0,0.0,0.0,True
2022-01-06 00:00:00+08:00,4.539999961853027,4.539999961853027,4.440000057220459,4.5,3.5681076131940634,144072250.0,0.0,0.0,True
2022-01-07 00:00:00+08:00,4.46999979019165,4.579999923706055,4.449999809265137,4.570000171661377,3.6236119595022314,242535732.0,0.0,0.0,True
2022-01-10 00:00:00+08:00,4.599999904632568,4.650000095367432,4.579999923706055,4.639999866485596,3.679115418422372,270492205.0,0.0,0.0,True
2022-01-11 00:00:00+08:00,4.599999904632568,4.659999847412109,4.579999923706055,4.630000114440918,3.671186384554782,186392481.0,0.0,0.0,True
2022-01-12 00:00:00+08:00,4.630000114440918,4.650000095367432,4.590000152587891,4.610000133514404,3.6553283168196007,230956599.0,0.0,0.0,True
2022-01-13 00:00:00+08:00,4.610000133514404,4.699999809265137,4.599999904632568,4.699999809265137,3.7266898434749227,213448950.0,0.0,0.0,True
2022-01-14 00:00:00+08:00,4.710000038146973,4.739999771118164,4.670000076293945,4.710000038146973,3.73461909918952,226355010.0,0.0,0.0,True
2022-01-17 00:00:00+08:00,4.690000057220459,4.71999979019165,4.670000076293945,4.699999809265137,3.7266898434749227,137932161.0,0.0,0.0,True
2022-01-18 00:00:00+08:00,4.679999828338623,4.71999979019165,4.630000114440918,4.670000076293945,3.7029029637191577,138734371.0,0.0,0.0,True
2022-01-19 00:00:00+08:00,4.679999828338623,4.710000038146973,4.639999866485596,4.670000076293945,3.7029029637191577,129644509.0,0.0,0.0,True
2022-01-20 00:00:00+08:00,4.710000038146973,4.710000038146973,4.619999885559082,4.690000057220459,3.718761031454339,246026991.0,0.0,0.0,True
2022-01-21 00:00:00+08:00,4.690000057220459,4.699999809265137,4.630000114440918,4.699999809265137,3.7266898434749227,173314946.0,0.0,0.0,True
2022-01-24 00:00:00+08:00,4.699999809265137,4.75,4.670000076293945,4.71999979019165,3.7425483549041174,181865349.0,0.0,0.0,True
2022-01-25 00:00:00+08:00,4.650000095367432,4.739999771118164,4.650000095367432,4.71999979019165,3.7425483549041174,198777082.0,0.0,0.0,True
2022-01-26 00:00:00+08:00,4.739999771118164,4.75,4.710000038146973,4.730000019073486,3.7504776106187148,160528048.0,0.0,0.0,True
2022-01-27 00:00:00+08:00,4.679999828338623,4.71999979019165,4.670000076293945,4.71999979019165,3.7425483549041174,128188395.0,0.0,0.0,True
2022-01-28 00:00:00+08:00,4.739999771118164,4.75,4.670000076293945,4.679999828338623,3.7108317757397415,106436134.0,0.0,0.0,True
2022-01-31 00:00:00+08:00,4.71999979019165,4.71999979019165,4.71999979019165,4.71999979019165,3.7425483549041174,0.0,0.0,0.0,True
2022-02-04 00:00:00+08:00,4.710000038146973,4.789999961853027,4.710000038146973,4.78000020980835,3.790123445497688,158406204.0,0.0,0.0,True
2022-02-07 00:00:00+08:00,4.760000228881836,4.849999904632568,4.739999771118164,4.840000152587891,3.8376980923972455,272642318.0,0.0,0.0,True
2022-02-08 00:00:00+08:00,4.860000133514404,4.900000095367432,4.829999923706055,4.860000133514404,3.8535561601324266,214256288.0,0.0,0.0,True
2022-02-09 00:00:00+08:00,4.889999866485596,4.900000095367432,4.849999904632568,4.889999866485596,3.877343483582205,223439580.0,0.0,0.0,True
2022-02-10 00:00:00+08:00,4.889999866485596,4.889999866485596,4.840000152587891,4.889999866485596,3.877343483582205,207400910.0,0.0,0.0,True
2022-02-11 00:00:00+08:00,4.889999866485596,4.929999828338623,4.849999904632568,4.929999828338623,3.909060062746581,278373812.0,0.0,0.0,True
2022-02-14 00:00:00+08:00,4.929999828338623,4.940000057220459,4.860000133514404,4.880000114440918,3.8694146715616213,200959806.0,0.0,0.0,True
2022-02-15 00:00:00+08:00,4.849999904632568,4.869999885559082,4.679999828338623,4.75,3.7663361220479095,335766335.0,0.0,0.0,True
2022-02-16 00:00:00+08:00,4.75,4.789999961853027,4.71999979019165,4.760000228881836,3.774265377762507,267721097.0,0.0,0.0,True
2022-02-17 00:00:00+08:00,4.789999961853027,4.800000190734863,4.730000019073486,4.789999961853027,3.798052257518272,181702145.0,0.0,0.0,True
2022-02-18 00:00:00+08:00,4.75,4.829999923706055,4.730000019073486,4.789999961853027,3.798052257518272,196787412.0,0.0,0.0,True
2022-02-21 00:00:00+08:00,4.789999961853027,4.840000152587891,4.730000019073486,4.829999923706055,3.829768836682648,179237601.0,0.0,0.0,True
2022-02-22 00:00:00+08:00,4.78000020980835,4.800000190734863,4.71999979019165,4.760000228881836,3.774265377762507,191170185.0,0.0,0.0,True
2022-02-23 00:00:00+08:00,4.820000171661377,4.820000171661377,4.71999979019165,4.739999771118164,3.758406866333312,144982428.0,0.0,0.0,True
2022-02-24 00:00:00+08:00,4.699999809265137,4.75,4.619999885559082,4.650000095367432,3.6870446741369696,284338187.0,0.0,0.0,True
2022-02-25 00:00:00+08:00,4.619999885559082,4.639999866485596,4.570000171661377,4.579999923706055,3.631540771522815,277566175.0,0.0,0.0,True
2022-02-28 00:00:00+08:00,4.599999904632568,4.679999828338623,4.53000020980835,4.670000076293945,3.7029029637191577,267459675.0,0.0,0.0,True
2022-03-01 00:00:00+08:00,4.679999828338623,4.699999809265137,4.590000152587891,4.670000076293945,3.7029029637191577,185273965.0,0.0,0.0,True
2022-03-02 00:00:00+08:00,4.650000095367432,4.659999847412109,4.579999923706055,4.590000152587891,3.6394700272374125,134643426.0,0.0,0.0,True
2022-03-03 00:00:00+08:00,4.610000133514404,4.690000057220459,4.599999904632568,4.650000095367432,3.6870446741369696,136337761.0,0.0,0.0,True
2022-03-04 00:00:00+08:00,4.599999904632568,4.639999866485596,4.570000171661377,4.619999885559082,3.6632571288401845,187345313.0,0.0,0.0,True
2022-03-07 00:00:00+08:00,4.559999942779541,4.570000171661377,4.510000228881836,4.53000020980835,3.5918951584908485,214985443.0,0.0,0.0,True
2022-03-08 00:00:00+08:00,4.570000171661377,4.570000171661377,4.449999809265137,4.519999980926514,3.5839656809292446,307571129.0,0.0,0.0,True
2022-03-09 00:00:00+08:00,4.5,4.579999923706055,4.429999828338623,4.510000228881836,3.576036868908661,294831097.0,0.0,0.0,True
2022-03-10 00:00:00+08:00,4.590000152587891,4.590000152587891,4.510000228881836,4.570000171661377,3.6236119595022314,170116737.0,0.0,0.0,True
2022-03-11 00:00:00+08:00,4.559999942779541,4.610000133514404,4.510000228881836,4.579999923706055,3.631540771522815,243770862.0,0.0,0.0,True
2022-03-14 00:00:00+08:00,4.619999885559082,4.619999885559082,4.550000190734863,4.599999904632568,3.6473990611050033,338753089.0,0.0,0.0,True
2022-03-15 00:00:00+08:00,4.599999904632568,4.599999904632568,4.349999904632568,4.429999828338623,3.5126037105799086,517738144.0,0.0,0.0,True
2022-03-16 00:00:00+08:00,4.46999979019165,4.46999979019165,4.340000152587891,4.400000095367432,3.488816608977137,404766302.0,0.0,0.0,True
2022-03-17 00:00:00+08:00,4.440000057220459,4.599999904632568,4.420000076293945,4.579999923706055,3.631540771522815,354447970.0,0.0,0.0,True
2022-03-18 00:00:00+08:00,4.559999942779541,4.670000076293945,4.53000020980835,4.630000114440918,3.671186384554782,466329103.0,0.0,0.0,True
2022-03-21 00:00:00+08:00,4.619999885559082,4.650000095367432,4.550000190734863,4.590000152587891,3.6394700272374125,144232518.0,0.0,0.0,True
2022-03-22 00:00:00+08:00,4.630000114440918,4.650000095367432,4.579999923706055,4.630000114440918,3.671186384554782,155120637.0,0.0,0.0,True
2022-03-23 00:00:00+08:00,4.599999904632568,4.639999866485596,4.579999923706055,4.630000114440918,3.671186384554782,178670194.0,0.0,0.0,True
2022-03-24 00:00:00+08:00,4.590000152587891,4.670000076293945,4.590000152587891,4.659999847412109,3.6949734861575534,152744218.0,0.0,0.0,True
2022-03-25 00:00:00+08:00,4.659999847412109,4.71999979019165,4.630000114440918,4.690000057220459,3.718761031454339,197186668.0,0.0,0.0,True
2022-03-28 00:00:00+08:00,4.690000057220459,4.699999809265137,4.650000095367432,4.690000057220459,3.718761031454339,118402829.0,0.0,0.0,True
2022-03-29 00:00:00+08:00,4.690000057220459,4.71999979019165,4.659999847412109,4.71999979019165,3.7425483549041174,168733498.0,0.0,0.0,True
2022-03-30 00:00:00+08:00,4.75,4.789999961853027,4.730000019073486,4.760000228881836,3.774265377762507,237372211.0,0.0,0.0,True
2022-03-31 00:00:00+08:00,4.760000228881836,4.840000152587891,4.75,4.809999942779541,3.8139107689474665,212456579.0,0.0,0.0,True
2022-04-01 00:00:00+08:00,4.840000152587891,4.840000152587891,4.78000020980835,4.840000152587891,3.8376980923972455,190609233.0,0.0,0.0,True
2022-04-04 00:00:00+08:00,4.840000152587891,4.869999885559082,4.800000190734863,4.860000133514404,3.8535561601324266,151459212.0,0.0,0.0,True
2022-04-06 00:00:00+08:00,4.860000133514404,4.869999885559082,4.789999961853027,4.809999942779541,3.8139107689474665,193053761.0,0.0,0.0,True
2022-04-07 00:00:00+08:00,4.820000171661377,4.849999904632568,4.769999980926514,4.789999961853027,3.798052257518272,165591689.0,0.0,0.0,True
2022-04-08 00:00:00+08:00,4.78000020980835,4.809999942779541,4.760000228881836,4.78000020980835,3.790123445497688,125862452.0,0.0,0.0,True
2022-04-11 00:00:00+08:00,4.800000190734863,4.800000190734863,4.71999979019165,4.78000020980835,3.790123445497688,217015199.0,0.0,0.0,True
2022-04-12 00:00:00+08:00,4.800000190734863,4.800000190734863,4.71999979019165,4.75,3.7663361220479095,197079900.0,0.0,0.0,True
2022-04-13 00:00:00+08:00,4.75,4.78000020980835,4.730000019073486,4.75,3.7663361220479095,170451942.0,0.0,0.0,True
2022-04-14 00:00:00+08:00,4.760000228881836,4.769999980926514,4.71999979019165,4.75,3.7663361220479095,154267290.0,0.0,0.0,True
2022-04-19 00:00:00+08:00,4.730000019073486,4.739999771118164,4.659999847412109,4.71999979019165,3.7425483549041174,216123073.0,0.0,0.0,True
2022-04-20 00:00:00+08:00,4.659999847412109,4.730000019073486,4.659999847412109,4.710000038146973,3.73461909918952,146054294.0,0.0,0.0,True
2022-04-21 00:00:00+08:00,4.710000038146973,4.75,4.699999809265137,4.739999771118164,3.758406866333312,185194225.0,0.0,0.0,True
2022-04-22 00:00:00+08:00,4.710000038146973,4.739999771118164,4.710000038146973,4.71999979019165,3.7425483549041174,135844028.0,0.0,0.0,True
2022-04-25 00:00:00+08:00,4.710000038146973,4.71999979019165,4.650000095367432,4.670000076293945,3.7029029637191577,200256353.0,0.0,0.0,True
2022-04-26 00:00:00+08:00,4.710000038146973,4.710000038146973,4.610000133514404,4.619999885559082,3.6632571288401845,184551014.0,0.0,0.0,True
2022-04-27 00:00:00+08:00,4.599999904632568,4.650000095367432,4.590000152587891,4.630000114440918,3.671186384554782,191718211.0,0.0,0.0,True
2022-04-28 00:00:00+08:00,4.659999847412109,4.760000228881836,4.619999885559082,4.75,3.7663361220479095,246882890.0,0.0,0.0,True
2022-04-29 00:00:00+08:00,4.75,4.800000190734863,4.670000076293945,4.739999771118164,3.758406866333312,183817214.0,0.0,0.0,True
2022-05-03 00:00:00+08:00,4.670000076293945,4.699999809265137,4.630000114440918,4.699999809265137,3.7266898434749227,156828378.0,0.0,0.0,True
2022-05-04 00:00:00+08:00,4.699999809265137,4.739999771118164,4.679999828338623,4.71999979019165,3.7425483549041174,92233967.0,0.0,0.0,True
2022-05-05 00:00:00+08:00,4.75,4.789999961853027,4.630000114440918,4.659999847412109,3.6949734861575534,162282234.0,0.0,0.0,True
2022-05-06 00:00:00+08:00,4.639999866485596,4.650000095367432,4.559999942779541,4.579999923706055,3.631540771522815,178956874.0,0.0,0.0,True
2022-05-10 00:00:00+08:00,4.539999961853027,4.570000171661377,4.480000019073486,4.539999961853027,3.5998239705114323,155643735.0,0.0,0.0,True
2022-05-11 00:00:00+08:00,4.519999980926514,4.539999961853027,4.5,4.519999980926514,3.5839656809292446,103697643.0,0.0,0.0,True
2022-05-12 00:00:00+08:00,4.519999980926514,4.519999980926514,4.449999809265137,4.46999979019165,3.544320067897278,204596142.0,0.0,0.0,True
2022-05-13 00:00:00+08:00,4.480000019073486,4.579999923706055,4.46999979019165,4.570000171661377,3.6236119595022314,156732463.0,0.0,0.0,True
2022-05-16 00:00:00+08:00,4.570000171661377,4.579999923706055,4.519999980926514,4.559999942779541,3.615682481940627,150395730.0,0.0,0.0,True
2022-05-17 00:00:00+08:00,4.630000114440918,4.630000114440918,4.550000190734863,4.590000152587891,3.6394700272374125,142759916.0,0.0,0.0,True
2022-05-18 00:00:00+08:00,4.559999942779541,4.599999904632568,4.519999980926514,4.570000171661377,3.6236119595022314,193671918.0,0.0,0.0,True
2022-05-19 00:00:00+08:00,4.570000171661377,4.599999904632568,4.519999980926514,4.570000171661377,3.6236119595022314,164880949.0,0.0,0.0,True
2022-05-20 00:00:00+08:00,4.610000133514404,4.670000076293945,4.599999904632568,4.650000095367432,3.6870446741369696,167913620.0,0.0,0.0,True
2022-05-23 00:00:00+08:00,4.630000114440918,4.699999809265137,4.599999904632568,4.639999866485596,3.679115418422372,95386755.0,0.0,0.0,True
2022-05-24 00:00:00+08:00,4.639999866485596,4.679999828338623,4.610000133514404,4.639999866485596,3.679115418422372,125710468.0,0.0,0.0,True
2022-05-25 00:00:00+08:00,4.639999866485596,4.690000057220459,4.619999885559082,4.659999847412109,3.6949734861575534,156111958.0,0.0,0.0,True
2022-05-26 00:00:00+08:00,4.699999809265137,4.699999809265137,4.599999904632568,4.650000095367432,3.6870446741369696,132602703.0,0.0,0.0,True
2022-05-27 00:00:00+08:00,4.679999828338623,4.699999809265137,4.650000095367432,4.699999809265137,3.7266898434749227,206988750.0,0.0,0.0,True
2022-05-30 00:00:00+08:00,4.699999809265137,4.730000019073486,4.650000095367432,4.679999828338623,3.7108317757397415,171774574.0,0.0,0.0,True
2022-05-31 00:00:00+08:00,4.699999809265137,4.710000038146973,4.659999847412109,4.710000038146973,3.73461909918952,220277319.0,0.0,0.0,True
2022-06-01 00:00:00+08:00,4.730000019073486,4.730000019073486,4.659999847412109,4.690000057220459,3.718761031454339,193079721.0,0.0,0.0,True
2022-06-02 00:00:00+08:00,4.670000076293945,4.679999828338623,4.610000133514404,4.650000095367432,3.6870446741369696,139107770.0,0.0,0.0,True
2022-06-06 00:00:00+08:00,4.650000095367432,4.699999809265137,4.570000171661377,4.679999828338623,3.7108317757397415,153712172.0,0.0,0.0,True
2022-06-07 00:00:00+08:00,4.630000114440918,4.650000095367432,4.579999923706055,4.610000133514404,3.6553283168196007,158668693.0,0.0,0.0,True
2022-06-08 00:00:00+08:00,4.630000114440918,4.630000114440918,4.570000171661377,4.590000152587891,3.6394700272374125,204148038.0,0.0,0.0,True
2022-06-09 00:00:00+08:00,4.519999980926514,4.590000152587891,4.519999980926514,4.570000171661377,3.6236119595022314,218714573.0,0.0,0.0,True
2022-06-10 00:00:00+08:00,4.550000190734863,4.570000171661377,4.53000020980835,4.550000190734863,3.6077532262260297,202832508.0,0.0,0.0,True
2022-06-13 00:00:00+08:00,4.5,4.519999980926514,4.480000019073486,4.510000228881836,3.576036868908661,226958458.0,0.0,0.0,True
2022-06-14 00:00:00+08:00,4.53000020980835,4.539999961853027,4.489999771118164,4.519999980926514,3.5839656809292446,158315596.0,0.0,0.0,True
2022-06-15 00:00:00+08:00,4.489999771118164,4.539999961853027,4.489999771118164,4.510000228881836,3.576036868908661,196629642.0,0.0,0.0,True
2022-06-16 00:00:00+08:00,4.539999961853027,4.539999961853027,4.449999809265137,4.460000038146973,3.536391255876694,203701316.0,0.0,0.0,True
2022-06-17 00:00:00+08:00,4.449999809265137,4.5,4.449999809265137,4.5,3.5681076131940634,263907767.0,0.0,0.0,True
2022-06-20 00:00:00+08:00,4.460000038146973,4.489999771118164,4.449999809265137,4.480000019073486,3.5522493236118753,147860264.0,0.0,0.0,True
2022-06-21 00:00:00+08:00,4.489999771118164,4.610000133514404,4.489999771118164,4.599999904632568,3.6473990611050033,192570908.0,0.0,0.0,True
2022-06-22 00:00:00+08:00,4.559999942779541,4.590000152587891,4.510000228881836,4.53000020980835,3.5918951584908485,149133751.0,0.0,0.0,True
2022-06-23 00:00:00+08:00,4.559999942779541,4.570000171661377,4.510000228881836,4.53000020980835,3.5918951584908485,119888044.0,0.0,0.0,True
2022-06-24 00:00:00+08:00,4.519999980926514,4.559999942779541,4.510000228881836,4.53000020980835,3.5918951584908485,138856645.0,0.0,0.0,True
2022-06-27 00:00:00+08:00,4.550000190734863,4.599999904632568,4.510000228881836,4.559999942779541,3.615682481940627,172806844.0,0.0,0.0,True
2022-06-28 00:00:00+08:00,4.559999942779541,4.659999847412109,4.550000190734863,4.639999866485596,3.679115418422372,206324445.0,0.0,0.0,True
2022-06-29 00:00:00+08:00,4.599999904632568,4.699999809265137,4.599999904632568,4.670000076293945,3.7029029637191577,315113260.0,0.0,0.0,True
2022-06-30 00:00:00+08:00,4.650000095367432,4.679999828338623,4.639999866485596,4.659999847412109,3.6949734861575534,330506421.0,0.0,0.0,True
2022-07-04 00:00:00+08:00,4.309999942779541,4.360000133514404,4.260000228881836,4.340000152587891,3.7148474284085884,186247797.0,0.343218,0.0,True
2022-07-05 00:00:00+08:00,4.360000133514404,4.420000076293945,4.320000171661377,4.329999923706055,3.70628768350086,157833531.0,0.0,0.0,True
2022-07-06 00:00:00+08:00,4.300000190734863,4.329999923706055,4.21999979019165,4.25,3.637811277168081,207621705.0,0.0,0.0,True
2022-07-07 00:00:00+08:00,4.21999979019165,4.28000020980835,4.210000038146973,4.269999980926514,3.6549303232895243,125459740.0,0.0,0.0,True
2022-07-08 00:00:00+08:00,4.289999961853027,4.300000190734863,4.260000228881836,4.28000020980835,3.6634900681972526,121906865.0,0.0,0.0,True
2022-07-11 00:00:00+08:00,4.28000020980835,4.289999961853027,4.21999979019165,4.25,3.637811277168081,153555318.0,0.0,0.0,True
2022-07-12 00:00:00+08:00,4.230000019073486,4.28000020980835,4.210000038146973,4.21999979019165,3.612132264291903,142581267.0,0.0,0.0,True
2022-07-13 00:00:00+08:00,4.21999979019165,4.239999771118164,4.150000095367432,4.150000095367432,3.552215824713859,166171071.0,0.0,0.0,True
2022-07-14 00:00:00+08:00,4.150000095367432,4.150000095367432,4.03000020980835,4.050000190734863,3.46662015041263,285030303.0,0.0,0.0,True
2022-07-15 00:00:00+08:00,4.0,4.050000190734863,4.0,4.010000228881836,3.4323820581697437,191441297.0,0.0,0.0,True
2022-07-18 00:00:00+08:00,4.059999942779541,4.139999866485596,4.019999980926514,4.130000114440918,3.535096556745409,141346012.0,0.0,0.0,True
2022-07-19 00:00:00+08:00,4.099999904632568,4.130000114440918,4.070000171661377,4.099999904632568,3.5094177657162375,95535528.0,0.0,0.0,True
2022-07-20 00:00:00+08:00,4.110000133514404,4.170000076293945,4.110000133514404,4.110000133514404,3.517977510623966,139814494.0,0.0,0.0,True
2022-07-21 00:00:00+08:00,4.099999904632568,4.119999885559082,4.059999942779541,4.070000171661377,3.48373941838108,120004999.0,0.0,0.0,True
2022-07-22 00:00:00+08:00,4.079999923706055,4.139999866485596,4.059999942779541,4.090000152587891,3.5008584645025227,114403909.0,0.0,0.0,True
2022-07-25 00:00:00+08:00,4.079999923706055,4.139999866485596,4.079999923706055,4.119999885559082,3.5265368118376808,98165323.0,0.0,0.0,True
2022-07-26 00:00:00+08:00,4.119999885559082,4.170000076293945,4.110000133514404,4.150000095367432,3.552215824713859,117811945.0,0.0,0.0,True
2022-07-27 00:00:00+08:00,4.139999866485596,4.159999847412109,4.110000133514404,4.150000095367432,3.552215824713859,88534851.0,0.0,0.0,True
2022-07-28 00:00:00+08:00,4.139999866485596,4.159999847412109,4.110000133514404,4.139999866485596,3.5436560798061305,117639358.0,0.0,0.0,True
2022-07-29 00:00:00+08:00,4.139999866485596,4.199999809265137,4.099999904632568,4.150000095367432,3.552215824713859,162818088.0,0.0,0.0,True
2022-08-01 00:00:00+08:00,4.150000095367432,4.170000076293945,4.099999904632568,4.150000095367432,3.552215824713859,113797320.0,0.0,0.0,True
2022-08-02 00:00:00+08:00,4.119999885559082,4.130000114440918,4.050000190734863,4.070000171661377,3.48373941838108,130607073.0,0.0,0.0,True
2022-08-03 00:00:00+08:00,4.059999942779541,4.070000171661377,4.010000228881836,4.03000020980835,3.449501104291187,130115193.0,0.0,0.0,True
2022-08-04 00:00:00+08:00,4.019999980926514,4.079999923706055,4.010000228881836,4.079999923706055,3.4922987195947948,123298899.0,0.0,0.0,True
2022-08-05 00:00:00+08:00,4.079999923706055,4.119999885559082,4.070000171661377,4.099999904632568,3.5094177657162375,70808951.0,0.0,0.0,True
2022-08-08 00:00:00+08:00,4.099999904632568,4.139999866485596,4.090000152587891,4.110000133514404,3.517977510623966,103490304.0,0.0,0.0,True
2022-08-09 00:00:00+08:00,4.130000114440918,4.170000076293945,4.099999904632568,4.110000133514404,3.517977510623966,102503956.0,0.0,0.0,True
2022-08-10 00:00:00+08:00,4.110000133514404,4.130000114440918,4.039999961853027,4.070000171661377,3.48373941838108,109648123.0,0.0,0.0,True
2022-08-11 00:00:00+08:00,4.099999904632568,4.119999885559082,4.070000171661377,4.110000133514404,3.517977510623966,96918665.0,0.0,0.0,True
2022-08-12 00:00:00+08:00,4.119999885559082,4.139999866485596,4.079999923706055,4.119999885559082,3.5265368118376808,87588882.0,0.0,0.0,True
2022-08-15 00:00:00+08:00,4.110000133514404,4.119999885559082,4.059999942779541,4.090000152587891,3.5008584645025227,97749417.0,0.0,0.0,True
2022-08-16 00:00:00+08:00,4.119999885559082,4.130000114440918,4.070000171661377,4.070000171661377,3.48373941838108,98392012.0,0.0,0.0,True
2022-08-17 00:00:00+08:00,4.130000114440918,4.130000114440918,4.079999923706055,4.090000152587891,3.5008584645025227,112383051.0,0.0,0.0,True
2022-08-18 00:00:00+08:00,4.090000152587891,4.090000152587891,4.03000020980835,4.050000190734863,3.46662015041263,110197864.0,0.0,0.0,True
2022-08-19 00:00:00+08:00,4.03000020980835,4.079999923706055,4.03000020980835,4.050000190734863,3.46662015041263,53318208.0,0.0,0.0,True
2022-08-22 00:00:00+08:00,4.03000020980835,4.059999942779541,4.03000020980835,4.039999961853027,3.458060405504902,73772532.0,0.0,0.0,True
2022-08-23 00:00:00+08:00,4.050000190734863,4.050000190734863,4.0,4.0,3.4238223132620154,141418541.0,0.0,0.0,True
2022-08-24 00:00:00+08:00,4.0,4.010000228881836,3.950000047683716,3.9600000381469727,3.3895842210191294,152588936.0,0.0,0.0,True
2022-08-25 00:00:00+08:00,4.0,4.050000190734863,3.950000047683716,4.010000228881836,3.4323820581697437,105614559.0,0.0,0.0,True
2022-08-26 00:00:00+08:00,4.010000228881836,4.039999961853027,4.0,4.039999961853027,3.458060405504902,91759288.0,0.0,0.0,True
2022-08-29 00:00:00+08:00,3.990000009536743,4.03000020980835,3.9700000286102295,4.010000228881836,3.4323820581697437,93220101.0,0.0,0.0,True
2022-08-30 00:00:00+08:00,3.990000009536743,4.019999980926514,3.9600000381469727,4.0,3.4238223132620154,124232476.0,0.0,0.0,True
2022-08-31 00:00:00+08:00,4.0,4.010000228881836,3.950000047683716,4.0,3.4238223132620154,215089075.0,0.0,0.0,True
2022-09-01 00:00:00+08:00,3.9800000190734863,3.990000009536743,3.950000047683716,3.9700000286102295,3.3981437440798508,141869725.0,0.0,0.0,True
2022-09-02 00:00:00+08:00,3.9700000286102295,3.990000009536743,3.9200000762939453,3.940000057220459,3.3724649530506796,170197348.0,0.0,0.0,True
2022-09-05 00:00:00+08:00,3.9100000858306885,3.9200000762939453,3.880000114440918,3.9000000953674316,3.338226860807793,160451324.0,0.0,0.0,True
2022-09-06 00:00:00+08:00,3.930000066757202,3.950000047683716,3.9000000953674316,3.9000000953674316,3.338226860807793,98911778.0,0.0,0.0,True
2022-09-07 00:00:00+08:00,3.869999885559082,3.9000000953674316,3.859999895095825,3.890000104904175,3.329667337747072,119839071.0,0.0,0.0,True
2022-09-08 00:00:00+08:00,3.9100000858306885,3.9100000858306885,3.8499999046325684,3.859999895095825,3.3039885467179,164256459.0,0.0,0.0,True
2022-09-09 00:00:00+08:00,3.869999885559082,3.930000066757202,3.8499999046325684,3.9200000762939453,3.3553459069292364,135594987.0,0.0,0.0,True
2022-09-13 00:00:00+08:00,3.9100000858306885,3.950000047683716,3.890000104904175,3.9000000953674316,3.338226860807793,127884080.0,0.0,0.0,True
2022-09-14 00:00:00+08:00,3.8499999046325684,3.8499999046325684,3.819999933242798,3.8299999237060547,3.278309755688729,157929262.0,0.0,0.0,True
2022-09-15 00:00:00+08:00,3.8299999237060547,3.859999895095825,3.819999933242798,3.8399999141693115,3.2868692787494505,80364467.0,0.0,0.0,True
2022-09-16 00:00:00+08:00,3.8299999237060547,3.890000104904175,3.819999933242798,3.869999885559082,3.312548069778622,249497736.0,0.0,0.0,True
2022-09-19 00:00:00+08:00,3.890000104904175,3.9100000858306885,3.869999885559082,3.890000104904175,3.329667337747072,139492255.0,0.0,0.0,True
2022-09-20 00:00:00+08:00,3.9200000762939453,3.9200000762939453,3.8399999141693115,3.880000114440918,3.3211078146863504,132241405.0,0.0,0.0,True
2022-09-21 00:00:00+08:00,3.880000114440918,3.880000114440918,3.8299999237060547,3.8399999141693115,3.2868692787494505,109664926.0,0.0,0.0,True
2022-09-22 00:00:00+08:00,3.819999933242798,3.8399999141693115,3.799999952316284,3.819999933242798,3.2697502326280077,125820149.0,0.0,0.0,True
2022-09-23 00:00:00+08:00,3.809999942779541,3.8499999046325684,3.799999952316284,3.819999933242798,3.2697502326280077,143743318.0,0.0,0.0,True
2022-09-26 00:00:00+08:00,3.819999933242798,3.819999933242798,3.740000009536743,3.7699999809265137,3.2269526173244,173826934.0,0.0,0.0,True
2022-09-27 00:00:00+08:00,3.759999990463257,3.7799999713897705,3.7100000381469727,3.7200000286102295,3.1841547801737855,138631045.0,0.0,0.0,True
2022-09-28 00:00:00+08:00,3.700000047683716,3.7100000381469727,3.609999895095825,3.630000114440918,3.1071188507802847,298849371.0,0.0,0.0,True
2022-09-29 00:00:00+08:00,3.640000104904175,3.690000057220459,3.549999952316284,3.5799999237060547,3.0643210136296704,214399608.0,0.0,0.0,True
2022-09-30 00:00:00+08:00,3.609999895095825,3.690000057220459,3.5899999141693115,3.680000066757202,3.149916687930899,187751776.0,0.0,0.0,True
2022-10-03 00:00:00+08:00,3.680000066757202,3.680000066757202,3.5999999046325684,3.630000114440918,3.1071188507802847,97092640.0,0.0,0.0,True
2022-10-05 00:00:00+08:00,3.7200000286102295,3.8399999141693115,3.690000057220459,3.809999942779541,3.261190709567286,186993449.0,0.0,0.0,True
2022-10-06 00:00:00+08:00,3.809999942779541,3.8399999141693115,3.759999990463257,3.7799999713897705,3.2355121403851212,74168215.0,0.0,0.0,True
2022-10-07 00:00:00+08:00,3.759999990463257,3.7699999809265137,3.7300000190734863,3.75,3.20983334935595,89832547.0,0.0,0.0,True
2022-10-10 00:00:00+08:00,3.6700000762939453,3.7300000190734863,3.630000114440918,3.700000047683716,3.1670357340523423,114772563.0,0.0,0.0,True
2022-10-11 00:00:00+08:00,3.700000047683716,3.7200000286102295,3.619999885559082,3.6500000953674316,3.124237896901728,149950923.0,0.0,0.0,True
2022-10-12 00:00:00+08:00,3.6500000953674316,3.690000057220459,3.609999895095825,3.630000114440918,3.1071188507802847,170367761.0,0.0,0.0,True
2022-10-13 00:00:00+08:00,3.630000114440918,3.6600000858306885,3.5999999046325684,3.609999895095825,3.089999582811835,145623355.0,0.0,0.0,True
2022-10-14 00:00:00+08:00,3.6600000858306885,3.690000057220459,3.5999999046325684,3.609999895095825,3.089999582811835,128943894.0,0.0,0.0,True
2022-10-17 00:00:00+08:00,3.6600000858306885,3.690000057220459,3.630000114440918,3.6700000762939453,3.1413569430231707,167975332.0,0.0,0.0,True
2022-10-18 00:00:00+08:00,3.680000066757202,3.7200000286102295,3.6500000953674316,3.6700000762939453,3.1413569430231707,100552835.0,0.0,0.0,True
2022-10-19 00:00:00+08:00,3.6700000762939453,3.7200000286102295,3.6600000858306885,3.6700000762939453,3.1413569430231707,107848792.0,0.0,0.0,True
2022-10-20 00:00:00+08:00,3.6600000858306885,3.700000047683716,3.640000104904175,3.680000066757202,3.149916687930899,151081318.0,0.0,0.0,True
2022-10-21 00:00:00+08:00,3.700000047683716,3.759999990463257,3.6600000858306885,3.7200000286102295,3.1841547801737855,147938772.0,0.0,0.0,True
2022-10-24 00:00:00+08:00,3.700000047683716,3.700000047683716,3.5899999141693115,3.619999885559082,3.0985591058725563,265023897.0,0.0,0.0,True
2022-10-25 00:00:00+08:00,3.690000057220459,3.690000057220459,3.5899999141693115,3.6600000858306885,3.1327974199624493,223841747.0,0.0,0.0,True
2022-10-26 00:00:00+08:00,3.6600000858306885,3.680000066757202,3.5999999046325684,3.630000114440918,3.1071188507802847,178416017.0,0.0,0.0,True
2022-10-27 00:00:00+08:00,3.640000104904175,3.690000057220459,3.5899999141693115,3.630000114440918,3.1071188507802847,180205763.0,0.0,0.0,True
2022-10-28 00:00:00+08:00,3.6500000953674316,3.680000066757202,3.5799999237060547,3.5999999046325684,3.081440059751113,171437925.0,0.0,0.0,True
2022-10-31 00:00:00+08:00,3.640000104904175,3.640000104904175,3.4000000953674316,3.4100000858306885,2.9188086779033906,340963964.0,0.0,0.0,True
2022-11-01 00:00:00+08:00,3.450000047683716,3.450000047683716,3.359999895095825,3.4200000762939453,2.927368200964112,232698920.0,0.0,0.0,True
2022-11-02 00:00:00+08:00,3.4200000762939453,3.5,3.369999885559082,3.490000009536743,2.9872850842361696,144349882.0,0.0,0.0,True
2022-11-03 00:00:00+08:00,3.490000009536743,3.490000009536743,3.369999885559082,3.390000104904175,2.901689409934941,130609787.0,0.0,0.0,True
2022-11-04 00:00:00+08:00,3.4100000858306885,3.5399999618530273,3.4000000953674316,3.490000009536743,2.9872850842361696,200082427.0,0.0,0.0,True
2022-11-07 00:00:00+08:00,3.490000009536743,3.5999999046325684,3.490000009536743,3.5799999237060547,3.0643210136296704,158171458.0,0.0,0.0,True
2022-11-08 00:00:00+08:00,3.5999999046325684,3.619999885559082,3.549999952316284,3.5899999141693115,3.0728805366903917,97074981.0,0.0,0.0,True
2022-11-09 00:00:00+08:00,3.609999895095825,3.6500000953674316,3.569999933242798,3.5999999046325684,3.081440059751113,133791698.0,0.0,0.0,True
2022-11-10 00:00:00+08:00,3.5999999046325684,3.5999999046325684,3.5199999809265137,3.559999942779541,3.0472017456612206,91869883.0,0.0,0.0,True
2022-11-11 00:00:00+08:00,3.640000104904175,3.740000009536743,3.619999885559082,3.7300000190734863,3.192714303234507,317307046.0,0.0,0.0,True
2022-11-14 00:00:00+08:00,3.799999952316284,3.819999933242798,3.680000066757202,3.690000057220459,3.1584762109916205,233835549.0,0.0,0.0,True
2022-11-15 00:00:00+08:00,3.700000047683716,3.7799999713897705,3.690000057220459,3.7699999809265137,3.2269526173244,187874570.0,0.0,0.0,True
2022-11-16 00:00:00+08:00,3.75,3.799999952316284,3.700000047683716,3.7300000190734863,3.192714303234507,182815204.0,0.0,0.0,True
2022-11-17 00:00:00+08:00,3.7300000190734863,3.759999990463257,3.6700000762939453,3.7200000286102295,3.1841547801737855,169346286.0,0.0,0.0,True
2022-11-18 00:00:00+08:00,3.7200000286102295,3.7200000286102295,3.6500000953674316,3.6700000762939453,3.1413569430231707,170907270.0,0.0,0.0,True
2022-11-21 00:00:00+08:00,3.6500000953674316,3.680000066757202,3.609999895095825,3.6700000762939453,3.1413569430231707,132546725.0,0.0,0.0,True
2022-11-22 00:00:00+08:00,3.680000066757202,3.7799999713897705,3.680000066757202,3.7300000190734863,3.192714303234507,314616432.0,0.0,0.0,True
2022-11-23 00:00:00+08:00,3.75,3.8299999237060547,3.740000009536743,3.7699999809265137,3.2269526173244,266706035.0,0.0,0.0,True
2022-11-24 00:00:00+08:00,3.7899999618530273,3.8299999237060547,3.7699999809265137,3.799999952316284,3.2526311865065645,239947767.0,0.0,0.0,True
2022-11-25 00:00:00+08:00,3.809999942779541,3.880000114440918,3.799999952316284,3.8499999046325684,3.2954288018101723,315415430.0,0.0,0.0,True
2022-11-28 00:00:00+08:00,3.799999952316284,3.799999952316284,3.690000057220459,3.7799999713897705,3.2355121403851212,285329073.0,0.0,0.0,True
2022-11-29 00:00:00+08:00,3.799999952316284,3.9200000762939453,3.7899999618530273,3.880000114440918,3.3211078146863504,457518421.0,0.0,0.0,True
2022-11-30 00:00:00+08:00,3.8399999141693115,3.930000066757202,3.819999933242798,3.9100000858306885,3.346786383868515,527274134.0,0.0,0.0,True
2022-12-01 00:00:00+08:00,3.9000000953674316,3.930000066757202,3.869999885559082,3.9100000858306885,3.346786383868515,274400919.0,0.0,0.0,True
2022-12-02 00:00:00+08:00,3.9200000762939453,3.930000066757202,3.819999933242798,3.819999933242798,3.2697502326280077,234537573.0,0.0,0.0,True
2022-12-05 00:00:00+08:00,3.8499999046325684,3.9000000953674316,3.819999933242798,3.8499999046325684,3.2954288018101723,379318895.0,0.0,0.0,True
2022-12-06 00:00:00+08:00,3.8299999237060547,3.869999885559082,3.8299999237060547,3.859999895095825,3.3039885467179,139139112.0,0.0,0.0,True
2022-12-07 00:00:00+08:00,3.880000114440918,3.880000114440918,3.799999952316284,3.799999952316284,3.2526311865065645,372485343.0,0.0,0.0,True
2022-12-08 00:00:00+08:00,3.8299999237060547,3.8499999046325684,3.809999942779541,3.8399999141693115,3.2868692787494505,162099180.0,0.0,0.0,True
2022-12-09 00:00:00+08:00,3.819999933242798,3.890000104904175,3.819999933242798,3.890000104904175,3.329667337747072,234581088.0,0.0,0.0,True
2022-12-12 00:00:00+08:00,3.8499999046325684,3.890000104904175,3.819999933242798,3.859999895095825,3.3039885467179,188878820.0,0.0,0.0,True
2022-12-13 00:00:00+08:00,3.869999885559082,3.869999885559082,3.8299999237060547,3.8399999141693115,3.2868692787494505,148034641.0,0.0,0.0,True
2022-12-14 00:00:00+08:00,3.890000104904175,3.9000000953674316,3.819999933242798,3.8399999141693115,3.2868692787494505,168796301.0,0.0,0.0,True
2022-12-15 00:00:00+08:00,3.8399999141693115,3.8499999046325684,3.7699999809265137,3.8299999237060547,3.278309755688729,155867255.0,0.0,0.0,True
2022-12-16 00:00:00+08:00,3.8499999046325684,3.869999885559082,3.799999952316284,3.8399999141693115,3.2868692787494505,223138746.0,0.0,0.0,True
2022-12-19 00:00:00+08:00,3.8399999141693115,3.869999885559082,3.7699999809265137,3.799999952316284,3.2526311865065645,111495623.0,0.0,0.0,True
2022-12-20 00:00:00+08:00,3.7699999809265137,3.809999942779541,3.75,3.7899999618530273,3.244071663445843,143976437.0,0.0,0.0,True
2022-12-21 00:00:00+08:00,3.799999952316284,3.8399999141693115,3.7799999713897705,3.819999933242798,3.2697502326280077,109124394.0,0.0,0.0,True
2022-12-22 00:00:00+08:00,3.869999885559082,3.890000104904175,3.8399999141693115,3.880000114440918,3.3211078146863504,137608412.0,0.0,0.0,True
2022-12-23 00:00:00+08:00,3.8299999237060547,3.880000114440918,3.8299999237060547,3.8499999046325684,3.2954288018101723,83743692.0,0.0,0.0,True
2022-12-28 00:00:00+08:00,3.869999885559082,4.03000020980835,3.869999885559082,4.0,3.4238223132620154,324909402.0,0.0,0.0,True
2022-12-29 00:00:00+08:00,4.0,4.019999980926514,3.950000047683716,4.010000228881836,3.4323820581697437,166581551.0,0.0,0.0,True
2022-12-30 00:00:00+08:00,4.070000171661377,4.070000171661377,4.019999980926514,4.019999980926514,3.4409413593834586,162913773.0,0.0,0.0,True
2023-01-03 00:00:00+08:00,3.9200000762939453,4.070000171661377,3.9100000858306885,4.059999942779541,3.4751796734733515,194182186.0,0.0,0.0,True
2023-01-04 00:00:00+08:00,4.079999923706055,4.130000114440918,4.059999942779541,4.130000114440918,3.535096556745409,211264184.0,0.0,0.0,True
2023-01-05 00:00:00+08:00,4.150000095367432,4.170000076293945,4.110000133514404,4.139999866485596,3.5436560798061305,181427620.0,0.0,0.0,True
2023-01-06 00:00:00+08:00,4.179999828338623,4.179999828338623,4.119999885559082,4.130000114440918,3.535096556745409,247399417.0,0.0,0.0,True
2023-01-09 00:00:00+08:00,4.159999847412109,4.199999809265137,4.119999885559082,4.130000114440918,3.535096556745409,214979619.0,0.0,0.0,True
2023-01-10 00:00:00+08:00,4.139999866485596,4.170000076293945,4.119999885559082,4.139999866485596,3.5436560798061305,403040540.0,0.0,0.0,True
2023-01-11 00:00:00+08:00,4.130000114440918,4.179999828338623,4.119999885559082,4.139999866485596,3.5436560798061305,303390077.0,0.0,0.0,True
2023-01-12 00:00:00+08:00,4.139999866485596,4.199999809265137,4.139999866485596,4.179999828338623,3.577894172049017,245789865.0,0.0,0.0,True
2023-01-13 00:00:00+08:00,4.170000076293945,4.239999771118164,4.170000076293945,4.199999809265137,3.5950132181704597,199160580.0,0.0,0.0,True
2023-01-16 00:00:00+08:00,4.210000038146973,4.260000228881836,4.179999828338623,4.25,3.637811277168081,241899182.0,0.0,0.0,True
2023-01-17 00:00:00+08:00,4.21999979019165,4.260000228881836,4.21999979019165,4.21999979019165,3.612132264291903,262359961.0,0.0,0.0,True
2023-01-18 00:00:00+08:00,4.21999979019165,4.260000228881836,4.21999979019165,4.260000228881836,3.6463710220758094,222780307.0,0.0,0.0,True
2023-01-19 00:00:00+08:00,4.21999979019165,4.260000228881836,4.139999866485596,4.179999828338623,3.577894172049017,260203406.0,0.0,0.0,True
2023-01-20 00:00:00+08:00,4.210000038146973,4.230000019073486,4.170000076293945,4.21999979019165,3.612132264291903,194452257.0,0.0,0.0,True
2023-01-26 00:00:00+08:00,4.260000228881836,4.28000020980835,4.230000019073486,4.260000228881836,3.6463710220758094,127661742.0,0.0,0.0,True
2023-01-27 00:00:00+08:00,4.239999771118164,4.300000190734863,4.21999979019165,4.300000190734863,3.6806091143186954,149200374.0,0.0,0.0,True
2023-01-30 00:00:00+08:00,4.260000228881836,4.289999961853027,4.170000076293945,4.199999809265137,3.5950132181704597,296591107.0,0.0,0.0,True
2023-01-31 00:00:00+08:00,4.21999979019165,4.25,4.159999847412109,4.190000057220459,3.586453916956745,368763206.0,0.0,0.0,True
2023-02-01 00:00:00+08:00,4.170000076293945,4.210000038146973,4.150000095367432,4.150000095367432,3.552215824713859,266891473.0,0.0,0.0,True
2023-02-02 00:00:00+08:00,4.179999828338623,4.179999828338623,4.110000133514404,4.130000114440918,3.535096556745409,229277066.0,0.0,0.0,True
2023-02-03 00:00:00+08:00,4.130000114440918,4.130000114440918,4.050000190734863,4.079999923706055,3.4922987195947948,271447098.0,0.0,0.0,True
2023-02-06 00:00:00+08:00,4.039999961853027,4.059999942779541,3.990000009536743,4.010000228881836,3.4323820581697437,300492721.0,0.0,0.0,True
2023-02-07 00:00:00+08:00,4.03000020980835,4.090000152587891,4.019999980926514,4.050000190734863,3.46662015041263,219172307.0,0.0,0.0,True
2023-02-08 00:00:00+08:00,4.070000171661377,4.110000133514404,4.059999942779541,4.079999923706055,3.4922987195947948,228279752.0,0.0,0.0,True
2023-02-09 00:00:00+08:00,4.070000171661377,4.110000133514404,4.03000020980835,4.050000190734863,3.46662015041263,187409834.0,0.0,0.0,True
2023-02-10 00:00:00+08:00,4.039999961853027,4.090000152587891,4.03000020980835,4.039999961853027,3.458060405504902,151607943.0,0.0,0.0,True
2023-02-13 00:00:00+08:00,4.010000228881836,4.059999942779541,4.0,4.03000020980835,3.449501104291187,171671856.0,0.0,0.0,True
2023-02-14 00:00:00+08:00,4.059999942779541,4.070000171661377,4.019999980926514,4.03000020980835,3.449501104291187,147352144.0,0.0,0.0,True
2023-02-15 00:00:00+08:00,4.039999961853027,4.050000190734863,3.9700000286102295,3.9800000190734863,3.4067032671405726,303483018.0,0.0,0.0,True
2023-02-16 00:00:00+08:00,3.9800000190734863,4.03000020980835,3.9800000190734863,3.9800000190734863,3.4067032671405726,240713771.0,0.0,0.0,True
2023-02-17 00:00:00+08:00,3.990000009536743,4.039999961853027,3.9800000190734863,4.0,3.4238223132620154,224799168.0,0.0,0.0,True
2023-02-20 00:00:00+08:00,3.990000009536743,4.059999942779541,3.990000009536743,4.03000020980835,3.449501104291187,234653980.0,0.0,0.0,True
2023-02-21 00:00:00+08:00,4.019999980926514,4.070000171661377,4.019999980926514,4.03000020980835,3.449501104291187,135495543.0,0.0,0.0,True
2023-02-22 00:00:00+08:00,4.059999942779541,4.070000171661377,4.0,4.010000228881836,3.4323820581697437,139543630.0,0.0,0.0,True
2023-02-23 00:00:00+08:00,4.010000228881836,4.059999942779541,4.010000228881836,4.019999980926514,3.4409413593834586,140377304.0,0.0,0.0,True
2023-02-24 00:00:00+08:00,4.0,4.03000020980835,3.9700000286102295,3.990000009536743,3.415262790201294,206742485.0,0.0,0.0,True
2023-02-27 00:00:00+08:00,3.990000009536743,3.990000009536743,3.930000066757202,3.950000047683716,3.381024476111401,132506979.0,0.0,0.0,True
2023-02-28 00:00:00+08:00,3.9600000381469727,4.0,3.9100000858306885,3.9200000762939453,3.3553459069292364,234160382.0,0.0,0.0,True
2023-03-01 00:00:00+08:00,3.9200000762939453,4.039999961853027,3.9200000762939453,4.039999961853027,3.458060405504902,276650060.0,0.0,0.0,True
2023-03-02 00:00:00+08:00,4.0,4.119999885559082,3.990000009536743,4.059999942779541,3.4751796734733515,227208559.0,0.0,0.0,True
2023-03-03 00:00:00+08:00,4.099999904632568,4.139999866485596,4.070000171661377,4.099999904632568,3.5094177657162375,191971906.0,0.0,0.0,True
2023-03-06 00:00:00+08:00,4.059999942779541,4.159999847412109,4.059999942779541,4.130000114440918,3.535096556745409,163399856.0,0.0,0.0,True
2023-03-07 00:00:00+08:00,4.119999885559082,4.269999980926514,4.119999885559082,4.159999847412109,3.5607751259275737,330921090.0,0.0,0.0,True
2023-03-08 00:00:00+08:00,4.119999885559082,4.170000076293945,4.110000133514404,4.139999866485596,3.5436560798061305,254181206.0,0.0,0.0,True
2023-03-09 00:00:00+08:00,4.139999866485596,4.210000038146973,4.090000152587891,4.099999904632568,3.5094177657162375,207466329.0,0.0,0.0,True
2023-03-10 00:00:00+08:00,4.110000133514404,4.130000114440918,4.039999961853027,4.059999942779541,3.4751796734733515,330930499.0,0.0,0.0,True
2023-03-13 00:00:00+08:00,4.050000190734863,4.179999828338623,4.050000190734863,4.159999847412109,3.5607751259275737,288944198.0,0.0,0.0,True
2023-03-14 00:00:00+08:00,4.150000095367432,4.210000038146973,4.079999923706055,4.119999885559082,3.5265368118376808,280600748.0,0.0,0.0,True
2023-03-15 00:00:00+08:00,4.139999866485596,4.25,4.139999866485596,4.239999771118164,3.6292515322603527,283998592.0,0.0,0.0,True
2023-03-16 00:00:00+08:00,4.21999979019165,4.260000228881836,4.179999828338623,4.230000019073486,3.6206920091996313,267363697.0,0.0,0.0,True
2023-03-17 00:00:00+08:00,4.269999980926514,4.28000020980835,4.21999979019165,4.25,3.637811277168081,368734553.0,0.0,0.0,True
2023-03-20 00:00:00+08:00,4.21999979019165,4.269999980926514,4.170000076293945,4.210000038146973,3.603572963078188,178187270.0,0.0,0.0,True
2023-03-21 00:00:00+08:00,4.159999847412109,4.239999771118164,4.150000095367432,4.170000076293945,3.569334870835302,130097337.0,0.0,0.0,True
2023-03-22 00:00:00+08:00,4.179999828338623,4.269999980926514,4.179999828338623,4.21999979019165,3.612132264291903,180956192.0,0.0,0.0,True
2023-03-23 00:00:00+08:00,4.239999771118164,4.28000020980835,4.199999809265137,4.269999980926514,3.6549303232895243,209048968.0,0.0,0.0,True
2023-03-24 00:00:00+08:00,4.230000019073486,4.260000228881836,4.199999809265137,4.21999979019165,3.612132264291903,103168396.0,0.0,0.0,True
2023-03-27 00:00:00+08:00,4.230000019073486,4.230000019073486,4.159999847412109,4.179999828338623,3.577894172049017,109853647.0,0.0,0.0,True
2023-03-28 00:00:00+08:00,4.199999809265137,4.260000228881836,4.179999828338623,4.230000019073486,3.6206920091996313,155573165.0,0.0,0.0,True
2023-03-29 00:00:00+08:00,4.25,4.300000190734863,4.21999979019165,4.289999961853027,3.6720493694109675,276116933.0,0.0,0.0,True
2023-03-30 00:00:00+08:00,4.260000228881836,4.300000190734863,4.21999979019165,4.269999980926514,3.6549303232895243,163171227.0,0.0,0.0,True
2023-03-31 00:00:00+08:00,4.260000228881836,4.269999980926514,4.170000076293945,4.179999828338623,3.577894172049017,254493724.0,0.0,0.0,True
2023-04-03 00:00:00+08:00,4.190000057220459,4.210000038146973,4.099999904632568,4.110000133514404,3.517977510623966,277410722.0,0.0,0.0,True
2023-04-04 00:00:00+08:00,4.130000114440918,4.190000057220459,4.110000133514404,4.150000095367432,3.552215824713859,223268023.0,0.0,0.0,True
2023-04-06 00:00:00+08:00,4.150000095367432,4.170000076293945,4.119999885559082,4.150000095367432,3.552215824713859,154073573.0,0.0,0.0,True
2023-04-11 00:00:00+08:00,4.21999979019165,4.21999979019165,4.139999866485596,4.190000057220459,3.586453916956745,238589850.0,0.0,0.0,True
2023-04-12 00:00:00+08:00,4.210000038146973,4.230000019073486,4.170000076293945,4.230000019073486,3.6206920091996313,154918559.0,0.0,0.0,True
2023-04-13 00:00:00+08:00,4.190000057220459,4.239999771118164,4.170000076293945,4.239999771118164,3.6292515322603527,156749951.0,0.0,0.0,True
2023-04-14 00:00:00+08:00,4.260000228881836,4.260000228881836,4.210000038146973,4.25,3.637811277168081,137196709.0,0.0,0.0,True
2023-04-17 00:00:00+08:00,4.25,4.340000152587891,4.230000019073486,4.320000171661377,3.6977281604401386,256424312.0,0.0,0.0,True
2023-04-18 00:00:00+08:00,4.289999961853027,4.349999904632568,4.260000228881836,4.289999961853027,3.6720493694109675,230468469.0,0.0,0.0,True
2023-04-19 00:00:00+08:00,4.300000190734863,4.340000152587891,4.269999980926514,4.289999961853027,3.6720493694109675,161067782.0,0.0,0.0,True
2023-04-20 00:00:00+08:00,4.289999961853027,4.320000171661377,4.25,4.300000190734863,3.6806091143186954,149893142.0,0.0,0.0,True
2023-04-21 00:00:00+08:00,4.28000020980835,4.349999904632568,4.21999979019165,4.260000228881836,3.6463710220758094,196489986.0,0.0,0.0,True
2023-04-24 00:00:00+08:00,4.260000228881836,4.269999980926514,4.159999847412109,4.21999979019165,3.612132264291903,190168120.0,0.0,0.0,True
2023-04-25 00:00:00+08:00,4.21999979019165,4.239999771118164,4.190000057220459,4.210000038146973,3.603572963078188,139549842.0,0.0,0.0,True
2023-04-26 00:00:00+08:00,4.199999809265137,4.230000019073486,4.150000095367432,4.199999809265137,3.5950132181704597,154338332.0,0.0,0.0,True
2023-04-27 00:00:00+08:00,4.190000057220459,4.25,4.170000076293945,4.21999979019165,3.612132264291903,210476107.0,0.0,0.0,True
2023-04-28 00:00:00+08:00,4.21999979019165,4.300000190734863,4.199999809265137,4.21999979019165,3.612132264291903,284844113.0,0.0,0.0,True
2023-05-02 00:00:00+08:00,4.28000020980835,4.28000020980835,4.170000076293945,4.199999809265137,3.5950132181704597,130162079.0,0.0,0.0,True
2023-05-03 00:00:00+08:00,4.159999847412109,4.179999828338623,4.119999885559082,4.159999847412109,3.5607751259275737,135388593.0,0.0,0.0,True
2023-05-04 00:00:00+08:00,4.170000076293945,4.389999866485596,4.159999847412109,4.369999885559082,3.740525997590753,429356016.0,0.0,0.0,True
2023-05-05 00:00:00+08:00,4.369999885559082,4.489999771118164,4.369999885559082,4.46999979019165,3.8261212281979686,482576130.0,0.0,0.0,True
2023-05-08 00:00:00+08:00,4.460000038146973,4.679999828338623,4.449999809265137,4.670000076293945,3.9973125768004265,645869766.0,0.0,0.0,True
2023-05-09 00:00:00+08:00,4.670000076293945,4.730000019073486,4.539999961853027,4.610000133514404,3.9459554384360973,575101809.0,0.0,0.0,True
2023-05-10 00:00:00+08:00,4.610000133514404,4.610000133514404,4.449999809265137,4.46999979019165,3.8261212281979686,396054057.0,0.0,0.0,True
2023-05-11 00:00:00+08:00,4.46999979019165,4.510000228881836,4.380000114440918,4.420000076293945,3.7833238347413674,277928846.0,0.0,0.0,True
2023-05-12 00:00:00+08:00,4.400000095367432,4.409999847412109,4.300000190734863,4.329999923706055,3.70628768350086,315117973.0,0.0,0.0,True
2023-05-15 00:00:00+08:00,4.329999923706055,4.440000057220459,4.269999980926514,4.420000076293945,3.7833238347413674,412372458.0,0.0,0.0,True
2023-05-16 00:00:00+08:00,4.440000057220459,4.480000019073486,4.389999866485596,4.420000076293945,3.7833238347413674,97420412.0,0.0,0.0,True
2023-05-17 00:00:00+08:00,4.400000095367432,4.480000019073486,4.349999904632568,4.369999885559082,3.740525997590753,232920948.0,0.0,0.0,True
2023-05-18 00:00:00+08:00,4.389999866485596,4.5,4.360000133514404,4.449999809265137,3.8090021820765254,248785011.0,0.0,0.0,True
2023-05-19 00:00:00+08:00,4.440000057220459,4.489999771118164,4.380000114440918,4.420000076293945,3.7833238347413674,172064051.0,0.0,0.0,True
2023-05-22 00:00:00+08:00,4.460000038146973,4.5,4.420000076293945,4.449999809265137,3.8090021820765254,195795701.0,0.0,0.0,True
2023-05-23 00:00:00+08:00,4.480000019073486,4.489999771118164,4.360000133514404,4.389999866485596,3.757645043712196,186289922.0,0.0,0.0,True
2023-05-24 00:00:00+08:00,4.369999885559082,4.389999866485596,4.269999980926514,4.300000190734863,3.6806091143186954,271979464.0,0.0,0.0,True
2023-05-25 00:00:00+08:00,4.25,4.289999961853027,4.21999979019165,4.230000019073486,3.6206920091996313,208049429.0,0.0,0.0,True
2023-05-29 00:00:00+08:00,4.21999979019165,4.300000190734863,4.21999979019165,4.25,3.637811277168081,188622384.0,0.0,0.0,True
2023-05-30 00:00:00+08:00,4.239999771118164,4.260000228881836,4.199999809265137,4.230000019073486,3.6206920091996313,214459172.0,0.0,0.0,True
2023-05-31 00:00:00+08:00,4.199999809265137,4.230000019073486,4.130000114440918,4.190000057220459,3.586453916956745,443635604.0,0.0,0.0,True
2023-06-01 00:00:00+08:00,4.150000095367432,4.199999809265137,4.130000114440918,4.130000114440918,3.535096556745409,195878156.0,0.0,0.0,True
2023-06-02 00:00:00+08:00,4.159999847412109,4.230000019073486,4.139999866485596,4.199999809265137,3.5950132181704597,238106726.0,0.0,0.0,True
2023-06-05 00:00:00+08:00,4.190000057220459,4.289999961853027,4.179999828338623,4.269999980926514,3.6549303232895243,154128851.0,0.0,0.0,True
2023-06-06 00:00:00+08:00,4.269999980926514,4.340000152587891,4.239999771118164,4.269999980926514,3.6549303232895243,138382474.0,0.0,0.0,True
2023-06-07 00:00:00+08:00,4.269999980926514,4.329999923706055,4.269999980926514,4.300000190734863,3.6806091143186954,138165536.0,0.0,0.0,True
2023-06-08 00:00:00+08:00,4.329999923706055,4.369999885559082,4.300000190734863,4.340000152587891,3.7148474284085884,143479250.0,0.0,0.0,True
2023-06-09 00:00:00+08:00,4.340000152587891,4.380000114440918,4.320000171661377,4.340000152587891,3.7148474284085884,115975825.0,0.0,0.0,True
2023-06-12 00:00:00+08:00,4.329999923706055,4.360000133514404,4.289999961853027,4.329999923706055,3.70628768350086,181527647.0,0.0,0.0,True
2023-06-13 00:00:00+08:00,4.320000171661377,4.329999923706055,4.230000019073486,4.25,3.637811277168081,326274159.0,0.0,0.0,True
2023-06-14 00:00:00+08:00,4.260000228881836,4.260000228881836,4.130000114440918,4.150000095367432,3.552215824713859,442669757.0,0.0,0.0,True
2023-06-15 00:00:00+08:00,4.199999809265137,4.199999809265137,4.110000133514404,4.170000076293945,3.569334870835302,277010186.0,0.0,0.0,True
2023-06-16 00:00:00+08:00,4.150000095367432,4.210000038146973,4.150000095367432,4.210000038146973,3.603572963078188,328021658.0,0.0,0.0,True
2023-06-19 00:00:00+08:00,4.190000057220459,4.210000038146973,4.150000095367432,4.179999828338623,3.577894172049017,192042607.0,0.0,0.0,True
2023-06-20 00:00:00+08:00,4.170000076293945,4.179999828338623,4.119999885559082,4.170000076293945,3.569334870835302,235233878.0,0.0,0.0,True
2023-06-21 00:00:00+08:00,4.150000095367432,4.199999809265137,4.139999866485596,4.159999847412109,3.5607751259275737,241636902.0,0.0,0.0,True
2023-06-23 00:00:00+08:00,4.170000076293945,4.179999828338623,4.119999885559082,4.130000114440918,3.535096556745409,179933946.0,0.0,0.0,True
2023-06-26 00:00:00+08:00,4.150000095367432,4.150000095367432,4.079999923706055,4.110000133514404,3.517977510623966,266470090.0,0.0,0.0,True
2023-06-27 00:00:00+08:00,4.099999904632568,4.159999847412109,4.090000152587891,4.150000095367432,3.552215824713859,228143854.0,0.0,0.0,True
2023-06-28 00:00:00+08:00,4.130000114440918,4.179999828338623,4.119999885559082,4.159999847412109,3.5607751259275737,180586497.0,0.0,0.0,True
2023-06-29 00:00:00+08:00,4.159999847412109,4.179999828338623,4.130000114440918,4.159999847412109,3.5607751259275737,184805600.0,0.0,0.0,True
2023-06-30 00:00:00+08:00,4.170000076293945,4.21999979019165,4.159999847412109,4.179999828338623,3.577894172049017,218725448.0,0.0,0.0,True
2023-07-03 00:00:00+08:00,4.199999809265137,4.269999980926514,4.190000057220459,4.239999771118164,3.6292515322603527,309192456.0,0.0,0.0,True
2023-07-04 00:00:00+08:00,4.230000019073486,4.269999980926514,4.159999847412109,4.190000057220459,3.586453916956745,294729733.0,0.0,0.0,True
2023-07-05 00:00:00+08:00,4.170000076293945,4.179999828338623,4.099999904632568,4.110000133514404,3.517977510623966,316065085.0,0.0,0.0,True
2023-07-06 00:00:00+08:00,3.7799999713897705,3.7899999618530273,3.640000104904175,3.6600000858306885,3.405607342927319,483351531.0,0.329236,0.0,True
2023-07-07 00:00:00+08:00,3.6600000858306885,3.680000066757202,3.5999999046325684,3.609999895095825,3.359082476063615,344014894.0,0.0,0.0,True
2023-07-10 00:00:00+08:00,3.619999885559082,3.6600000858306885,3.559999942779541,3.5899999141693115,3.3404726180569364,263135021.0,0.0,0.0,True
2023-07-11 00:00:00+08:00,3.630000114440918,3.640000104904175,3.569999933242798,3.5999999046325684,3.3497775470602758,290916418.0,0.0,0.0,True
2023-07-12 00:00:00+08:00,3.630000114440918,3.640000104904175,3.5799999237060547,3.5999999046325684,3.3497775470602758,251835089.0,0.0,0.0,True
2023-07-13 00:00:00+08:00,3.609999895095825,3.6500000953674316,3.5899999141693115,3.619999885559082,3.3683874050669544,243505182.0,0.0,0.0,True
2023-07-14 00:00:00+08:00,3.6600000858306885,3.680000066757202,3.630000114440918,3.6600000858306885,3.405607342927319,258981289.0,0.0,0.0,True
2023-07-18 00:00:00+08:00,3.6600000858306885,3.6600000858306885,3.549999952316284,3.5799999237060547,3.331167689053597,273570216.0,0.0,0.0,True
2023-07-19 00:00:00+08:00,3.549999952316284,3.619999885559082,3.5399999618530273,3.5899999141693115,3.3404726180569364,158493423.0,0.0,0.0,True
2023-07-20 00:00:00+08:00,3.619999885559082,3.6600000858306885,3.5999999046325684,3.609999895095825,3.359082476063615,124194456.0,0.0,0.0,True
2023-07-21 00:00:00+08:00,3.640000104904175,3.680000066757202,3.630000114440918,3.6600000858306885,3.405607342927319,122860627.0,0.0,0.0,True
2023-07-24 00:00:00+08:00,3.630000114440918,3.6600000858306885,3.5799999237060547,3.5899999141693115,3.3404726180569364,165661469.0,0.0,0.0,True
2023-07-25 00:00:00+08:00,3.609999895095825,3.7300000190734863,3.609999895095825,3.690000057220459,3.433522129937337,233245325.0,0.0,0.0,True
2023-07-26 00:00:00+08:00,3.690000057220459,3.7300000190734863,3.630000114440918,3.6500000953674316,3.3963024139239795,174178400.0,0.0,0.0,True
2023-07-27 00:00:00+08:00,3.6600000858306885,3.7300000190734863,3.6500000953674316,3.700000047683716,3.442827058940676,244815663.0,0.0,0.0,True
2023-07-28 00:00:00+08:00,3.680000066757202,3.759999990463257,3.6700000762939453,3.740000009536743,3.480046774954034,231213125.0,0.0,0.0,True
2023-07-31 00:00:00+08:00,3.75,3.859999895095825,3.740000009536743,3.799999952316284,3.53587634897407,341189678.0,0.0,0.0,True
2023-08-01 00:00:00+08:00,3.819999933242798,3.859999895095825,3.7699999809265137,3.7799999713897705,3.5172664909673914,190142810.0,0.0,0.0,True
2023-08-02 00:00:00+08:00,3.759999990463257,3.7799999713897705,3.6600000858306885,3.6700000762939453,3.414912271930658,288581439.0,0.0,0.0,True
2023-08-03 00:00:00+08:00,3.700000047683716,3.7200000286102295,3.630000114440918,3.6500000953674316,3.3963024139239795,292039499.0,0.0,0.0,True
2023-08-04 00:00:00+08:00,3.680000066757202,3.7300000190734863,3.630000114440918,3.640000104904175,3.38699748492064,195330853.0,0.0,0.0,True
2023-08-07 00:00:00+08:00,3.640000104904175,3.6600000858306885,3.619999885559082,3.640000104904175,3.38699748492064,151992015.0,0.0,0.0,True
2023-08-08 00:00:00+08:00,3.619999885559082,3.630000114440918,3.5799999237060547,3.5999999046325684,3.3497775470602758,226116681.0,0.0,0.0,True
2023-08-09 00:00:00+08:00,3.5799999237060547,3.619999885559082,3.559999942779541,3.619999885559082,3.3683874050669544,194636023.0,0.0,0.0,True
2023-08-10 00:00:00+08:00,3.569999933242798,3.630000114440918,3.559999942779541,3.5999999046325684,3.3497775470602758,257523027.0,0.0,0.0,True
2023-08-11 00:00:00+08:00,3.5899999141693115,3.5899999141693115,3.5299999713897705,3.569999933242798,3.3218627600502577,260620282.0,0.0,0.0,True
2023-08-14 00:00:00+08:00,3.5199999809265137,3.5299999713897705,3.4600000381469727,3.5,3.256728257026882,308586690.0,0.0,0.0,True
2023-08-15 00:00:00+08:00,3.4800000190734863,3.509999990463257,3.4600000381469727,3.4800000190734863,3.238118399020203,206833725.0,0.0,0.0,True
2023-08-16 00:00:00+08:00,3.450000047683716,3.4800000190734863,3.4100000858306885,3.4200000762939453,3.1822888250001666,234260976.0,0.0,0.0,True
2023-08-17 00:00:00+08:00,3.4000000953674316,3.450000047683716,3.359999895095825,3.4200000762939453,3.1822888250001666,313019294.0,0.0,0.0,True
2023-08-18 00:00:00+08:00,3.430000066757202,3.5,3.4000000953674316,3.4100000858306885,3.1729838959968273,310788020.0,0.0,0.0,True
2023-08-21 00:00:00+08:00,3.4000000953674316,3.4000000953674316,3.3499999046325684,3.359999895095825,3.1264590291331236,278392065.0,0.0,0.0,True
2023-08-22 00:00:00+08:00,3.359999895095825,3.450000047683716,3.359999895095825,3.4000000953674316,3.163678966993488,312832612.0,0.0,0.0,True
2023-08-23 00:00:00+08:00,3.390000104904175,3.4600000381469727,3.390000104904175,3.4200000762939453,3.1822888250001666,229353234.0,0.0,0.0,True
2023-08-24 00:00:00+08:00,3.4200000762939453,3.4700000286102295,3.4100000858306885,3.450000047683716,3.2102036120101847,216303897.0,0.0,0.0,True
2023-08-25 00:00:00+08:00,3.450000047683716,3.5299999713897705,3.450000047683716,3.4600000381469727,3.219508541013524,207713213.0,0.0,0.0,True
2023-08-28 00:00:00+08:00,3.569999933242798,3.5899999141693115,3.509999990463257,3.509999990463257,3.266033186030221,244114203.0,0.0,0.0,True
2023-08-29 00:00:00+08:00,3.549999952316284,3.619999885559082,3.5299999713897705,3.5899999141693115,3.3404726180569364,346986717.0,0.0,0.0,True
2023-08-30 00:00:00+08:00,3.5899999141693115,3.630000114440918,3.559999942779541,3.569999933242798,3.3218627600502577,336774337.0,0.0,0.0,True
2023-08-31 00:00:00+08:00,3.5899999141693115,3.630000114440918,3.559999942779541,3.5999999046325684,3.3497775470602758,817327216.0,0.0,0.0,True
2023-09-04 00:00:00+08:00,3.609999895095825,3.7699999809265137,3.609999895095825,3.7300000190734863,3.4707418459506947,629620119.0,0.0,0.0,True
2023-09-05 00:00:00+08:00,3.700000047683716,3.75,3.6700000762939453,3.680000066757202,3.4242172009339975,252233724.0,0.0,0.0,True
2023-09-06 00:00:00+08:00,3.6600000858306885,3.759999990463257,3.6500000953674316,3.740000009536743,3.480046774954034,307058008.0,0.0,0.0,True
2023-09-07 00:00:00+08:00,3.740000009536743,3.799999952316284,3.7100000381469727,3.7699999809265137,3.507961561964052,356783232.0,0.0,0.0,True
2023-09-11 00:00:00+08:00,3.7200000286102295,3.7799999713897705,3.690000057220459,3.75,3.4893517039573734,308247176.0,0.0,0.0,True
2023-09-12 00:00:00+08:00,3.75,3.7899999618530273,3.7200000286102295,3.7699999809265137,3.507961561964052,180754456.0,0.0,0.0,True
2023-09-13 00:00:00+08:00,3.7799999713897705,3.799999952316284,3.7200000286102295,3.75,3.4893517039573734,295869721.0,0.0,0.0,True
2023-09-14 00:00:00+08:00,3.7799999713897705,3.819999933242798,3.759999990463257,3.7899999618530273,3.5265714199707308,274404409.0,0.0,0.0,True
2023-09-15 00:00:00+08:00,3.809999942779541,3.859999895095825,3.7899999618530273,3.799999952316284,3.53587634897407,366935288.0,0.0,0.0,True
2023-09-18 00:00:00+08:00,3.7699999809265137,3.7799999713897705,3.7200000286102295,3.75,3.4893517039573734,221671313.0,0.0,0.0,True
2023-09-19 00:00:00+08:00,3.75,3.819999933242798,3.740000009536743,3.819999933242798,3.5544862069807492,269533597.0,0.0,0.0,True
2023-09-20 00:00:00+08:00,3.819999933242798,3.8399999141693115,3.799999952316284,3.799999952316284,3.53587634897407,230980912.0,0.0,0.0,True
2023-09-21 00:00:00+08:00,3.7799999713897705,3.8499999046325684,3.7300000190734863,3.759999990463257,3.4986566329607127,348696431.0,0.0,0.0,True
2023-09-22 00:00:00+08:00,3.740000009536743,3.809999942779541,3.740000009536743,3.809999942779541,3.54518127797741,245368556.0,0.0,0.0,True
2023-09-25 00:00:00+08:00,3.799999952316284,3.8299999237060547,3.740000009536743,3.75,3.4893517039573734,225999218.0,0.0,0.0,True
2023-09-26 00:00:00+08:00,3.7300000190734863,3.7899999618530273,3.680000066757202,3.700000047683716,3.442827058940676,231317116.0,0.0,0.0,True
2023-09-27 00:00:00+08:00,3.7200000286102295,3.7699999809265137,3.700000047683716,3.740000009536743,3.480046774954034,166651605.0,0.0,0.0,True
2023-09-28 00:00:00+08:00,3.7300000190734863,3.75,3.700000047683716,3.700000047683716,3.442827058940676,256509231.0,0.0,0.0,True
2023-09-29 00:00:00+08:00,3.700000047683716,3.809999942779541,3.700000047683716,3.7699999809265137,3.507961561964052,233478337.0,0.0,0.0,True
2023-10-03 00:00:00+08:00,3.7300000190734863,3.7300000190734863,3.569999933242798,3.5899999141693115,3.3404726180569364,295613538.0,0.0,0.0,True
2023-10-04 00:00:00+08:00,3.569999933242798,3.630000114440918,3.5399999618530273,3.609999895095825,3.359082476063615,180928145.0,0.0,0.0,True
2023-10-05 00:00:00+08:00,3.630000114440918,3.6500000953674316,3.5899999141693115,3.5999999046325684,3.3497775470602758,137405790.0,0.0,0.0,True
2023-10-06 00:00:00+08:00,3.6500000953674316,3.7100000381469727,3.640000104904175,3.6600000858306885,3.405607342927319,137863261.0,0.0,0.0,True
2023-10-09 00:00:00+08:00,3.690000057220459,3.7200000286102295,3.6700000762939453,3.680000066757202,3.4242172009339975,105503037.0,0.0,0.0,True
2023-10-10 00:00:00+08:00,3.7300000190734863,3.7799999713897705,3.700000047683716,3.7100000381469727,3.452131987944016,124645952.0,0.0,0.0,True
2023-10-11 00:00:00+08:00,3.7699999809265137,3.7699999809265137,3.7300000190734863,3.740000009536743,3.480046774954034,175540685.0,0.0,0.0,True
2023-10-12 00:00:00+08:00,3.9100000858306885,3.950000047683716,3.819999933242798,3.9200000762939453,3.6475357188611497,675968330.0,0.0,0.0,True
2023-10-13 00:00:00+08:00,3.9000000953674316,3.9100000858306885,3.8499999046325684,3.8499999046325684,3.5824009939907673,250344063.0,0.0,0.0,True
2023-10-16 00:00:00+08:00,3.8499999046325684,3.9000000953674316,3.819999933242798,3.8499999046325684,3.5824009939907673,171560136.0,0.0,0.0,True
2023-10-17 00:00:00+08:00,3.869999885559082,3.940000057220459,3.8399999141693115,3.9100000858306885,3.6382307898578103,241303688.0,0.0,0.0,True
2023-10-18 00:00:00+08:00,3.9100000858306885,3.940000057220459,3.869999885559082,3.880000114440918,3.6103160028477923,182110047.0,0.0,0.0,True
2023-10-19 00:00:00+08:00,3.819999933242798,3.8499999046325684,3.7799999713897705,3.7899999618530273,3.5265714199707308,193820232.0,0.0,0.0,True
2023-10-20 00:00:00+08:00,3.7699999809265137,3.8299999237060547,3.75,3.759999990463257,3.4986566329607127,163210066.0,0.0,0.0,True
2023-10-24 00:00:00+08:00,3.7200000286102295,3.7699999809265137,3.7100000381469727,3.740000009536743,3.480046774954034,190336656.0,0.0,0.0,True
2023-10-25 00:00:00+08:00,3.8399999141693115,3.8499999046325684,3.75,3.7699999809265137,3.507961561964052,216824013.0,0.0,0.0,True
2023-10-26 00:00:00+08:00,3.799999952316284,3.819999933242798,3.759999990463257,3.799999952316284,3.53587634897407,134917498.0,0.0,0.0,True
2023-10-27 00:00:00+08:00,3.8399999141693115,3.9000000953674316,3.809999942779541,3.8499999046325684,3.5824009939907673,226052377.0,0.0,0.0,True
2023-10-30 00:00:00+08:00,3.8499999046325684,3.859999895095825,3.680000066757202,3.740000009536743,3.480046774954034,286400692.0,0.0,0.0,True
2023-10-31 00:00:00+08:00,3.740000009536743,3.7799999713897705,3.7100000381469727,3.759999990463257,3.4986566329607127,206277198.0,0.0,0.0,True
2023-11-01 00:00:00+08:00,3.7799999713897705,3.819999933242798,3.75,3.799999952316284,3.53587634897407,153678182.0,0.0,0.0,True
2023-11-02 00:00:00+08:00,3.799999952316284,3.8499999046325684,3.75,3.7799999713897705,3.5172664909673914,191144882.0,0.0,0.0,True
2023-11-03 00:00:00+08:00,3.819999933242798,3.8399999141693115,3.7799999713897705,3.809999942779541,3.54518127797741,156922242.0,0.0,0.0,True
2023-11-06 00:00:00+08:00,3.8499999046325684,3.8499999046325684,3.7699999809265137,3.7899999618530273,3.5265714199707308,202473003.0,0.0,0.0,True
2023-11-07 00:00:00+08:00,3.759999990463257,3.7899999618530273,3.7200000286102295,3.7300000190734863,3.4707418459506947,190605813.0,0.0,0.0,True
2023-11-08 00:00:00+08:00,3.7699999809265137,3.7699999809265137,3.700000047683716,3.7100000381469727,3.452131987944016,139666955.0,0.0,0.0,True
2023-11-09 00:00:00+08:00,3.700000047683716,3.7300000190734863,3.700000047683716,3.7100000381469727,3.452131987944016,71881453.0,0.0,0.0,True
2023-11-10 00:00:00+08:00,3.700000047683716,3.7200000286102295,3.6700000762939453,3.680000066757202,3.4242172009339975,128215976.0,0.0,0.0,True
2023-11-13 00:00:00+08:00,3.690000057220459,3.7300000190734863,3.640000104904175,3.7200000286102295,3.4614369169473553,146968935.0,0.0,0.0,True
2023-11-14 00:00:00+08:00,3.740000009536743,3.7699999809265137,3.7200000286102295,3.740000009536743,3.480046774954034,155959721.0,0.0,0.0,True
2023-11-15 00:00:00+08:00,3.809999942779541,3.880000114440918,3.7799999713897705,3.859999895095825,3.5917059229941066,260901823.0,0.0,0.0,True
2023-11-16 00:00:00+08:00,3.869999885559082,3.869999885559082,3.7899999618530273,3.819999933242798,3.5544862069807492,96949779.0,0.0,0.0,True
2023-11-17 00:00:00+08:00,3.7799999713897705,3.809999942779541,3.7300000190734863,3.75,3.4893517039573734,156398933.0,0.0,0.0,True
2023-11-20 00:00:00+08:00,3.7799999713897705,3.8299999237060547,3.759999990463257,3.8299999237060547,3.5637911359840886,143975679.0,0.0,0.0,True
2023-11-21 00:00:00+08:00,3.869999885559082,3.890000104904175,3.7799999713897705,3.7899999618530273,3.5265714199707308,158102559.0,0.0,0.0,True
2023-11-22 00:00:00+08:00,3.7799999713897705,3.819999933242798,3.759999990463257,3.799999952316284,3.53587634897407,60718192.0,0.0,0.0,True
2023-11-23 00:00:00+08:00,3.7799999713897705,3.8499999046325684,3.759999990463257,3.8499999046325684,3.5824009939907673,115217596.0,0.0,0.0,True
2023-11-24 00:00:00+08:00,3.8499999046325684,3.8499999046325684,3.7699999809265137,3.7899999618530273,3.5265714199707308,93281480.0,0.0,0.0,True
2023-11-27 00:00:00+08:00,3.819999933242798,3.819999933242798,3.740000009536743,3.7799999713897705,3.5172664909673914,130065350.0,0.0,0.0,True
2023-11-28 00:00:00+08:00,3.799999952316284,3.799999952316284,3.740000009536743,3.759999990463257,3.4986566329607127,113725337.0,0.0,0.0,True
2023-11-29 00:00:00+08:00,3.7799999713897705,3.7899999618530273,3.680000066757202,3.7200000286102295,3.4614369169473553,226633574.0,0.0,0.0,True
2023-11-30 00:00:00+08:00,3.740000009536743,3.75,3.700000047683716,3.740000009536743,3.480046774954034,267272719.0,0.0,0.0,True
2023-12-01 00:00:00+08:00,3.7200000286102295,3.759999990463257,3.680000066757202,3.690000057220459,3.433522129937337,159742141.0,0.0,0.0,True
2023-12-04 00:00:00+08:00,3.740000009536743,3.75,3.690000057220459,3.690000057220459,3.433522129937337,199824961.0,0.0,0.0,True
2023-12-05 00:00:00+08:00,3.7100000381469727,3.7100000381469727,3.609999895095825,3.630000114440918,3.3776925559173008,274505556.0,0.0,0.0,True
2023-12-06 00:00:00+08:00,3.640000104904175,3.6600000858306885,3.609999895095825,3.640000104904175,3.38699748492064,164730514.0,0.0,0.0,True
2023-12-07 00:00:00+08:00,3.630000114440918,3.6500000953674316,3.5999999046325684,3.640000104904175,3.38699748492064,123750268.0,0.0,0.0,True
2023-12-08 00:00:00+08:00,3.6700000762939453,3.680000066757202,3.5899999141693115,3.630000114440918,3.3776925559173008,210592613.0,0.0,0.0,True
2023-12-11 00:00:00+08:00,3.5899999141693115,3.619999885559082,3.5199999809265137,3.609999895095825,3.359082476063615,326769186.0,0.0,0.0,True
2023-12-12 00:00:00+08:00,3.609999895095825,3.6700000762939453,3.5999999046325684,3.6500000953674316,3.3963024139239795,262302427.0,0.0,0.0,True
2023-12-13 00:00:00+08:00,3.6500000953674316,3.690000057220459,3.630000114440918,3.680000066757202,3.4242172009339975,187744171.0,0.0,0.0,True
2023-12-14 00:00:00+08:00,3.7100000381469727,3.740000009536743,3.640000104904175,3.680000066757202,3.4242172009339975,245663930.0,0.0,0.0,True
2023-12-15 00:00:00+08:00,3.7200000286102295,3.759999990463257,3.680000066757202,3.700000047683716,3.442827058940676,390760942.0,0.0,0.0,True
2023-12-18 00:00:00+08:00,3.690000057220459,3.7100000381469727,3.6600000858306885,3.690000057220459,3.433522129937337,108207962.0,0.0,0.0,True
2023-12-19 00:00:00+08:00,3.6600000858306885,3.700000047683716,3.640000104904175,3.6700000762939453,3.414912271930658,97469500.0,0.0,0.0,True
2023-12-20 00:00:00+08:00,3.690000057220459,3.690000057220459,3.619999885559082,3.6500000953674316,3.3963024139239795,188953599.0,0.0,0.0,True
2023-12-21 00:00:00+08:00,3.619999885559082,3.700000047683716,3.619999885559082,3.680000066757202,3.4242172009339975,123393447.0,0.0,0.0,True
2023-12-22 00:00:00+08:00,3.700000047683716,3.7300000190734863,3.6700000762939453,3.680000066757202,3.4242172009339975,177408320.0,0.0,0.0,True
2023-12-27 00:00:00+08:00,3.700000047683716,3.759999990463257,3.680000066757202,3.740000009536743,3.480046774954034,226712895.0,0.0,0.0,True
2023-12-28 00:00:00+08:00,3.740000009536743,3.809999942779541,3.7300000190734863,3.7799999713897705,3.5172664909673914,189710209.0,0.0,0.0,True
2023-12-29 00:00:00+08:00,3.7899999618530273,3.8299999237060547,3.7799999713897705,3.819999933242798,3.5544862069807492,142535264.0,0.0,0.0,True
2024-01-02 00:00:00+08:00,3.8399999141693115,3.8399999141693115,3.7200000286102295,3.740000009536743,3.480046774954034,195715603.0,0.0,0.0,True
2024-01-03 00:00:00+08:00,3.7100000381469727,3.759999990463257,3.7100000381469727,3.740000009536743,3.480046774954034,106480528.0,0.0,0.0,True
2024-01-04 00:00:00+08:00,3.759999990463257,3.799999952316284,3.7300000190734863,3.7799999713897705,3.5172664909673914,208328871.0,0.0,0.0,True
2024-01-05 00:00:00+08:00,3.7799999713897705,3.8299999237060547,3.7300000190734863,3.75,3.4893517039573734,270256306.0,0.0,0.0,True
2024-01-08 00:00:00+08:00,3.75,3.7799999713897705,3.6600000858306885,3.680000066757202,3.4242172009339975,279114999.0,0.0,0.0,True
2024-01-09 00:00:00+08:00,3.680000066757202,3.7100000381469727,3.6500000953674316,3.680000066757202,3.4242172009339975,172987783.0,0.0,0.0,True
2024-01-10 00:00:00+08:00,3.6700000762939453,3.7100000381469727,3.6500000953674316,3.680000066757202,3.4242172009339975,181918519.0,0.0,0.0,True
2024-01-11 00:00:00+08:00,3.680000066757202,3.7200000286102295,3.6500000953674316,3.680000066757202,3.4242172009339975,167408254.0,0.0,0.0,True
2024-01-12 00:00:00+08:00,3.6700000762939453,3.7100000381469727,3.6600000858306885,3.690000057220459,3.433522129937337,98085190.0,0.0,0.0,True
2024-01-15 00:00:00+08:00,3.700000047683716,3.7100000381469727,3.6700000762939453,3.700000047683716,3.442827058940676,77810606.0,0.0,0.0,True
2024-01-16 00:00:00+08:00,3.680000066757202,3.7100000381469727,3.630000114440918,3.640000104904175,3.38699748492064,209104452.0,0.0,0.0,True
2024-01-17 00:00:00+08:00,3.630000114440918,3.640000104904175,3.5299999713897705,3.549999952316284,3.3032529020435786,374776282.0,0.0,0.0,True
2024-01-18 00:00:00+08:00,3.559999942779541,3.5799999237060547,3.5299999713897705,3.569999933242798,3.3218627600502577,279566330.0,0.0,0.0,True
2024-01-19 00:00:00+08:00,3.5799999237060547,3.619999885559082,3.549999952316284,3.5899999141693115,3.3404726180569364,211407811.0,0.0,0.0,True
2024-01-22 00:00:00+08:00,3.5999999046325684,3.609999895095825,3.509999990463257,3.5399999618530273,3.2939479730402392,231495995.0,0.0,0.0,True
2024-01-23 00:00:00+08:00,3.5299999713897705,3.640000104904175,3.5199999809265137,3.609999895095825,3.359082476063615,234767946.0,0.0,0.0,True
2024-01-24 00:00:00+08:00,3.609999895095825,3.759999990463257,3.609999895095825,3.740000009536743,3.480046774954034,431565592.0,0.0,0.0,True
2024-01-25 00:00:00+08:00,3.740000009536743,3.8399999141693115,3.700000047683716,3.8299999237060547,3.5637911359840886,490972859.0,0.0,0.0,True
2024-01-26 00:00:00+08:00,3.819999933242798,3.859999895095825,3.809999942779541,3.819999933242798,3.5544862069807492,264403292.0,0.0,0.0,True
2024-01-29 00:00:00+08:00,3.819999933242798,3.890000104904175,3.809999942779541,3.859999895095825,3.5917059229941066,301165078.0,0.0,0.0,True
2024-01-30 00:00:00+08:00,3.8299999237060547,3.8499999046325684,3.7899999618530273,3.809999942779541,3.54518127797741,227981489.0,0.0,0.0,True
2024-01-31 00:00:00+08:00,3.809999942779541,3.8299999237060547,3.759999990463257,3.819999933242798,3.5544862069807492,248660671.0,0.0,0.0,True
2024-02-01 00:00:00+08:00,3.819999933242798,3.8499999046325684,3.7799999713897705,3.7899999618530273,3.5265714199707308,202592840.0,0.0,0.0,True
2024-02-02 00:00:00+08:00,3.799999952316284,3.8499999046325684,3.7699999809265137,3.7899999618530273,3.5265714199707308,154637396.0,0.0,0.0,True
2024-02-05 00:00:00+08:00,3.7699999809265137,3.819999933242798,3.759999990463257,3.799999952316284,3.53587634897407,174185125.0,0.0,0.0,True
2024-02-06 00:00:00+08:00,3.7899999618530273,3.940000057220459,3.7899999618530273,3.9200000762939453,3.6475357188611497,295401124.0,0.0,0.0,True
2024-02-07 00:00:00+08:00,3.9100000858306885,3.950000047683716,3.869999885559082,3.890000104904175,3.6196209318511317,258681088.0,0.0,0.0,True
2024-02-08 00:00:00+08:00,3.890000104904175,3.9100000858306885,3.8299999237060547,3.8499999046325684,3.5824009939907673,149952865.0,0.0,0.0,True
2024-02-09 00:00:00+08:00,3.799999952316284,3.8299999237060547,3.7699999809265137,3.8299999237060547,3.5637911359840886,43789521.0,0.0,0.0,True
2024-02-14 00:00:00+08:00,3.7799999713897705,3.880000114440918,3.75,3.859999895095825,3.5917059229941066,87229443.0,0.0,0.0,True
2024-02-15 00:00:00+08:00,3.8399999141693115,3.9100000858306885,3.8299999237060547,3.890000104904175,3.6196209318511317,76124014.0,0.0,0.0,True
2024-02-16 00:00:00+08:00,3.890000104904175,3.940000057220459,3.869999885559082,3.930000066757202,3.656840647864489,124046262.0,0.0,0.0,True
2024-02-19 00:00:00+08:00,3.940000057220459,3.9600000381469727,3.9000000953674316,3.9200000762939453,3.6475357188611497,129179934.0,0.0,0.0,True
2024-02-20 00:00:00+08:00,3.930000066757202,3.9800000190734863,3.9200000762939453,3.9800000190734863,3.703365292881186,146061157.0,0.0,0.0,True
2024-02-21 00:00:00+08:00,3.990000009536743,4.159999847412109,3.9700000286102295,4.070000171661377,3.7871098757582473,473060462.0,0.0,0.0,True
2024-02-22 00:00:00+08:00,4.059999942779541,4.110000133514404,4.039999961853027,4.099999904632568,3.815024440921259,211209589.0,0.0,0.0,True
2024-02-23 00:00:00+08:00,4.090000152587891,4.179999828338623,4.079999923706055,4.139999866485596,3.852244156934616,323870350.0,0.0,0.0,True
2024-02-26 00:00:00+08:00,4.150000095367432,4.159999847412109,4.050000190734863,4.079999923706055,3.79641458291458,262309468.0,0.0,0.0,True
2024-02-27 00:00:00+08:00,4.070000171661377,4.119999885559082,4.050000190734863,4.099999904632568,3.815024440921259,176141560.0,0.0,0.0,True
2024-02-28 00:00:00+08:00,4.099999904632568,4.119999885559082,4.039999961853027,4.059999942779541,3.7778047249079014,179704568.0,0.0,0.0,True
2024-02-29 00:00:00+08:00,4.039999961853027,4.090000152587891,4.039999961853027,4.039999961853027,3.7591948669012223,190343656.0,0.0,0.0,True
2024-03-01 00:00:00+08:00,4.019999980926514,4.079999923706055,3.9700000286102295,4.050000190734863,3.7685000177515686,282167874.0,0.0,0.0,True
2024-03-04 00:00:00+08:00,4.039999961853027,4.050000190734863,3.990000009536743,4.019999980926514,3.7405850088945436,204903610.0,0.0,0.0,True
2024-03-05 00:00:00+08:00,3.9800000190734863,4.059999942779541,3.950000047683716,3.990000009536743,3.7126702218845256,249784197.0,0.0,0.0,True
2024-03-06 00:00:00+08:00,4.010000228881836,4.059999942779541,3.9800000190734863,4.03000020980835,3.74989015974489,270589633.0,0.0,0.0,True
2024-03-07 00:00:00+08:00,4.03000020980835,4.090000152587891,4.0,4.03000020980835,3.74989015974489,165980033.0,0.0,0.0,True
2024-03-08 00:00:00+08:00,4.039999961853027,4.099999904632568,4.019999980926514,4.050000190734863,3.7685000177515686,292329286.0,0.0,0.0,True
2024-03-11 00:00:00+08:00,4.050000190734863,4.110000133514404,4.03000020980835,4.059999942779541,3.7778047249079014,237514321.0,0.0,0.0,True
2024-03-12 00:00:00+08:00,4.059999942779541,4.119999885559082,4.019999980926514,4.110000133514404,3.824329591771605,316667017.0,0.0,0.0,True
2024-03-13 00:00:00+08:00,4.070000171661377,4.090000152587891,4.019999980926514,4.039999961853027,3.7591948669012223,301063056.0,0.0,0.0,True
2024-03-14 00:00:00+08:00,4.010000228881836,4.059999942779541,4.0,4.019999980926514,3.7405850088945436,217437653.0,0.0,0.0,True
2024-03-15 00:00:00+08:00,4.0,4.010000228881836,3.940000057220459,3.9800000190734863,3.703365292881186,355675188.0,0.0,0.0,True
2024-03-18 00:00:00+08:00,3.990000009536743,4.0,3.940000057220459,3.9600000381469727,3.6847554348745075,209805618.0,0.0,0.0,True
2024-03-19 00:00:00+08:00,3.950000047683716,3.950000047683716,3.9000000953674316,3.9200000762939453,3.6475357188611497,218938960.0,0.0,0.0,True
2024-03-20 00:00:00+08:00,3.9200000762939453,3.930000066757202,3.890000104904175,3.9100000858306885,3.6382307898578103,200274220.0,0.0,0.0,True
2024-03-21 00:00:00+08:00,3.950000047683716,4.0,3.940000057220459,3.9800000190734863,3.703365292881186,315161464.0,0.0,0.0,True
2024-03-22 00:00:00+08:00,3.990000009536743,3.990000009536743,3.9100000858306885,3.9600000381469727,3.6847554348745075,191270677.0,0.0,0.0,True
2024-03-25 00:00:00+08:00,3.9600000381469727,3.9800000190734863,3.9200000762939453,3.950000047683716,3.6754505058711677,184108533.0,0.0,0.0,True
2024-03-26 00:00:00+08:00,3.990000009536743,4.059999942779541,3.9700000286102295,4.0,3.721975150887865,230414252.0,0.0,0.0,True
2024-03-27 00:00:00+08:00,4.0,4.019999980926514,3.9600000381469727,3.9700000286102295,3.694060363877847,211898473.0,0.0,0.0,True
2024-03-28 00:00:00+08:00,3.9700000286102295,3.9800000190734863,3.869999885559082,3.940000057220459,3.6661455768678284,295388883.0,0.0,0.0,True
2024-04-02 00:00:00+08:00,3.9800000190734863,4.070000171661377,3.9700000286102295,4.03000020980835,3.74989015974489,301807183.0,0.0,0.0,True
2024-04-03 00:00:00+08:00,4.019999980926514,4.050000190734863,4.0,4.010000228881836,3.7312803017382112,232543947.0,0.0,0.0,True
2024-04-05 00:00:00+08:00,4.019999980926514,4.03000020980835,3.930000066757202,3.9700000286102295,3.694060363877847,102636289.0,0.0,0.0,True
2024-04-08 00:00:00+08:00,3.9600000381469727,4.050000190734863,3.940000057220459,4.019999980926514,3.7405850088945436,193418098.0,0.0,0.0,True
2024-04-09 00:00:00+08:00,4.039999961853027,4.070000171661377,4.010000228881836,4.019999980926514,3.7405850088945436,181693799.0,0.0,0.0,True
2024-04-10 00:00:00+08:00,4.039999961853027,4.079999923706055,4.019999980926514,4.079999923706055,3.79641458291458,203179579.0,0.0,0.0,True
2024-04-11 00:00:00+08:00,4.019999980926514,4.079999923706055,4.010000228881836,4.070000171661377,3.7871098757582473,197888440.0,0.0,0.0,True
2024-04-12 00:00:00+08:00,4.039999961853027,4.059999942779541,3.990000009536743,3.990000009536743,3.7126702218845256,252604582.0,0.0,0.0,True
2024-04-15 00:00:00+08:00,3.950000047683716,4.059999942779541,3.950000047683716,4.03000020980835,3.74989015974489,240871327.0,0.0,0.0,True
2024-04-16 00:00:00+08:00,3.9800000190734863,4.03000020980835,3.9700000286102295,4.0,3.721975150887865,253900115.0,0.0,0.0,True
2024-04-17 00:00:00+08:00,4.0,4.050000190734863,3.9800000190734863,4.019999980926514,3.7405850088945436,217393787.0,0.0,0.0,True
2024-04-18 00:00:00+08:00,4.019999980926514,4.150000095367432,4.010000228881836,4.110000133514404,3.824329591771605,418569269.0,0.0,0.0,True
2024-04-19 00:00:00+08:00,4.090000152587891,4.119999885559082,4.059999942779541,4.110000133514404,3.824329591771605,285009804.0,0.0,0.0,True
2024-04-22 00:00:00+08:00,4.170000076293945,4.21999979019165,4.090000152587891,4.099999904632568,3.815024440921259,248674905.0,0.0,0.0,True
2024-04-23 00:00:00+08:00,4.099999904632568,4.150000095367432,4.090000152587891,4.119999885559082,3.8336342989279375,227687586.0,0.0,0.0,True
2024-04-24 00:00:00+08:00,4.119999885559082,4.150000095367432,4.090000152587891,4.139999866485596,3.852244156934616,225338393.0,0.0,0.0,True
2024-04-25 00:00:00+08:00,4.130000114440918,4.190000057220459,4.130000114440918,4.170000076293945,3.880159165791641,256634656.0,0.0,0.0,True
2024-04-26 00:00:00+08:00,4.170000076293945,4.199999809265137,4.150000095367432,4.150000095367432,3.8615493077849625,286312006.0,0.0,0.0,True
2024-04-29 00:00:00+08:00,4.150000095367432,4.230000019073486,4.110000133514404,4.199999809265137,3.9080737309546527,388564156.0,0.0,0.0,True
2024-04-30 00:00:00+08:00,4.210000038146973,4.28000020980835,4.190000057220459,4.230000019073486,3.9359887398116777,411724311.0,0.0,0.0,True
2024-05-02 00:00:00+08:00,4.230000019073486,4.260000228881836,4.210000038146973,4.230000019073486,3.9359887398116777,165136190.0,0.0,0.0,True
2024-05-03 00:00:00+08:00,4.28000020980835,4.320000171661377,4.25,4.28000020980835,3.9825136066753815,207992630.0,0.0,0.0,True
2024-05-06 00:00:00+08:00,4.28000020980835,4.320000171661377,4.239999771118164,4.289999961853027,3.991818313831714,270993309.0,0.0,0.0,True
2024-05-07 00:00:00+08:00,4.289999961853027,4.320000171661377,4.269999980926514,4.309999942779541,4.0104281718383925,210201848.0,0.0,0.0,True
2024-05-08 00:00:00+08:00,4.320000171661377,4.360000133514404,4.28000020980835,4.289999961853027,3.991818313831714,280763221.0,0.0,0.0,True
2024-05-09 00:00:00+08:00,4.289999961853027,4.360000133514404,4.28000020980835,4.349999904632568,4.047647887851751,360910344.0,0.0,0.0,True
2024-05-10 00:00:00+08:00,4.400000095367432,4.579999923706055,4.380000114440918,4.53000020980835,4.215137053605873,860787572.0,0.0,0.0,True
2024-05-13 00:00:00+08:00,4.53000020980835,4.559999942779541,4.519999980926514,4.539999961853027,4.224441760762206,459943466.0,0.0,0.0,True
2024-05-14 00:00:00+08:00,4.550000190734863,4.559999942779541,4.460000038146973,4.46999979019165,4.159307035891823,526434799.0,0.0,0.0,True
2024-05-16 00:00:00+08:00,4.510000228881836,4.730000019073486,4.5,4.710000038146973,4.382625775665982,623474275.0,0.0,0.0,True
2024-05-17 00:00:00+08:00,4.699999809265137,4.739999771118164,4.650000095367432,4.710000038146973,4.382625775665982,405564118.0,0.0,0.0,True
2024-05-20 00:00:00+08:00,4.739999771118164,4.760000228881836,4.699999809265137,4.730000019073486,4.401235633672661,294145952.0,0.0,0.0,True
2024-05-21 00:00:00+08:00,4.730000019073486,4.789999961853027,4.699999809265137,4.760000228881836,4.429150642529685,345750265.0,0.0,0.0,True
2024-05-22 00:00:00+08:00,4.789999961853027,4.800000190734863,4.75,4.760000228881836,4.429150642529685,242197043.0,0.0,0.0,True
2024-05-23 00:00:00+08:00,4.75,4.75,4.639999866485596,4.699999809265137,4.373320624815636,320067077.0,0.0,0.0,True
2024-05-24 00:00:00+08:00,4.699999809265137,4.71999979019165,4.639999866485596,4.659999847412109,4.336100908802278,1061277721.0,0.0,0.0,True
2024-05-27 00:00:00+08:00,4.679999828338623,4.75,4.639999866485596,4.659999847412109,4.336100908802278,351064395.0,0.0,0.0,True
2024-05-28 00:00:00+08:00,4.650000095367432,4.699999809265137,4.619999885559082,4.639999866485596,4.317491050795599,249035695.0,0.0,0.0,True
2024-05-29 00:00:00+08:00,4.619999885559082,4.639999866485596,4.519999980926514,4.550000190734863,4.233746911612552,400149121.0,0.0,0.0,True
2024-05-30 00:00:00+08:00,4.53000020980835,4.559999942779541,4.460000038146973,4.46999979019165,4.159307035891823,433191511.0,0.0,0.0,True
2024-05-31 00:00:00+08:00,4.510000228881836,4.590000152587891,4.420000076293945,4.420000076293945,4.112782612722133,659726549.0,0.0,0.0,True
2024-06-03 00:00:00+08:00,4.46999979019165,4.519999980926514,4.449999809265137,4.46999979019165,4.159307035891823,460608096.0,0.0,0.0,True
2024-06-04 00:00:00+08:00,4.460000038146973,4.489999771118164,4.409999847412109,4.429999828338623,4.1220873198784656,398708024.0,0.0,0.0,True
2024-06-05 00:00:00+08:00,4.449999809265137,4.5,4.389999866485596,4.409999847412109,4.103477461871787,504170169.0,0.0,0.0,True
2024-06-06 00:00:00+08:00,4.449999809265137,4.460000038146973,4.340000152587891,4.369999885559082,4.0662577458584295,400927719.0,0.0,0.0,True
2024-06-07 00:00:00+08:00,4.400000095367432,4.429999828338623,4.380000114440918,4.420000076293945,4.112782612722133,276405344.0,0.0,0.0,True
2024-06-11 00:00:00+08:00,4.400000095367432,4.409999847412109,4.320000171661377,4.360000133514404,4.056953038702097,320454982.0,0.0,0.0,True
2024-06-12 00:00:00+08:00,4.340000152587891,4.349999904632568,4.260000228881836,4.320000171661377,4.019733322688739,299327041.0,0.0,0.0,True
2024-06-13 00:00:00+08:00,4.340000152587891,4.349999904632568,4.28000020980835,4.320000171661377,4.019733322688739,195542304.0,0.0,0.0,True
2024-06-14 00:00:00+08:00,4.300000190734863,4.380000114440918,4.260000228881836,4.340000152587891,4.038343180695418,278091252.0,0.0,0.0,True
2024-06-17 00:00:00+08:00,4.320000171661377,4.389999866485596,4.269999980926514,4.329999923706055,4.029038029845071,202054396.0,0.0,0.0,True
2024-06-18 00:00:00+08:00,4.349999904632568,4.409999847412109,4.309999942779541,4.389999866485596,4.084867603865108,320851397.0,0.0,0.0,True
2024-06-19 00:00:00+08:00,4.420000076293945,4.559999942779541,4.409999847412109,4.550000190734863,4.233746911612552,546463978.0,0.0,0.0,True
2024-06-20 00:00:00+08:00,4.550000190734863,4.619999885559082,4.539999961853027,4.579999923706055,4.261661476775563,459230417.0,0.0,0.0,True
2024-06-21 00:00:00+08:00,4.539999961853027,4.590000152587891,4.5,4.519999980926514,4.205831902755527,573138315.0,0.0,0.0,True
2024-06-24 00:00:00+08:00,4.510000228881836,4.570000171661377,4.449999809265137,4.559999942779541,4.2430516187688845,552052233.0,0.0,0.0,True
2024-06-25 00:00:00+08:00,4.590000152587891,4.650000095367432,4.550000190734863,4.579999923706055,4.261661476775563,370930685.0,0.0,0.0,True
2024-06-26 00:00:00+08:00,4.539999961853027,4.650000095367432,4.539999961853027,4.619999885559082,4.298881192788921,396165556.0,0.0,0.0,True
2024-06-27 00:00:00+08:00,4.599999904632568,4.599999904632568,4.539999961853027,4.570000171661377,4.25235676961923,323653049.0,0.0,0.0,True
2024-06-28 00:00:00+08:00,4.550000190734863,4.679999828338623,4.550000190734863,4.639999866485596,4.317491050795599,373867647.0,0.0,0.0,True
2024-07-02 00:00:00+08:00,4.639999866485596,4.800000190734863,4.610000133514404,4.75,4.4198454916793395,564994075.0,0.0,0.0,True
2024-07-03 00:00:00+08:00,4.760000228881836,4.789999961853027,4.670000076293945,4.730000019073486,4.401235633672661,430603748.0,0.0,0.0,True
2024-07-04 00:00:00+08:00,4.760000228881836,4.849999904632568,4.730000019073486,4.829999923706055,4.494284923706055,536031698.0,0.0,0.0,True
2024-07-05 00:00:00+08:00,,,,,,,0.0,0.0,True
2024-07-08 00:00:00+08:00,4.349999904632568,4.409999847412109,4.309999942779541,4.329999923706055,4.329999923706055,377778431.0,0.335715,0.0,False
2024-07-09 00:00:00+08:00,4.320000171661377,4.380000114440918,4.289999961853027,4.309999942779541,4.309999942779541,446053587.0,0.0,0.0,False
2024-07-10 00:00:00+08:00,4.309999942779541,4.380000114440918,4.300000190734863,4.320000171661377,4.320000171661377,323856587.0,0.0,0.0,False
2024-07-11 00:00:00+08:00,4.349999904632568,4.380000114440918,4.320000171661377,4.360000133514404,4.360000133514404,277693020.0,0.0,0.0,False
2024-07-12 00:00:00+08:00,4.380000114440918,4.5,4.380000114440918,4.480000019073486,4.480000019073486,484396739.0,0.0,0.0,False
2024-07-15 00:00:00+08:00,4.46999979019165,4.539999961853027,4.429999828338623,4.449999809265137,4.449999809265137,338346642.0,0.0,0.0,False
2024-07-16 00:00:00+08:00,4.400000095367432,4.480000019073486,4.369999885559082,4.369999885559082,4.369999885559082,247840382.0,0.0,0.0,False
2024-07-17 00:00:00+08:00,4.369999885559082,4.429999828338623,4.360000133514404,4.360000133514404,4.360000133514404,185961672.0,0.0,0.0,False
2024-07-18 00:00:00+08:00,4.349999904632568,4.409999847412109,4.329999923706055,4.360000133514404,4.360000133514404,200311769.0,0.0,0.0,False
2024-07-19 00:00:00+08:00,4.340000152587891,4.349999904632568,4.21999979019165,4.25,4.25,275780913.0,0.0,0.0,False
2024-07-22 00:00:00+08:00,4.269999980926514,4.300000190734863,4.179999828338623,4.28000020980835,4.28000020980835,180171957.0,0.0,0.0,False
2024-07-23 00:00:00+08:00,4.289999961853027,4.400000095367432,4.269999980926514,4.340000152587891,4.340000152587891,356233630.0,0.0,0.0,False
2024-07-24 00:00:00+08:00,4.369999885559082,4.449999809265137,4.349999904632568,4.389999866485596,4.389999866485596,300661695.0,0.0,0.0,False
2024-07-25 00:00:00+08:00,4.400000095367432,4.440000057220459,4.309999942779541,4.340000152587891,4.340000152587891,301688549.0,0.0,0.0,False
2024-07-26 00:00:00+08:00,4.380000114440918,4.409999847412109,4.269999980926514,4.309999942779541,4.309999942779541,317705901.0,0.0,0.0,False
2024-07-29 00:00:00+08:00,4.340000152587891,4.429999828338623,4.309999942779541,4.380000114440918,4.380000114440918,232237150.0,0.0,0.0,False
2024-07-30 00:00:00+08:00,4.380000114440918,4.380000114440918,4.300000190734863,4.320000171661377,4.320000171661377,231452490.0,0.0,0.0,False
2024-07-31 00:00:00+08:00,4.369999885559082,4.369999885559082,4.309999942779541,4.340000152587891,4.340000152587891,219363065.0,0.0,0.0,False
2024-08-01 00:00:00+08:00,4.320000171661377,4.380000114440918,4.289999961853027,4.349999904632568,4.349999904632568,166222644.0,0.0,0.0,False
2024-08-02 00:00:00+08:00,4.320000171661377,4.349999904632568,4.25,4.320000171661377,4.320000171661377,268284840.0,0.0,0.0,False
2024-08-05 00:00:00+08:00,4.300000190734863,4.300000190734863,4.150000095367432,4.21999979019165,4.21999979019165,335879325.0,0.0,0.0,False
2024-08-06 00:00:00+08:00,4.25,4.28000020980835,4.159999847412109,4.190000057220459,4.190000057220459,236996663.0,0.0,0.0,False
2024-08-07 00:00:00+08:00,4.199999809265137,4.28000020980835,4.179999828338623,4.269999980926514,4.269999980926514,331294641.0,0.0,0.0,False
2024-08-08 00:00:00+08:00,4.25,4.320000171661377,4.21999979019165,4.309999942779541,4.309999942779541,374284208.0,0.0,0.0,False
2024-08-09 00:00:00+08:00,4.340000152587891,4.420000076293945,4.329999923706055,4.389999866485596,4.389999866485596,318738845.0,0.0,0.0,False
2024-08-12 00:00:00+08:00,4.389999866485596,4.489999771118164,4.389999866485596,4.480000019073486,4.480000019073486,312446492.0,0.0,0.0,False
2024-08-13 00:00:00+08:00,4.480000019073486,4.53000020980835,4.449999809265137,4.489999771118164,4.489999771118164,294220219.0,0.0,0.0,False
2024-08-14 00:00:00+08:00,4.510000228881836,4.53000020980835,4.46999979019165,4.489999771118164,4.489999771118164,150927522.0,0.0,0.0,False
2024-08-15 00:00:00+08:00,4.46999979019165,4.590000152587891,4.429999828338623,4.579999923706055,4.579999923706055,479363904.0,0.0,0.0,False
2024-08-16 00:00:00+08:00,4.610000133514404,4.639999866485596,4.579999923706055,4.619999885559082,4.619999885559082,268591885.0,0.0,0.0,False
2024-08-19 00:00:00+08:00,4.630000114440918,4.699999809265137,4.630000114440918,4.699999809265137,4.699999809265137,332636848.0,0.0,0.0,False
2024-08-20 00:00:00+08:00,4.699999809265137,4.730000019073486,4.659999847412109,4.699999809265137,4.699999809265137,216094821.0,0.0,0.0,False
2024-08-21 00:00:00+08:00,4.679999828338623,4.699999809265137,4.590000152587891,4.639999866485596,4.639999866485596,261827271.0,0.0,0.0,False
2024-08-22 00:00:00+08:00,4.650000095367432,4.679999828338623,4.610000133514404,4.679999828338623,4.679999828338623,269736483.0,0.0,0.0,False
================================================
FILE: tests/data/1398-HK-1d-bad-div.csv
================================================
Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits
2022-01-03 00:00:00+08:00,4.449999809265137,4.449999809265137,4.400000095367432,4.420000076293945,3.766467809677124,42688622.0,0.0,0.0
2022-01-04 00:00:00+08:00,4.429999828338623,4.449999809265137,4.389999866485596,4.440000057220459,3.783510446548462,146990360.0,0.0,0.0
2022-01-05 00:00:00+08:00,4.449999809265137,4.550000190734863,4.440000057220459,4.519999980926514,3.8516814708709717,312079015.0,0.0,0.0
2022-01-06 00:00:00+08:00,4.539999961853027,4.539999961853027,4.440000057220459,4.5,3.834638833999634,144072250.0,0.0,0.0
2022-01-07 00:00:00+08:00,4.46999979019165,4.579999923706055,4.449999809265137,4.570000171661377,3.894289255142212,242535732.0,0.0,0.0
2022-01-10 00:00:00+08:00,4.599999904632568,4.650000095367432,4.579999923706055,4.639999866485596,3.9539387226104736,270492205.0,0.0,0.0
2022-01-11 00:00:00+08:00,4.599999904632568,4.659999847412109,4.579999923706055,4.630000114440918,3.9454174041748047,186392481.0,0.0,0.0
2022-01-12 00:00:00+08:00,4.630000114440918,4.650000095367432,4.590000152587891,4.610000133514404,3.928374767303467,230956599.0,0.0,0.0
2022-01-13 00:00:00+08:00,4.610000133514404,4.699999809265137,4.599999904632568,4.699999809265137,4.005066871643066,213448950.0,0.0,0.0
2022-01-14 00:00:00+08:00,4.710000038146973,4.739999771118164,4.670000076293945,4.710000038146973,4.0135884284973145,226355010.0,0.0,0.0
2022-01-17 00:00:00+08:00,4.690000057220459,4.71999979019165,4.670000076293945,4.699999809265137,4.005066871643066,137932161.0,0.0,0.0
2022-01-18 00:00:00+08:00,4.679999828338623,4.71999979019165,4.630000114440918,4.670000076293945,3.9795031547546387,138734371.0,0.0,0.0
2022-01-19 00:00:00+08:00,4.679999828338623,4.710000038146973,4.639999866485596,4.670000076293945,3.9795031547546387,129644509.0,0.0,0.0
2022-01-20 00:00:00+08:00,4.710000038146973,4.710000038146973,4.619999885559082,4.690000057220459,3.9965457916259766,246026991.0,0.0,0.0
2022-01-21 00:00:00+08:00,4.690000057220459,4.699999809265137,4.630000114440918,4.699999809265137,4.005066871643066,173314946.0,0.0,0.0
2022-01-24 00:00:00+08:00,4.699999809265137,4.75,4.670000076293945,4
gitextract_vs6ka022/
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ └── bug_report.yaml
│ ├── dependabot.yml
│ └── workflows/
│ ├── auto_close_default_issues.yml
│ ├── deploy_doc.yml
│ ├── pyright.yml
│ ├── pytest.yml.disabled
│ ├── python-publish.yml
│ └── ruff.yml
├── .gitignore
├── .travis.yml
├── CHANGELOG.rst
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE.txt
├── MANIFEST.in
├── README.md
├── doc/
│ ├── Makefile
│ ├── make.bat
│ └── source/
│ ├── _static/
│ │ └── yfinance.css
│ ├── _templates/
│ │ └── autosummary/
│ │ └── class.rst
│ ├── advanced/
│ │ ├── caching.rst
│ │ ├── config.rst
│ │ ├── index.rst
│ │ ├── logging.rst
│ │ ├── multi_level_columns.rst
│ │ └── price_repair.rst
│ ├── conf.py
│ ├── development/
│ │ ├── code.rst
│ │ ├── documentation.rst
│ │ ├── index.rst
│ │ ├── running.rst
│ │ └── testing.rst
│ ├── index.rst
│ └── reference/
│ ├── examples/
│ │ ├── calendars.py
│ │ ├── download.py
│ │ ├── funds_data.py
│ │ ├── live_async.py
│ │ ├── live_sync.py
│ │ ├── lookup.py
│ │ ├── market.py
│ │ ├── proxy.py
│ │ ├── search.py
│ │ ├── sector_industry.py
│ │ ├── sector_industry_ticker.py
│ │ ├── ticker.py
│ │ └── tickers.py
│ ├── index.rst
│ ├── yfinance.analysis.rst
│ ├── yfinance.calendars.rst
│ ├── yfinance.financials.rst
│ ├── yfinance.functions.rst
│ ├── yfinance.funds_data.rst
│ ├── yfinance.market.rst
│ ├── yfinance.price_history.rst
│ ├── yfinance.screener.rst
│ ├── yfinance.search.rst
│ ├── yfinance.sector_industry.rst
│ ├── yfinance.stock.rst
│ ├── yfinance.ticker_tickers.rst
│ └── yfinance.websocket.rst
├── meta.yaml
├── pyrightconfig.json
├── requirements.txt
├── setup.cfg
├── setup.py
├── tests/
│ ├── __init__.py
│ ├── context.py
│ ├── data/
│ │ ├── 1398-HK-1d-bad-div-fixed.csv
│ │ ├── 1398-HK-1d-bad-div.csv
│ │ ├── 3988-HK-1d-bad-div-fixed.csv
│ │ ├── 3988-HK-1d-bad-div.csv
│ │ ├── 4063-T-1d-bad-div-fixed.csv
│ │ ├── 4063-T-1d-bad-div.csv
│ │ ├── 4063-T-1d-bad-stock-split-fixed.csv
│ │ ├── 4063-T-1d-bad-stock-split.csv
│ │ ├── 8TRA-DE-1d-missing-div-adjust-fixed.csv
│ │ ├── 8TRA-DE-1d-missing-div-adjust.csv
│ │ ├── ABDP-L-1d-bad-div-fixed.csv
│ │ ├── ABDP-L-1d-bad-div.csv
│ │ ├── ADIG-L-1d-bad-div-fixed.csv
│ │ ├── ADIG-L-1d-bad-div.csv
│ │ ├── AET-L-1d-100x-error-fixed.csv
│ │ ├── AET-L-1d-100x-error.csv
│ │ ├── ALPHA-PA-1d-bad-stock-split-fixed.csv
│ │ ├── ALPHA-PA-1d-bad-stock-split.csv
│ │ ├── AV-L-1wk-bad-stock-split-fixed.csv
│ │ ├── AV-L-1wk-bad-stock-split.csv
│ │ ├── CALM-1d-no-bad-divs.csv
│ │ ├── CLC-L-1d-bad-div-fixed.csv
│ │ ├── CLC-L-1d-bad-div.csv
│ │ ├── CNE-L-1d-bad-stock-split-fixed.csv
│ │ ├── CNE-L-1d-bad-stock-split.csv
│ │ ├── DEX-AX-1d-bad-stock-split-fixed.csv
│ │ ├── DEX-AX-1d-bad-stock-split.csv
│ │ ├── DODFX-1d-cg-double-count-fixed.csv
│ │ ├── DODFX-1d-cg-double-count.csv
│ │ ├── ELCO-L-1d-bad-div-fixed.csv
│ │ ├── ELCO-L-1d-bad-div.csv
│ │ ├── EWG-1d-no-bad-divs.csv
│ │ ├── HSBK-IL-1d-no-bad-divs.csv
│ │ ├── IBE-MC-1d-no-bad-divs.csv
│ │ ├── JENYX-1d-cg-double-count-fixed.csv
│ │ ├── JENYX-1d-cg-double-count.csv
│ │ ├── KAP-IL-1d-bad-div-fixed.csv
│ │ ├── KAP-IL-1d-bad-div.csv
│ │ ├── KEN-TA-1d-bad-div-fixed.csv
│ │ ├── KEN-TA-1d-bad-div.csv
│ │ ├── KME-MI-1d-bad-div-fixed.csv
│ │ ├── KME-MI-1d-bad-div.csv
│ │ ├── KMR-L-1d-no-bad-divs.csv
│ │ ├── LA-V-1d-bad-stock-split-fixed.csv
│ │ ├── LA-V-1d-bad-stock-split.csv
│ │ ├── LSC-L-1d-bad-div-fixed.csv
│ │ ├── LSC-L-1d-bad-div.csv
│ │ ├── MOB-ST-1d-bad-stock-split-fixed.csv
│ │ ├── MOB-ST-1d-bad-stock-split.csv
│ │ ├── NVT-L-1d-bad-div-fixed.csv
│ │ ├── NVT-L-1d-bad-div.csv
│ │ ├── PSH-L-1d-bad-div-fixed.csv
│ │ ├── PSH-L-1d-bad-div.csv
│ │ ├── REL-L-1d-bad-div-fixed.csv
│ │ ├── REL-L-1d-bad-div.csv
│ │ ├── RGL-L-1d-bad-div-fixed.csv
│ │ ├── RGL-L-1d-bad-div.csv
│ │ ├── SAND-1d-bad-div-fixed.csv
│ │ ├── SAND-1d-bad-div.csv
│ │ ├── SCR-TO-1d-bad-div-fixed.csv
│ │ ├── SCR-TO-1d-bad-div.csv
│ │ ├── SERE-L-1d-bad-div-fixed.csv
│ │ ├── SERE-L-1d-bad-div.csv
│ │ ├── SPM-MI-1d-bad-stock-split-fixed.csv
│ │ ├── SPM-MI-1d-bad-stock-split.csv
│ │ ├── SSW-JO-1d-100x-error-fixed.csv
│ │ ├── SSW-JO-1d-100x-error.csv
│ │ ├── TEM-L-1d-bad-div-fixed.csv
│ │ ├── TEM-L-1d-bad-div.csv
│ │ ├── TENT-L-1d-bad-div-fixed.csv
│ │ ├── TENT-L-1d-bad-div.csv
│ │ ├── TEP-PA-1d-bad-div-fixed.csv
│ │ ├── TEP-PA-1d-bad-div.csv
│ │ ├── TISG-MI-1d-no-bad-divs.csv
│ │ ├── VWILX-1d-cg-double-count-fixed.csv
│ │ └── VWILX-1d-cg-double-count.csv
│ ├── test_cache.py
│ ├── test_cache_noperms.py
│ ├── test_calendars.py
│ ├── test_live.py
│ ├── test_lookup.py
│ ├── test_price_repair.py
│ ├── test_prices.py
│ ├── test_screener.py
│ ├── test_search.py
│ ├── test_ticker.py
│ └── test_utils.py
└── yfinance/
├── __init__.py
├── base.py
├── cache.py
├── calendars.py
├── config.py
├── const.py
├── data.py
├── domain/
│ ├── __init__.py
│ ├── domain.py
│ ├── industry.py
│ ├── market.py
│ └── sector.py
├── exceptions.py
├── live.py
├── lookup.py
├── multi.py
├── pricing.proto
├── pricing_pb2.py
├── scrapers/
│ ├── __init__.py
│ ├── analysis.py
│ ├── fundamentals.py
│ ├── funds.py
│ ├── history.py
│ ├── holders.py
│ ├── quote.py
│ └── yahoo-keys.txt
├── screener/
│ ├── __init__.py
│ ├── query.py
│ └── screener.py
├── search.py
├── shared.py
├── ticker.py
├── tickers.py
├── utils.py
└── version.py
SYMBOL INDEX (790 symbols across 40 files)
FILE: doc/source/reference/examples/live_async.py
function message_handler (line 5) | def message_handler(message):
function main (line 8) | async def main():
FILE: doc/source/reference/examples/live_sync.py
function message_handler (line 4) | def message_handler(message):
FILE: tests/test_cache.py
class TestCache (line 18) | class TestCache(unittest.TestCase):
method setUpClass (line 20) | def setUpClass(cls):
method tearDownClass (line 25) | def tearDownClass(cls):
method test_storeTzNoRaise (line 29) | def test_storeTzNoRaise(self):
method test_setTzCacheLocation (line 38) | def test_setTzCacheLocation(self):
FILE: tests/test_cache_noperms.py
class TestCacheNoPermission (line 17) | class TestCacheNoPermission(unittest.TestCase):
method setUpClass (line 19) | def setUpClass(cls):
method test_tzCacheRootStore (line 27) | def test_tzCacheRootStore(self):
method test_tzCacheRootLookup (line 40) | def test_tzCacheRootLookup(self):
FILE: tests/test_calendars.py
class TestCalendars (line 9) | class TestCalendars(unittest.TestCase):
method setUp (line 10) | def setUp(self):
method test_get_earnings_calendar (line 13) | def test_get_earnings_calendar(self):
method test_get_earnings_calendar_init_params (line 27) | def test_get_earnings_calendar_init_params(self):
method test_get_ipo_info_calendar (line 35) | def test_get_ipo_info_calendar(self):
method test_get_economic_events_calendar (line 41) | def test_get_economic_events_calendar(self):
method test_get_splits_calendar (line 47) | def test_get_splits_calendar(self):
FILE: tests/test_live.py
class TestWebSocket (line 7) | class TestWebSocket(unittest.TestCase):
method test_decode_message_valid (line 8) | def test_decode_message_valid(self):
method test_decode_message_invalid (line 24) | def test_decode_message_invalid(self):
FILE: tests/test_lookup.py
class TestLookup (line 8) | class TestLookup(unittest.TestCase):
method setUp (line 9) | def setUp(self):
method test_get_all (line 13) | def test_get_all(self):
method test_get_stock (line 19) | def test_get_stock(self):
method test_get_mutualfund (line 25) | def test_get_mutualfund(self):
method test_get_etf (line 31) | def test_get_etf(self):
method test_get_index (line 37) | def test_get_index(self):
method test_get_future (line 43) | def test_get_future(self):
method test_get_currency (line 49) | def test_get_currency(self):
method test_get_cryptocurrency (line 55) | def test_get_cryptocurrency(self):
method test_large_all (line 61) | def test_large_all(self):
FILE: tests/test_price_repair.py
class TestPriceRepairAssumptions (line 12) | class TestPriceRepairAssumptions(unittest.TestCase):
method setUpClass (line 16) | def setUpClass(cls):
method tearDownClass (line 21) | def tearDownClass(cls):
method test_resampling (line 25) | def test_resampling(self):
class TestPriceRepair (line 94) | class TestPriceRepair(unittest.TestCase):
method setUpClass (line 98) | def setUpClass(cls):
method tearDownClass (line 103) | def tearDownClass(cls):
method test_types (line 107) | def test_types(self):
method test_reconstruct_2m (line 119) | def test_reconstruct_2m(self):
method test_repair_100x_random_weekly (line 138) | def test_repair_100x_random_weekly(self):
method test_repair_100x_random_weekly_preSplit (line 192) | def test_repair_100x_random_weekly_preSplit(self):
method test_repair_100x_random_daily (line 253) | def test_repair_100x_random_daily(self):
method test_repair_100x_block_daily (line 301) | def test_repair_100x_block_daily(self):
method test_repair_zeroes_daily (line 359) | def test_repair_zeroes_daily(self):
method test_repair_zeroes_daily_adjClose (line 386) | def test_repair_zeroes_daily_adjClose(self):
method test_repair_zeroes_hourly (line 431) | def test_repair_zeroes_hourly(self):
method test_repair_bad_stock_splits (line 466) | def test_repair_bad_stock_splits(self):
method test_repair_bad_div_adjusts (line 563) | def test_repair_bad_div_adjusts(self):
method test_repair_capital_gains_double_count (line 699) | def test_repair_capital_gains_double_count(self):
FILE: tests/test_prices.py
class TestPriceHistory (line 13) | class TestPriceHistory(unittest.TestCase):
method setUpClass (line 15) | def setUpClass(cls):
method tearDownClass (line 19) | def tearDownClass(cls):
method test_daily_index (line 23) | def test_daily_index(self):
method test_download_multi_large_interval (line 35) | def test_download_multi_large_interval(self):
method test_download_multi_small_interval (line 48) | def test_download_multi_small_interval(self):
method test_download_with_invalid_ticker (line 53) | def test_download_with_invalid_ticker(self):
method test_duplicatingHourly (line 66) | def test_duplicatingHourly(self):
method test_duplicatingDaily (line 85) | def test_duplicatingDaily(self):
method test_duplicatingWeekly (line 111) | def test_duplicatingWeekly(self):
method test_pricesEventsMerge (line 136) | def test_pricesEventsMerge(self):
method test_pricesEventsMerge_bug (line 152) | def test_pricesEventsMerge_bug(self):
method test_intraDayWithEvents (line 172) | def test_intraDayWithEvents(self):
method test_intraDayWithEvents_tase (line 197) | def test_intraDayWithEvents_tase(self):
method test_dailyWithEvents (line 224) | def test_dailyWithEvents(self):
method test_dailyWithEvents_bugs (line 248) | def test_dailyWithEvents_bugs(self):
method test_weeklyWithEvents (line 291) | def test_weeklyWithEvents(self):
method test_monthlyWithEvents (line 325) | def test_monthlyWithEvents(self):
method test_monthlyWithEvents2 (line 358) | def test_monthlyWithEvents2(self):
method test_tz_dst_ambiguous (line 367) | def test_tz_dst_ambiguous(self):
method test_dst_fix (line 374) | def test_dst_fix(self):
method test_prune_post_intraday_us (line 399) | def test_prune_post_intraday_us(self):
method test_prune_post_intraday_asx (line 427) | def test_prune_post_intraday_asx(self):
method test_weekly_2rows_fix (line 441) | def test_weekly_2rows_fix(self):
method test_aggregate_capital_gains (line 450) | def test_aggregate_capital_gains(self):
method test_transient_error_detection (line 460) | def test_transient_error_detection(self):
FILE: tests/test_screener.py
class TestScreener (line 7) | class TestScreener(unittest.TestCase):
method setUpClass (line 10) | def setUpClass(self):
method test_set_large_size_in_body (line 15) | def test_set_large_size_in_body(self, mock_post):
method test_fetch_query (line 20) | def test_fetch_query(self, mock_post):
method test_fetch_predefined (line 29) | def test_fetch_predefined(self, mock_get):
FILE: tests/test_search.py
class TestSearch (line 6) | class TestSearch(unittest.TestCase):
method test_invalid_query (line 7) | def test_invalid_query(self):
method test_empty_query (line 16) | def test_empty_query(self):
method test_fuzzy_query (line 22) | def test_fuzzy_query(self):
method test_quotes (line 29) | def test_quotes(self):
method test_news (line 35) | def test_news(self):
method test_research_reports (line 40) | def test_research_reports(self):
FILE: tests/test_ticker.py
function assert_attribute_type (line 61) | def assert_attribute_type(testClass: unittest.TestCase, instance, attrib...
class TestTicker (line 76) | class TestTicker(unittest.TestCase):
method setUpClass (line 80) | def setUpClass(cls):
method tearDownClass (line 84) | def tearDownClass(cls):
method test_getTz (line 88) | def test_getTz(self):
method test_badTicker (line 100) | def test_badTicker(self):
method test_invalid_period (line 132) | def test_invalid_period(self):
method test_valid_custom_periods (line 141) | def test_valid_custom_periods(self):
method test_ticker_missing (line 203) | def test_ticker_missing(self):
method test_goodTicker (line 211) | def test_goodTicker(self):
method test_goodTicker_withProxy (line 233) | def test_goodTicker_withProxy(self):
method test_ticker_with_symbol_mic (line 244) | def test_ticker_with_symbol_mic(self):
method test_ticker_with_symbol_mic_invalid (line 256) | def test_ticker_with_symbol_mic_invalid(self):
class TestTickerHistory (line 262) | class TestTickerHistory(unittest.TestCase):
method setUpClass (line 266) | def setUpClass(cls):
method tearDownClass (line 270) | def tearDownClass(cls):
method setUp (line 274) | def setUp(self):
method tearDown (line 281) | def tearDown(self):
method test_history (line 284) | def test_history(self):
method test_download (line 291) | def test_download(self):
method test_dividends (line 343) | def test_dividends(self):
method test_splits (line 348) | def test_splits(self):
method test_actions (line 353) | def test_actions(self):
method test_chained_history_calls (line 358) | def test_chained_history_calls(self):
class TestTickerEarnings (line 365) | class TestTickerEarnings(unittest.TestCase):
method setUpClass (line 369) | def setUpClass(cls):
method tearDownClass (line 373) | def tearDownClass(cls):
method setUp (line 377) | def setUp(self):
method tearDown (line 380) | def tearDown(self):
method test_earnings_dates (line 383) | def test_earnings_dates(self):
method test_earnings_dates_with_limit (line 388) | def test_earnings_dates_with_limit(self):
class TestTickerHolders (line 422) | class TestTickerHolders(unittest.TestCase):
method setUpClass (line 426) | def setUpClass(cls):
method tearDownClass (line 430) | def tearDownClass(cls):
method setUp (line 434) | def setUp(self):
method tearDown (line 437) | def tearDown(self):
method test_major_holders (line 440) | def test_major_holders(self):
method test_institutional_holders (line 448) | def test_institutional_holders(self):
method test_mutualfund_holders (line 456) | def test_mutualfund_holders(self):
method test_insider_transactions (line 464) | def test_insider_transactions(self):
method test_insider_purchases (line 472) | def test_insider_purchases(self):
method test_insider_roster_holders (line 480) | def test_insider_roster_holders(self):
class TestTickerMiscFinancials (line 489) | class TestTickerMiscFinancials(unittest.TestCase):
method setUpClass (line 493) | def setUpClass(cls):
method tearDownClass (line 497) | def tearDownClass(cls):
method setUp (line 501) | def setUp(self):
method tearDown (line 509) | def tearDown(self):
method test_isin (line 512) | def test_isin(self):
method test_options (line 520) | def test_options(self):
method test_shares_full (line 525) | def test_shares_full(self):
method test_income_statement (line 530) | def test_income_statement(self):
method test_quarterly_income_statement (line 559) | def test_quarterly_income_statement(self):
method test_ttm_income_statement (line 588) | def test_ttm_income_statement(self):
method test_balance_sheet (line 616) | def test_balance_sheet(self):
method test_quarterly_balance_sheet (line 645) | def test_quarterly_balance_sheet(self):
method test_cash_flow (line 674) | def test_cash_flow(self):
method test_quarterly_cash_flow (line 703) | def test_quarterly_cash_flow(self):
method test_ttm_cash_flow (line 732) | def test_ttm_cash_flow(self):
method test_income_alt_names (line 760) | def test_income_alt_names(self):
method test_balance_sheet_alt_names (line 797) | def test_balance_sheet_alt_names(self):
method test_cash_flow_alt_names (line 814) | def test_cash_flow_alt_names(self):
method test_bad_freq_value_raises_exception (line 839) | def test_bad_freq_value_raises_exception(self):
method test_calendar (line 842) | def test_calendar(self):
class TestTickerAnalysts (line 875) | class TestTickerAnalysts(unittest.TestCase):
method setUpClass (line 879) | def setUpClass(cls):
method tearDownClass (line 883) | def tearDownClass(cls):
method setUp (line 887) | def setUp(self):
method tearDown (line 891) | def tearDown(self):
method test_recommendations (line 895) | def test_recommendations(self):
method test_recommendations_summary (line 905) | def test_recommendations_summary(self): # currently alias for recomme...
method test_upgrades_downgrades (line 913) | def test_upgrades_downgrades(self):
method test_analyst_price_targets (line 922) | def test_analyst_price_targets(self):
method test_earnings_estimate (line 929) | def test_earnings_estimate(self):
method test_revenue_estimate (line 937) | def test_revenue_estimate(self):
method test_earnings_history (line 945) | def test_earnings_history(self):
method test_eps_trend (line 955) | def test_eps_trend(self):
method test_growth_estimates (line 963) | def test_growth_estimates(self):
method test_no_analysts (line 971) | def test_no_analysts(self):
class TestTickerInfo (line 992) | class TestTickerInfo(unittest.TestCase):
method setUpClass (line 996) | def setUpClass(cls):
method tearDownClass (line 1000) | def tearDownClass(cls):
method setUp (line 1004) | def setUp(self):
method tearDown (line 1013) | def tearDown(self):
method test_fast_info (line 1016) | def test_fast_info(self):
method test_info (line 1021) | def test_info(self):
method test_complementary_info (line 1029) | def test_complementary_info(self):
method test_isin_info (line 1040) | def test_isin_info(self):
method test_empty_info (line 1056) | def test_empty_info(self):
class TestTickerFundsData (line 1159) | class TestTickerFundsData(unittest.TestCase):
method setUpClass (line 1163) | def setUpClass(cls):
method tearDownClass (line 1167) | def tearDownClass(cls):
method setUp (line 1171) | def setUp(self):
method tearDown (line 1176) | def tearDown(self):
method test_fetch_and_parse (line 1179) | def test_fetch_and_parse(self):
method test_description (line 1192) | def test_description(self):
method test_fund_overview (line 1198) | def test_fund_overview(self):
method test_fund_operations (line 1203) | def test_fund_operations(self):
method test_asset_classes (line 1208) | def test_asset_classes(self):
method test_top_holdings (line 1213) | def test_top_holdings(self):
method test_equity_holdings (line 1218) | def test_equity_holdings(self):
method test_bond_holdings (line 1223) | def test_bond_holdings(self):
method test_bond_ratings (line 1228) | def test_bond_ratings(self):
method test_sector_weightings (line 1233) | def test_sector_weightings(self):
function suite (line 1238) | def suite():
FILE: tests/test_utils.py
class TestPandas (line 21) | class TestPandas(unittest.TestCase):
method test_mixed_timezones_to_datetime_fails (line 25) | def test_mixed_timezones_to_datetime_fails(self):
method test_mixed_timezones_to_datetime (line 31) | def test_mixed_timezones_to_datetime(self):
class TestUtils (line 44) | class TestUtils(unittest.TestCase):
method test_is_valid_period_format_valid (line 45) | def test_is_valid_period_format_valid(self):
method test_is_valid_period_format_invalid (line 51) | def test_is_valid_period_format_invalid(self):
method test_is_valid_period_format_edge_cases (line 58) | def test_is_valid_period_format_edge_cases(self):
class TestDateIntervalCheck (line 64) | class TestDateIntervalCheck(unittest.TestCase):
method test_same_day (line 65) | def test_same_day(self):
method test_different_days (line 70) | def test_different_days(self):
method test_same_week_mid_week (line 75) | def test_same_week_mid_week(self):
method test_different_weeks (line 81) | def test_different_weeks(self):
method test_week_year_boundary (line 86) | def test_week_year_boundary(self):
method test_same_month (line 92) | def test_same_month(self):
method test_different_months (line 97) | def test_different_months(self):
method test_month_year_boundary (line 102) | def test_month_year_boundary(self):
method test_standard_quarters (line 107) | def test_standard_quarters(self):
method test_nonstandard_quarters (line 120) | def test_nonstandard_quarters(self):
method test_cross_year_quarters (line 135) | def test_cross_year_quarters(self):
method test_hourly_interval (line 147) | def test_hourly_interval(self):
method test_custom_intervals (line 155) | def test_custom_intervals(self):
method test_minute_intervals (line 164) | def test_minute_intervals(self):
method test_parse_user_dt (line 172) | def test_parse_user_dt(self):
function suite (line 189) | def suite():
FILE: yfinance/__init__.py
function set_config (line 52) | def set_config(proxy=_NOTSET, retries=_NOTSET):
FILE: yfinance/base.py
class TickerBase (line 54) | class TickerBase:
method __init__ (line 55) | def __init__(self, ticker, session=None):
method history (line 128) | def history(self, *args, **kwargs) -> pd.DataFrame:
method _lazy_load_price_history (line 133) | def _lazy_load_price_history(self):
method _get_ticker_tz (line 138) | def _get_ticker_tz(self, timeout):
method _fetch_ticker_tz (line 172) | def _fetch_ticker_tz(self, timeout):
method get_recommendations (line 210) | def get_recommendations(self, as_dict=False):
method get_recommendations_summary (line 220) | def get_recommendations_summary(self, as_dict=False):
method get_upgrades_downgrades (line 223) | def get_upgrades_downgrades(self, as_dict=False):
method get_calendar (line 234) | def get_calendar(self) -> dict:
method get_sec_filings (line 237) | def get_sec_filings(self) -> dict:
method get_major_holders (line 240) | def get_major_holders(self, as_dict=False):
method get_institutional_holders (line 246) | def get_institutional_holders(self, as_dict=False):
method get_mutualfund_holders (line 253) | def get_mutualfund_holders(self, as_dict=False):
method get_insider_purchases (line 260) | def get_insider_purchases(self, as_dict=False):
method get_insider_transactions (line 267) | def get_insider_transactions(self, as_dict=False):
method get_insider_roster_holders (line 274) | def get_insider_roster_holders(self, as_dict=False):
method get_info (line 281) | def get_info(self) -> dict:
method get_fast_info (line 285) | def get_fast_info(self):
method get_sustainability (line 290) | def get_sustainability(self, as_dict=False):
method get_analyst_price_targets (line 296) | def get_analyst_price_targets(self) -> dict:
method get_earnings_estimate (line 303) | def get_earnings_estimate(self, as_dict=False):
method get_revenue_estimate (line 311) | def get_revenue_estimate(self, as_dict=False):
method get_earnings_history (line 319) | def get_earnings_history(self, as_dict=False):
method get_eps_trend (line 327) | def get_eps_trend(self, as_dict=False):
method get_eps_revisions (line 336) | def get_eps_revisions(self, as_dict=False):
method get_growth_estimates (line 345) | def get_growth_estimates(self, as_dict=False):
method get_earnings (line 354) | def get_earnings(self, as_dict=False, freq="yearly"):
method get_income_stmt (line 375) | def get_income_stmt(self, as_dict=False, pretty=False, freq="yearly"):
method get_incomestmt (line 398) | def get_incomestmt(self, as_dict=False, pretty=False, freq="yearly"):
method get_financials (line 401) | def get_financials(self, as_dict=False, pretty=False, freq="yearly"):
method get_balance_sheet (line 404) | def get_balance_sheet(self, as_dict=False, pretty=False, freq="yearly"):
method get_balancesheet (line 428) | def get_balancesheet(self, as_dict=False, pretty=False, freq="yearly"):
method get_cash_flow (line 431) | def get_cash_flow(self, as_dict=False, pretty=False, freq="yearly") ->...
method get_cashflow (line 455) | def get_cashflow(self, as_dict=False, pretty=False, freq="yearly"):
method get_dividends (line 458) | def get_dividends(self, period="max") -> pd.Series:
method get_capital_gains (line 461) | def get_capital_gains(self, period="max") -> pd.Series:
method get_splits (line 464) | def get_splits(self, period="max") -> pd.Series:
method get_actions (line 467) | def get_actions(self, period="max") -> pd.Series:
method get_shares (line 470) | def get_shares(self, as_dict=False) -> Union[pd.DataFrame, dict]:
method get_shares_full (line 477) | def get_shares_full(self, start=None, end=None):
method get_isin (line 534) | def get_isin(self) -> Optional[str]:
method get_news (line 570) | def get_news(self, count=10, tab="news") -> list:
method get_earnings_dates (line 612) | def get_earnings_dates(self, limit = 12, offset = 0) -> Optional[pd.Da...
method _get_earnings_dates_using_scrape (line 624) | def _get_earnings_dates_using_scrape(self, limit = 12, offset = 0) -> ...
method _get_earnings_dates_using_screener (line 719) | def _get_earnings_dates_using_screener(self, limit=12) -> Optional[pd....
method get_history_metadata (line 788) | def get_history_metadata(self) -> dict:
method get_funds_data (line 791) | def get_funds_data(self) -> Optional[FundsData]:
method live (line 797) | def live(self, message_handler=None, verbose=True):
FILE: yfinance/cache.py
class _TzCacheException (line 19) | class _TzCacheException(Exception):
class _TzCacheDummy (line 23) | class _TzCacheDummy:
method lookup (line 26) | def lookup(self, tkr):
method store (line 29) | def store(self, tkr, tz):
method tz_db (line 33) | def tz_db(self):
class _TzCacheManager (line 37) | class _TzCacheManager:
method get_tz_cache (line 41) | def get_tz_cache(cls):
method _initialise (line 48) | def _initialise(cls, cache_dir=None):
class _TzDBManager (line 52) | class _TzDBManager:
method get_database (line 57) | def get_database(cls):
method close_db (line 63) | def close_db(cls):
method _initialise (line 73) | def _initialise(cls, cache_dir=None):
method set_location (line 95) | def set_location(cls, new_cache_dir):
method get_location (line 102) | def get_location(cls):
class _TZ_KV (line 110) | class _TZ_KV(_peewee.Model):
class Meta (line 114) | class Meta:
class _TzCache (line 119) | class _TzCache:
method __init__ (line 120) | def __init__(self):
method get_db (line 125) | def get_db(self):
method initialise (line 139) | def initialise(self):
method lookup (line 160) | def lookup(self, key):
method store (line 175) | def store(self, key, value):
function get_tz_cache (line 205) | def get_tz_cache():
class _CookieCacheException (line 214) | class _CookieCacheException(Exception):
class _CookieCacheDummy (line 218) | class _CookieCacheDummy:
method lookup (line 221) | def lookup(self, tkr):
method store (line 224) | def store(self, tkr, Cookie):
method Cookie_db (line 228) | def Cookie_db(self):
class _CookieCacheManager (line 232) | class _CookieCacheManager:
method get_cookie_cache (line 236) | def get_cookie_cache(cls):
method _initialise (line 243) | def _initialise(cls, cache_dir=None):
class _CookieDBManager (line 247) | class _CookieDBManager:
method get_database (line 252) | def get_database(cls):
method close_db (line 258) | def close_db(cls):
method _initialise (line 268) | def _initialise(cls, cache_dir=None):
method set_location (line 286) | def set_location(cls, new_cache_dir):
method get_location (line 293) | def get_location(cls):
class ISODateTimeField (line 301) | class ISODateTimeField(_peewee.DateTimeField):
method db_value (line 305) | def db_value(self, value):
method python_value (line 309) | def python_value(self, value):
class _CookieSchema (line 313) | class _CookieSchema(_peewee.Model):
class Meta (line 320) | class Meta:
class _CookieCache (line 325) | class _CookieCache:
method __init__ (line 326) | def __init__(self):
method get_db (line 331) | def get_db(self):
method initialise (line 345) | def initialise(self):
method lookup (line 366) | def lookup(self, strategy):
method store (line 383) | def store(self, strategy, cookie):
function get_cookie_cache (line 415) | def get_cookie_cache():
class _ISINCacheException (line 424) | class _ISINCacheException(Exception):
class _ISINCacheDummy (line 428) | class _ISINCacheDummy:
method lookup (line 431) | def lookup(self, isin):
method store (line 434) | def store(self, isin, tkr):
method tz_db (line 438) | def tz_db(self):
class _ISINCacheManager (line 442) | class _ISINCacheManager:
method get_isin_cache (line 446) | def get_isin_cache(cls):
method _initialise (line 453) | def _initialise(cls, cache_dir=None):
class _ISINDBManager (line 457) | class _ISINDBManager:
method get_database (line 462) | def get_database(cls):
method close_db (line 468) | def close_db(cls):
method _initialise (line 478) | def _initialise(cls, cache_dir=None):
method set_location (line 496) | def set_location(cls, new_cache_dir):
method get_location (line 503) | def get_location(cls):
class _ISIN_KV (line 511) | class _ISIN_KV(_peewee.Model):
class Meta (line 516) | class Meta:
class _ISINCache (line 521) | class _ISINCache:
method __init__ (line 522) | def __init__(self):
method get_db (line 527) | def get_db(self):
method initialise (line 541) | def initialise(self):
method lookup (line 562) | def lookup(self, key):
method store (line 577) | def store(self, key, value):
function get_isin_cache (line 617) | def get_isin_cache():
function set_cache_location (line 625) | def set_cache_location(cache_dir: str):
function set_tz_cache_location (line 637) | def set_tz_cache_location(cache_dir: str):
FILE: yfinance/calendars.py
class CalendarQuery (line 17) | class CalendarQuery:
method __init__ (line 34) | def __init__(self, operator: str, operand: Union[List[Any], List["Cale...
method append (line 43) | def append(self, operand: Any) -> None:
method is_empty (line 52) | def is_empty(self) -> bool:
method to_dict (line 60) | def to_dict(self) -> dict:
class Calendars (line 169) | class Calendars:
method __init__ (line 181) | def __init__(
method _parse_date_param (line 214) | def _parse_date_param(self, _date: Optional[Union[str, datetime, date,...
method _get_data (line 220) | def _get_data(
method _create_df (line 261) | def _create_df(self, json_data: dict) -> pd.DataFrame:
method _cleanup_df (line 273) | def _cleanup_df(self, calendar_type: str) -> pd.DataFrame:
method _get_most_active_operands (line 295) | def _get_most_active_operands(
method _get_startdatetime_operators (line 334) | def _get_startdatetime_operators(self, start=None, end=None) -> Calend...
method get_earnings_calendar (line 359) | def get_earnings_calendar(
method get_ipo_info_calendar (line 430) | def get_ipo_info_calendar(
method get_economic_events_calendar (line 472) | def get_economic_events_calendar(
method get_splits_calendar (line 496) | def get_splits_calendar(
method earnings_calendar (line 522) | def earnings_calendar(self) -> pd.DataFrame:
method ipo_info_calendar (line 529) | def ipo_info_calendar(self) -> pd.DataFrame:
method economic_events_calendar (line 536) | def economic_events_calendar(self) -> pd.DataFrame:
method splits_calendar (line 543) | def splits_calendar(self) -> pd.DataFrame:
FILE: yfinance/config.py
class NestedConfig (line 4) | class NestedConfig:
method __init__ (line 5) | def __init__(self, name, data):
method __getattr__ (line 9) | def __getattr__(self, key):
method __setattr__ (line 12) | def __setattr__(self, key, value):
method __len__ (line 15) | def __len__(self):
method __repr__ (line 18) | def __repr__(self):
class ConfigMgr (line 21) | class ConfigMgr:
method __init__ (line 22) | def __init__(self):
method _load_option (line 25) | def _load_option(self):
method __getattr__ (line 37) | def __getattr__(self, key):
method __contains__ (line 45) | def __contains__(self, key):
method __repr__ (line 51) | def __repr__(self):
FILE: yfinance/const.py
function merge_two_level_dicts (line 381) | def merge_two_level_dicts(dict1, dict2):
FILE: yfinance/data.py
function _is_transient_error (line 20) | def _is_transient_error(exception):
function lru_cache_freezeargs (line 34) | def lru_cache_freezeargs(func):
class SingletonMeta (line 55) | class SingletonMeta(type):
method __call__ (line 62) | def __call__(cls, *args, **kwargs):
class YfData (line 75) | class YfData(metaclass=SingletonMeta):
method __init__ (line 81) | def __init__(self, session=None):
method _set_session (line 95) | def _set_session(self, session):
method _set_cookie_strategy (line 120) | def _set_cookie_strategy(self, strategy, have_lock=False):
method _save_cookie_curlCffi (line 144) | def _save_cookie_curlCffi(self):
method _load_cookie_curlCffi (line 165) | def _load_cookie_curlCffi(self):
method _get_cookie_basic (line 188) | def _get_cookie_basic(self, timeout=30):
method _get_crumb_basic (line 212) | def _get_crumb_basic(self, timeout=30):
method _get_cookie_and_crumb_basic (line 243) | def _get_cookie_and_crumb_basic(self, timeout):
method _get_cookie_csrf (line 249) | def _get_cookie_csrf(self, timeout):
method _get_crumb_csrf (line 318) | def _get_crumb_csrf(self, timeout=30):
method _get_cookie_and_crumb (line 351) | def _get_cookie_and_crumb(self, timeout=30):
method get (line 374) | def get(self, url, params=None, timeout=30):
method post (line 388) | def post(self, url, body=None, params=None, timeout=30, data=None):
method _make_request (line 392) | def _make_request(self, url, request_method, body=None, params=None, t...
method cache_get (line 457) | def cache_get(self, url, params=None, timeout=30):
method get_raw_json (line 460) | def get_raw_json(self, url, params=None, timeout=30):
method _is_this_consent_url (line 466) | def _is_this_consent_url(self, response_url: str) -> bool:
method _accept_consent_form (line 484) | def _accept_consent_form(
FILE: yfinance/domain/domain.py
class Domain (line 11) | class Domain(ABC):
method __init__ (line 17) | def __init__(self, key: str, session=None):
method key (line 36) | def key(self) -> str:
method name (line 46) | def name(self) -> str:
method symbol (line 57) | def symbol(self) -> str:
method ticker (line 68) | def ticker(self) -> Ticker:
method overview (line 79) | def overview(self) -> Dict:
method top_companies (line 90) | def top_companies(self) -> Optional[_pd.DataFrame]:
method research_reports (line 101) | def research_reports(self) -> List[Dict[str, str]]:
method _fetch (line 111) | def _fetch(self, query_url) -> Dict:
method _parse_and_assign_common (line 125) | def _parse_and_assign_common(self, data) -> None:
method _parse_overview (line 138) | def _parse_overview(self, overview) -> Dict:
method _parse_top_companies (line 158) | def _parse_top_companies(self, top_companies) -> Optional[_pd.DataFrame]:
method _fetch_and_parse (line 180) | def _fetch_and_parse(self) -> None:
method _ensure_fetched (line 187) | def _ensure_fetched(self, attribute) -> None:
FILE: yfinance/domain/industry.py
class Industry (line 12) | class Industry(Domain):
method __init__ (line 17) | def __init__(self, key, session=None):
method __repr__ (line 32) | def __repr__(self):
method sector_key (line 42) | def sector_key(self) -> str:
method sector_name (line 53) | def sector_name(self) -> str:
method top_performing_companies (line 64) | def top_performing_companies(self) -> Optional[_pd.DataFrame]:
method top_growth_companies (line 75) | def top_growth_companies(self) -> Optional[_pd.DataFrame]:
method _parse_top_performing_companies (line 85) | def _parse_top_performing_companies(self, top_performing_companies: Di...
method _parse_top_growth_companies (line 107) | def _parse_top_growth_companies(self, top_growth_companies: Dict) -> O...
method _fetch_and_parse (line 128) | def _fetch_and_parse(self) -> None:
FILE: yfinance/domain/market.py
class Market (line 9) | class Market:
method __init__ (line 10) | def __init__(self, market:'str', session=None, timeout=30):
method _fetch_json (line 22) | def _fetch_json(self, url, params):
method _parse_data (line 34) | def _parse_data(self):
method status (line 99) | def status(self):
method summary (line 105) | def summary(self):
FILE: yfinance/domain/sector.py
class Sector (line 12) | class Sector(Domain):
method __init__ (line 18) | def __init__(self, key, session=None):
method __repr__ (line 35) | def __repr__(self):
method top_etfs (line 45) | def top_etfs(self) -> Dict[str, str]:
method top_mutual_funds (line 56) | def top_mutual_funds(self) -> Dict[str, str]:
method industries (line 68) | def industries(self) -> _pd.DataFrame:
method _parse_top_etfs (line 80) | def _parse_top_etfs(self, top_etfs: Dict) -> Dict[str, str]:
method _parse_top_mutual_funds (line 92) | def _parse_top_mutual_funds(self, top_mutual_funds: Dict) -> Dict[str,...
method _parse_industries (line 104) | def _parse_industries(self, industries: Dict) -> _pd.DataFrame:
method _fetch_and_parse (line 122) | def _fetch_and_parse(self) -> None:
FILE: yfinance/exceptions.py
class YFException (line 1) | class YFException(Exception):
method __init__ (line 2) | def __init__(self, description=""):
class YFDataException (line 6) | class YFDataException(YFException):
class YFNotImplementedError (line 10) | class YFNotImplementedError(NotImplementedError):
method __init__ (line 11) | def __init__(self, method_name):
class YFTickerMissingError (line 15) | class YFTickerMissingError(YFException):
method __init__ (line 16) | def __init__(self, ticker, rationale):
class YFTzMissingError (line 22) | class YFTzMissingError(YFTickerMissingError):
method __init__ (line 23) | def __init__(self, ticker):
class YFPricesMissingError (line 27) | class YFPricesMissingError(YFTickerMissingError):
method __init__ (line 28) | def __init__(self, ticker, debug_info):
class YFEarningsDateMissing (line 36) | class YFEarningsDateMissing(YFTickerMissingError):
method __init__ (line 38) | def __init__(self, ticker):
class YFInvalidPeriodError (line 42) | class YFInvalidPeriodError(YFException):
method __init__ (line 43) | def __init__(self, ticker, invalid_period, valid_ranges):
class YFRateLimitError (line 51) | class YFRateLimitError(YFException):
method __init__ (line 52) | def __init__(self):
FILE: yfinance/live.py
class BaseWebSocket (line 15) | class BaseWebSocket:
method __init__ (line 16) | def __init__(self, url: str = "wss://streamer.finance.yahoo.com/?versi...
method _decode_message (line 24) | def _decode_message(self, base64_message: str) -> dict:
class AsyncWebSocket (line 42) | class AsyncWebSocket(BaseWebSocket):
method __init__ (line 47) | def __init__(self, url: str = "wss://streamer.finance.yahoo.com/?versi...
method _connect (line 59) | async def _connect(self):
method _periodic_subscribe (line 75) | async def _periodic_subscribe(self):
method subscribe (line 94) | async def subscribe(self, symbols: Union[str, List[str]]):
method unsubscribe (line 119) | async def unsubscribe(self, symbols: Union[str, List[str]]):
method listen (line 140) | async def listen(self, message_handler=None):
method close (line 201) | async def close(self):
method __aenter__ (line 212) | async def __aenter__(self):
method __aexit__ (line 216) | async def __aexit__(self, exc_type, exc_value, traceback):
class WebSocket (line 220) | class WebSocket(BaseWebSocket):
method __init__ (line 225) | def __init__(self, url: str = "wss://streamer.finance.yahoo.com/?versi...
method _connect (line 235) | def _connect(self):
method subscribe (line 249) | def subscribe(self, symbols: Union[str, List[str]]):
method unsubscribe (line 270) | def unsubscribe(self, symbols: Union[str, List[str]]):
method listen (line 291) | def listen(self, message_handler: Optional[Callable[[dict], None]] = N...
method close (line 337) | def close(self):
method __enter__ (line 345) | def __enter__(self):
method __exit__ (line 349) | def __exit__(self, exc_type, exc_value, traceback):
FILE: yfinance/lookup.py
class Lookup (line 34) | class Lookup:
method __init__ (line 45) | def __init__(self, query: str, session=None, timeout=30, raise_errors=...
method _fetch_lookup (line 58) | def _fetch_lookup(self, lookup_type="all", count=25) -> dict:
method _parse_response (line 97) | def _parse_response(response: dict) -> pd.DataFrame:
method _get_data (line 107) | def _get_data(self, lookup_type: str, count: int = 25) -> pd.DataFrame:
method get_all (line 110) | def get_all(self, count=25) -> pd.DataFrame:
method get_stock (line 119) | def get_stock(self, count=25) -> pd.DataFrame:
method get_mutualfund (line 128) | def get_mutualfund(self, count=25) -> pd.DataFrame:
method get_etf (line 137) | def get_etf(self, count=25) -> pd.DataFrame:
method get_index (line 146) | def get_index(self, count=25) -> pd.DataFrame:
method get_future (line 155) | def get_future(self, count=25) -> pd.DataFrame:
method get_currency (line 164) | def get_currency(self, count=25) -> pd.DataFrame:
method get_cryptocurrency (line 173) | def get_cryptocurrency(self, count=25) -> pd.DataFrame:
method all (line 183) | def all(self) -> pd.DataFrame:
method stock (line 188) | def stock(self) -> pd.DataFrame:
method mutualfund (line 193) | def mutualfund(self) -> pd.DataFrame:
method etf (line 198) | def etf(self) -> pd.DataFrame:
method index (line 203) | def index(self) -> pd.DataFrame:
method future (line 208) | def future(self) -> pd.DataFrame:
method currency (line 213) | def currency(self) -> pd.DataFrame:
method cryptocurrency (line 218) | def cryptocurrency(self) -> pd.DataFrame:
FILE: yfinance/multi.py
function download (line 39) | def download(tickers, start=None, end=None, actions=False, threads=True,
function _realign_dfs (line 229) | def _realign_dfs():
function _download_one_threaded (line 253) | def _download_one_threaded(ticker, start=None, end=None,
function _download_one (line 265) | def _download_one(ticker, start=None, end=None,
FILE: yfinance/scrapers/analysis.py
class Analysis (line 11) | class Analysis:
method __init__ (line 13) | def __init__(self, data: YfData, symbol: str):
method _get_periodic_df (line 30) | def _get_periodic_df(self, key) -> pd.DataFrame:
method earnings_estimate (line 47) | def earnings_estimate(self) -> pd.DataFrame:
method revenue_estimate (line 54) | def revenue_estimate(self) -> pd.DataFrame:
method eps_trend (line 61) | def eps_trend(self) -> pd.DataFrame:
method eps_revisions (line 68) | def eps_revisions(self) -> pd.DataFrame:
method analyst_price_targets (line 75) | def analyst_price_targets(self) -> dict:
method earnings_history (line 100) | def earnings_history(self) -> pd.DataFrame:
method growth_estimates (line 135) | def growth_estimates(self) -> pd.DataFrame:
method _fetch (line 174) | def _fetch(self, modules: list):
method _fetch_earnings_trend (line 191) | def _fetch_earnings_trend(self) -> None:
FILE: yfinance/scrapers/fundamentals.py
class Fundamentals (line 12) | class Fundamentals:
method __init__ (line 14) | def __init__(self, data: YfData, symbol: str):
method financials (line 28) | def financials(self) -> "Financials":
method earnings (line 32) | def earnings(self) -> dict:
method shares (line 37) | def shares(self) -> pd.DataFrame:
class Financials (line 43) | class Financials:
method __init__ (line 44) | def __init__(self, data: YfData, symbol: str):
method get_income_time_series (line 51) | def get_income_time_series(self, freq="yearly") -> pd.DataFrame:
method get_balance_sheet_time_series (line 57) | def get_balance_sheet_time_series(self, freq="yearly") -> pd.DataFrame:
method get_cash_flow_time_series (line 63) | def get_cash_flow_time_series(self, freq="yearly") -> pd.DataFrame:
method _fetch_time_series (line 70) | def _fetch_time_series(self, name, timescale):
method _create_financials_table (line 97) | def _create_financials_table(self, name, timescale):
method _get_financials_time_series (line 111) | def _get_financials_time_series(self, timescale, keys: list) -> pd.Dat...
FILE: yfinance/scrapers/funds.py
class FundsData (line 12) | class FundsData:
method __init__ (line 20) | def __init__(self, data: YfData, symbol: str):
method quote_type (line 47) | def quote_type(self) -> str:
method description (line 59) | def description(self) -> str:
method fund_overview (line 71) | def fund_overview(self) -> Dict[str, Optional[str]]:
method fund_operations (line 83) | def fund_operations(self) -> pd.DataFrame:
method asset_classes (line 95) | def asset_classes(self) -> Dict[str, float]:
method top_holdings (line 107) | def top_holdings(self) -> pd.DataFrame:
method equity_holdings (line 119) | def equity_holdings(self) -> pd.DataFrame:
method bond_holdings (line 131) | def bond_holdings(self) -> pd.DataFrame:
method bond_ratings (line 143) | def bond_ratings(self) -> Dict[str, float]:
method sector_weightings (line 155) | def sector_weightings(self) -> Dict[str,float]:
method _fetch (line 166) | def _fetch(self):
method _fetch_and_parse (line 178) | def _fetch_and_parse(self) -> None:
method _parse_raw_values (line 207) | def _parse_raw_values(data, default=None):
method _parse_description (line 223) | def _parse_description(self, data) -> None:
method _parse_top_holdings (line 232) | def _parse_top_holdings(self, data) -> None:
method _parse_fund_profile (line 308) | def _parse_fund_profile(self, data):
FILE: yfinance/scrapers/history.py
class PriceHistory (line 17) | class PriceHistory:
method __init__ (line 18) | def __init__(self, data, ticker, tz, session=None):
method history (line 32) | def history(self, period=None, interval="1d",
method _get_history_cache (line 519) | def _get_history_cache(self, period="max", interval="1d") -> pd.DataFr...
method get_history_metadata (line 528) | def get_history_metadata(self) -> dict:
method get_dividends (line 539) | def get_dividends(self, period="max") -> pd.Series:
method get_capital_gains (line 546) | def get_capital_gains(self, period="max") -> pd.Series:
method get_splits (line 553) | def get_splits(self, period="max") -> pd.Series:
method get_actions (line 560) | def get_actions(self, period="max") -> pd.Series:
method _resample (line 576) | def _resample(self, df, df_interval, target_interval, period=None) -> ...
method _reconstruct_intervals_batch (line 625) | def _reconstruct_intervals_batch(self, df, interval, prepost, tag=-1):
method _standardise_currency (line 1012) | def _standardise_currency(self, df, currency):
method _dividends_convert_fx (line 1069) | def _dividends_convert_fx(self, dividends, fx, repair=False):
method _fix_unit_mixups (line 1109) | def _fix_unit_mixups(self, df, interval, tz_exchange, prepost):
method _fix_unit_random_mixups (line 1117) | def _fix_unit_random_mixups(self, df, interval, tz_exchange, prepost):
method _fix_unit_switch (line 1272) | def _fix_unit_switch(self, df, interval, tz_exchange):
method _fix_zeroes (line 1289) | def _fix_zeroes(self, df, interval, tz_exchange, prepost):
method _repair_capital_gains (line 1420) | def _repair_capital_gains(self, df):
method _fix_bad_div_adjust (line 1534) | def _fix_bad_div_adjust(self, df, interval, currency):
method _fix_bad_stock_splits (line 2559) | def _fix_bad_stock_splits(self, df, interval, tz_exchange):
method _fix_prices_sudden_change (line 2620) | def _fix_prices_sudden_change(self, df, interval, tz_exchange, change,...
FILE: yfinance/scrapers/holders.py
class Holders (line 12) | class Holders:
method __init__ (line 15) | def __init__(self, data: YfData, symbol: str):
method major (line 29) | def major(self) -> pd.DataFrame:
method institutional (line 35) | def institutional(self) -> pd.DataFrame:
method mutualfund (line 41) | def mutualfund(self) -> pd.DataFrame:
method insider_transactions (line 47) | def insider_transactions(self) -> pd.DataFrame:
method insider_purchases (line 53) | def insider_purchases(self) -> pd.DataFrame:
method insider_roster (line 59) | def insider_roster(self) -> pd.DataFrame:
method _fetch (line 64) | def _fetch(self):
method _fetch_and_parse (line 71) | def _fetch_and_parse(self):
method _parse_raw_values (line 105) | def _parse_raw_values(data):
method _parse_institution_ownership (line 110) | def _parse_institution_ownership(self, data):
method _parse_fund_ownership (line 122) | def _parse_fund_ownership(self, data):
method _parse_major_direct_holders (line 134) | def _parse_major_direct_holders(self, data):
method _parse_major_holders_breakdown (line 146) | def _parse_major_holders_breakdown(self, data):
method _parse_insider_transactions (line 155) | def _parse_insider_transactions(self, data):
method _parse_insider_holders (line 177) | def _parse_insider_holders(self, data):
method _parse_net_share_purchase_activity (line 209) | def _parse_net_share_purchase_activity(self, data):
FILE: yfinance/scrapers/quote.py
class FastInfo (line 26) | class FastInfo:
method __init__ (line 29) | def __init__(self, tickerBaseObject):
method keys (line 88) | def keys(self):
method items (line 91) | def items(self):
method values (line 94) | def values(self):
method get (line 97) | def get(self, key, default=None):
method __getitem__ (line 104) | def __getitem__(self, k):
method __contains__ (line 113) | def __contains__(self, k):
method __iter__ (line 116) | def __iter__(self):
method __str__ (line 119) | def __str__(self):
method __repr__ (line 122) | def __repr__(self):
method toJSON (line 125) | def toJSON(self, indent=4):
method _get_1y_prices (line 128) | def _get_1y_prices(self, fullDaysOnly=False):
method _get_1wk_1h_prepost_prices (line 154) | def _get_1wk_1h_prepost_prices(self):
method _get_1wk_1h_reg_prices (line 159) | def _get_1wk_1h_reg_prices(self):
method _get_exchange_metadata (line 164) | def _get_exchange_metadata(self):
method _exchange_open_now (line 172) | def _exchange_open_now(self):
method currency (line 196) | def currency(self):
method quote_type (line 205) | def quote_type(self):
method exchange (line 214) | def exchange(self):
method timezone (line 222) | def timezone(self):
method shares (line 230) | def shares(self):
method last_price (line 245) | def last_price(self):
method previous_close (line 262) | def previous_close(self):
method regular_market_previous_close (line 286) | def regular_market_previous_close(self):
method open (line 308) | def open(self):
method day_high (line 321) | def day_high(self):
method day_low (line 334) | def day_low(self):
method last_volume (line 347) | def last_volume(self):
method fifty_day_average (line 355) | def fifty_day_average(self):
method two_hundred_day_average (line 373) | def two_hundred_day_average(self):
method ten_day_average_volume (line 392) | def ten_day_average_volume(self):
method three_month_average_volume (line 410) | def three_month_average_volume(self):
method year_high (line 425) | def year_high(self):
method year_low (line 436) | def year_low(self):
method year_change (line 447) | def year_change(self):
method market_cap (line 458) | def market_cap(self):
class Quote (line 483) | class Quote:
method __init__ (line 484) | def __init__(self, data: YfData, symbol: str):
method info (line 501) | def info(self) -> dict:
method sustainability (line 509) | def sustainability(self) -> pd.DataFrame:
method recommendations (line 525) | def recommendations(self) -> pd.DataFrame:
method upgrades_downgrades (line 541) | def upgrades_downgrades(self) -> pd.DataFrame:
method calendar (line 563) | def calendar(self) -> dict:
method sec_filings (line 569) | def sec_filings(self) -> dict:
method valid_modules (line 576) | def valid_modules():
method _fetch (line 579) | def _fetch(self, modules: list):
method _fetch_additional_info (line 596) | def _fetch_additional_info(self):
method _fetch_info (line 607) | def _fetch_info(self):
method _fetch_complementary (line 664) | def _fetch_complementary(self):
method _fetch_calendar (line 720) | def _fetch_calendar(self):
method _fetch_sec_filings (line 750) | def _fetch_sec_filings(self):
FILE: yfinance/screener/query.py
class QueryBase (line 12) | class QueryBase(ABC):
method __init__ (line 13) | def __init__(self, operator: str, operand: Union[ List['QueryBase'], T...
method valid_fields (line 39) | def valid_fields(self) -> List:
method valid_values (line 44) | def valid_values(self) -> Dict:
method _validate_or_and_operand (line 47) | def _validate_or_and_operand(self, operand: List['QueryBase']) -> None:
method _validate_eq_operand (line 53) | def _validate_eq_operand(self, operand: List[Union[str, numbers.Real]]...
method _validate_btwn_operand (line 68) | def _validate_btwn_operand(self, operand: List[Union[str, numbers.Real...
method _validate_gt_lt (line 78) | def _validate_gt_lt(self, operand: List[Union[str, numbers.Real]]) -> ...
method _validate_isin_operand (line 86) | def _validate_isin_operand(self, operand: List['QueryBase']) -> None:
method to_dict (line 102) | def to_dict(self) -> Dict:
method __repr__ (line 114) | def __repr__(self, indent=0) -> str:
method __str__ (line 134) | def __str__(self) -> str:
class EquityQuery (line 138) | class EquityQuery(QueryBase):
method valid_fields (line 161) | def valid_fields(self) -> Dict:
method valid_values (line 170) | def valid_values(self) -> Dict:
class FundQuery (line 178) | class FundQuery(QueryBase):
method valid_fields (line 203) | def valid_fields(self) -> Dict:
method valid_values (line 212) | def valid_values(self) -> Dict:
FILE: yfinance/screener/screener.py
function screen (line 55) | def screen(query: Union[str, EquityQuery, FundQuery],
FILE: yfinance/search.py
class Search (line 31) | class Search:
method __init__ (line 32) | def __init__(self, query, max_results=8, news_count=8, lists_count=8, ...
method search (line 82) | def search(self) -> 'Search':
method quotes (line 127) | def quotes(self) -> 'list':
method news (line 132) | def news(self) -> 'list':
method lists (line 137) | def lists(self) -> 'list':
method research (line 142) | def research(self) -> 'list':
method nav (line 147) | def nav(self) -> 'list':
method all (line 152) | def all(self) -> 'dict[str,list]':
method response (line 157) | def response(self) -> 'dict':
FILE: yfinance/ticker.py
class Ticker (line 33) | class Ticker(TickerBase):
method __init__ (line 34) | def __init__(self, ticker, session=None):
method __repr__ (line 39) | def __repr__(self):
method _download_options (line 42) | def _download_options(self, date=None):
method _options2df (line 60) | def _options2df(self, opt, tz=None):
method option_chain (line 83) | def option_chain(self, date=None, tz=None):
method isin (line 110) | def isin(self):
method major_holders (line 114) | def major_holders(self) -> _pd.DataFrame:
method institutional_holders (line 118) | def institutional_holders(self) -> _pd.DataFrame:
method mutualfund_holders (line 122) | def mutualfund_holders(self) -> _pd.DataFrame:
method insider_purchases (line 126) | def insider_purchases(self) -> _pd.DataFrame:
method insider_transactions (line 130) | def insider_transactions(self) -> _pd.DataFrame:
method insider_roster_holders (line 134) | def insider_roster_holders(self) -> _pd.DataFrame:
method dividends (line 138) | def dividends(self) -> _pd.Series:
method capital_gains (line 142) | def capital_gains(self) -> _pd.Series:
method splits (line 146) | def splits(self) -> _pd.Series:
method actions (line 150) | def actions(self) -> _pd.DataFrame:
method shares (line 154) | def shares(self) -> _pd.DataFrame:
method info (line 158) | def info(self) -> dict:
method fast_info (line 162) | def fast_info(self):
method calendar (line 166) | def calendar(self) -> dict:
method sec_filings (line 173) | def sec_filings(self) -> dict:
method recommendations (line 177) | def recommendations(self):
method recommendations_summary (line 181) | def recommendations_summary(self):
method upgrades_downgrades (line 185) | def upgrades_downgrades(self):
method earnings (line 189) | def earnings(self) -> _pd.DataFrame:
method quarterly_earnings (line 193) | def quarterly_earnings(self) -> _pd.DataFrame:
method income_stmt (line 197) | def income_stmt(self) -> _pd.DataFrame:
method quarterly_income_stmt (line 201) | def quarterly_income_stmt(self) -> _pd.DataFrame:
method ttm_income_stmt (line 205) | def ttm_income_stmt(self) -> _pd.DataFrame:
method incomestmt (line 209) | def incomestmt(self) -> _pd.DataFrame:
method quarterly_incomestmt (line 213) | def quarterly_incomestmt(self) -> _pd.DataFrame:
method ttm_incomestmt (line 217) | def ttm_incomestmt(self) -> _pd.DataFrame:
method financials (line 221) | def financials(self) -> _pd.DataFrame:
method quarterly_financials (line 225) | def quarterly_financials(self) -> _pd.DataFrame:
method ttm_financials (line 229) | def ttm_financials(self) -> _pd.DataFrame:
method balance_sheet (line 233) | def balance_sheet(self) -> _pd.DataFrame:
method quarterly_balance_sheet (line 237) | def quarterly_balance_sheet(self) -> _pd.DataFrame:
method balancesheet (line 241) | def balancesheet(self) -> _pd.DataFrame:
method quarterly_balancesheet (line 245) | def quarterly_balancesheet(self) -> _pd.DataFrame:
method cash_flow (line 249) | def cash_flow(self) -> _pd.DataFrame:
method quarterly_cash_flow (line 253) | def quarterly_cash_flow(self) -> _pd.DataFrame:
method ttm_cash_flow (line 257) | def ttm_cash_flow(self) -> _pd.DataFrame:
method cashflow (line 261) | def cashflow(self) -> _pd.DataFrame:
method quarterly_cashflow (line 265) | def quarterly_cashflow(self) -> _pd.DataFrame:
method ttm_cashflow (line 269) | def ttm_cashflow(self) -> _pd.DataFrame:
method analyst_price_targets (line 273) | def analyst_price_targets(self) -> dict:
method earnings_estimate (line 277) | def earnings_estimate(self) -> _pd.DataFrame:
method revenue_estimate (line 281) | def revenue_estimate(self) -> _pd.DataFrame:
method earnings_history (line 285) | def earnings_history(self) -> _pd.DataFrame:
method eps_trend (line 289) | def eps_trend(self) -> _pd.DataFrame:
method eps_revisions (line 293) | def eps_revisions(self) -> _pd.DataFrame:
method growth_estimates (line 297) | def growth_estimates(self) -> _pd.DataFrame:
method sustainability (line 301) | def sustainability(self) -> _pd.DataFrame:
method options (line 305) | def options(self) -> tuple:
method news (line 311) | def news(self) -> list:
method earnings_dates (line 315) | def earnings_dates(self) -> _pd.DataFrame:
method history_metadata (line 319) | def history_metadata(self) -> dict:
method funds_data (line 323) | def funds_data(self) -> FundsData:
FILE: yfinance/tickers.py
class Tickers (line 29) | class Tickers:
method __repr__ (line 31) | def __repr__(self):
method __init__ (line 34) | def __init__(self, tickers, session=None):
method history (line 49) | def history(self, period=None, interval="1d",
method download (line 62) | def download(self, period=None, interval="1d",
method news (line 91) | def news(self):
method live (line 94) | def live(self, message_handler=None, verbose=True):
FILE: yfinance/utils.py
function attributes (line 47) | def attributes(obj):
class IndentLoggerAdapter (line 59) | class IndentLoggerAdapter(logging.LoggerAdapter):
method process (line 60) | def process(self, msg, kwargs):
class IndentationContext (line 72) | class IndentationContext:
method __init__ (line 73) | def __init__(self, increment=1):
method __enter__ (line 76) | def __enter__(self):
method __exit__ (line 79) | def __exit__(self, exc_type, exc_val, exc_tb):
function get_indented_logger (line 83) | def get_indented_logger(name=None):
function log_indent_decorator (line 88) | def log_indent_decorator(func):
class MultiLineFormatter (line 103) | class MultiLineFormatter(logging.Formatter):
method __init__ (line 107) | def __init__(self, fmt):
method format (line 113) | def format(self, record):
class YFLogFormatter (line 135) | class YFLogFormatter(logging.Filter):
method filter (line 137) | def filter(self, record):
function get_yf_logger (line 149) | def get_yf_logger():
function enable_debug_mode (line 166) | def enable_debug_mode():
function _enable_debug_mode (line 170) | def _enable_debug_mode():
function _disable_debug_mode (line 186) | def _disable_debug_mode():
function is_isin (line 196) | def is_isin(string):
function get_all_by_isin (line 200) | def get_all_by_isin(isin):
function get_ticker_by_isin (line 225) | def get_ticker_by_isin(isin):
function get_info_by_isin (line 230) | def get_info_by_isin(isin):
function get_news_by_isin (line 235) | def get_news_by_isin(isin):
function empty_df (line 240) | def empty_df(index=None):
function empty_earnings_dates_df (line 250) | def empty_earnings_dates_df():
function build_template (line 257) | def build_template(data):
function retrieve_financial_details (line 297) | def retrieve_financial_details(data):
function format_annual_financial_statement (line 327) | def format_annual_financial_statement(level_detail, annual_dicts, annual...
function format_quarterly_financial_statement (line 357) | def format_quarterly_financial_statement(_statement, level_detail, order):
function camel2title (line 374) | def camel2title(strings: List[str], sep: str = ' ', acronyms: Optional[L...
function snake_case_2_camelCase (line 420) | def snake_case_2_camelCase(s):
function _parse_user_dt (line 425) | def _parse_user_dt(dt, exchange_tz=_tz.utc):
function _interval_to_timedelta (line 445) | def _interval_to_timedelta(interval):
function is_valid_period_format (line 458) | def is_valid_period_format(period):
function auto_adjust (line 468) | def auto_adjust(data):
function back_adjust (line 488) | def back_adjust(data):
function parse_quotes (line 510) | def parse_quotes(data):
function parse_actions (line 536) | def parse_actions(data):
function set_df_tz (line 583) | def set_df_tz(df, interval, tz):
function fix_Yahoo_returning_prepost_unrequested (line 590) | def fix_Yahoo_returning_prepost_unrequested(quotes, interval, tradingPer...
function _dts_in_same_interval (line 619) | def _dts_in_same_interval(dt1, dt2, interval):
function fix_Yahoo_returning_live_separate (line 640) | def fix_Yahoo_returning_live_separate(quotes, interval, tz_exchange, pre...
function safe_merge_dfs (line 728) | def safe_merge_dfs(df_main, df_sub, interval):
function fix_Yahoo_dst_issue (line 855) | def fix_Yahoo_dst_issue(df, interval):
function is_valid_timezone (line 868) | def is_valid_timezone(tz: str) -> bool:
function format_history_metadata (line 876) | def format_history_metadata(md, tradingPeriodsOnly=True):
class ProgressBar (line 936) | class ProgressBar:
method __init__ (line 937) | def __init__(self, iterations, text='completed'):
method completed (line 946) | def completed(self):
method animate (line 954) | def animate(self, iteration=None):
method update_iteration (line 965) | def update_iteration(self, val=None):
method __update_amount (line 970) | def __update_amount(self, new_amount):
method __str__ (line 979) | def __str__(self):
function dynamic_docstring (line 982) | def dynamic_docstring(placeholders: dict):
function _generate_table_configurations (line 999) | def _generate_table_configurations(title = None) -> str:
function generate_list_table_from_dict (line 1014) | def generate_list_table_from_dict(data: dict, bullets: bool=True, title:...
function generate_list_table_from_dict_universal (line 1049) | def generate_list_table_from_dict_universal(data: dict, bullets: bool=Tr...
Condensed preview — 190 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,135K chars).
[
{
"path": ".github/FUNDING.yml",
"chars": 794,
"preview": "# # These are supported funding model platforms\n# github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g.,"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.yaml",
"chars": 3065,
"preview": "name: Bug report\ndescription: Report a bug in our project\nlabels: [\"bug\"]\n\nbody:\n - type: markdown\n attributes:\n "
},
{
"path": ".github/dependabot.yml",
"chars": 217,
"preview": "version: 2\nupdates:\n\n- package-ecosystem: pip\n directory: \"/\"\n schedule:\n interval: daily\n open-pull-requests-limi"
},
{
"path": ".github/workflows/auto_close_default_issues.yml",
"chars": 1678,
"preview": "name: Auto-close issues using default template\non:\n issues:\n types: [opened]\n\njobs:\n check-template:\n runs-on: u"
},
{
"path": ".github/workflows/deploy_doc.yml",
"chars": 1053,
"preview": "name: Build and Deploy Sphinx Docs\n\non:\n push:\n branches:\n - main\n # - dev-documented\n workflow_dispatch:"
},
{
"path": ".github/workflows/pyright.yml",
"chars": 446,
"preview": "name: Pyright\n\non:\n pull_request:\n branches:\n - master\n - main\n - dev\n\njobs:\n pyright:\n runs-on: "
},
{
"path": ".github/workflows/pytest.yml.disabled",
"chars": 734,
"preview": "name: Pytest\n\non:\n pull_request:\n branches:\n - master\n - main\n - dev\n\njobs:\n test:\n runs-on: ubun"
},
{
"path": ".github/workflows/python-publish.yml",
"chars": 864,
"preview": "# This workflow will upload a Python Package using Twine when a release is created\n# For more information see: https://h"
},
{
"path": ".github/workflows/ruff.yml",
"chars": 296,
"preview": "name: Ruff\non:\n pull_request:\n branches:\n - master\n - main\n - dev\njobs:\n ruff:\n runs-on: ubuntu-l"
},
{
"path": ".gitignore",
"chars": 293,
"preview": "__pycache__/*\nyfinance/__pycache__/*\ndist\nyfinance.egg-info\n*.pyc\n.coverage\n.idea/\n.vscode/\nbuild/\n*.html\n*.css\ntest.ipy"
},
{
"path": ".travis.yml",
"chars": 750,
"preview": "language: python\n\nsudo: true\nfast_finish: true\n\nmatrix:\n include:\n - python: 2.7\n - python: 3.6\n - python: 3.7"
},
{
"path": "CHANGELOG.rst",
"chars": 20995,
"preview": "Change Log\n===========\n\n1.2.0\n-----\nFeatures:\n- update exchange maps for equities and mutual funds. #2685\nFixes:\n- handl"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 560,
"preview": "# Code of Conduct\n\n## Submitting a new issue\n\n* Search through existing Issues and Discussions, in case your issue alrea"
},
{
"path": "CONTRIBUTING.md",
"chars": 2005,
"preview": "# Contributing\n\nyfinance relies on the community to investigate bugs and contribute code.\n\nThis is a quick short guide, "
},
{
"path": "LICENSE.txt",
"chars": 11358,
"preview": "\n Apache License\n Version 2.0, January 2004\n "
},
{
"path": "MANIFEST.in",
"chars": 97,
"preview": "# Include the license file\ninclude LICENSE.txt\n\n# Include the data files\nrecursive-include data *"
},
{
"path": "README.md",
"chars": 4122,
"preview": "<img src=\"./doc/yfinance-gh-logo-dark.webp#gh-dark-mode-only\" height=\"100\">\n<img src=\"./doc/yfinance-gh-logo-light.webp#"
},
{
"path": "doc/Makefile",
"chars": 638,
"preview": "# Minimal makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line, and also\n# from the "
},
{
"path": "doc/make.bat",
"chars": 804,
"preview": "@ECHO OFF\r\n\r\npushd %~dp0\r\n\r\nREM Command file for Sphinx documentation\r\n\r\nif \"%SPHINXBUILD%\" == \"\" (\r\n\tset SPHINXBUILD=sp"
},
{
"path": "doc/source/_static/yfinance.css",
"chars": 82,
"preview": "/* Hide the \"Section Navigation\" title */\np.bd-links__title {\n display: none;\n}"
},
{
"path": "doc/source/_templates/autosummary/class.rst",
"chars": 638,
"preview": ":orphan:\n\n{{ objname | escape | underline }}\n\n.. currentmodule:: {{ module }}\n\n.. autoclass:: {{ objname }}\n :exclude-"
},
{
"path": "doc/source/advanced/caching.rst",
"chars": 540,
"preview": "Caching\n=======\n\nPersistent Cache\n----------------\n\nTo reduce Yahoo, yfinance store some data locally: timezones to loca"
},
{
"path": "doc/source/advanced/config.rst",
"chars": 1000,
"preview": "******\nConfig\n******\n\n`yfinance` has a new global config for sharing common values:\n\n.. code-block:: python\n\n >>> impor"
},
{
"path": "doc/source/advanced/index.rst",
"chars": 128,
"preview": "========\nAdvanced\n========\n\n.. toctree::\n :maxdepth: 2\n\n logging\n config\n caching\n multi_level_columns\n pric"
},
{
"path": "doc/source/advanced/logging.rst",
"chars": 268,
"preview": "Logging\n=======\n\n`yfinance` uses the `logging` module to handle messages. By default, only errors are logged.\n\nIf debugg"
},
{
"path": "doc/source/advanced/multi_level_columns.rst",
"chars": 636,
"preview": "************************\nMulti-Level Column Index\n************************\n\nThe following answer on Stack Overflow is fo"
},
{
"path": "doc/source/advanced/price_repair.rst",
"chars": 9541,
"preview": "************\nPrice Repair\n************\n\nThe new argument ``repair=True`` in ``history()`` and ``download()`` will attemp"
},
{
"path": "doc/source/conf.py",
"chars": 1662,
"preview": "import os\nimport sys\nsys.path.insert(0, os.path.abspath('../..')) \n\n# Configuration file for the Sphinx documentation bu"
},
{
"path": "doc/source/development/code.rst",
"chars": 2952,
"preview": "****\nCode\n****\n\nTo support rapid development without breaking stable versions, this project uses a two-layer branch mode"
},
{
"path": "doc/source/development/documentation.rst",
"chars": 1720,
"preview": "*************\nDocumentation\n*************\n\n.. contents:: Documentation:\n :local:\n\nAbout documentation\n----------------"
},
{
"path": "doc/source/development/index.rst",
"chars": 213,
"preview": "===========\nDevelopment\n===========\n\nyfinance relies on the community to investigate bugs and contribute code. Here's ho"
},
{
"path": "doc/source/development/running.rst",
"chars": 1334,
"preview": "Running a branch\n================\n\nWith PIP\n--------\n\n.. code-block:: bash\n\n pip install git+https://github.com/{user}"
},
{
"path": "doc/source/development/testing.rst",
"chars": 918,
"preview": "Unit Tests\n----------\n\nTests are written using Python's `unittest` module. Here are some ways to run tests:\n\n- **Ru"
},
{
"path": "doc/source/index.rst",
"chars": 1802,
"preview": "yfinance documentation\n======================\n\nDownload Market Data from Yahoo! Finance's API\n--------------------------"
},
{
"path": "doc/source/reference/examples/calendars.py",
"chars": 1155,
"preview": "import yfinance as yf\nfrom datetime import datetime, timedelta\n\n# Default init (today + 7 days)\ncalendar = yf.Calendars("
},
{
"path": "doc/source/reference/examples/download.py",
"chars": 66,
"preview": "import yfinance as yf\ndata = yf.download(\"SPY AAPL\", period=\"1mo\")"
},
{
"path": "doc/source/reference/examples/funds_data.py",
"chars": 335,
"preview": "import yfinance as yf\nspy = yf.Ticker('SPY')\ndata = spy.funds_data\n\n# show fund description\ndata.description\n\n# show ope"
},
{
"path": "doc/source/reference/examples/live_async.py",
"chars": 568,
"preview": "import asyncio\nimport yfinance as yf\n\n# define your message callback\ndef message_handler(message):\n print(\"Received m"
},
{
"path": "doc/source/reference/examples/live_sync.py",
"chars": 456,
"preview": "import yfinance as yf\n\n# define your message callback\ndef message_handler(message):\n print(\"Received message:\", messa"
},
{
"path": "doc/source/reference/examples/lookup.py",
"chars": 839,
"preview": "import yfinance as yf\n\n# Get All\nall = yf.Lookup(\"AAPL\").all\nall = yf.Lookup(\"AAPL\").get_all(count=100)\n\n# Get Stocks\nst"
},
{
"path": "doc/source/reference/examples/market.py",
"chars": 101,
"preview": "import yfinance as yf\n\nEUROPE = yf.Market(\"EUROPE\")\n\nstatus = EUROPE.status\nsummary = EUROPE.summary\n"
},
{
"path": "doc/source/reference/examples/proxy.py",
"chars": 385,
"preview": "import yfinance as yf\n\nmsft = yf.Ticker(\"MSFT\")\n\nmsft.history(..., proxy=\"PROXY_SERVER\")\nmsft.get_actions(proxy=\"PROXY_S"
},
{
"path": "doc/source/reference/examples/search.py",
"chars": 254,
"preview": "import yfinance as yf\n\n# get list of quotes\nquotes = yf.Search(\"AAPL\", max_results=10).quotes\n\n# get list of news\nnews ="
},
{
"path": "doc/source/reference/examples/sector_industry.py",
"chars": 428,
"preview": "import yfinance as yf\n\ntech = yf.Sector('technology')\nsoftware = yf.Industry('software-infrastructure')\n\n# Common inform"
},
{
"path": "doc/source/reference/examples/sector_industry_ticker.py",
"chars": 312,
"preview": "import yfinance as yf\n# Ticker to Sector and Industry\nmsft = yf.Ticker('MSFT')\ntech = yf.Sector(msft.info.get('sectorKey"
},
{
"path": "doc/source/reference/examples/ticker.py",
"chars": 324,
"preview": "import yfinance as yf\n\ndat = yf.Ticker(\"MSFT\")\n\n# get historical market data\ndat.history(period='1mo')\n\n# options\ndat.op"
},
{
"path": "doc/source/reference/examples/tickers.py",
"chars": 235,
"preview": "import yfinance as yf\n\ntickers = yf.Tickers('msft aapl goog')\n\n# access each ticker using (example)\ntickers.tickers['MSF"
},
{
"path": "doc/source/reference/index.rst",
"chars": 2127,
"preview": "=============\nAPI Reference\n=============\n\nOverview\n--------\n\nThe `yfinance` package provides easy access to Yahoo! Fina"
},
{
"path": "doc/source/reference/yfinance.analysis.rst",
"chars": 1181,
"preview": "===================\nAnalysis & Holdings\n===================\n\n.. currentmodule:: yfinance.Ticker\n\nAnalysis\n--------\n\n.. a"
},
{
"path": "doc/source/reference/yfinance.calendars.rst",
"chars": 354,
"preview": "=====================\nCalendars\n=====================\n\n.. currentmodule:: yfinance\n\n\nClass\n------------\nThe `Calendars` "
},
{
"path": "doc/source/reference/yfinance.financials.rst",
"chars": 423,
"preview": "==========\nFinancials\n==========\n\n.. currentmodule:: yfinance.Ticker\n\n.. autosummary::\n :toctree: api/\n :recursive:\n"
},
{
"path": "doc/source/reference/yfinance.functions.rst",
"chars": 615,
"preview": "=========================\nFunctions and Utilities\n=========================\n\n.. currentmodule:: yfinance\n \nDownload Ma"
},
{
"path": "doc/source/reference/yfinance.funds_data.rst",
"chars": 169,
"preview": "====================\n`FundsData` class\n====================\n\n.. currentmodule:: yfinance.scrapers.funds\n\n.. autosummary:"
},
{
"path": "doc/source/reference/yfinance.market.rst",
"chars": 491,
"preview": "=====================\nMarket\n=====================\n\n.. currentmodule:: yfinance\n\n\nClass\n------------\nThe `Market` class,"
},
{
"path": "doc/source/reference/yfinance.price_history.rst",
"chars": 169,
"preview": "====================\n`PriceHistory` class\n====================\n\n.. currentmodule:: yfinance.scrapers.history\n\n.. autocla"
},
{
"path": "doc/source/reference/yfinance.screener.rst",
"chars": 779,
"preview": "=========================\nScreener & Query\n=========================\n\n.. currentmodule:: yfinance\n\nQuery Market Data\n~~~"
},
{
"path": "doc/source/reference/yfinance.search.rst",
"chars": 646,
"preview": "=====================\nSearch & Lookup\n=====================\n\n.. currentmodule:: yfinance\n\n\nClass\n------------\nThe `Searc"
},
{
"path": "doc/source/reference/yfinance.sector_industry.rst",
"chars": 693,
"preview": "=======================\nSector and Industry\n=======================\n\n.. currentmodule:: yfinance\n\nSector class\n---------"
},
{
"path": "doc/source/reference/yfinance.stock.rst",
"chars": 649,
"preview": "=====\nStock\n=====\n\n.. currentmodule:: yfinance.Ticker\n\nTicker stock methods\n--------------------\n\n.. autosummary::\n :t"
},
{
"path": "doc/source/reference/yfinance.ticker_tickers.rst",
"chars": 1027,
"preview": "=====================\nTicker and Tickers\n=====================\n\n.. currentmodule:: yfinance\n\n\nClass\n------------\nThe `Ti"
},
{
"path": "doc/source/reference/yfinance.websocket.rst",
"chars": 1101,
"preview": "=====================\nWebSocket\n=====================\n\n.. currentmodule:: yfinance\n\nThe `WebSocket` module allows you to"
},
{
"path": "meta.yaml",
"chars": 1568,
"preview": "{% set name = \"yfinance\" %}\n{% set version = \"1.2.0\" %}\n\npackage:\n name: \"{{ name|lower }}\"\n version: \"{{ version }}\"\n"
},
{
"path": "pyrightconfig.json",
"chars": 510,
"preview": "{\n \"typeCheckingMode\": \"basic\",\n \"reportGeneralTypeIssues\": \"warning\",\n \"reportArgumentType\": \"warning\",\n \"r"
},
{
"path": "requirements.txt",
"chars": 322,
"preview": "pandas>=1.3.0\nnumpy>=1.16.5\nrequests>=2.31\nmultitasking>=0.0.7\nplatformdirs>=2.0.0\npytz>=2022.5\nfrozendict>=2.3.4\nbeauti"
},
{
"path": "setup.cfg",
"chars": 252,
"preview": "[bdist_wheel]\n# This flag says that the code is written to work on both Python 2 and Python\n# 3. If at all possible, it "
},
{
"path": "setup.py",
"chars": 3133,
"preview": "#!/usr/bin/env python\n# -*- coding: UTF-8 -*-\n#\n# yfinance - market data downloader\n# https://github.com/ranaroussi/yfin"
},
{
"path": "tests/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "tests/context.py",
"chars": 1738,
"preview": "# -*- coding: utf-8 -*-\n\nimport platformdirs as _ad\nimport datetime as _dt\nimport sys\nimport os\nimport yfinance\n# from r"
},
{
"path": "tests/data/1398-HK-1d-bad-div-fixed.csv",
"chars": 90540,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Repaired?\n2022-01-03 00:00:00+08:00,4.4499998092651"
},
{
"path": "tests/data/1398-HK-1d-bad-div.csv",
"chars": 87091,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-01-03 00:00:00+08:00,4.449999809265137,4.44999"
},
{
"path": "tests/data/3988-HK-1d-bad-div-fixed.csv",
"chars": 91206,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Repaired?\n2022-01-03 00:00:00+08:00,2.8299999237060"
},
{
"path": "tests/data/3988-HK-1d-bad-div.csv",
"chars": 87857,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-01-03 00:00:00+08:00,2.8299999237060547,2.8399"
},
{
"path": "tests/data/4063-T-1d-bad-div-fixed.csv",
"chars": 60659,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Repaired?\n2022-01-04 00:00:00+09:00,4050.0,4134.0,4"
},
{
"path": "tests/data/4063-T-1d-bad-div.csv",
"chars": 56649,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-01-04 00:00:00+09:00,4050.0,4134.0,4022.0,4131"
},
{
"path": "tests/data/4063-T-1d-bad-stock-split-fixed.csv",
"chars": 1536,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2023-04-14 00:00:00+09:00,4126,4130,4055,4129,4129,7459"
},
{
"path": "tests/data/4063-T-1d-bad-stock-split.csv",
"chars": 1580,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2023-04-14 00:00:00+09:00,4126,4130,4055,4129,4129,7459"
},
{
"path": "tests/data/8TRA-DE-1d-missing-div-adjust-fixed.csv",
"chars": 634,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2023-05-30 00:00:00+02:00,19.5900001525879,19.799999237"
},
{
"path": "tests/data/8TRA-DE-1d-missing-div-adjust.csv",
"chars": 693,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2023-05-30 00:00:00+02:00,19.59000015258789,19.79999923"
},
{
"path": "tests/data/ABDP-L-1d-bad-div-fixed.csv",
"chars": 63680,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Repaired?\n2022-01-04 00:00:00+00:00,17.7,18.0,16.8,"
},
{
"path": "tests/data/ABDP-L-1d-bad-div.csv",
"chars": 59661,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-01-04 00:00:00+00:00,17.7,18.0,16.8,17.25,17.1"
},
{
"path": "tests/data/ADIG-L-1d-bad-div-fixed.csv",
"chars": 82504,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Repaired?\n2022-01-04 00:00:00+00:00,1.02,1.02,1.0,1"
},
{
"path": "tests/data/ADIG-L-1d-bad-div.csv",
"chars": 78806,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-01-04 00:00:00+00:00,1.02,1.02,1.0,1.0025,0.99"
},
{
"path": "tests/data/AET-L-1d-100x-error-fixed.csv",
"chars": 2761,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-06-06 00:00:00+01:00,14.5500004291534,14.550000429"
},
{
"path": "tests/data/AET-L-1d-100x-error.csv",
"chars": 3153,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-06-06 00:00:00+01:00,0.14550000429153442,0.1455000"
},
{
"path": "tests/data/ALPHA-PA-1d-bad-stock-split-fixed.csv",
"chars": 2586,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2023-04-20 00:00:00+02:00,3,3,2,3,3,2076,0,0\n2023-04-21"
},
{
"path": "tests/data/ALPHA-PA-1d-bad-stock-split.csv",
"chars": 3023,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2023-04-20 00:00:00+02:00,3.0,3.0,2.0,3.0,3.0,2076,0.0,"
},
{
"path": "tests/data/AV-L-1wk-bad-stock-split-fixed.csv",
"chars": 9647,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2021-12-13 00:00:00+00:00,518.421020507813,535,515,530."
},
{
"path": "tests/data/AV-L-1wk-bad-stock-split.csv",
"chars": 10473,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2021-12-13 00:00:00+00:00,518.4210205078125,535.0,515.0"
},
{
"path": "tests/data/CALM-1d-no-bad-divs.csv",
"chars": 85588,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-01-03 00:00:00-05:00,37.029998779296875,37.759"
},
{
"path": "tests/data/CLC-L-1d-bad-div-fixed.csv",
"chars": 87168,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Capital Gains,Repaired?\n2022-01-04 00:00:00+00:00,0"
},
{
"path": "tests/data/CLC-L-1d-bad-div.csv",
"chars": 83561,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Capital Gains\n2022-01-04 00:00:00+00:00,0.615550003"
},
{
"path": "tests/data/CNE-L-1d-bad-stock-split-fixed.csv",
"chars": 1066,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2023-05-18 00:00:00+01:00,193.220001220703,200.83999633"
},
{
"path": "tests/data/CNE-L-1d-bad-stock-split.csv",
"chars": 1282,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2023-05-18 00:00:00+01:00,193.220001220703,200.83999633"
},
{
"path": "tests/data/DEX-AX-1d-bad-stock-split-fixed.csv",
"chars": 2876,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2023-05-31 00:00:00+10:00,0.120290003716946,0.120290003"
},
{
"path": "tests/data/DEX-AX-1d-bad-stock-split.csv",
"chars": 2951,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2023-05-31 00:00:00+10:00,0.120290003716946,0.120290003"
},
{
"path": "tests/data/DODFX-1d-cg-double-count-fixed.csv",
"chars": 59040,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Capital Gains\n2024-01-10 00:00:00-05:00,12.147500038147"
},
{
"path": "tests/data/DODFX-1d-cg-double-count.csv",
"chars": 59033,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Capital Gains\n2024-01-10 00:00:00-05:00,12.147500038147"
},
{
"path": "tests/data/ELCO-L-1d-bad-div-fixed.csv",
"chars": 70833,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Repaired?\n2022-01-04 00:00:00+00:00,0.92,0.92699996"
},
{
"path": "tests/data/ELCO-L-1d-bad-div.csv",
"chars": 66813,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-01-04 00:00:00+00:00,0.92,0.9269999694824219,0"
},
{
"path": "tests/data/EWG-1d-no-bad-divs.csv",
"chars": 90981,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Capital Gains\n2022-01-03 00:00:00-05:00,33.11999893"
},
{
"path": "tests/data/HSBK-IL-1d-no-bad-divs.csv",
"chars": 83616,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-01-04 00:00:00+00:00,16.799999237060547,17.059"
},
{
"path": "tests/data/IBE-MC-1d-no-bad-divs.csv",
"chars": 90204,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-01-03 00:00:00+01:00,10.380000114440918,10.505"
},
{
"path": "tests/data/JENYX-1d-cg-double-count-fixed.csv",
"chars": 147010,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Capital Gains\n2021-01-11 00:00:00-05:00,54.950000762939"
},
{
"path": "tests/data/JENYX-1d-cg-double-count.csv",
"chars": 163195,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Capital Gains\n2021-01-11 00:00:00-05:00,54.950000762939"
},
{
"path": "tests/data/KAP-IL-1d-bad-div-fixed.csv",
"chars": 83278,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Repaired?\n2022-01-04 00:00:00+00:00,39.450000762939"
},
{
"path": "tests/data/KAP-IL-1d-bad-div.csv",
"chars": 79393,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-01-04 00:00:00+00:00,39.45000076293945,40.8499"
},
{
"path": "tests/data/KEN-TA-1d-bad-div-fixed.csv",
"chars": 61171,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Repaired?\n2022-01-02 00:00:00+02:00,162.0,162.3,160"
},
{
"path": "tests/data/KEN-TA-1d-bad-div.csv",
"chars": 54419,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-01-02 00:00:00+02:00,162.0,162.3,160.3,160.6,1"
},
{
"path": "tests/data/KME-MI-1d-bad-div-fixed.csv",
"chars": 94558,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Repaired?\n2022-01-03 00:00:00+01:00,0.5040000081062"
},
{
"path": "tests/data/KME-MI-1d-bad-div.csv",
"chars": 90903,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-01-03 00:00:00+01:00,0.5040000081062317,0.5220"
},
{
"path": "tests/data/KMR-L-1d-no-bad-divs.csv",
"chars": 59642,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-01-04 00:00:00+00:00,4.61,4.7,4.52209991455078"
},
{
"path": "tests/data/LA-V-1d-bad-stock-split-fixed.csv",
"chars": 3894,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2020-09-30 00:00:00-04:00,4.40000009536743,4.4499998092"
},
{
"path": "tests/data/LA-V-1d-bad-stock-split.csv",
"chars": 3899,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2020-09-30 00:00:00-04:00,4.40000009536743,4.4499998092"
},
{
"path": "tests/data/LSC-L-1d-bad-div-fixed.csv",
"chars": 60608,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Repaired?\n2022-01-04 00:00:00+00:00,0.27,0.28,0.28,"
},
{
"path": "tests/data/LSC-L-1d-bad-div.csv",
"chars": 57472,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-01-04 00:00:00+00:00,0.27,0.28,0.28,0.275,0.01"
},
{
"path": "tests/data/MOB-ST-1d-bad-stock-split-fixed.csv",
"chars": 1640,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2023-05-08 00:00:00+02:00,24.8999996185303,24.950000762"
},
{
"path": "tests/data/MOB-ST-1d-bad-stock-split.csv",
"chars": 1822,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2023-05-08 00:00:00+02:00,24.899999618530273,24.9500007"
},
{
"path": "tests/data/NVT-L-1d-bad-div-fixed.csv",
"chars": 82249,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Capital Gains,Repaired?\n2022-01-04 00:00:00+00:00,0"
},
{
"path": "tests/data/NVT-L-1d-bad-div.csv",
"chars": 78408,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Capital Gains\n2022-01-04 00:00:00+00:00,0.6875,0.69"
},
{
"path": "tests/data/PSH-L-1d-bad-div-fixed.csv",
"chars": 66209,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Repaired?\n2022-01-04 00:00:00+00:00,29.95,30.650000"
},
{
"path": "tests/data/PSH-L-1d-bad-div.csv",
"chars": 62207,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-01-04 00:00:00+00:00,29.95,30.650000000000002,"
},
{
"path": "tests/data/REL-L-1d-bad-div-fixed.csv",
"chars": 66419,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Repaired?\n2022-01-04 00:00:00+00:00,23.95,24.0,23.6"
},
{
"path": "tests/data/REL-L-1d-bad-div.csv",
"chars": 61590,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-01-04 00:00:00+00:00,23.95,24.0,23.64,23.7,22."
},
{
"path": "tests/data/RGL-L-1d-bad-div-fixed.csv",
"chars": 89978,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Repaired?\n2022-01-04 00:00:00+00:00,6.0708831787109"
},
{
"path": "tests/data/RGL-L-1d-bad-div.csv",
"chars": 86264,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-01-04 00:00:00+00:00,6.070883178710938,6.07088"
},
{
"path": "tests/data/SAND-1d-bad-div-fixed.csv",
"chars": 89135,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Repaired?\n2022-01-03 00:00:00-05:00,6.1399998664855"
},
{
"path": "tests/data/SAND-1d-bad-div.csv",
"chars": 85651,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-01-03 00:00:00-05:00,6.139999866485596,6.15999"
},
{
"path": "tests/data/SCR-TO-1d-bad-div-fixed.csv",
"chars": 89100,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Repaired?\n2022-01-04 00:00:00-05:00,3.8299999237060"
},
{
"path": "tests/data/SCR-TO-1d-bad-div.csv",
"chars": 93334,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-01-04 00:00:00-05:00,3.8299999237060547,4.2699"
},
{
"path": "tests/data/SERE-L-1d-bad-div-fixed.csv",
"chars": 79134,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Repaired?\n2022-01-04 00:00:00+00:00,1.1300000000000"
},
{
"path": "tests/data/SERE-L-1d-bad-div.csv",
"chars": 75730,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-01-04 00:00:00+00:00,1.1300000000000001,1.1300"
},
{
"path": "tests/data/SPM-MI-1d-bad-stock-split-fixed.csv",
"chars": 2709,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-06-01 00:00:00+02:00,5.72999992370606,5.7819999694"
},
{
"path": "tests/data/SPM-MI-1d-bad-stock-split.csv",
"chars": 2966,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-06-01 00:00:00+02:00,57.29999923706055,57.81999969"
},
{
"path": "tests/data/SSW-JO-1d-100x-error-fixed.csv",
"chars": 2103,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2023-06-09 00:00:00+02:00,34.7000,34.7100,33.2400,33.62"
},
{
"path": "tests/data/SSW-JO-1d-100x-error.csv",
"chars": 2082,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2023-06-09 00:00:00+02:00,34.700001,34.709999,33.240002"
},
{
"path": "tests/data/TEM-L-1d-bad-div-fixed.csv",
"chars": 85252,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Repaired?\n2022-01-04 00:00:00+00:00,1.79,1.80399993"
},
{
"path": "tests/data/TEM-L-1d-bad-div.csv",
"chars": 81788,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-01-04 00:00:00+00:00,1.79,1.8039999389648438,1"
},
{
"path": "tests/data/TENT-L-1d-bad-div-fixed.csv",
"chars": 74033,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Repaired?\n2022-01-04 00:00:00+00:00,1.0,1.008199996"
},
{
"path": "tests/data/TENT-L-1d-bad-div.csv",
"chars": 70491,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-01-04 00:00:00+00:00,1.0,1.0081999969482422,0."
},
{
"path": "tests/data/TEP-PA-1d-bad-div-fixed.csv",
"chars": 86271,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Repaired?\n2022-01-03 00:00:00+01:00,395.70001220703"
},
{
"path": "tests/data/TEP-PA-1d-bad-div.csv",
"chars": 82457,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-01-03 00:00:00+01:00,395.70001220703125,400.10"
},
{
"path": "tests/data/TISG-MI-1d-no-bad-divs.csv",
"chars": 73578,
"preview": "Datetime,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits\n2022-05-12 00:00:00+02:00,5.309999942779541,5.61000"
},
{
"path": "tests/data/VWILX-1d-cg-double-count-fixed.csv",
"chars": 58407,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Capital Gains\n2024-01-10 00:00:00-05:00,100.02999877929"
},
{
"path": "tests/data/VWILX-1d-cg-double-count.csv",
"chars": 65677,
"preview": "Date,Open,High,Low,Close,Adj Close,Volume,Dividends,Stock Splits,Capital Gains\n2024-01-10 00:00:00-05:00,100.02999877929"
},
{
"path": "tests/test_cache.py",
"chars": 1241,
"preview": "\"\"\"\nTests for cache\n\nTo run all tests in suite from commandline:\n python -m unittest tests.cache\n\nSpecific test class:"
},
{
"path": "tests/test_cache_noperms.py",
"chars": 1502,
"preview": "\"\"\"\nTests for cache\n\nTo run all tests in suite from commandline:\n python -m unittest tests.cache\n\nSpecific test class:"
},
{
"path": "tests/test_calendars.py",
"chars": 2011,
"preview": "from datetime import datetime, timedelta, timezone\nimport unittest\n\nimport pandas as pd\n\nfrom tests.context import yfina"
},
{
"path": "tests/test_live.py",
"chars": 1439,
"preview": "import unittest\nfrom unittest.mock import Mock\n\nfrom yfinance.live import BaseWebSocket\n\n\nclass TestWebSocket(unittest.T"
},
{
"path": "tests/test_lookup.py",
"chars": 1946,
"preview": "import unittest\n\nimport pandas as pd\n\nfrom tests.context import yfinance as yf, session_gbl\n\n\nclass TestLookup(unittest."
},
{
"path": "tests/test_price_repair.py",
"chars": 33475,
"preview": "from tests.context import yfinance as yf\nfrom tests.context import session_gbl\n\nimport unittest\n\nimport os\nimport dateti"
},
{
"path": "tests/test_prices.py",
"chars": 21593,
"preview": "from tests.context import yfinance as yf\nfrom tests.context import session_gbl\n\nimport unittest\nimport socket\n\nimport da"
},
{
"path": "tests/test_screener.py",
"chars": 1279,
"preview": "import unittest\nfrom unittest.mock import patch, MagicMock\nfrom yfinance.screener.screener import screen\nfrom yfinance.s"
},
{
"path": "tests/test_search.py",
"chars": 1336,
"preview": "import unittest\n\nfrom tests.context import yfinance as yf\n\n\nclass TestSearch(unittest.TestCase):\n def test_invalid_qu"
},
{
"path": "tests/test_ticker.py",
"chars": 51617,
"preview": "\"\"\"\nTests for Ticker\n\nTo run all tests in suite from commandline:\n python -m unittest tests.ticker\n\nSpecific test clas"
},
{
"path": "tests/test_utils.py",
"chars": 8459,
"preview": "\"\"\"\nTests for utils\n\nTo run all tests in suite from commandline:\n python -m unittest tests.utils\n\nSpecific test class:"
},
{
"path": "yfinance/__init__.py",
"chars": 2218,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n#\n# yfinance - market data downloader\n# https://github.com/ranaroussi/yfin"
},
{
"path": "yfinance/base.py",
"chars": 28805,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n#\n# yfinance - market data downloader\n# https://github.com/ranaroussi/yfin"
},
{
"path": "yfinance/cache.py",
"chars": 17765,
"preview": "import peewee as _peewee\nfrom threading import Lock\nimport os as _os\nimport platformdirs as _ad\nimport atexit as _atexit"
},
{
"path": "yfinance/calendars.py",
"chars": 19932,
"preview": "from __future__ import annotations # Just in case\nimport json\nfrom typing import Any, Optional, List, Union, Dict\nimport"
},
{
"path": "yfinance/config.py",
"chars": 1388,
"preview": "import json\n\n\nclass NestedConfig:\n def __init__(self, name, data):\n self.__dict__['name'] = name\n self."
},
{
"path": "yfinance/const.py",
"chars": 37605,
"preview": "_QUERY1_URL_ = 'https://query1.finance.yahoo.com'\n_BASE_URL_ = 'https://query2.finance.yahoo.com'\n_ROOT_URL_ = 'https://"
},
{
"path": "yfinance/data.py",
"chars": 20785,
"preview": "import functools\nfrom functools import lru_cache\nimport socket\nimport time as _time\n\nfrom curl_cffi import requests\nfrom"
},
{
"path": "yfinance/domain/__init__.py",
"chars": 112,
"preview": "# domain/__init__.py\nfrom .sector import Sector\nfrom .industry import Industry\n\n__all__ = ['Sector', 'Industry']"
},
{
"path": "yfinance/domain/domain.py",
"chars": 6585,
"preview": "from abc import ABC, abstractmethod\nimport pandas as _pd\nfrom typing import Dict, List, Optional\n\nfrom ..const import _Q"
},
{
"path": "yfinance/domain/industry.py",
"chars": 5347,
"preview": "from __future__ import print_function\n\nimport pandas as _pd\nfrom typing import Dict, Optional\n\nfrom .. import utils\nfrom"
},
{
"path": "yfinance/domain/market.py",
"chars": 3706,
"preview": "import datetime as dt\nimport json as _json\n\nfrom ..config import YfConfig\nfrom ..const import _QUERY1_URL_\nfrom ..data i"
},
{
"path": "yfinance/domain/sector.py",
"chars": 5368,
"preview": "from __future__ import print_function\n\nimport pandas as _pd\nfrom typing import Dict, Optional\n\nfrom ..config import YfCo"
},
{
"path": "yfinance/exceptions.py",
"chars": 1733,
"preview": "class YFException(Exception):\n def __init__(self, description=\"\"):\n super().__init__(description)\n\n\nclass YFDa"
},
{
"path": "yfinance/live.py",
"chars": 12696,
"preview": "import asyncio\nimport base64\nimport json\nfrom typing import List, Optional, Callable, Union\n\nfrom websockets.sync.client"
},
{
"path": "yfinance/lookup.py",
"chars": 7037,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n#\n# yfinance - market data downloader\n# https://github.com/ranaroussi/yfin"
},
{
"path": "yfinance/multi.py",
"chars": 11008,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n#\n# yfinance - market data downloader\n# https://github.com/ranaroussi/yfin"
},
{
"path": "yfinance/pricing.proto",
"chars": 939,
"preview": "syntax = \"proto3\";\n\nmessage PricingData {\n string id = 1;\n float price = 2;\n sint64 time = 3;\n string curren"
},
{
"path": "yfinance/pricing_pb2.py",
"chars": 2499,
"preview": "# -*- coding: utf-8 -*-\n# Generated by the protocol buffer compiler. DO NOT EDIT!\n# source: pricing.proto\n\"\"\"Generated "
},
{
"path": "yfinance/scrapers/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "yfinance/scrapers/analysis.py",
"chars": 7467,
"preview": "import curl_cffi\nimport pandas as pd\n\nfrom yfinance import utils\nfrom yfinance.config import YfConfig\nfrom yfinance.cons"
},
{
"path": "yfinance/scrapers/fundamentals.py",
"chars": 6176,
"preview": "import datetime\nimport json\nimport warnings\n\nimport pandas as pd\n\nfrom yfinance import utils, const\nfrom yfinance.config"
},
{
"path": "yfinance/scrapers/funds.py",
"chars": 11762,
"preview": "import pandas as pd\nfrom typing import Dict, Optional\n\nfrom yfinance import utils\nfrom yfinance.config import YfConfig\nf"
},
{
"path": "yfinance/scrapers/history.py",
"chars": 162211,
"preview": "from curl_cffi import requests\nfrom math import isclose\nimport bisect\nimport datetime as _datetime\nimport dateutil as _d"
},
{
"path": "yfinance/scrapers/holders.py",
"chars": 9606,
"preview": "import curl_cffi\nimport pandas as pd\n\nfrom yfinance import utils\nfrom yfinance.config import YfConfig\nfrom yfinance.cons"
},
{
"path": "yfinance/scrapers/quote.py",
"chars": 29690,
"preview": "import curl_cffi\nimport datetime\nimport json\nimport numpy as _np\nimport pandas as pd\n\nfrom yfinance import utils\nfrom yf"
},
{
"path": "yfinance/scrapers/yahoo-keys.txt",
"chars": 1032,
"preview": "daf93e37cbf219cd4c1f3f74ec4551265ec5565b99e8c9322dccd6872941cf13c818cbb88cba6f530e643b4e2329b17ec7161f4502ce6a02bb0dbbe5"
},
{
"path": "yfinance/screener/__init__.py",
"chars": 170,
"preview": "from .query import EquityQuery\nfrom .screener import screen, PREDEFINED_SCREENER_QUERIES\n\n__all__ = ['EquityQuery', 'Fun"
},
{
"path": "yfinance/screener/query.py",
"chars": 9241,
"preview": "from abc import ABC, abstractmethod\nimport numbers\nfrom typing import List, Union, Dict, TypeVar, Tuple\n\nfrom yfinance.c"
},
{
"path": "yfinance/screener/screener.py",
"chars": 11108,
"preview": "import curl_cffi\nfrom typing import Union\nimport warnings\nfrom json import dumps\n\nfrom yfinance.const import _QUERY1_URL"
},
{
"path": "yfinance/search.py",
"chars": 5942,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n#\n# yfinance - market data downloader\n# https://github.com/ranaroussi/yfin"
},
{
"path": "yfinance/shared.py",
"chars": 783,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n#\n# yfinance - market data downloader\n# https://github.com/ranaroussi/yfin"
},
{
"path": "yfinance/ticker.py",
"chars": 9203,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n#\n# yfinance - market data downloader\n# https://github.com/ranaroussi/yfin"
},
{
"path": "yfinance/tickers.py",
"chars": 3485,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n#\n# yfinance - market data downloader\n# https://github.com/ranaroussi/yfin"
},
{
"path": "yfinance/utils.py",
"chars": 45590,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n#\n# yfinance - market data downloader\n# https://github.com/ranaroussi/yfin"
},
{
"path": "yfinance/version.py",
"chars": 18,
"preview": "version = \"1.2.0\"\n"
}
]
About this extraction
This page contains the full source code of the ranaroussi/yfinance GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 190 files (4.8 MB), approximately 1.3M tokens, and a symbol index with 790 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.