Full Code of ranaroussi/yfinance for AI

main 4013a4fd745f cached
190 files
4.8 MB
1.3M tokens
790 symbols
1 requests
Download .txt
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)

---

![Star History Chart](https://api.star-history.com/svg?repos=ranaroussi/yfinance)

---

### 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&apos;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
Download .txt
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
Download .txt
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&apos;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.

Copied to clipboard!