diff --git a/$null b/$null deleted file mode 100644 index 93d5ece6..00000000 --- a/$null +++ /dev/null @@ -1,2 +0,0 @@ -The filename, directory name, or volume label syntax is incorrect. -Error occurred while processing: https://files.pythonhosted.org/packages/95/6d/60b88a0334a8c6a5be114ed2c46c8f3e164127d0eccd9ff99b50773f2b20/pandas_ta-0.4.71b0.tar.gz. diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 90c7b22c..00000000 Binary files a/.DS_Store and /dev/null differ diff --git a/.gitignore b/.gitignore index 92d7fcdc..dce309ec 100644 --- a/.gitignore +++ b/.gitignore @@ -49,6 +49,9 @@ BenchmarkDotNet.Artifacts/ # Temporary files and agent workspace temp/ +temp_pandas_ta/ +temp_decompile/ +Invoke-WebRequest/ .temp/ *.tmp *.temp @@ -78,4 +81,15 @@ plans/ # SonarLint IDE plugin .sonarlint/ -.obsidian/ \ No newline at end of file +.obsidian/ + +# macOS +.DS_Store +**/.DS_Store + +# Python cache +__pycache__/ +.pytest_cache/ + +# PowerShell accidents +$null diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/.github/workflows/test.yml b/temp_pandas_ta/pandas_ta-0.4.71b0/.github/workflows/test.yml deleted file mode 100644 index 3af85728..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/.github/workflows/test.yml +++ /dev/null @@ -1,68 +0,0 @@ -on: - push: - branches: - - main - - development - pull_request: - branches: - - main - - development - workflow_dispatch: - -jobs: - test: - if: github.actor != 'dependabot[bot]' && github.ref != 'refs/heads/master' - runs-on: ${{ matrix.os }} - strategy: - # If failure occurs on one OS, it is still relevant to see which others may work - fail-fast: false - matrix: - python-version: ["3.12"] - os: [ubuntu-latest] - - steps: - - name: Github Actor Info - run: | - echo "Workflow triggered by github actor ${{ github.actor }}" - - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python-version }} - - - name: Checkout - uses: actions/checkout@v3 - - - name: Activate Cache for pip - uses: actions/cache@v3 - id: cache-python-env - with: - path: ${{ env.pythonLocation }} - key: "v3-${{ env.pythonLocation }}-${{ hashFiles('setup.py') }}" - - - name: Update pip and friends - run: | - python -m pip install --upgrade pip setuptools wheel - if: steps.cache-python-env.outputs.cache-hit != 'true' - - - name: Install TA-lib - # Inspiration for this step is taken from here: https://github.com/mrjbq7/ta-lib/blob/master/.github/workflows/tests.yml - shell: bash - run: | - wget https://raw.githubusercontent.com/mrjbq7/ta-lib/master/tools/build_talib_from_source.bash - chmod +x build_talib_from_source.bash - ./build_talib_from_source.bash $DEPS_PATH - python -m pip install TA-lib - env: - DEPS_PATH: ${{ github.workspace }}/dependencies - TA_INCLUDE_PATH: ${{ github.workspace }}/dependencies/include - TA_LIBRARY_PATH: ${{ github.workspace }}/dependencies/lib - - - name: Install pandas-ta - run: | - python -m pip install ".[test]" - - - name: Run tests - shell: bash - run: | - make tests diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/.gitignore b/temp_pandas_ta/pandas_ta-0.4.71b0/.gitignore deleted file mode 100644 index 61b4b0e1..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/.gitignore +++ /dev/null @@ -1,147 +0,0 @@ -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - - -.DS_Store - -# Distribution / packaging -.pypirc -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -.hypothesis/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# pyenv -.python-version - -# celery beat schedule file -celerybeat-schedule - -# SageMath parsed files -*.sage.py - -# pycharm -.idea/* - -# pytest -.pytest_cache/ - -# pytest debug logs generated via --debug -pytestdebug.log - -# dotenv -.env - -# virtualenv -.venv -venv/ -ENV/ -env/** -.env*/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mypy -.mypy_cache/ - -# vscode settings -.vscode/** - -# zed settings -.zed -.zed/** - -# misc -dev.sh -Dockerfile -flake.nix -flake.lock -Makefile -scripts/ -setup.py* -ta-lib/ -venv.sh -website.tar.gz - -# Data & NB Exclusions -csv/ -# data/ -jnb/ -notes/ - -# mkdocs documentation -all_tests.sh -mkdocs.yml -docs/ -site/ -examples/ - -*.bak diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/CODE_OF_CONDUCT.md b/temp_pandas_ta/pandas_ta-0.4.71b0/CODE_OF_CONDUCT.md deleted file mode 100644 index d01d7560..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,73 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our project and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, sex characteristics, gender identity and expression, -level of experience, education, socio-economic status, nationality, personal -appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment -include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or - advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic - address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in -response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or -reject comments, commits, code, wiki edits, issues, and other contributions -that are not aligned to this Code of Conduct, or to ban temporarily or -permanently any contributor for other behaviors that they deem inappropriate, -threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. Examples of -representing a project or community include using an official project e-mail -address, posting via an official social media account, or acting as an appointed -representative at an online or offline event. Representation of a project may be -further defined and clarified by project maintainers. - -## Guidelines - -Not everyone is familiar with open-source communities or intuitively understands what is acceptable behavior. To assist, the following guidelines and examples provide a quick overview to help you avoid common pitfalls: - -1. Do **not** feel entitled to free software, support, or advice, especially if you are **not** a contributor, member, or business customer. Do **not** expect others to give you status reports as if they work for you or owe you something, even if you've made a donation. Please refrain from using GitHub Issues or other development tools for general discussions, technical support, or personal opinions. - -2. Slow down and **read** the documentation and use the troubleshooting checklists provided to identify the root cause of a problem **before** submitting _invalid_ bug reports, inciting public disputes, or insulting community members in public spaces. Such actions are disruptive and prevent maintainers and contributors from working on features and improvements that benefit users. - -3. Ignorant, reckless, or harsh communication is unacceptable, whether public or private. - -Many issues that new users become upset about in old issue comments have been resolved. If not, rest assured that we are working diligently to improve the software. - -## Enforcement - -We will enforce our community standards as necessary appropriate to the circumstances to protect everyone's well-being if there are instances of abusive, harassing, or otherwise unacceptable behavior. - -Initial warnings may be issued in the form of a snarky comment, especially if you seem to be exhibiting behaviour from Guideline #3 above. For serious cases, we will refer you to this Code of Conduct to prevent any misunderstandings. We also reserve the right to remove rants, personal attacks, spam, and unsolicited advertising from our community forums. - -In addition, we may use technical measures to temporarily or permanently restrict your access to our infrastructure. diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/LICENSE b/temp_pandas_ta/pandas_ta-0.4.71b0/LICENSE deleted file mode 100644 index 564dae29..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2019+ Kevin Johnson - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/PKG-INFO b/temp_pandas_ta/pandas_ta-0.4.71b0/PKG-INFO deleted file mode 100644 index cbba7fc7..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/PKG-INFO +++ /dev/null @@ -1,52 +0,0 @@ -Metadata-Version: 2.4 -Name: pandas-ta -Version: 0.4.71b0 -Summary: A Comprehensive Python 3 Technical Analysis Library with Pandas Dataframe Extension for Quantitative Researchers, Traders, and Investors. -Project-URL: Homepage, https://www.pandas-ta.dev -Project-URL: Documentation, https://www.pandas-ta.dev/api -Project-URL: Repository, https://github.com/twopirllc/pandas-ta -Author-email: Pandas TA Support -License-File: LICENSE -Keywords: ai,dataframe extension,finance,indicators,library,machine learning,pandas,ta,technical analysis,trading -Classifier: Development Status :: 4 - Beta -Classifier: Intended Audience :: Developers -Classifier: Intended Audience :: Financial and Insurance Industry -Classifier: Intended Audience :: Science/Research -Classifier: Natural Language :: English -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python :: 3.12 -Classifier: Topic :: Office/Business :: Financial -Classifier: Topic :: Office/Business :: Financial :: Investment -Classifier: Topic :: Scientific/Engineering -Classifier: Topic :: Scientific/Engineering :: Information Analysis -Requires-Python: >=3.12 -Requires-Dist: numba==0.61.2 -Requires-Dist: numpy>=2.2.6 -Requires-Dist: pandas>=2.3.2 -Requires-Dist: tqdm>=4.67.1 -Description-Content-Type: text/markdown - -

- Pandas TA -

- -# Pandas TA -A popular and comprehensive Technical Analysis Library in Python 3 that leverages [_numba_](http://numba.pydata.org/) and [_numpy_](https://numpy.org/) for accuracy and performance, and [_pandas_](https://pandas.pydata.org/) for simplicity and bulk processing. The library contains more than 150 indicators and utilities as well as 60 Candlestick Patterns when [TA Lib](https://ta-lib.org) is installed. - -
- -![Price Chart](https://www.pandas-ta.dev/assets/images/SPY_Chart.png) -![Volume Chart](https://www.pandas-ta.dev/assets/images/SPY_VOL.png) - -
- -## Details - -* [Getting Started](https://www.pandas-ta.dev/getting-started/installation/) -* [Documentation](https://www.pandas-ta.dev/api/) -* [Support](https://www.pandas-ta.dev/support/) -* [License](https://www.pandas-ta.dev/legal/license/) - -
- -Copyright © 2025 - Pandas TA diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/README.md b/temp_pandas_ta/pandas_ta-0.4.71b0/README.md deleted file mode 100644 index 2b171752..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/README.md +++ /dev/null @@ -1,24 +0,0 @@ -

- Pandas TA -

- -# Pandas TA -A popular and comprehensive Technical Analysis Library in Python 3 that leverages [_numba_](http://numba.pydata.org/) and [_numpy_](https://numpy.org/) for accuracy and performance, and [_pandas_](https://pandas.pydata.org/) for simplicity and bulk processing. The library contains more than 150 indicators and utilities as well as 60 Candlestick Patterns when [TA Lib](https://ta-lib.org) is installed. - -
- -![Price Chart](https://www.pandas-ta.dev/assets/images/SPY_Chart.png) -![Volume Chart](https://www.pandas-ta.dev/assets/images/SPY_VOL.png) - -
- -## Details - -* [Getting Started](https://www.pandas-ta.dev/getting-started/installation/) -* [Documentation](https://www.pandas-ta.dev/api/) -* [Support](https://www.pandas-ta.dev/support/) -* [License](https://www.pandas-ta.dev/legal/license/) - -
- -Copyright © 2025 - Pandas TA diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/__init__.py b/temp_pandas_ta/pandas_ta-0.4.71b0/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/data/ADX_D.csv b/temp_pandas_ta/pandas_ta-0.4.71b0/data/ADX_D.csv deleted file mode 100644 index 6878f664..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/data/ADX_D.csv +++ /dev/null @@ -1,31 +0,0 @@ -,date,high,low,close -0,2020-6-19,11382,11150,11286 -1,2020-6-20,11351,11155,11325 -2,2020-6-21,11355,11225,11238 -3,2020-6-22,11675,11232,11593 -4,2020-6-23,11649,11488,11509 -5,2020-6-24,11553,11110,11233 -6,2020-6-25,11232,10842,11147 -7,2020-6-26,11185,10901,11045 -8,2020-6-27,11051,10791,10913 -9,2020-6-28,11163,10756,10970 -10,2020-6-29,11033,10814,10972 -11,2020-6-30,11004,10882,10903 -12,2020-7-1,11111,10887,11051 -13,2020-7-2,11077,10772,10888 -14,2020-7-3,10920,10821,10837 -15,2020-7-4,10960,10814,10884 -16,2020-7-5,10900,10700,10831 -17,2020-7-6,11102,10796,11065 -18,2020-7-7,11097,10952,10988 -19,2020-7-8,11208,10968,11138 -20,2020-7-9,11149,10906,10961 -21,2020-7-10,11062,10880,11043 -22,2020-7-11,11044,10910,10957 -23,2020-7-12,11061,10915,11036 -24,2020-7-13,11063,10908,11000 -25,2020-7-14,11040,10925,11010 -26,2020-7-15,11017,10955,10975 -27,2020-7-16,11003,10835,10934 -28,2020-7-17,10980,10875,10937 -29,2020-7-18,10990,10894,10905 \ No newline at end of file diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/data/ALT_D.csv b/temp_pandas_ta/pandas_ta-0.4.71b0/data/ALT_D.csv deleted file mode 100644 index 40efdc38..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/data/ALT_D.csv +++ /dev/null @@ -1,248 +0,0 @@ -Date,Open,High,Low,Close,VWAP,Volume -2020-10-26,343.7,344.9,336.7,339.8,341.19,8695206 -2020-10-27,338.3,339.75,331.05,334.05,333.74,9910942 -2020-10-28,335.75,339.85,334.4,335.65,337.29,8984606 -2020-10-29,333.65,340.0,331.15,337.45,335.96,7239961 -2020-10-30,339.25,345.0,338.45,340.7,341.18,11496123 -2020-11-02,341.75,341.75,333.7,334.8,336.22,4831133 -2020-11-03,335.5,339.45,332.65,335.65,336.36,4757798 -2020-11-04,338.0,351.55,337.5,342.95,345.59,15381900 -2020-11-05,347.95,349.0,344.05,345.4,346.41,5602436 -2020-11-06,346.15,349.0,343.4,345.75,344.92,5457793 -2020-11-09,350.0,352.8,347.0,351.95,350.46,7107285 -2020-11-10,350.75,350.75,341.15,342.3,343.63,9049620 -2020-11-11,344.5,347.75,341.5,346.75,344.53,7637879 -2020-11-12,348.0,350.7,344.3,345.55,346.81,5114424 -2020-11-13,344.5,346.25,342.7,344.15,344.04,4727888 -2020-11-14,347.15,347.55,343.1,345.45,345.82,749242 -2020-11-17,347.0,350.5,343.7,348.7,347.99,6653834 -2020-11-18,349.75,352.35,341.8,345.3,345.38,7407808 -2020-11-19,347.7,349.5,341.6,342.6,345.72,11056851 -2020-11-20,343.8,348.5,342.05,346.3,345.96,6181393 -2020-11-23,348.0,357.4,346.0,355.85,352.34,10333347 -2020-11-24,359.0,361.4,355.0,355.5,357.97,10092441 -2020-11-25,357.9,358.8,349.55,350.0,352.95,6812338 -2020-11-26,351.0,356.4,347.2,354.85,352.19,7366370 -2020-11-27,354.85,357.5,347.85,350.5,351.8,12402084 -2020-12-01,352.7,353.9,346.25,352.85,350.99,10693567 -2020-12-02,354.45,360.3,354.2,358.9,357.61,9434077 -2020-12-03,364.0,364.0,358.0,360.3,360.33,10697045 -2020-12-04,361.1,362.4,359.0,360.8,360.69,7427393 -2020-12-07,362.0,362.75,357.5,358.45,359.01,8392383 -2020-12-08,360.3,365.0,358.4,363.7,361.67,11813301 -2020-12-09,367.75,367.75,357.5,359.5,362.22,18137688 -2020-12-10,356.2,358.0,352.75,355.9,355.84,6897397 -2020-12-11,357.4,360.0,352.65,353.5,355.85,5863616 -2020-12-14,353.5,354.55,347.1,349.35,349.28,11501839 -2020-12-15,349.3,353.9,347.5,352.7,351.95,7231781 -2020-12-16,353.9,358.95,353.2,358.4,356.44,6666272 -2020-12-17,358.4,359.25,355.5,356.9,357.27,4165371 -2020-12-18,358.95,365.8,357.5,363.55,362.94,17398081 -2020-12-21,362.5,367.45,348.35,353.95,360.92,9665063 -2020-12-22,354.0,365.7,349.45,364.2,357.14,8186039 -2020-12-23,374.0,387.6,371.7,385.55,379.89,44874433 -2020-12-24,386.45,386.7,378.65,382.2,382.71,12240172 -2020-12-28,383.45,386.4,382.0,382.9,384.06,4725879 -2020-12-29,384.0,390.5,383.1,385.0,387.04,11459126 -2020-12-30,385.0,386.6,382.8,384.4,384.43,7188435 -2020-12-31,381.2,387.6,381.2,386.25,385.2,6394605 -2021-01-01,385.05,390.75,385.05,388.1,388.0,5042336 -2021-01-04,390.0,397.95,387.8,396.4,393.91,9755721 -2021-01-05,394.1,409.8,393.5,406.3,403.28,25156747 -2021-01-06,405.0,417.4,403.3,406.4,410.04,22486300 -2021-01-07,412.25,413.0,403.85,406.75,406.88,12344755 -2021-01-08,407.5,432.65,407.25,430.2,423.56,40993230 -2021-01-11,436.0,451.0,435.0,446.8,444.84,47334018 -2021-01-12,447.95,460.75,442.4,457.7,451.3,22134465 -2021-01-13,461.0,467.45,452.8,459.0,460.7,29190193 -2021-01-14,452.0,466.0,430.0,454.35,450.54,71551807 -2021-01-15,454.75,459.4,436.6,438.55,447.14,25307779 -2021-01-18,441.0,445.0,429.1,431.55,438.58,21510587 -2021-01-19,433.0,439.55,427.7,430.25,432.24,15677790 -2021-01-20,434.0,447.85,433.0,444.95,443.71,24419679 -2021-01-21,451.6,453.45,442.3,445.8,448.46,15911377 -2021-01-22,447.45,452.0,440.45,444.75,445.22,11398812 -2021-01-25,445.15,451.0,435.15,437.25,441.91,7380169 -2021-01-27,438.0,454.75,437.25,446.45,449.19,29590210 -2021-01-28,443.25,448.6,427.3,431.9,434.54,14812435 -2021-01-29,437.4,437.7,415.55,417.9,425.79,15632421 -2021-02-01,416.1,423.8,408.2,421.5,415.3,15081852 -2021-02-02,428.0,435.55,423.65,428.35,427.93,13310498 -2021-02-03,430.2,439.95,430.2,433.5,436.37,9897666 -2021-02-04,433.5,436.9,428.25,429.9,430.85,7193299 -2021-02-05,432.0,433.4,420.55,425.55,424.89,8679026 -2021-02-08,430.35,437.7,426.3,435.3,431.95,12516340 -2021-02-09,440.25,451.75,435.2,439.35,445.17,29474830 -2021-02-10,442.0,444.15,435.0,439.0,438.83,10607735 -2021-02-11,439.0,440.5,433.4,437.0,436.02,9237026 -2021-02-12,440.0,449.2,439.6,442.0,444.59,19280834 -2021-02-15,444.6,444.9,436.8,439.7,440.59,7844877 -2021-02-16,446.0,447.8,433.8,437.55,440.41,12453798 -2021-02-17,435.9,439.0,428.5,430.2,432.63,7390192 -2021-02-18,430.3,436.65,429.35,432.95,432.81,8385736 -2021-02-19,433.15,435.75,426.1,429.95,431.28,8478666 -2021-02-22,430.7,432.85,416.0,418.7,422.91,10666087 -2021-02-23,419.7,426.0,414.3,415.5,419.17,8992353 -2021-02-24,417.7,425.8,414.75,423.1,419.2,5060297 -2021-02-25,423.1,429.0,420.45,421.3,424.69,9110392 -2021-02-26,417.95,419.85,408.0,410.3,413.09,11731941 -2021-03-01,411.0,418.7,409.2,414.4,414.87,6421696 -2021-03-02,419.7,433.1,418.25,430.4,426.86,14875234 -2021-03-03,433.0,436.65,428.25,435.5,433.26,8782452 -2021-03-04,428.9,444.3,427.5,438.8,439.03,12963797 -2021-03-05,440.0,440.0,417.0,420.85,426.19,43931172 -2021-03-08,425.1,425.15,415.55,416.9,418.53,12354838 -2021-03-09,419.8,422.8,410.05,419.2,416.27,11905629 -2021-03-10,426.1,430.7,423.0,426.7,427.09,17291368 -2021-03-12,431.5,432.8,422.1,425.2,427.39,8960126 -2021-03-15,424.8,428.6,417.8,426.35,424.52,7517124 -2021-03-16,427.25,434.95,425.65,429.3,430.57,10673647 -2021-03-17,429.0,435.5,417.7,419.65,427.84,12134812 -2021-03-18,423.25,424.15,404.3,410.15,414.52,10082931 -2021-03-19,408.95,413.65,399.45,410.5,408.79,16875402 -2021-03-22,411.05,416.25,410.2,414.45,413.97,6622984 -2021-03-23,417.7,423.4,412.7,415.5,416.98,11575194 -2021-03-24,411.35,415.45,409.2,411.0,411.84,5140347 -2021-03-25,410.7,411.7,397.75,399.65,402.63,12737129 -2021-03-26,404.8,407.7,400.65,403.9,403.72,9033369 -2021-03-30,405.0,420.45,405.0,418.1,413.6,13171390 -2021-03-31,419.8,419.8,413.35,414.15,415.37,7445134 -2021-04-01,418.85,422.85,414.35,416.4,417.72,7596943 -2021-04-05,416.45,427.9,416.2,425.45,423.14,21216395 -2021-04-06,427.95,428.9,422.35,427.15,425.99,8320520 -2021-04-07,425.0,439.0,423.4,438.0,431.67,13867650 -2021-04-08,441.95,445.95,440.0,442.1,442.94,12916614 -2021-04-09,442.9,451.35,440.0,450.1,446.5,11699385 -2021-04-12,450.0,450.1,429.4,432.6,435.75,15086267 -2021-04-13,432.0,437.55,412.6,418.95,420.89,20420320 -2021-04-15,418.9,434.45,415.0,430.7,428.6,26758891 -2021-04-16,441.7,473.65,436.0,469.2,464.06,109361636 -2021-04-19,463.0,477.95,461.1,472.75,470.56,43809855 -2021-04-20,476.0,477.55,467.8,470.1,471.11,17730691 -2021-04-22,471.6,494.5,471.6,486.65,486.53,42620929 -2021-04-23,483.55,487.35,474.35,475.7,481.46,13596003 -2021-04-26,479.4,483.85,477.0,480.3,479.77,9314644 -2021-04-27,481.4,487.0,481.0,485.05,484.07,7209467 -2021-04-28,485.85,493.2,481.25,489.3,487.55,9615534 -2021-04-29,492.7,492.8,485.7,489.85,489.45,7641133 -2021-04-30,491.5,511.8,489.3,492.75,501.42,29115571 -2021-05-03,487.95,496.0,483.25,487.35,488.82,8599731 -2021-05-04,487.3,488.3,477.8,481.95,482.16,8102429 -2021-05-05,484.8,496.0,483.3,490.6,490.81,11856591 -2021-05-06,493.7,514.8,487.25,512.3,506.32,24413544 -2021-05-07,514.0,516.55,507.5,515.25,512.83,14666581 -2021-05-10,517.6,528.5,513.25,525.95,521.17,12544472 -2021-05-11,517.95,523.3,514.05,518.4,517.71,7649499 -2021-05-12,519.95,522.55,504.85,507.6,512.01,7871107 -2021-05-14,507.5,508.4,492.75,498.45,497.83,6799879 -2021-05-17,498.45,503.7,495.0,499.8,500.11,5752650 -2021-05-18,502.0,514.8,500.9,508.05,509.98,9380746 -2021-05-19,508.3,517.8,505.15,511.65,512.88,7490396 -2021-05-20,516.0,517.0,503.6,508.25,510.08,6292304 -2021-05-21,510.0,515.9,509.15,512.7,512.84,5197503 -2021-05-24,511.9,518.5,509.65,514.9,515.62,7436812 -2021-05-25,517.4,524.85,515.7,517.55,520.01,7954564 -2021-05-26,514.9,530.45,514.75,527.25,525.5,8823190 -2021-05-27,527.25,545.0,525.05,540.9,539.19,29411126 -2021-05-28,539.0,540.3,532.65,538.7,536.6,5878626 -2021-05-31,538.7,540.55,531.05,539.05,537.4,5386205 -2021-06-01,541.9,547.0,539.65,542.8,543.11,5965044 -2021-06-02,541.95,545.0,533.0,543.0,539.1,4713568 -2021-06-03,545.7,549.9,538.3,539.05,541.49,5637991 -2021-06-04,543.5,545.5,540.45,541.2,542.62,4771716 -2021-06-07,544.7,551.2,542.7,548.25,548.14,4348433 -2021-06-08,550.0,555.5,549.15,550.6,552.19,5429734 -2021-06-09,553.0,553.25,542.2,544.2,547.74,6206899 -2021-06-10,545.55,555.5,545.55,554.25,552.94,5720744 -2021-06-11,555.0,558.95,551.5,554.3,555.3,5612359 -2021-06-14,553.9,562.8,553.0,561.6,559.27,5952159 -2021-06-15,561.5,564.0,557.0,557.9,560.54,3837245 -2021-06-16,559.9,562.55,553.5,555.25,557.94,5497269 -2021-06-17,552.5,561.5,549.55,558.7,555.66,4399348 -2021-06-18,560.0,561.95,546.05,549.8,551.95,10007116 -2021-06-21,544.75,544.75,535.2,542.15,540.03,5390821 -2021-06-22,545.25,559.95,542.3,556.55,553.47,5752921 -2021-06-23,560.0,560.85,538.4,540.15,545.31,11242702 -2021-06-24,541.9,550.55,539.2,549.05,546.31,8668680 -2021-06-25,549.85,551.0,540.5,547.5,546.25,5039822 -2021-06-28,549.75,550.8,544.25,547.4,547.78,3259830 -2021-06-29,547.8,553.75,541.0,542.6,546.44,7927880 -2021-06-30,544.85,548.0,542.0,545.65,545.7,4293322 -2021-07-01,545.0,545.9,538.0,539.35,540.69,4329374 -2021-07-02,540.1,542.3,533.6,538.6,537.3,4157307 -2021-07-05,542.9,542.9,535.55,536.35,537.49,3439169 -2021-07-06,536.55,538.3,531.85,532.6,533.81,4193441 -2021-07-07,534.05,536.4,525.1,532.15,531.49,5377687 -2021-07-08,533.9,536.95,528.0,531.0,532.33,4565510 -2021-07-09,527.4,530.95,523.25,525.8,526.28,5724608 -2021-07-12,530.75,532.15,523.2,525.85,528.04,3865556 -2021-07-13,528.0,529.5,522.6,524.85,525.64,4172358 -2021-07-14,526.25,563.3,525.6,561.7,551.0,29348083 -2021-07-15,561.0,579.65,559.0,575.9,572.71,31066201 -2021-07-16,580.0,589.25,568.3,577.75,577.56,36907827 -2021-07-19,572.55,584.0,570.0,573.8,577.28,10857851 -2021-07-20,575.7,578.15,561.55,568.1,567.43,10523527 -2021-07-22,577.1,585.0,571.0,584.2,579.61,12043385 -2021-07-23,586.5,601.8,583.7,599.15,594.86,14057455 -2021-07-26,600.1,600.5,588.25,590.45,594.0,6099903 -2021-07-27,588.9,594.65,584.15,591.45,588.79,3983137 -2021-07-28,590.95,593.35,583.0,591.95,587.86,4573930 -2021-07-29,593.6,598.0,587.9,590.45,593.23,5834470 -2021-07-30,588.85,593.0,585.0,587.15,589.07,3178206 -2021-08-02,588.2,595.4,582.25,592.25,588.64,4623898 -2021-08-03,604.0,604.0,594.15,599.4,597.75,5165607 -2021-08-04,603.5,604.0,594.3,596.8,597.91,4509356 -2021-08-05,597.5,614.5,597.5,600.9,606.72,11294364 -2021-08-06,603.75,606.4,596.3,598.0,601.42,5270200 -2021-08-09,600.0,606.0,595.5,596.8,599.75,4646751 -2021-08-10,598.4,608.95,593.1,603.85,603.0,7027782 -2021-08-11,601.9,606.5,598.45,601.25,601.72,4282513 -2021-08-12,602.0,608.9,600.65,605.85,605.08,3952508 -2021-08-13,606.0,620.45,606.0,615.5,614.1,8364684 -2021-08-16,616.1,620.9,610.5,614.05,615.39,3572426 -2021-08-17,613.75,637.05,611.2,634.9,626.66,11822772 -2021-08-18,635.75,639.2,624.6,629.4,631.97,6923577 -2021-08-20,622.5,631.95,618.0,620.05,623.36,6170693 -2021-08-23,626.0,636.95,623.5,628.85,630.46,7036375 -2021-08-24,636.0,636.0,624.1,633.55,630.64,4483718 -2021-08-25,635.0,642.8,629.55,631.65,636.31,6407718 -2021-08-26,632.2,638.5,626.0,628.95,631.86,4208351 -2021-08-27,629.5,636.0,625.3,634.95,632.11,4371554 -2021-08-30,635.95,639.5,630.55,632.45,633.87,4371855 -2021-08-31,634.6,642.55,628.9,640.95,637.51,7795908 -2021-09-01,643.8,647.35,635.25,642.05,641.38,4725222 -2021-09-02,645.0,657.0,640.75,651.45,648.56,4538778 -2021-09-03,653.0,656.7,649.5,655.1,653.68,3774970 -2021-09-06,656.65,688.7,656.65,686.45,675.53,12338416 -2021-09-07,690.0,690.0,672.75,674.25,679.16,6406109 -2021-09-08,675.4,675.4,660.0,662.2,664.96,6716231 -2021-09-09,660.9,664.55,654.0,662.35,660.1,5805730 -2021-09-13,662.35,671.85,657.85,670.75,667.33,5588789 -2021-09-14,671.0,675.7,670.0,673.45,673.41,3661338 -2021-09-15,674.0,680.55,670.0,674.05,675.03,4145416 -2021-09-16,679.75,680.75,665.0,667.85,670.77,4657846 -2021-09-17,671.4,674.4,662.75,665.25,668.16,5407781 -2021-09-20,657.75,670.5,653.4,662.5,664.4,4546430 -2021-09-21,660.5,669.0,657.1,667.6,663.15,3683551 -2021-09-22,669.0,674.5,663.0,668.15,668.59,4791652 -2021-09-23,672.9,677.0,671.4,674.3,674.63,3231293 -2021-09-24,680.5,699.15,675.0,676.5,687.0,12126588 -2021-09-27,678.05,678.35,651.0,653.9,658.22,8399082 -2021-09-28,653.9,653.9,635.25,639.6,642.5,8112462 -2021-09-29,629.95,646.5,627.35,640.75,636.66,8839566 -2021-09-30,638.75,646.75,632.55,634.1,638.65,6013959 -2021-10-01,634.8,639.75,630.2,636.25,635.17,4208854 -2021-10-04,639.9,643.6,635.95,641.05,638.84,5247122 -2021-10-05,636.45,649.5,634.05,646.85,641.56,5456074 -2021-10-06,650.4,650.45,634.4,635.75,640.73,4836599 -2021-10-07,639.0,648.55,636.9,642.95,643.86,3724343 -2021-10-08,646.15,667.55,645.0,661.15,659.07,11045983 -2021-10-11,648.95,666.3,635.0,652.8,651.74,10211466 -2021-10-12,652.0,662.4,642.55,659.1,653.44,9340216 -2021-10-13,665.0,674.7,656.0,672.6,664.89,9462941 -2021-10-14,697.0,739.85,695.0,708.25,717.07,59188803 -2021-10-18,719.0,720.8,702.4,709.75,711.39,10599446 -2021-10-19,717.1,729.95,708.0,711.55,721.38,10932574 -2021-10-20,713.6,722.75,695.75,701.95,705.96,8054391 -2021-10-21,708.95,709.0,681.7,696.3,694.67,7958456 -2021-10-22,701.75,705.5,678.25,682.4,689.25,5379151 diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/data/TEST_D.csv b/temp_pandas_ta/pandas_ta-0.4.71b0/data/TEST_D.csv deleted file mode 100644 index 47c918da..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/data/TEST_D.csv +++ /dev/null @@ -1,7193 +0,0 @@ -date,open,high,low,close,volume,dividends,stock splits -1993-01-29,25.818120120768864,25.818120120768864,25.68967176195907,25.79977035522461,1003200,0.0,0 -1993-02-01,25.818124633724405,25.983272552490234,25.818124633724405,25.983272552490234,480500,0.0,0 -1993-02-02,25.9649157641722,26.05666458312687,25.909866472799397,26.038314819335938,201300,0.0,0 -1993-02-03,26.075019233895148,26.331915975115788,26.056669466665102,26.313566207885742,529400,0.0,0 -1993-02-04,26.40530479616589,26.478703836599987,26.111708634429508,26.423654556274414,531500,0.0,0 -1993-02-05,26.405315399169922,26.460364701600437,26.25851725935522,26.405315399169922,492100,0.0,0 -1993-02-08,26.405315399169922,26.497064236554113,26.368615864216245,26.405315399169922,596100,0.0,0 -1993-02-09,26.31354862530804,26.31354862530804,26.166750585557367,26.221799850463867,122100,0.0,0 -1993-02-10,26.221812968650617,26.27686226109705,26.148413912055375,26.258512496948242,379600,0.0,0 -1993-02-11,26.295215963488328,26.497063399355998,26.295215963488328,26.386964797973633,19500,0.0,0 -1993-02-12,26.350267545276367,26.350267545276367,26.18511962890625,26.18511962890625,42500,0.0,0 -1993-02-16,26.1117211073787,26.1117211073787,25.487828965670424,25.52452850341797,374800,0.0,0 -1993-02-17,25.524527670496656,25.561227207046617,25.414429060846782,25.50617790222168,210900,0.0,0 -1993-02-18,25.79977721289133,25.79977721289133,25.139185477710612,25.487831115722656,378100,0.0,0 -1993-02-19,25.487823851652433,25.579572677612305,25.451124321268484,25.579572677612305,34900,0.0,0 -1993-02-22,25.652968291472845,25.70801757965197,25.57956924056734,25.67131805419922,513600,0.0,0 -1993-02-23,25.74472009197666,25.763069856831954,25.524522913713138,25.652971267700195,373700,0.0,0 -1993-02-24,25.671326483710335,25.983272552490234,25.671326483710335,25.983272552490234,26300,0.0,0 -1993-02-25,25.9649157641722,26.05666458312687,25.909866472799397,26.038314819335938,44500,0.0,0 -1993-02-26,26.09337723884341,26.09337723884341,25.94657905465864,26.075027465820312,66200,0.0,0 -1993-03-01,26.166767238813467,26.166767238813467,25.96491980569499,26.001619338989258,66500,0.0,0 -1993-03-02,26.019969460032414,26.386964797973633,25.983269926238293,26.386964797973633,182400,0.0,0 -1993-03-03,26.4236636175013,26.515412449506513,26.386964084699216,26.49706268310547,280100,0.0,0 -1993-03-04,26.533747808514864,26.533747808514864,26.350250244140625,26.350250244140625,89500,0.0,0 -1993-03-05,26.38694636382204,26.497044888288613,26.258498085277708,26.27684783935547,40000,0.0,0 -1993-03-08,26.331906846312226,26.864049911499023,26.331906846312226,26.864049911499023,50800,0.0,0 -1993-03-09,26.809005971311134,26.82735573583633,26.717257148685153,26.772306442260742,169300,0.0,0 -1993-03-10,26.772301333384377,26.827350616455078,26.662202767242974,26.827350616455078,194400,0.0,0 -1993-03-11,26.845704660821188,26.919103716626577,26.717256313161755,26.753955841064453,70900,0.0,0 -1993-03-12,26.533759468062755,26.552109232563488,26.313562294053934,26.478710174560547,643600,0.0,0 -1993-03-15,26.46037002826559,26.607168197631836,26.46037002826559,26.607168197631836,310800,0.0,0 -1993-03-16,26.607168197631836,26.680567282314957,26.607168197631836,26.607168197631836,30800,0.0,0 -1993-03-17,26.570455398930186,26.570455398930186,26.405307540787664,26.442007064819336,21800,0.0,0 -1993-03-18,26.552118884119494,26.71726682465652,26.552118884119494,26.607168197631836,59300,0.0,0 -1993-03-19,26.714374457524105,26.714374457524105,26.566883087158203,26.566883087158203,66900,0.213,0 -1993-03-22,26.308793997648124,26.474721920548497,26.290357561770303,26.41941261291504,183400,0.0,0 -1993-03-23,26.493148801054463,26.511585230282755,26.43783951336959,26.474712371826172,55200,0.0,0 -1993-03-24,26.43783951336959,26.585330947195917,26.30878450877155,26.474712371826172,37200,0.0,0 -1993-03-25,26.493158308774955,26.695959103066205,26.456285437085636,26.640649795532227,110100,0.0,0 -1993-03-26,26.622196141762625,26.64063256568351,26.474704750395517,26.493141174316406,101500,0.0,0 -1993-03-29,26.51159665325162,26.732833899314915,26.51159665325162,26.603778839111328,87100,0.0,0 -1993-03-30,26.640651692335737,26.67752456665039,26.603778818021087,26.67752456665039,56000,0.0,0 -1993-03-31,26.75125309507547,26.824998796233498,26.65907096862793,26.65907096862793,111600,0.0,0 -1993-04-01,26.695938036228366,26.695938036228366,26.51157382327099,26.566883087158203,129500,0.0,0 -1993-04-02,26.345665026691094,26.345665026691094,26.013809204101562,26.013809204101562,59400,0.0,0 -1993-04-05,26.21660231467867,26.21660231467867,26.06911088112211,26.14285659790039,172200,0.0,0 -1993-04-06,26.198167791461,26.198167791461,25.995367055566508,26.06911277770996,129700,0.0,0 -1993-04-07,26.10598374219576,26.161293029785156,26.050674454606362,26.161293029785156,28000,0.0,0 -1993-04-08,26.271919272025034,26.271919272025034,26.013809187949,26.124427795410156,180800,0.0,0 -1993-04-12,26.382522630791076,26.511577598237295,26.3456497829493,26.493141174316406,348500,0.0,0 -1993-04-13,26.474702872170344,26.64063067568673,26.45626644955741,26.54844856262207,146100,0.0,0 -1993-04-14,26.566898345947266,26.58533477783203,26.493152618408203,26.51158905029297,119600,0.0,0 -1993-04-15,26.493152618408203,26.566898345947266,26.400970458984375,26.51158905029297,148600,0.0,0 -1993-04-16,26.530025482177734,26.566898345947266,26.474716186523438,26.51158905029297,47900,0.0,0 -1993-04-19,26.51158905029297,26.58533477783203,26.38253402709961,26.400970458984375,157000,0.0,0 -1993-04-20,26.36410907946135,26.400981959292764,26.105998920641447,26.271926879882812,279500,0.0,0 -1993-04-21,26.32721899332625,26.32721899332625,26.17972757039445,26.25347328186035,67900,0.0,0 -1993-04-22,26.142858488970088,26.36409565530834,25.921621322631836,25.921621322631836,97700,0.0,0 -1993-04-23,25.866310111454556,25.940055828094483,25.774127965654646,25.81100082397461,106000,0.0,0 -1993-04-26,25.82944107055664,25.92162322998047,25.53445816040039,25.608203887939453,62600,0.0,0 -1993-04-27,25.571338561185744,25.88475799560547,25.571338561185744,25.88475799560547,156800,0.0,0 -1993-04-28,25.84787941115146,25.903188710890014,25.792570111412903,25.829442977905273,85900,0.0,0 -1993-04-29,25.884763689183476,25.940073013305664,25.73727215819098,25.940073013305664,85000,0.0,0 -1993-04-30,26.032232264240555,26.124414389822142,25.9769229888916,25.9769229888916,88500,0.0,0 -1993-05-03,26.0138015935384,26.14285659790039,25.903183018370978,26.14285659790039,80500,0.0,0 -1993-05-04,26.198165898916173,26.327220903344333,26.161293040508127,26.23503875732422,149100,0.0,0 -1993-05-05,26.235034964012783,26.40096280285756,26.235034964012783,26.308780670166016,109000,0.0,0 -1993-05-06,26.27191352441844,26.29034995496189,26.198167802244633,26.216604232788086,54700,0.0,0 -1993-05-07,26.23503874657102,26.23503874657102,26.124420171392227,26.161293029785156,68000,0.0,0 -1993-05-10,26.198167802244633,26.364095677135698,26.198167802244633,26.216604232788086,113900,0.0,0 -1993-05-11,26.216600442133032,26.327219009399414,26.14285473062211,26.327219009399414,42600,0.0,0 -1993-05-12,26.216623258122556,26.308805477736207,26.216623258122556,26.290369033813477,31000,0.0,0 -1993-05-13,26.179723665171096,26.179723665171096,25.958486563775285,25.9769229888916,129100,0.0,0 -1993-05-14,25.976930616931483,26.05067633905194,25.94005775587125,25.958494186401367,63500,0.0,0 -1993-05-17,26.03223419729396,26.050670623779297,25.921615638381944,26.050670623779297,34000,0.0,0 -1993-05-18,26.06912232525963,26.08755876254765,25.940067264243496,26.032249450683594,105200,0.0,0 -1993-05-19,26.032226869581805,26.566883087158203,25.866299077920164,26.566883087158203,50200,0.0,0 -1993-05-20,26.56690405215359,26.640649795532227,26.511594744619615,26.640649795532227,98200,0.0,0 -1993-05-21,26.659080505371094,26.695953369140625,26.38253402709961,26.400970458984375,221400,0.0,0 -1993-05-24,26.456279754638672,26.603771209716797,26.456279754638672,26.51158905029297,30500,0.0,0 -1993-05-25,26.622192351045417,26.622192351045417,26.566883087158203,26.566883087158203,191800,0.0,0 -1993-05-26,26.64063840634697,26.917184825790017,26.622201978384098,26.89874839782715,102400,0.0,0 -1993-05-27,26.935638482829727,26.935638482829727,26.769710525029957,26.806583404541016,53800,0.0,0 -1993-05-28,26.788143189594344,26.788143189594344,26.548469506549107,26.67752456665039,79100,0.0,0 -1993-06-01,26.76970099227874,27.027811056942586,26.73282812589819,26.93562889099121,28300,0.0,0 -1993-06-02,26.86187554190141,26.990930537641496,26.75125697412419,26.89874839782715,20300,0.0,0 -1993-06-03,26.843456284052078,26.843456284052078,26.751274085274428,26.806583404541016,21600,0.0,0 -1993-06-04,26.732837684899877,26.732837684899877,26.60378260642105,26.714401245117188,32000,0.0,0 -1993-06-07,26.769695260848366,26.769695260848366,26.622203826904297,26.622203826904297,121400,0.0,0 -1993-06-08,26.54845231733982,26.54845231733982,26.382524490356445,26.382524490356445,104500,0.0,0 -1993-06-09,26.474712371826172,26.585330947195917,26.43783951336959,26.474712371826172,43300,0.0,0 -1993-06-10,26.45626832647463,26.511577598237295,26.400959054711965,26.493141174316406,17900,0.0,0 -1993-06-11,26.585342401939386,26.64065171345521,26.49316021607968,26.603778839111328,647400,0.0,0 -1993-06-14,26.640628772341152,26.65906519363689,26.566883087158203,26.566883087158203,64200,0.0,0 -1993-06-15,26.603771209716797,26.622207641601562,26.51158905029297,26.51158905029297,142400,0.0,0 -1993-06-16,26.51157382327099,26.566883087158203,26.437828138088037,26.566883087158203,330900,0.0,0 -1993-06-17,26.622198118048917,26.65907096862793,26.566888842180393,26.65907096862793,37400,0.0,0 -1993-06-18,26.643773123119654,26.643773123119654,26.43953514099121,26.43953514099121,58500,0.318,0 -1993-06-21,26.51380444040813,26.51380444040813,26.45810317057534,26.495237350463867,29300,0.0,0 -1993-06-22,26.532370571328812,26.532370571328812,26.476669303509368,26.513803482055664,137500,0.0,0 -1993-06-23,26.513798722445753,26.513798722445753,26.27242660522461,26.27242660522461,227600,0.0,0 -1993-06-24,26.346707204395756,26.625213623046875,26.346707204395756,26.625213623046875,243700,0.0,0 -1993-06-25,26.60665512084961,26.680923523140883,26.58808802027679,26.60665512084961,44800,0.0,0 -1993-06-28,26.73662647697496,26.903730392456055,26.699492273534716,26.903730392456055,439900,0.0,0 -1993-06-29,26.866583863839033,26.866583863839033,26.736614211422395,26.77374839782715,207500,0.0,0 -1993-06-30,26.8108825842319,26.866583863839033,26.736614211422395,26.77374839782715,437600,0.0,0 -1993-07-01,26.81088261610941,26.81088261610941,26.662345870313793,26.699480056762695,605700,0.0,0 -1993-07-02,26.606640831740584,26.62520792234194,26.458104106929753,26.550939559936523,285400,0.0,0 -1993-07-06,26.513798722445753,26.588067066206108,26.235292433344434,26.27242660522461,246400,0.0,0 -1993-07-07,26.25386521848177,26.383834848276237,26.25386521848177,26.34670066833496,343700,0.0,0 -1993-07-08,26.365282783109553,26.699490593036295,26.32814858200658,26.643789291381836,248200,0.0,0 -1993-07-09,26.64378352427002,26.71805191040039,26.588082234672243,26.71805191040039,378200,0.0,0 -1993-07-12,26.680912963538244,26.71804714998715,26.643778777089338,26.699480056762695,373700,0.0,0 -1993-07-13,26.71803665293864,26.79230499665772,26.532365793640942,26.6809024810791,389600,0.0,0 -1993-07-14,26.699480025017643,26.848016770636654,26.680912931815264,26.77374839782715,617300,0.0,0 -1993-07-15,26.75517943841833,26.75517943841833,26.606642703159935,26.662343978881836,443800,0.0,0 -1993-07-16,26.68091683947174,26.699483935393435,26.550947168019896,26.58808135986328,216400,0.0,0 -1993-07-19,26.588068964096486,26.588068964096486,26.495233527769333,26.569501876831055,188200,0.0,0 -1993-07-20,26.55095378862441,26.643789291381836,26.420984084764008,26.643789291381836,68500,0.0,0 -1993-07-21,26.606646528470133,26.625213623046875,26.53237815016317,26.625213623046875,142700,0.0,0 -1993-07-22,26.588071855266442,26.625206033835248,26.43953514099121,26.43953514099121,632400,0.0,0 -1993-07-23,26.495233527769333,26.569501876831055,26.476666440503905,26.569501876831055,286200,0.0,0 -1993-07-26,26.64378352427002,26.77375319999817,26.64378352427002,26.71805191040039,121300,0.0,0 -1993-07-27,26.7366142432116,26.755181336436053,26.606644590640435,26.699480056762695,92800,0.0,0 -1993-07-28,26.643789291381836,26.699490593036295,26.606655090278867,26.643789291381836,30800,0.0,0 -1993-07-29,26.699490471177025,26.866594375377716,26.662356270243535,26.792325973510742,331000,0.0,0 -1993-07-30,26.792326095793722,26.792326095793722,26.606655090278867,26.643789291381836,75300,0.0,0 -1993-08-02,26.680917717335205,26.81088739306335,26.680917717335205,26.71805191040039,41300,0.0,0 -1993-08-03,26.773742683728535,26.84801104068756,26.64377305905024,26.736608505249023,81600,0.0,0 -1993-08-04,26.736608505249023,26.79230977296829,26.662340148289996,26.736608505249023,434000,0.0,0 -1993-08-05,26.73660373886841,26.73660373886841,26.64376830921956,26.6809024810791,36800,0.0,0 -1993-08-06,26.755186103465576,26.77375319999817,26.680917717335205,26.71805191040039,402300,0.0,0 -1993-08-09,26.792322108724154,26.940858891031706,26.736620815358823,26.86659049987793,828200,0.0,0 -1993-08-10,26.84801483154297,26.86658192340434,26.810880647820223,26.84801483154297,604900,0.0,0 -1993-08-11,26.829447739681598,26.922283198988453,26.829447739681598,26.84801483154297,542200,0.0,0 -1993-08-12,26.92228514344616,26.92228514344616,26.680912931815264,26.77374839782715,303700,0.0,0 -1993-08-13,26.792311663112482,26.829445844211737,26.792311663112482,26.81087875366211,103500,0.0,0 -1993-08-16,26.829459089221377,27.033697186094344,26.829459089221377,26.959428787231445,241800,0.0,0 -1993-08-17,26.940862565312223,27.052265167236328,26.940862565312223,27.052265167236328,369300,0.0,0 -1993-08-18,27.145089127993014,27.25649168255386,27.126522035566207,27.200790405273438,414300,0.0,0 -1993-08-19,27.219357497700248,27.219357497700248,27.163656220419824,27.200790405273438,28500,0.0,0 -1993-08-20,27.145086267635246,27.2193546295166,27.12651917716491,27.2193546295166,80700,0.0,0 -1993-08-23,27.1079606677438,27.18222905313488,27.1079606677438,27.16366195678711,15600,0.0,0 -1993-08-24,27.16366178139873,27.460735321044922,27.16366178139873,27.460735321044922,273400,0.0,0 -1993-08-25,27.46072292070131,27.590692535606593,27.42358874501409,27.479290008544922,242300,0.0,0 -1993-08-26,27.49786376953125,27.646400508326828,27.386461215434565,27.49786376953125,120000,0.0,0 -1993-08-27,27.42358874501409,27.479290008544922,27.42358874501409,27.479290008544922,25700,0.0,0 -1993-08-30,27.497855180044677,27.627824785892287,27.497855180044677,27.59069061279297,183500,0.0,0 -1993-08-31,27.572142530607696,27.66497802734375,27.535008331913275,27.66497802734375,66500,0.0,0 -1993-09-01,27.572146365719455,27.68354897729812,27.572146365719455,27.62784767150879,136500,0.0,0 -1993-09-02,27.646396663971874,27.683530843507096,27.5164270355986,27.53499412536621,472400,0.0,0 -1993-09-03,27.516429888270295,27.590698255040255,27.479295704885313,27.553564071655273,630500,0.0,0 -1993-09-07,27.553571817509354,27.59070601133349,27.330766654564535,27.367900848388672,196400,0.0,0 -1993-09-08,27.367907605258846,27.367907605258846,27.08940108281727,27.27507209777832,269900,0.0,0 -1993-09-09,27.16365901413171,27.349329957495563,27.16365901413171,27.33076286315918,239200,0.0,0 -1993-09-10,27.405028279622396,27.59069920292607,27.36789409496166,27.572132110595703,106500,0.0,0 -1993-09-13,27.664958958991605,27.664958958991605,27.59069061279297,27.59069061279297,66900,0.0,0 -1993-09-14,27.516424184232147,27.516424184232147,27.386454569326865,27.479290008544922,184500,0.0,0 -1993-09-15,27.367893154730375,27.572131163347766,27.275057696267925,27.553564071655273,101000,0.0,0 -1993-09-16,27.516433751954118,27.53500084625368,27.423598280456297,27.44216537475586,54300,0.0,0 -1993-09-17,27.42632927055411,27.445012056160753,27.35159812812753,27.38896369934082,200900,0.286,0 -1993-09-20,27.42632334629148,27.48237169100461,27.164764404296875,27.164764404296875,57800,0.0,0 -1993-09-21,27.202129566727052,27.239495129318712,26.791108378218816,27.07135009765625,318200,0.0,0 -1993-09-22,27.164752811377053,27.33289777375834,27.127387264181213,27.2955322265625,439700,0.0,0 -1993-09-23,27.3702723903669,27.463686289310132,27.332906830789607,27.445003509521484,88500,0.0,0 -1993-09-24,27.407644881160593,27.426327665673995,27.332913743106985,27.37027931213379,53500,0.0,0 -1993-09-27,27.57578888557635,27.66920280456543,27.57578888557635,27.66920280456543,274600,0.0,0 -1993-09-28,27.68789606520223,27.68789606520223,27.594482110866192,27.6131649017334,158300,0.0,0 -1993-09-29,27.613141582356935,27.687872682715142,27.482362156730076,27.51972770690918,221000,0.0,0 -1993-09-30,27.51973432813372,27.575782666887555,27.407637650626047,27.463685989379883,99300,0.0,0 -1993-10-01,27.42633161499602,27.631842274236455,27.38896604058867,27.5944766998291,22700,0.0,0 -1993-10-04,27.6318359375,27.6318359375,27.55710480582319,27.6318359375,1038500,0.0,0 -1993-10-05,27.68789063584748,27.68789063584748,27.501062763810722,27.5944766998291,436500,0.0,0 -1993-10-06,27.613142605396465,27.725239260086845,27.575777053833004,27.575777053833008,209200,0.0,0 -1993-10-07,27.61314379391463,27.61314379391463,27.482364357813548,27.501047134399414,59400,0.0,0 -1993-10-08,27.575791016039076,27.594473801280294,27.332914807903233,27.53842544555664,54400,0.0,0 -1993-10-11,27.5944766998291,27.65052506144013,27.5944766998291,27.5944766998291,467100,0.0,0 -1993-10-12,27.6318359375,27.6505187204192,27.613153154580797,27.6318359375,26200,0.0,0 -1993-10-13,27.6505187204192,27.6505187204192,27.594470371661593,27.6318359375,139100,0.0,0 -1993-10-14,27.743921254441958,27.986797332763672,27.669190153419894,27.986797332763672,108100,0.0,0 -1993-10-15,28.11759917701225,28.1923303376156,28.042868016408892,28.136281967163086,1502500,0.0,0 -1993-10-18,28.11758130907854,28.11758130907854,28.02416741768625,28.061532974243164,722400,0.0,0 -1993-10-19,28.024184152154135,28.080232520458445,27.85603904724121,27.85603904724121,880100,0.0,0 -1993-10-20,27.949427528662405,27.949427528662405,27.837330894189158,27.89337921142578,230400,0.0,0 -1993-10-21,27.912087415545518,27.912087415545518,27.81867346837167,27.85603904724121,56200,0.0,0 -1993-10-22,27.89338953604274,28.005486212008083,27.725244522094727,27.725244522094727,390700,0.0,0 -1993-10-25,27.743929912967065,27.837343818397933,27.669198788622374,27.799978256225586,114500,0.0,0 -1993-10-26,27.781286239624023,27.79996901449936,27.687872365247344,27.781286239624023,186200,0.0,0 -1993-10-27,27.743929912967065,27.81866103731176,27.743929912967065,27.799978256225586,118400,0.0,0 -1993-10-28,27.837346212477428,28.08022238748562,27.837346212477428,28.005491256713867,129600,0.0,0 -1993-10-29,27.98680847402093,28.024174039406805,27.96812569132799,28.005491256713867,80700,0.0,0 -1993-11-01,27.968114986153182,28.09889441494615,27.968114986153182,28.080211639404297,36400,0.0,0 -1993-11-02,28.042850195964707,28.09889853080008,27.89338796973705,28.061532974243164,262100,0.0,0 -1993-11-03,28.04285593476556,28.04285593476556,27.575786382221164,27.706565856933594,479100,0.0,0 -1993-11-04,27.706559176662786,27.706559176662786,27.388951957510212,27.407634735107422,130400,0.0,0 -1993-11-05,27.332914807903233,27.53842544555664,27.22081809645592,27.53842544555664,363200,0.0,0 -1993-11-08,27.557094278051277,27.650508156959926,27.48236317492436,27.575777053833008,367600,0.0,0 -1993-11-09,27.762621784662183,27.78130457186586,27.575793912625425,27.5944766998291,246900,0.0,0 -1993-11-10,27.59446766427768,27.799978256225586,27.51973653993299,27.799978256225586,46500,0.0,0 -1993-11-11,27.799975639404956,27.874706756715184,27.706561742767168,27.725244522094727,88900,0.0,0 -1993-11-12,27.781307889502134,27.949452994415058,27.762625100067364,27.85603904724121,108200,0.0,0 -1993-11-15,27.912078163607806,27.912078163607806,27.762615897671488,27.83734703063965,243300,0.0,0 -1993-11-16,27.89340467586785,27.986818623208332,27.78130793905927,27.968135833740234,492600,0.0,0 -1993-11-17,27.98679808852975,27.98679808852975,27.74392200364932,27.818653106689453,39600,0.0,0 -1993-11-18,27.781294470122365,27.837342811353277,27.66919778766054,27.743928909301758,240800,0.0,0 -1993-11-19,27.65051209813992,27.725243211918677,27.631829319695232,27.687877655029297,106000,0.0,0 -1993-11-22,27.613141582356935,27.631824357446487,27.42631383146142,27.51972770690918,165300,0.0,0 -1993-11-23,27.66920280456543,27.687885588363248,27.5197405341829,27.66920280456543,89700,0.0,0 -1993-11-24,27.743920689873352,27.79996901449936,27.70655514012268,27.781286239624023,77200,0.0,0 -1993-11-26,27.856026599484103,27.856026599484103,27.781295475139412,27.799978256225586,1019800,0.0,0 -1993-11-29,27.87470543947619,27.930753774810256,27.687877655029297,27.687877655029297,517500,0.0,0 -1993-11-30,27.669200292730043,27.837345331646027,27.650517510628266,27.706565856933594,230000,0.0,0 -1993-12-01,27.856025591763583,27.874708372173885,27.743928909301758,27.743928909301758,379200,0.0,0 -1993-12-02,27.79997033092942,27.837335882449484,27.74392200364932,27.818653106689453,352000,0.0,0 -1993-12-03,27.799983751175795,27.930763244628906,27.799983751175795,27.930763244628906,306000,0.0,0 -1993-12-06,27.968106353759765,28.06152020263672,27.968106353759765,28.024154663085938,99500,0.0,0 -1993-12-07,28.024174039406805,28.042856822099743,27.96812569132799,28.005491256713867,88800,0.0,0 -1993-12-08,28.005491256713867,28.005491256713867,27.96812569132799,28.005491256713867,146700,0.0,0 -1993-12-09,28.005487034758094,28.04285259451094,27.87470757562313,27.912073135375977,416500,0.0,0 -1993-12-10,27.930770204980288,27.930770204980288,27.799990678936904,27.85603904724121,412900,0.0,0 -1993-12-13,27.856009735107424,28.024154663085938,27.81864419555664,28.024154663085938,273200,0.0,0 -1993-12-14,28.04284641580985,28.04284641580985,27.818653106689453,27.818653106689453,41900,0.0,0 -1993-12-15,27.856017339125366,27.874700114000703,27.781286239624023,27.781286239624023,82600,0.0,0 -1993-12-16,27.89339286456479,27.89339286456479,27.83734451989386,27.874710083007812,78200,0.0,0 -1993-12-17,27.93383783302051,28.04670182426504,27.91502716781309,28.027891159057617,104700,0.317,0 -1993-12-20,28.009085419989784,28.084328094052886,27.990274751474008,28.06551742553711,68800,0.0,0 -1993-12-21,28.027905718784808,28.027905718784808,27.933852343889555,27.971473693847656,205700,0.0,0 -1993-12-22,28.046723780507794,28.178398540040696,27.99029174070798,28.159587860107422,410300,0.0,0 -1993-12-23,28.140777587890625,28.197209628508052,28.10315622747901,28.140777587890625,533800,0.0,0 -1993-12-27,28.140766752527114,28.29125213623047,28.140766752527114,28.29125213623047,447100,0.0,0 -1993-12-28,28.27243645964827,28.366489807817423,28.25362579001444,28.347679138183594,880600,0.0,0 -1993-12-29,28.36648487078391,28.385295537143847,28.291242205344165,28.3100528717041,266700,0.0,0 -1993-12-30,28.29126180148745,28.29126180148745,28.140776366373156,28.197208404541016,219900,0.0,0 -1993-12-31,28.253630274178434,28.29125161941702,28.027902202746915,28.04671287536621,312900,0.0,0 -1994-01-03,28.04671639376386,28.084337743721957,27.933852343889555,27.971473693847656,960900,0.0,0 -1994-01-04,28.009100242660736,28.08434295654297,27.97147888571962,28.08434295654297,164300,0.0,0 -1994-01-05,28.121966907684815,28.159588268096435,28.00910282644996,28.140777587890625,710900,0.0,0 -1994-01-06,28.178398948302245,28.197209628508052,28.10315622747901,28.140777587890625,201000,0.0,0 -1994-01-07,28.197188873544484,28.328863538064038,28.121946208104738,28.3100528717041,775500,0.0,0 -1994-01-10,28.347672846312594,28.648643493652344,28.272430184477656,28.648643493652344,593700,0.0,0 -1994-01-11,28.6298397390466,28.6298397390466,28.498165049050982,28.59221839904785,295200,0.0,0 -1994-01-12,28.611040640349433,28.611040640349433,28.404123186671693,28.49817657470703,158400,0.0,0 -1994-01-13,28.42293930053711,28.47937134415168,28.3853179381274,28.42293930053711,244300,0.0,0 -1994-01-14,28.516976911611437,28.59221959475553,28.516976911611437,28.53578758239746,137200,0.0,0 -1994-01-17,28.53578758239746,28.573408923969506,28.47935557003939,28.53578758239746,17700,0.0,0 -1994-01-18,28.573421478271484,28.611042836373223,28.516989441118874,28.573421478271484,166400,0.0,0 -1994-01-19,28.535797929921163,28.573419285135298,28.44174454188583,28.49817657470703,200800,0.0,0 -1994-01-20,28.535800120169743,28.592232157322353,28.516989441118874,28.573421478271484,281100,0.0,0 -1994-01-21,28.611034492704043,28.611034492704043,28.498170451312706,28.51698112487793,85600,0.0,0 -1994-01-24,28.498174781041428,28.629849516003336,28.40412139892578,28.40412139892578,373800,0.0,0 -1994-01-25,28.42293207534891,28.44174275177204,28.34768936965639,28.40412139892578,310400,0.0,0 -1994-01-26,28.404106470206298,28.498159802889102,28.36648513713318,28.47934913635254,145100,0.0,0 -1994-01-27,28.53578512331578,28.780323822460872,28.498163784985767,28.74270248413086,344500,0.0,0 -1994-01-28,28.855566819093866,28.91199882721465,28.81794548034668,28.81794548034668,356500,0.0,0 -1994-01-31,28.93082225253191,29.08130767387148,28.89320089719702,29.02487564086914,313800,0.0,0 -1994-02-01,28.987246052993623,28.987246052993623,28.83676067439275,28.87438201904297,303600,0.0,0 -1994-02-02,28.96843519488585,29.062488555908203,28.949624522681376,29.062488555908203,307600,0.0,0 -1994-02-03,29.006047872635104,29.006047872635104,28.836751873378482,28.930805206298828,466100,0.0,0 -1994-02-04,28.930805668224913,28.968427001993735,28.272432327270508,28.272432327270508,1403200,0.0,0 -1994-02-07,28.197203958271352,28.4793641046183,28.197203958271352,28.40412139892578,516400,0.0,0 -1994-02-08,28.460560662946822,28.460560662946822,28.310075213307975,28.42293930053711,188200,0.0,0 -1994-02-09,28.441734228467343,28.554598253183485,28.404112886895298,28.53578758239746,144600,0.0,0 -1994-02-10,28.516980211785498,28.535790884748415,28.29125213623047,28.29125213623047,883900,0.0,0 -1994-02-11,28.310076029115834,28.460561483091197,28.178401256887387,28.385318756103516,519400,0.0,0 -1994-02-14,28.328885894512833,28.51699270656139,28.29126453210312,28.42293930053711,2742100,0.0,0 -1994-02-15,28.479368083017132,28.592232157322353,28.441746724915394,28.573421478271484,374700,0.0,0 -1994-02-16,28.611033688420836,28.611033688420836,28.498169650202215,28.554601669311523,287600,0.0,0 -1994-02-17,28.68628966405425,28.70510034580117,28.310076029115834,28.385318756103516,342400,0.0,0 -1994-02-18,28.40413314819336,28.42294383239746,28.140783569335937,28.216026306152344,313300,0.0,0 -1994-02-22,28.291259121029288,28.49817657470703,28.291259121029288,28.49817657470703,154500,0.0,0 -1994-02-23,28.535803387766247,28.5546140689711,28.328885894512833,28.42293930053711,391700,0.0,0 -1994-02-24,28.32887296465561,28.32887296465561,28.027902202746915,28.04671287536621,770800,0.0,0 -1994-02-25,28.084329526160204,28.178382873535156,28.027897517735234,28.178382873535156,531300,0.0,0 -1994-02-28,28.253625551435118,28.328868229335075,28.178382873535156,28.178382873535156,333000,0.0,0 -1994-03-01,28.178381436631764,28.23481344217909,27.915032077410906,28.06551742553711,423600,0.0,0 -1994-03-02,27.708127106049933,28.103151321411133,27.632884398362084,28.103151321411133,581500,0.0,0 -1994-03-03,28.06551248947246,28.06551248947246,27.952648498227934,28.027891159057617,223200,0.0,0 -1994-03-04,28.027908613723284,28.17839402909898,27.933855229113476,28.103151321411133,595800,0.0,0 -1994-03-07,28.197207185463327,28.291260578343458,28.197207185463327,28.253639221191406,539800,0.0,0 -1994-03-08,28.27245234933129,28.27245234933129,28.10315622747901,28.140777587890625,880300,0.0,0 -1994-03-09,28.17837899284845,28.29124299415492,28.046704324657572,28.272432327270508,2500100,0.0,0 -1994-03-10,28.253630274178434,28.253630274178434,27.952659512269744,28.04671287536621,207400,0.0,0 -1994-03-11,28.084344328205294,28.23482976331959,27.933858893091,28.197208404541016,576600,0.0,0 -1994-03-14,28.310071664361615,28.310071664361615,28.197207591281106,28.23482894897461,345900,0.0,0 -1994-03-15,28.29126904296875,28.347701095581055,28.197215621948242,28.216026306152344,748600,0.0,0 -1994-03-16,28.253625710805256,28.44173240661621,28.15957236289978,28.44173240661621,455500,0.0,0 -1994-03-17,28.347679058710735,28.4793537457784,28.347679058710735,28.44173240661621,133000,0.0,0 -1994-03-18,28.303104931088345,28.47337762118179,28.284185743300185,28.43553924560547,365500,0.271,0 -1994-03-21,28.340951717241833,28.416628490852624,28.284194137033737,28.35987091064453,324800,0.0,0 -1994-03-22,28.359862494452827,28.49229680896995,28.303104931088345,28.43553924560547,435700,0.0,0 -1994-03-23,28.416610717773438,28.49228744405246,28.39769153620368,28.416610717773438,698500,0.0,0 -1994-03-24,28.30309139364813,28.35984892986534,27.943626997605808,28.076061248779297,1200500,0.0,0 -1994-03-25,28.09499078867387,28.17066753153898,27.811203002929688,27.811203002929688,100900,0.0,0 -1994-03-28,27.84903335571289,27.886871716250543,27.603084012218144,27.84903335571289,1117200,0.0,0 -1994-03-29,27.849046734910992,27.867965924268947,27.300390243530273,27.300390243530273,338400,0.0,0 -1994-03-30,27.319292166328566,27.394968875930584,26.92198944091797,26.92198944091797,1123900,0.0,0 -1994-03-31,26.92199250176476,27.054426758625162,26.354417115220176,26.997669219970703,788800,0.0,0 -1994-04-04,26.240908013883434,26.65713005880444,26.240908013883434,26.581453323364258,2627300,0.0,0 -1994-04-05,26.84632391510648,27.130111694335938,26.84632391510648,27.130111694335938,1179000,0.0,0 -1994-04-06,27.167950064899863,27.186869250181825,26.940919841516298,27.130111694335938,516500,0.0,0 -1994-04-07,27.111191157249014,27.319302184973882,26.959837682540016,27.262544631958008,666100,0.0,0 -1994-04-08,27.20578538054353,27.20578538054353,26.92199763318042,27.054431915283203,242400,0.0,0 -1994-04-11,27.13012273464362,27.281476278491006,27.06390555921039,27.16796112060547,203300,0.0,0 -1994-04-12,27.19632884282281,27.243626806027716,27.073354138490046,27.130111694335938,1409200,0.0,0 -1994-04-13,27.120644940103183,27.18686207110448,26.78955928509669,26.988210678100586,364100,0.0,0 -1994-04-14,26.940911681316244,27.13956306660685,26.884154142661785,26.997669219970703,419900,0.0,0 -1994-04-15,26.98820963019496,27.11118429727962,26.95037127109199,26.997669219970703,387300,0.0,0 -1994-04-18,27.026041143911854,27.10171784294976,26.732793935139973,26.817930221557617,369100,0.0,0 -1994-04-19,26.789554898274453,26.959827492966877,26.628741892176055,26.855772018432617,472200,0.0,0 -1994-04-20,26.8841443741103,26.95036147848003,26.68549306100111,26.8273868560791,508000,0.0,0 -1994-04-21,26.940921154300952,27.2247089473589,26.84632522328164,27.186870574951172,200300,0.0,0 -1994-04-22,27.25308897735266,27.272008164424758,27.082816293703807,27.158493041992188,301800,0.0,0 -1994-04-25,27.14903054012179,27.461197093370576,27.14903054012179,27.442277908325195,394600,0.0,0 -1994-04-26,27.404435062342632,27.45173301723104,27.357137107454225,27.413894653320312,399000,0.0,0 -1994-04-28,27.357138163354772,27.39497652872594,27.130107971127764,27.21524429321289,287000,0.0,0 -1994-04-29,27.16795591802458,27.338228622246184,27.13011753930867,27.300390243530273,481900,0.0,0 -1994-05-02,27.300380888064044,27.67876454555627,27.20578497369099,27.470653533935547,275000,0.0,0 -1994-05-03,27.480116278415956,27.489575870938648,27.281464835439454,27.442277908325195,183400,0.0,0 -1994-05-04,27.499015846963744,27.499015846963744,27.29090495992102,27.394960403442383,401900,0.0,0 -1994-05-05,27.423350994352816,27.470648943635933,27.357133865356445,27.357133865356445,659800,0.0,0 -1994-05-06,27.224711844375012,27.224711844375012,26.997681585770078,27.09227752685547,216300,0.0,0 -1994-05-09,27.016585024531018,27.092261733283205,26.808474075462502,26.855772018432617,499300,0.0,0 -1994-05-10,26.988215629473636,27.14902869140881,26.969296445716555,27.063892364501953,583400,0.0,0 -1994-05-11,27.03550073129159,27.073339080810545,26.74225352251971,26.817930221557617,210600,0.0,0 -1994-05-12,26.988222517185605,27.016601300063826,26.88416697996547,26.95038414001465,305200,0.0,0 -1994-05-13,27.026060894356565,27.026060894356565,26.817949819916297,26.95038414001465,321300,0.0,0 -1994-05-16,27.007140651502105,27.09227699681332,26.950383087961296,26.959842681884766,450400,0.0,0 -1994-05-17,26.97875027109149,27.357133865356445,26.940911911664994,27.357133865356445,470200,0.0,0 -1994-05-18,27.37605391979381,27.65984162456016,27.253079247728394,27.5557861328125,824800,0.0,0 -1994-05-19,27.499034853571303,27.76390343833222,27.499034853571303,27.6882266998291,531000,0.0,0 -1994-05-20,27.640907825265895,27.659826995577507,27.54631197370783,27.584150314331055,370400,0.0,0 -1994-05-23,27.55579777412585,27.565257368281056,27.451742238418543,27.53687858581543,262700,0.0,0 -1994-05-24,27.612556062085638,27.75444997812924,27.612556062085638,27.650394439697266,549600,0.0,0 -1994-05-25,27.546332430571105,27.744983866368493,27.451736508762824,27.726064682006836,738200,0.0,0 -1994-05-26,27.71660299135319,27.81119890599945,27.688224216959316,27.74498176574707,369600,0.0,0 -1994-05-27,27.697690178977698,27.773366928100586,27.65039221077589,27.773366928100586,162000,0.0,0 -1994-05-31,27.68823668933988,27.792292242323395,27.640938710711012,27.73553466796875,160000,0.0,0 -1994-06-01,27.669303890804688,27.858495712280273,27.58416757114067,27.858495712280273,200500,0.0,0 -1994-06-02,27.87741613679804,27.87741613679804,27.782820221844535,27.83011817932129,55100,0.0,0 -1994-06-03,27.849021506817127,28.08551115955844,27.763885231830255,27.990915298461914,550400,0.0,0 -1994-06-06,28.04769298045356,28.132829316650554,27.962556644256573,27.981475830078125,99300,0.0,0 -1994-06-07,27.934172534748924,27.981470490276774,27.867955397009933,27.943632125854492,120600,0.0,0 -1994-06-08,28.009851581326117,28.009851581326117,27.716604232788086,27.716604232788086,131900,0.0,0 -1994-06-09,27.839571671184842,27.867950439453125,27.782814134648277,27.867950439453125,80500,0.0,0 -1994-06-10,27.89633922195564,27.97201596450418,27.89633922195564,27.915258407592773,83100,0.0,0 -1994-06-13,27.877408235165877,27.962544534492814,27.86794864635177,27.95308494567871,109700,0.0,0 -1994-06-14,28.038227652606746,28.180121517245446,28.038227652606746,28.17066192626953,161000,0.0,0 -1994-06-15,28.18011883602541,28.18957842610128,28.038224984887314,28.057144165039062,142800,0.0,0 -1994-06-16,28.05714359899549,28.13282031807572,28.028764829340403,28.113901138305664,44000,0.0,0 -1994-06-17,28.128389643063663,28.156956050961153,27.918902651815387,27.95699119567871,403800,0.305,0 -1994-06-20,27.75702164288609,27.804632314657763,27.690366702405747,27.71893310546875,137400,0.0,0 -1994-06-21,27.699893680448263,27.699893680448263,27.366618919769095,27.480884552001953,139200,0.0,0 -1994-06-22,27.55705257411821,27.680840301645347,27.528486175458102,27.58561897277832,279900,0.0,0 -1994-06-23,27.63321768310335,27.6713061981731,27.385642335149978,27.423730850219727,922500,0.0,0 -1994-06-24,27.29043320324404,27.29043320324404,26.814326552803635,26.852415084838867,353800,0.0,0 -1994-06-27,26.957159181304327,27.319000244140625,26.823849316048847,27.319000244140625,371200,0.0,0 -1994-06-28,27.32851617014763,27.32851617014763,26.966675189497593,27.185684204101562,5382300,0.0,0 -1994-06-29,27.22378405445781,27.433271025146187,27.19521764936394,27.271394729614258,311800,0.0,0 -1994-06-30,27.31898836978958,27.32851049888327,27.00475810969789,27.099979400634766,271900,0.0,0 -1994-07-01,27.233292979578817,27.233292979578817,27.042850371330015,27.157115936279297,406900,0.0,0 -1994-07-05,27.21425807222407,27.338045810131316,27.12855886905751,27.299957275390625,112000,0.0,0 -1994-07-06,27.19520688231825,27.309472457454042,27.09998556970509,27.26186180114746,174800,0.0,0 -1994-07-07,27.261880662337592,27.37614631652832,27.23331424878991,27.37614631652832,66700,0.0,0 -1994-07-08,27.204733316319306,27.414220237201008,27.195211183551955,27.366609573364258,148400,0.0,0 -1994-07-11,27.385660349989738,27.433271025146187,27.1380848391762,27.271394729614258,124000,0.0,0 -1994-07-12,27.28090283262181,27.31899135315601,27.128548750485002,27.30946922302246,257300,0.0,0 -1994-07-13,27.319009080482534,27.44279685254467,27.319009080482534,27.357097625732422,532700,0.0,0 -1994-07-14,27.490396923270108,27.709405973923108,27.471352657995933,27.652273178100586,494200,0.0,0 -1994-07-15,27.633224454475968,27.718923634383025,27.623702323375184,27.66179084777832,49100,0.0,0 -1994-07-18,27.66179714006247,27.776062739264106,27.66179714006247,27.709407806396484,72300,0.0,0 -1994-07-19,27.757016637108542,27.76653876974563,27.652273178100586,27.652273178100586,609500,0.0,0 -1994-07-20,27.671312493793035,27.671312493793035,27.461825613248145,27.528480529785156,185300,0.0,0 -1994-07-21,27.528486175458102,27.604663238551726,27.471353378137884,27.58561897277832,86300,0.0,0 -1994-07-22,27.652276384181437,27.671320651663656,27.576099314252563,27.63323211669922,151600,0.0,0 -1994-07-25,27.64275737179614,27.699890180694098,27.61419096734716,27.671323776245117,120900,0.0,0 -1994-07-26,27.661795959446376,27.680840225167163,27.614185295144402,27.642751693725586,489600,0.0,0 -1994-07-27,27.642751693725586,27.642751693725586,27.52848609940085,27.642751693725586,83200,0.0,0 -1994-07-28,27.64274971425308,27.776059564752405,27.64274971425308,27.69988250732422,828200,0.0,0 -1994-07-29,27.89033114171661,28.06172955774628,27.88080900749274,27.976030349731445,459100,0.0,0 -1994-08-01,27.995063657683087,28.128373484624436,27.966497266195656,28.109329223632812,486300,0.0,0 -1994-08-02,28.204555583742216,28.26168837695709,28.052201468502556,28.147422790527344,505500,0.0,0 -1994-08-03,28.13790572911128,28.175994264785206,28.090295059518876,28.156949996948242,144100,0.0,0 -1994-08-04,28.13790340812839,28.166469807527506,27.985549277999777,27.995071411132812,231700,0.0,0 -1994-08-05,27.852230657896488,27.937929829151557,27.823664267478133,27.89984130859375,138400,0.0,0 -1994-08-08,27.928427946579713,27.995082905879425,27.899861535451265,27.966516494750977,328600,0.0,0 -1994-08-09,27.861754565884027,28.014108657836914,27.861754565884027,28.014108657836914,105900,0.0,0 -1994-08-10,28.033153437050245,28.14741900812518,27.9950649133586,28.118852615356445,840300,0.0,0 -1994-08-11,28.052197180825136,28.175984880536856,27.87127669663108,28.014108657836914,876200,0.0,0 -1994-08-12,28.06172349296171,28.24264400411416,28.06172349296171,28.233121871948242,184100,0.0,0 -1994-08-15,28.26169273695643,28.3283476726568,28.223604202270508,28.223604202270508,325900,0.0,0 -1994-08-16,28.24264629242608,28.452133217049603,28.128380697176883,28.423566818237305,1089500,0.0,0 -1994-08-17,28.461645182610518,28.480689441682188,28.385468146323838,28.404512405395508,133700,0.0,0 -1994-08-18,28.309295654296875,28.375950571747286,28.28072926110384,28.309295654296875,620000,0.0,0 -1994-08-19,28.318807624398318,28.347374007341557,28.22358634792085,28.290241241455078,103200,0.0,0 -1994-08-22,28.299771031279448,28.299771031279448,28.20454972902077,28.261682510375977,79700,0.0,0 -1994-08-23,28.385478286487572,28.556876679361366,28.34738975473784,28.423566818237305,268600,0.0,0 -1994-08-24,28.452127774661847,28.728269577026367,28.44260564354583,28.728269577026367,254700,0.0,0 -1994-08-25,28.699708366203875,28.766363296052393,28.575920639342346,28.652097702026367,147400,0.0,0 -1994-08-26,28.71874769518291,29.118677205526968,28.71874769518291,29.06154441833496,339500,0.0,0 -1994-08-29,29.13772659301758,29.242470054626466,29.03298313140869,29.042505264282227,350300,0.0,0 -1994-08-30,29.032993172570098,29.166303078905287,28.994904627902905,29.11869239807129,36000,0.0,0 -1994-08-31,29.07107166290283,29.185337257385253,29.004416732788087,29.042505264282227,356200,0.0,0 -1994-09-01,28.947280883789062,28.966325147528398,28.84253743322272,28.947280883789062,294600,0.0,0 -1994-09-02,29.080589600667963,29.080589600667963,28.775881392671444,28.8234920501709,99600,0.0,0 -1994-09-06,28.804447140687365,28.86157992840443,28.718747959111766,28.8330135345459,229800,0.0,0 -1994-09-07,28.899672314352237,28.899672314352237,28.775884591094716,28.80445098876953,27900,0.0,0 -1994-09-08,28.861581696962055,28.985369411267733,28.85205956509239,28.947280883789062,284800,0.0,0 -1994-09-09,28.661622392370344,28.718755194481382,28.528312520777924,28.642578125,488400,0.0,0 -1994-09-12,28.642578247111015,28.68066678201409,28.50926837495026,28.5568790435791,129400,0.0,0 -1994-09-13,28.61401172394448,28.718755194481382,28.556878921833444,28.642578125,389200,0.0,0 -1994-09-14,28.547364344196197,28.709240659690305,28.547364344196197,28.671152114868164,423500,0.0,0 -1994-09-15,28.74732923022877,29.03299331665039,28.74732923022877,29.03299331665039,779800,0.0,0 -1994-09-16,28.81678065575409,28.9030010765991,28.720980188148527,28.82636070251465,571300,0.288,0 -1994-09-19,28.8934284580023,29.017969097907482,28.826368113437972,28.8551082611084,167300,0.0,0 -1994-09-20,28.70181234395242,28.730552476473065,28.309030532836914,28.309030532836914,355600,0.0,0 -1994-09-21,28.395250930398856,28.395250930398856,28.040789295977547,28.309030532836914,397500,0.0,0 -1994-09-22,28.37611367679839,28.37611367679839,28.213252794791106,28.241992950439453,266400,0.0,0 -1994-09-23,28.251569292835836,28.30904959658525,28.098288482837408,28.146188735961914,176600,0.0,0 -1994-09-26,28.251551038081306,28.309031304689814,28.1940707714728,28.289871215820312,223000,0.0,0 -1994-09-27,28.28987580547895,28.36651617339085,28.203655391578067,28.270715713500977,479500,0.0,0 -1994-09-28,28.424001829689914,28.529382355516198,28.404841734085135,28.49106216430664,324000,0.0,0 -1994-09-29,28.4910421535831,28.4910421535831,28.261121167811076,28.347341537475586,195900,0.0,0 -1994-09-30,28.33777066535756,28.471891283787244,28.309030532836914,28.309030532836914,5200,0.0,0 -1994-10-03,28.328213417384486,28.35695357303283,28.194092691025546,28.241992950439453,72600,0.0,0 -1994-10-04,28.38567830511361,28.38567830511361,27.801295457792676,27.82045555114746,84200,0.0,0 -1994-10-05,27.772552075279354,27.830032348632812,27.59053120966007,27.830032348632812,461900,0.0,0 -1994-10-06,27.849177747800205,27.86833782881004,27.695897099721495,27.743797302246094,345200,0.0,0 -1994-10-07,27.743817992618546,27.944998993255627,27.71507784967039,27.868358612060547,188700,0.0,0 -1994-10-10,27.992899563847757,28.213240662399603,27.98331951608463,28.165340423583984,213600,0.0,0 -1994-10-11,28.289873532890955,28.66349529644759,28.289873532890955,28.586854934692383,461400,0.0,0 -1994-10-12,28.625185012817383,28.663505206944315,28.558124673095257,28.625185012817383,162400,0.0,0 -1994-10-13,28.950916189762495,29.01797655155215,28.69225479428811,28.72099494934082,1564500,0.0,0 -1994-10-14,28.81679702905752,28.855117237872758,28.62519598498134,28.845537185668945,72800,0.0,0 -1994-10-17,28.816787938071965,28.855108134798122,28.759307642982723,28.788047790527344,282300,0.0,0 -1994-10-18,28.759315156077765,28.759315156077765,28.625194432498454,28.72099494934082,132100,0.0,0 -1994-10-19,28.61560703052151,28.96048880256663,28.606026981298033,28.8551082611084,136700,0.0,0 -1994-10-20,28.85510460705681,28.85510460705681,28.577283214757788,28.663503646850586,290300,0.0,0 -1994-10-21,28.586841204342427,28.625161366814737,28.423980513835115,28.548521041870117,87800,0.0,0 -1994-10-24,28.558111681349185,28.673072211431773,28.299450488663364,28.309030532836914,149600,0.0,0 -1994-10-25,28.21323558557187,28.395256460317494,28.203655539532626,28.33777618408203,91800,0.0,0 -1994-10-26,28.44316291809082,28.471903062501152,28.30904224417594,28.44316291809082,201000,0.0,0 -1994-10-27,28.548542159354763,28.615602493286133,28.481481825423394,28.615602493286133,210300,0.0,0 -1994-10-28,28.67308024296995,29.247883054389327,28.67308024296995,29.21914291381836,192100,0.0,0 -1994-10-31,29.152083998489005,29.18082414045268,29.104183761882876,29.1137638092041,36300,0.0,0 -1994-11-01,28.98922882333968,28.98922882333968,28.778467741345803,28.788047790527344,435200,0.0,0 -1994-11-02,28.701825401071247,28.96048671142803,28.625185012817383,28.625185012817383,115600,0.0,0 -1994-11-03,28.720977366684913,28.826357870698768,28.682657183407148,28.778457641601562,87000,0.0,0 -1994-11-04,28.912579097393994,28.912579097393994,28.404836654663086,28.404836654663086,124400,0.0,0 -1994-11-07,28.471902068701862,28.567702546725755,28.395261686282744,28.49106216430664,115000,0.0,0 -1994-11-08,28.586864172318478,28.80720528356624,28.538963930742877,28.71140480041504,308300,0.0,0 -1994-11-09,29.0179691911935,29.0179691911935,28.51022658071702,28.759307861328125,318500,0.0,0 -1994-11-10,28.778459891262006,28.835940170671986,28.538958727053767,28.55811882019043,172100,0.0,0 -1994-11-11,28.51981533962468,28.548555496164443,28.376114556925867,28.452754974365234,302200,0.0,0 -1994-11-14,28.577294174077274,28.730575001025056,28.577294174077274,28.72099494934082,181400,0.0,0 -1994-11-15,28.692245352539512,28.874266274642434,28.404843896587533,28.625185012817383,316900,0.0,0 -1994-11-16,28.673094690919637,28.72099494934082,28.577294174077274,28.72099494934082,106900,0.0,0 -1994-11-17,28.740139917049575,28.740139917049575,28.414418331323013,28.52937889099121,104700,0.0,0 -1994-11-18,28.53896240331859,28.586862642330537,28.366521542875574,28.49106216430664,269300,0.0,0 -1994-11-21,28.47189267821934,28.558113080003988,28.20365142822266,28.203651428222656,283100,0.0,0 -1994-11-22,28.0982572555542,28.2036376953125,27.59051513671875,27.59051513671875,483600,0.0,0 -1994-11-23,27.609676735177224,27.753377342751012,27.351015641544404,27.743797302246094,601600,0.0,0 -1994-11-25,27.762976750639297,27.916257505646275,27.762976750639297,27.87793731689453,77300,0.0,0 -1994-11-28,27.868360783031775,28.01206150896697,27.80130044426202,28.00248146057129,79900,0.0,0 -1994-11-29,27.992883682250977,28.050363936218638,27.89708325897154,27.992883682250977,105500,0.0,0 -1994-11-30,28.136599300821157,28.174919490539676,27.954578399658203,27.954578399658203,218800,0.0,0 -1994-12-01,27.98331933897975,27.98331933897975,27.619277526285046,27.6767578125,439000,0.0,0 -1994-12-02,27.619254879500147,27.935396194458008,27.619254879500147,27.935396194458008,318500,0.0,0 -1994-12-05,27.992889608165587,28.088690051725358,27.897089164605813,27.964149475097656,139200,0.0,0 -1994-12-06,27.858770117780924,27.992890744207656,27.81086989405709,27.98331069946289,249900,0.0,0 -1994-12-07,27.81086560282214,27.897085992221175,27.753385343222785,27.78212547302246,531900,0.0,0 -1994-12-08,27.897108518977685,27.935428722987268,27.437266070862666,27.513906478881836,261500,0.0,0 -1994-12-09,27.51387462688741,27.638415145741707,27.398914147944986,27.61925506591797,235900,0.0,0 -1994-12-12,27.56179316959079,27.801294326782227,27.56179316959079,27.801294326782227,151100,0.0,0 -1994-12-13,27.78213093708849,27.91625156919857,27.78213093708849,27.90667152404785,70900,0.0,0 -1994-12-14,27.86835789875906,28.174919415692816,27.86835789875906,28.050378799438477,203300,0.0,0 -1994-12-15,28.0887021593062,28.222822838102346,28.0887021593062,28.1366024017334,130100,0.0,0 -1994-12-16,28.225746625108144,28.331967361637805,28.19677733332733,28.274028778076172,266100,0.363,0 -1994-12-19,28.274040201351067,28.331978808321047,28.187132290896095,28.312665939331055,1120200,0.0,0 -1994-12-20,28.341632895872603,28.360945763263317,28.22575569152832,28.22575569152832,675600,0.0,0 -1994-12-21,28.245062285689944,28.59269382151382,28.245062285689944,28.52509880065918,544500,0.0,0 -1994-12-22,28.52509260323335,28.554061891591406,28.409215449801124,28.43818473815918,222000,0.0,0 -1994-12-23,28.41889806033151,28.53477532051635,28.41889806033151,28.467180252075195,125800,0.0,0 -1994-12-27,28.56371784210205,28.67959499359131,28.544404983520508,28.62165641784668,95200,0.0,0 -1994-12-28,28.650622347485378,28.650622347485378,28.40921164351263,28.476806640625,358200,0.0,0 -1994-12-29,28.58303404872355,28.58303404872355,28.467156883661158,28.496126174926758,220100,0.0,0 -1994-12-30,28.554047873644837,28.583017147781103,28.15813446044922,28.15813446044922,2209500,0.0,0 -1995-01-03,28.245056627553478,28.331964494099797,28.23540019793722,28.293338775634766,324300,0.0,0 -1995-01-04,28.418869496039722,28.428525924682617,28.2740230663963,28.428525924682617,351800,0.0,0 -1995-01-05,28.447838781968407,28.496120925182883,28.399556638753932,28.428525924682617,89800,0.0,0 -1995-01-06,28.48645256542132,28.583016811405802,28.37057547023995,28.457483291625977,448400,0.0,0 -1995-01-09,28.44785116680598,28.48647689819336,28.428538301112287,28.48647689819336,36800,0.0,0 -1995-01-10,28.554056160497616,28.66993329067211,28.515430450439453,28.515430450439453,229800,0.0,0 -1995-01-11,28.61199568540312,28.61199568540312,28.312646422410374,28.534744262695312,222400,0.0,0 -1995-01-12,28.50578117112507,28.56371975074118,28.447842591508962,28.54440689086914,40300,0.0,0 -1995-01-13,28.69890737836475,28.88237953186035,28.66028166183936,28.88237953186035,170600,0.0,0 -1995-01-16,28.872725948537852,29.06585455020031,28.872725948537852,29.056198120117188,105100,0.0,0 -1995-01-17,28.99825240290442,29.085160252263773,28.95962669207804,29.065847396850586,89500,0.0,0 -1995-01-18,29.046531197713147,29.09481333068807,28.969279784953272,29.036874771118164,84500,0.0,0 -1995-01-19,28.940327187605128,28.969296484089217,28.85341929815286,28.872732162475586,139100,0.0,0 -1995-01-20,28.834091648794573,28.843748076004484,28.70855809506573,28.766496658325195,78700,0.0,0 -1995-01-23,28.573379937903468,28.853416442871094,28.554067075491908,28.853416442871094,53700,0.0,0 -1995-01-24,28.84376000401808,28.892042160034176,28.82444714161164,28.89204216003418,32400,0.0,0 -1995-01-25,28.74720514043172,29.075523909250894,28.74720514043172,28.969303131103516,15700,0.0,0 -1995-01-26,28.949972633516794,29.036880489988324,28.89203406253577,28.998254776000977,9800,0.0,0 -1995-01-27,29.191391005128573,29.191391005128573,28.998262384519055,29.114139556884766,91200,0.0,0 -1995-01-30,29.0562138979948,29.07552676864817,28.949993109401266,28.988618850708008,26600,0.0,0 -1995-01-31,29.04655167972638,29.15277244717219,28.99826951270556,29.104490280151367,127500,0.0,0 -1995-02-01,29.14311362974595,29.249334388502483,29.046549303603655,29.094831466674805,380200,0.0,0 -1995-02-02,29.085155072994098,29.268627166748047,29.085155072994098,29.268627166748047,131700,0.0,0 -1995-02-03,29.452100820795778,29.732137189255802,29.40381868830267,29.683855056762695,405100,0.0,0 -1995-02-06,29.674197242373513,29.89629504145408,29.645227964232568,29.80938720703125,405400,0.0,0 -1995-02-07,29.857682706005402,29.857682706005402,29.75146197192841,29.848026275634766,702900,0.0,0 -1995-02-08,29.809400554152223,29.954247009711757,29.790087693410953,29.848026275634766,521500,0.0,0 -1995-02-09,29.799744123781586,29.848026275634766,29.741805541557774,29.848026275634766,390700,0.0,0 -1995-02-10,29.809404354680915,29.886655807495117,29.722496470264936,29.886655807495117,148300,0.0,0 -1995-02-13,29.867339607357057,29.954247482063234,29.867339607357057,29.89630889892578,79700,0.0,0 -1995-02-14,29.992863644015404,29.992863644015404,29.8190479500063,29.934925079345703,170200,0.0,0 -1995-02-15,29.934950245088366,30.13773539190993,29.90598093839957,30.099109649658203,431500,0.0,0 -1995-02-16,30.060474395751957,30.08944369327436,29.97356650318473,30.060474395751953,99300,0.0,0 -1995-02-17,30.03149557252039,30.05080843140947,29.934931278074988,29.94458770751953,49100,0.0,0 -1995-02-21,29.944581506790655,29.992863644015404,29.925268651900755,29.934925079345703,168000,0.0,0 -1995-02-22,29.963901510614257,30.15703010559082,29.9445886511166,30.15703010559082,386400,0.0,0 -1995-02-23,30.272915384653583,30.37913614038921,30.195663925936763,30.205320358276367,402800,0.0,0 -1995-02-24,30.24393272886471,30.29221486923646,30.166681304269908,30.28255844116211,307600,0.0,0 -1995-02-27,30.195651995794677,30.282559852514265,29.992866996782304,30.041149139404297,280900,0.0,0 -1995-02-28,30.012177038998374,30.292213439941406,30.012177038998374,30.292213439941406,493500,0.0,0 -1995-03-01,30.263269054228044,30.301894796479772,30.07014034296941,30.099109649658203,242600,0.0,0 -1995-03-02,30.089449380460895,30.137731552124023,30.002541471467268,30.137731552124023,488600,0.0,0 -1995-03-03,30.041148672647616,30.14736938476562,29.9638972456527,30.147369384765625,290000,0.0,0 -1995-03-06,29.944577764152108,30.166675567626953,29.90595205919996,30.166675567626953,85700,0.0,0 -1995-03-07,30.060458636130058,30.128053628244707,29.7997350951164,29.934925079345703,180900,0.0,0 -1995-03-08,29.983218664368145,30.050813682291036,29.876997921917887,30.012187957763672,155900,0.0,0 -1995-03-09,30.002525329589844,30.031494617001744,29.925273896491447,30.002525329589844,63500,0.0,0 -1995-03-10,30.03149368329688,30.5239715539876,29.992867967948587,30.446720123291016,192100,0.0,0 -1995-03-13,30.4274134651063,30.523977773151703,30.388787741888137,30.417757034301758,261300,0.0,0 -1995-03-14,30.504658705347385,30.678474424466174,30.504658705347385,30.639848709106445,223300,0.0,0 -1995-03-15,30.59156751617634,30.639849661877374,30.466033937353647,30.581911087036133,278500,0.0,0 -1995-03-16,30.552935646378014,30.78468989906862,30.552935646378014,30.765377044677734,20400,0.0,0 -1995-03-17,30.718299478480375,30.834803774858937,30.698882095750616,30.795969009399414,89900,0.268,0 -1995-03-20,30.834803774858937,30.834803774858937,30.737716861210135,30.795969009399414,91700,0.0,0 -1995-03-21,30.79600190453222,30.990175939239233,30.66978878197266,30.718332290649414,104400,0.0,0 -1995-03-22,30.77657024454611,30.77657024454611,30.65035718045176,30.74744415283203,74900,0.0,0 -1995-03-23,30.708604972119513,30.854235409862728,30.66977018872132,30.766857147216797,220500,0.0,0 -1995-03-24,30.863953778516752,31.203758239746097,30.863953778516752,31.203758239746094,134000,0.0,0 -1995-03-27,31.252282696166272,31.329952239990234,31.17461315234231,31.329952239990234,132100,0.0,0 -1995-03-28,31.252282696166272,31.329952239990234,31.213447924254293,31.329952239990234,121900,0.0,0 -1995-03-29,31.300834073978997,31.621221023247394,31.14549494706099,31.32025146484375,246100,0.0,0 -1995-03-30,31.38821025516676,31.38821025516676,31.135784190634023,31.26199722290039,298400,0.0,0 -1995-03-31,31.019289312906864,31.17462847691516,30.78628056689442,31.135793685913086,541300,0.0,0 -1995-04-03,31.12606743297903,31.21344566345215,31.10665004842945,31.21344566345215,193300,0.0,0 -1995-04-04,31.22316730626581,31.417341232299805,31.22316730626581,31.417341232299805,66900,0.0,0 -1995-04-05,31.349380358187908,31.446467321204903,31.329962965584507,31.417341232299805,107200,0.0,0 -1995-04-06,31.495011115896293,31.562971990683984,31.43675893750684,31.533845901489258,352500,0.0,0 -1995-04-07,31.601822960358373,31.601822960358373,31.35910542610063,31.504735946655273,361400,0.0,0 -1995-04-10,31.456177358589184,31.562973022460938,31.436759965157954,31.562973022460938,285400,0.0,0 -1995-04-11,31.640655421622007,31.65036412227301,31.436772707950922,31.45619010925293,250300,0.0,0 -1995-04-12,31.504720842167252,31.562973022460938,31.44646866187357,31.562973022460938,150900,0.0,0 -1995-04-13,31.621218062570314,31.74743109137394,31.601800673523602,31.737722396850586,243400,0.0,0 -1995-04-17,31.85423036780724,31.883356454702522,31.456173846905045,31.553260803222656,178900,0.0,0 -1995-04-18,31.582393937141816,31.582393937141816,31.36880258558414,31.44647216796875,329500,0.0,0 -1995-04-19,31.446467321204903,31.5144281953168,31.252293395170913,31.417341232299805,223000,0.0,0 -1995-04-20,31.50472376751922,31.553267255604766,31.339675908028365,31.46588897705078,207900,0.0,0 -1995-04-21,31.475596804175233,31.630935961752904,31.475596804175233,31.621227264404297,145000,0.0,0 -1995-04-24,31.601823372616572,31.990171432495117,31.601823372616572,31.990171432495117,169000,0.0,0 -1995-04-25,31.941605775151686,31.990149248974106,31.883353606564782,31.90277099609375,293200,0.0,0 -1995-04-26,31.84453507838332,31.95133077529253,31.766865480631164,31.931913375854492,204400,0.0,0 -1995-04-27,31.88335422635042,32.02898465064861,31.863936836443994,32.00956726074219,502200,0.0,0 -1995-04-28,31.999853308600848,32.10664893554096,31.795970748078815,32.05810546875,130800,0.0,0 -1995-05-01,32.029006833477006,32.09696774521824,31.970754623413086,31.970754623413086,518700,0.0,0 -1995-05-02,31.9998691258286,32.08724740924257,31.93190823872884,32.03870391845703,228400,0.0,0 -1995-05-03,32.14550510709755,32.48530960083008,32.14550510709755,32.48530960083008,724700,0.0,0 -1995-05-04,32.52414881327506,32.737740238317464,32.38822699733899,32.46589660644531,311400,0.0,0 -1995-05-05,32.60181577990869,32.60181577990869,32.35909827112438,32.427059173583984,314900,0.0,0 -1995-05-08,32.39792603006261,32.76685656321885,32.368799935339744,32.66006088256836,183100,0.0,0 -1995-05-09,32.795991211482296,32.83482601457464,32.58239979447442,32.630943298339844,180600,0.0,0 -1995-05-10,32.71829367605042,32.7280023685359,32.51441113385545,32.66975021362305,330300,0.0,0 -1995-05-11,32.71832156902103,32.75715637207031,32.6115258606355,32.75715637207031,351700,0.0,0 -1995-05-12,32.630923683609446,32.854223667162856,32.621214988672335,32.776554107666016,94600,0.0,0 -1995-05-15,32.863958179950714,32.93191909790039,32.79599726200104,32.93191909790039,147200,0.0,0 -1995-05-16,32.92219074318953,33.02898640764694,32.863938562576394,32.951316833496094,221600,0.0,0 -1995-05-17,32.951316817700246,32.961025514464446,32.79597766947302,32.825103759765625,189200,0.0,0 -1995-05-18,32.76685062719851,32.78626802016277,32.3493766784668,32.3493766784668,577800,0.0,0 -1995-05-19,32.300832613399805,32.42704566539085,32.252289131864785,32.36879348754883,363900,0.0,0 -1995-05-22,32.475597361222604,32.77656702286622,32.45617996369721,32.728023529052734,216000,0.0,0 -1995-05-23,32.78628181444064,33.02899932861328,32.68919480877158,33.02899932861328,136800,0.0,0 -1995-05-24,33.08722153607537,33.19401714549345,32.80566947488224,33.009552001953125,370800,0.0,0 -1995-05-25,32.91249842703991,33.06783765265425,32.75715920142556,33.03871154785156,379900,0.0,0 -1995-05-26,32.912487036833156,32.922195735074105,32.53384780543596,32.66006088256836,518600,0.0,0 -1995-05-30,32.73773076298192,32.8251090479365,32.54355679641619,32.650352478027344,61500,0.0,0 -1995-05-31,32.59210628995109,33.3299674987793,32.59210628995109,33.3299674987793,564500,0.0,0 -1995-06-01,33.184320612488506,33.49499886281023,33.08723365926297,33.24257278442383,810100,0.0,0 -1995-06-02,33.106657773438926,33.504714362503734,32.99015340590776,33.271705627441406,112900,0.0,0 -1995-06-05,33.271703308530306,33.58238160029365,33.242577218677496,33.4755859375,257200,0.0,0 -1995-06-06,33.44646923767834,33.56297362979798,33.41734313964844,33.41734313964844,165800,0.0,0 -1995-06-07,33.34936843297192,33.368785823617024,33.203738003133616,33.24257278442383,41900,0.0,0 -1995-06-08,33.23286642012049,33.3299533801559,33.1649055480957,33.1649055480957,141100,0.0,0 -1995-06-09,33.096942869035885,33.13577765092973,32.776555918411596,32.97072982788086,304900,0.0,0 -1995-06-12,33.077535186365445,33.291126549470825,33.0581177897195,33.15520477294922,378500,0.0,0 -1995-06-13,33.3105407252925,33.53384076512979,33.28141463313981,33.51442337036133,120000,0.0,0 -1995-06-14,33.46588838643079,33.52414058553685,33.35909268806969,33.48530578613281,389400,0.0,0 -1995-06-15,33.53384486852562,33.69889274425374,33.475592677092166,33.63093185424805,274500,0.0,0 -1995-06-16,33.564741615070105,33.73075866699219,33.564741615070105,33.73075866699219,325100,0.316,0 -1995-06-19,33.828423859088154,34.13116090863542,33.808892436536716,34.111629486083984,134600,0.0,0 -1995-06-20,34.013976963187744,34.131165514309835,33.994445538000726,34.02374267578125,287800,0.0,0 -1995-06-21,34.13117717696907,34.16047432476046,34.00422286987305,34.00422286987305,158200,0.0,0 -1995-06-22,34.150689338069924,34.472957781923604,34.150689338069924,34.453426361083984,297000,0.0,0 -1995-06-23,34.37530890272206,34.39484032823497,34.27765177515751,34.385074615478516,315400,0.0,0 -1995-06-26,34.287428907157015,34.346023203210265,33.97492599487305,33.97492599487305,132900,0.0,0 -1995-06-27,33.96514945315875,34.18976084977251,33.88702374998875,33.90655517578125,127700,0.0,0 -1995-06-28,33.90655360180874,34.219056399982094,33.79913076493665,34.08233642578125,212600,0.0,0 -1995-06-29,34.0823369513423,34.17022836468387,33.78936557353706,34.02374267578125,89200,0.0,0 -1995-06-30,34.092114313247215,34.20930290441277,33.935862858359805,34.00422286987305,714100,0.0,0 -1995-07-03,34.04327313992087,34.13116455078125,34.04327313992087,34.13116455078125,9500,0.0,0 -1995-07-05,34.22882053979854,34.41436906768903,34.15069484384465,34.25811767578125,409300,0.0,0 -1995-07-06,34.26787952151461,34.69757080078125,34.19951954526765,34.69757080078125,202500,0.0,0 -1995-07-07,34.629228409681375,34.86360559011915,34.60969697797823,34.85383987426758,481700,0.0,0 -1995-07-10,34.88313684006827,34.97102828227449,34.81477682946343,34.87337112426758,400400,0.0,0 -1995-07-11,34.84407552655789,34.87337267526295,34.65852691809247,34.70735549926758,420500,0.0,0 -1995-07-12,34.77570776438435,35.19563346892479,34.70734776597079,35.13703918457031,203400,0.0,0 -1995-07-13,35.088203691572865,35.16632938863175,35.01984370664634,35.05890655517578,215600,0.0,0 -1995-07-14,34.873358284892035,35.058906816791485,34.84406114827633,35.02960968017578,543700,0.0,0 -1995-07-17,35.07844410201734,35.26399266491777,35.049146960506754,35.22492980957031,171500,0.0,0 -1995-07-18,35.166319092914826,35.166319092914826,34.89287923326428,34.922176361083984,221200,0.0,0 -1995-07-19,34.78545589948529,34.824518735981066,33.877244950958584,34.54131317138672,486600,0.0,0 -1995-07-20,34.58039013714858,34.736641546974724,34.39484158798003,34.66828155517578,318900,0.0,0 -1995-07-21,34.638984768389314,34.76593904016519,34.49249907018637,34.62921905517578,94000,0.0,0 -1995-07-24,34.678049133446024,34.922191974430575,34.678049133446024,34.88312911987305,108400,0.0,0 -1995-07-25,34.92218201582416,35.1956219197512,34.814759196424255,35.146793365478516,107400,0.0,0 -1995-07-26,35.127269832920845,35.29328695473337,35.107738406825256,35.11750411987305,167800,0.0,0 -1995-07-27,35.283507206659586,35.43975855327086,35.283507206659586,35.41046142578125,187700,0.0,0 -1995-07-28,35.43976818744322,35.43976818744322,35.15656254472185,35.18585968017578,415600,0.0,0 -1995-07-31,35.21516525446871,35.24446239694331,35.01985097130471,35.09797668457031,342500,0.0,0 -1995-08-01,35.146809618342814,35.146809618342814,34.84407244185806,35.03938674926758,141000,0.0,0 -1995-08-02,35.24445596407246,35.49836448584189,34.90265603092129,34.96125030517578,240400,0.0,0 -1995-08-03,34.717115160805385,34.97102373863406,34.65852087361415,34.95149230957031,1193600,0.0,0 -1995-08-04,35.019848134974815,35.049145275076576,34.95148814140403,34.99055099487305,240500,0.0,0 -1995-08-07,35.06869125366211,35.17611414527734,35.04915981882298,35.06869125366211,193100,0.0,0 -1995-08-08,35.08822268850125,35.19564558011647,34.96126836204689,35.06869125366211,951900,0.0,0 -1995-08-09,35.18586081289647,35.18586081289647,35.0296094187787,35.05890655517578,107100,0.0,0 -1995-08-10,35.0979662756225,35.176091965718484,34.83429207154854,34.980777740478516,280800,0.0,0 -1995-08-11,34.95149767177953,34.99056053589998,34.63899475881586,34.78548049926758,257200,0.0,0 -1995-08-14,34.87336525893171,35.09797668457031,34.795239545666114,35.09797668457031,254800,0.0,0 -1995-08-15,35.08820395340719,35.08820395340719,34.785466875044925,35.02960968017578,44400,0.0,0 -1995-08-16,35.000319276480404,35.12727355957031,34.96125642014504,35.12727355957031,374900,0.0,0 -1995-08-17,35.14681699301864,35.14681699301864,34.94173692720775,35.06869125366211,353800,0.0,0 -1995-08-18,35.244439330120905,35.25420503788764,35.07842229808654,35.10771942138672,85400,0.0,0 -1995-08-21,35.254221236522895,35.40070692033116,35.0003127179219,35.01007843017578,266700,0.0,0 -1995-08-22,35.05890638100809,35.13703207767886,34.883123563498856,35.07843780517578,220200,0.0,0 -1995-08-23,35.10774374208027,35.127275171144014,34.95149230957031,34.95149230957031,176500,0.0,0 -1995-08-24,34.961253854771286,35.05891098844383,34.84406529436423,34.99055099487305,167400,0.0,0 -1995-08-25,35.049139714724085,35.244453951083656,35.049139714724085,35.18585968017578,195000,0.0,0 -1995-08-28,35.283517934220086,35.283517934220086,35.000312282381614,35.05890655517578,293000,0.0,0 -1995-08-29,35.09796481120583,35.15655907633305,34.853822039842406,35.146793365478516,1133100,0.0,0 -1995-08-30,35.17610124038599,35.26399266491777,35.13703838503853,35.22492980957031,437400,0.0,0 -1995-08-31,35.215152398106795,35.312809504036096,35.185855266328005,35.254215240478516,491900,0.0,0 -1995-09-01,35.24444437000677,35.469055680760476,35.21514724251715,35.41046142578125,629900,0.0,0 -1995-09-05,35.517915499536066,35.76205844358017,35.45932119296548,35.74252700805664,272200,0.0,0 -1995-09-06,35.771789217892476,35.84991488367002,35.762023509670286,35.81085205078125,214500,0.0,0 -1995-09-07,35.84993761779502,35.869469046625206,35.78157761688939,35.830406188964844,258800,0.0,0 -1995-09-08,35.967124938964844,35.967124938964844,35.73274780116002,35.967124938964844,107300,0.0,0 -1995-09-11,36.025703091367035,36.13312589809109,36.025703091367035,36.06476593017578,260700,0.0,0 -1995-09-12,36.07454160088799,36.23079299926758,35.98665018929947,36.23079299926758,139500,0.0,0 -1995-09-13,36.19172108585981,36.4456295446381,36.181955375906796,36.39680099487305,239800,0.0,0 -1995-09-14,36.52375993878243,36.75813700790831,36.426102826646655,36.72883987426758,457600,0.0,0 -1995-09-15,36.69907236558231,36.80706856569505,36.571440492721806,36.71870803833008,431200,0.312,0 -1995-09-18,36.5910899653207,36.610725645473806,36.40455100386615,36.58127212524414,307500,0.0,0 -1995-09-19,36.64999175071716,36.777623653411865,36.52235984802246,36.75798797607422,549600,0.0,0 -1995-09-20,36.816878372022025,36.9346923828125,36.78742486932441,36.9346923828125,290800,0.0,0 -1995-09-21,36.885635003810975,36.91508853189493,36.4831034533302,36.63037109375,508500,0.0,0 -1995-09-22,36.335818076057066,36.67944240263421,36.30636456235045,36.64017105102539,449900,0.0,0 -1995-09-25,36.679450526009695,36.679450526009695,36.45364020424893,36.58127212524414,130000,0.0,0 -1995-09-26,36.68925951759287,36.77762005697161,36.48308492570916,36.57144546508789,466600,0.0,0 -1995-09-27,36.41436789921059,36.561635496538216,36.18855758330823,36.54199981689453,654400,0.0,0 -1995-09-28,36.57145614624023,36.81690216064453,36.54200262451172,36.81690216064453,456200,0.0,0 -1995-09-29,36.78743647993996,37.01324673855716,36.69907594395932,36.748165130615234,606600,0.0,0 -1995-10-02,36.74818068134541,36.8365412547176,36.47328111974304,36.561641693115234,293100,0.0,0 -1995-10-03,36.56163882390624,36.65981723105959,36.414371213176224,36.60091018676758,839700,0.0,0 -1995-10-04,36.620548742030024,36.620548742030024,36.512552485686236,36.561641693115234,248800,0.0,0 -1995-10-05,36.60089184864458,36.66961669921875,36.50271349068147,36.66961669921875,268800,0.0,0 -1995-10-06,36.689244513718315,36.807058518043874,36.689244513718315,36.69906234741211,75300,0.0,0 -1995-10-09,36.561625214899074,36.58126088902093,36.32599712543678,36.39472198486328,358200,0.0,0 -1995-10-10,36.02163803471245,36.37508010864258,35.98236669316466,36.37508010864258,360800,0.0,0 -1995-10-11,36.50273013275286,36.50273013275286,36.36528036893937,36.49291229248047,228100,0.0,0 -1995-10-12,36.52235131085238,36.738343711077846,36.52235131085238,36.71870803833008,199800,0.0,0 -1995-10-13,36.885625608440144,36.98380401037903,36.8365364074707,36.8365364074707,488100,0.0,0 -1995-10-16,36.72853398233668,36.79725885212453,36.65980911254883,36.65980911254883,443600,0.0,0 -1995-10-17,36.69907975862812,36.94452571742044,36.630354890166274,36.90525436401367,146000,0.0,0 -1995-10-18,37.08197712986792,37.13106632384444,36.89543819275712,37.01325225830078,228100,0.0,0 -1995-10-19,36.9936151554869,37.189971923828125,36.944525963401595,37.189971923828125,500600,0.0,0 -1995-10-20,37.160510013777895,37.18996352237534,36.96415328979492,36.96415328979492,748400,0.0,0 -1995-10-23,36.787434120777284,36.95433734470395,36.787434120777284,36.88561248779297,533000,0.0,0 -1995-10-24,36.934698817388266,36.973970161160075,36.836520457958734,36.92488098144531,172200,0.0,0 -1995-10-25,36.95433560696108,37.00342478816055,36.62052917480469,36.62052917480469,302700,0.0,0 -1995-10-26,36.67944526672363,36.7088987827301,35.992196559906006,36.2867317199707,606800,0.0,0 -1995-10-27,36.247470765569666,36.561641693115234,36.08056746031109,36.561641693115234,905800,0.0,0 -1995-10-30,36.64997750285341,36.816880695338945,36.64997750285341,36.797245025634766,488700,0.0,0 -1995-10-31,36.89543483648269,36.97397753970033,36.64017105102539,36.64017105102539,508200,0.0,0 -1995-11-01,36.620521687371244,36.9346923828125,36.591068184673624,36.9346923828125,415700,0.0,0 -1995-11-02,36.87579872868896,37.17033386230469,36.87579872868896,37.17033386230469,326000,0.0,0 -1995-11-03,37.21943664550781,37.22925448688093,37.111440390403466,37.21943664550781,615000,0.0,0 -1995-11-06,37.209614773412554,37.209614773412554,37.08198284938766,37.091800689697266,311200,0.0,0 -1995-11-07,37.072171250767965,37.072171250767965,36.83654304366563,36.9543571472168,358200,0.0,0 -1995-11-08,37.003433469598576,37.30778646444006,37.003433469598576,37.288150787353516,357200,0.0,0 -1995-11-09,37.43542361384549,37.43542361384549,37.24888465537104,37.42560577392578,503700,0.0,0 -1995-11-10,37.21942497013122,37.455053089171884,37.20960713183786,37.40596389770508,795600,0.0,0 -1995-11-13,37.337238075228285,37.48450564586421,37.26851320893152,37.36669158935547,818500,0.0,0 -1995-11-14,37.297952094553516,37.37649476808771,37.12123107910156,37.12123107910156,341800,0.0,0 -1995-11-15,37.16051723483221,37.504141568575704,37.1408815586183,37.49432373046875,584700,0.0,0 -1995-11-16,37.49432208240032,37.73976802428563,37.48450424472491,37.700496673583984,577700,0.0,0 -1995-11-17,37.75940656810535,37.82813143705406,37.710317375999125,37.81831359863281,267000,0.0,0 -1995-11-20,37.87721582345027,37.88703366062587,37.61213421970917,37.621952056884766,448800,0.0,0 -1995-11-21,37.661241207967116,37.92632293701172,37.651423366150645,37.92632293701172,119200,0.0,0 -1995-11-22,37.89683981642603,37.93611115302336,37.80847930908203,37.80847930908203,351600,0.0,0 -1995-11-24,37.847774019515505,37.906681060791016,37.81832049887775,37.906681060791016,62400,0.0,0 -1995-11-27,37.98522497519874,38.10303906144903,37.916500091552734,37.916500091552734,273000,0.0,0 -1995-11-28,37.88703824433491,38.31902313232422,37.79867769906437,38.31902313232422,479000,0.0,0 -1995-11-29,38.387745138870834,38.387745138870834,38.23065973676804,38.35829162597656,549200,0.0,0 -1995-11-30,38.358299980535456,38.45647837823327,38.2306680635283,38.26993942260742,286200,0.0,0 -1995-12-01,38.31902313232422,38.377930162504576,38.23066258705368,38.31902313232422,465200,0.0,0 -1995-12-04,38.407364806897185,38.790260314941406,38.35827563919921,38.790260314941406,631700,0.0,0 -1995-12-05,38.75101230190662,39.08481884314422,38.72155878356212,39.04554748535156,567700,0.0,0 -1995-12-06,39.143717526073615,39.29098508636735,38.957178616368225,39.1338996887207,272800,0.0,0 -1995-12-07,39.08480831978451,39.13389750380835,38.8982694204939,38.9277229309082,289700,0.0,0 -1995-12-08,39.09463023803772,39.10444807586747,38.80991294097517,39.05535888671875,296900,0.0,0 -1995-12-11,39.13389518078934,39.300798396562904,39.055352491013544,39.22225570678711,186500,0.0,0 -1995-12-12,39.04552795980972,39.18297764334941,39.04552795980972,39.104434967041016,299400,0.0,0 -1995-12-13,39.153527326450615,39.39897320989125,39.153527326450615,39.349884033203125,390700,0.0,0 -1995-12-14,39.38917426842485,39.45789914875361,38.967007146405344,39.065185546875,395000,0.0,0 -1995-12-15,39.118993352228514,39.118993352228514,38.94117974608202,39.0794792175293,416700,0.382,0 -1995-12-18,38.733728508113586,38.733728508113586,38.31883011552476,38.32870864868164,862300,0.0,0 -1995-12-19,38.34847128181487,38.7831268038138,38.29907860886044,38.733734130859375,1022600,0.0,0 -1995-12-20,38.85226397203656,38.89177809761198,38.35833740234375,38.35833740234375,1349800,0.0,0 -1995-12-21,38.58555143269825,38.674458233234425,38.40773783162591,38.55591583251953,857600,0.0,0 -1995-12-22,38.76337506292059,38.80288920671562,38.65471116748427,38.6942253112793,332800,0.0,0 -1995-12-26,38.85227281582065,38.90166548403298,38.773244546680914,38.88190841674805,432200,0.0,0 -1995-12-27,38.98069067927381,38.98069067927381,38.792998554867786,38.86214828491211,151800,0.0,0 -1995-12-28,38.783148193359374,38.980718994140624,38.723876953125,38.822662353515625,256200,0.0,0 -1995-12-29,38.86216507248836,38.901679221011484,38.72386555265744,38.87204360961914,339200,0.0,0 -1996-01-02,38.82262013382368,39.28691101074219,38.78310601663913,39.28691101074219,514400,0.0,0 -1996-01-03,39.41535643612968,39.514141790606196,39.198028656281345,39.395599365234375,610300,0.0,0 -1996-01-04,39.44499880730351,39.59317686443087,38.704108521666704,39.02022171020508,1129700,0.0,0 -1996-01-05,38.76337516471131,39.03997417200283,38.674468340939036,38.94118881225586,302400,0.0,0 -1996-01-08,39.079492190584915,39.13876341230977,39.030099505814206,39.08937072753906,179900,0.0,0 -1996-01-09,39.20790828509636,39.23754389226574,38.32871860573793,38.417625427246094,415500,0.0,0 -1996-01-10,38.36822326087653,38.44725152711933,37.70636153109314,37.91381072998047,787700,0.0,0 -1996-01-11,37.97309423771216,38.141029357910156,37.795280581031925,38.141029357910156,513200,0.0,0 -1996-01-12,38.23981316909097,38.249691705171855,37.72612929288515,38.081756591796875,390400,0.0,0 -1996-01-15,38.0916228605488,38.22004378824256,37.8446595380608,38.002716064453125,154200,0.0,0 -1996-01-16,38.19041912703864,38.496653734627415,37.864427447992526,38.467018127441406,454600,0.0,0 -1996-01-17,38.378104382357236,38.64482479891416,38.22004783921239,38.34846878051758,407600,0.0,0 -1996-01-18,38.49663999897831,38.50651853118231,38.17064843624639,38.47688293457031,425600,0.0,0 -1996-01-19,38.47689223149637,38.83251947676822,38.43737809313283,38.733734130859375,169800,0.0,0 -1996-01-22,38.70409624604532,38.832517188158285,38.634946507984495,38.74361038208008,288200,0.0,0 -1996-01-23,38.72384804255239,38.83251190185547,38.64481978124106,38.83251190185547,362200,0.0,0 -1996-01-24,38.891786364031475,39.227656502811534,38.87202929704441,39.14862823486328,1506500,0.0,0 -1996-01-25,39.178261444640476,39.19801851042194,38.96093372104439,39.01032638549805,298400,0.0,0 -1996-01-26,38.98068951590708,39.36595228608457,38.93129685306381,39.346195220947266,726300,0.0,0 -1996-01-29,39.316580243693735,39.5042724609375,39.28694463044472,39.5042724609375,254800,0.0,0 -1996-01-30,39.58327279349813,39.91914283966208,39.53388013965049,39.84011459350586,272100,0.0,0 -1996-01-31,39.830262114167944,40.26491775231858,39.81050503970655,40.25503921508789,498000,0.0,0 -1996-02-01,40.215490935309305,40.40318298339844,40.18585534876891,40.40318298339844,373900,0.0,0 -1996-02-02,40.3834303292308,40.47233709854662,40.146345611055274,40.235252380371094,496200,0.0,0 -1996-02-05,40.16613397723689,40.62054670791886,40.10686275149577,40.561275482177734,295300,0.0,0 -1996-02-06,40.58101223530326,40.986032075042175,40.52174103924391,40.94651794433594,301600,0.0,0 -1996-02-07,40.93664565421489,41.18360900878906,40.897131517483025,41.18360900878906,585100,0.0,0 -1996-02-08,41.12434936961576,41.66766890248361,41.04532107392589,41.62815475463867,1526600,0.0,0 -1996-02-09,41.608392338330574,41.96401962327357,41.42070016016621,41.61827087402344,804600,0.0,0 -1996-02-12,41.69729853923245,42.122075567706034,41.65778439704886,41.934383392333984,626500,0.0,0 -1996-02-13,41.75657123479222,42.1615912065515,41.72693562710251,41.84547805786133,1045900,0.0,0 -1996-02-14,41.81583152801885,41.954130994447446,41.460204328631015,41.47996139526367,431400,0.0,0 -1996-02-15,41.39106437853135,41.66766337676497,41.17373659420493,41.22312927246094,889500,0.0,0 -1996-02-16,41.14411314596226,41.24289853166685,40.92678529741216,41.055206298828125,606100,0.0,0 -1996-02-20,40.73909147501281,40.857633933233025,40.38346410035218,40.650184631347656,492300,0.0,0 -1996-02-21,40.72921454053743,41.18362731494071,40.72921454053743,41.15399169921875,434000,0.0,0 -1996-02-22,41.381177036883926,41.93437491562957,41.351541436236836,41.80595397949219,721400,0.0,0 -1996-02-23,42.04303562833235,42.11218535798421,41.30214566777668,41.687408447265625,1430400,0.0,0 -1996-02-26,41.56886947338398,41.65777627596488,41.074942792378934,41.09469985961914,1408400,0.0,0 -1996-02-27,41.19349585230275,41.203374388478366,40.77859733292704,40.96628952026367,601000,0.0,0 -1996-02-28,41.292278822078266,41.5589992833692,40.778594970703125,40.778594970703125,865900,0.0,0 -1996-02-29,40.541513767727665,41.06507620186255,40.38345718383789,40.38345718383789,914300,0.0,0 -1996-03-01,40.86750190159857,41.02555847167969,40.21551855001397,41.02555847167969,1452600,0.0,0 -1996-03-04,41.114456275390154,41.50959761393307,40.976156806900136,41.26263427734375,652600,0.0,0 -1996-03-05,41.16386276947253,41.647911071777344,41.14410569590907,41.647911071777344,402000,0.0,0 -1996-03-06,41.58861744030151,41.70715981780356,41.28238296508789,41.28238296508789,624700,0.0,0 -1996-03-07,41.361431931995206,41.50960997808547,41.242889495122995,41.48985290527344,534200,0.0,0 -1996-03-08,40.581021658078896,41.01567719677302,39.198026762233944,40.146366119384766,2289900,0.0,0 -1996-03-11,39.9883165556681,40.66993558786699,39.869774115285686,40.61066436767578,1511400,0.0,0 -1996-03-12,40.343929256168934,40.49210725294722,39.770974335292884,40.29453659057617,1385300,0.0,0 -1996-03-13,40.561273196331626,40.73908686353425,40.33406684379494,40.57115173339844,1019300,0.0,0 -1996-03-14,40.630419966264206,40.976168738162876,40.610662893584276,40.74896240234375,725600,0.0,0 -1996-03-15,40.68188323379725,40.850564213059336,40.48343502290068,40.72157287597656,869200,0.285,0 -1996-03-18,41.09862473807266,41.50544357299805,41.00932304260123,41.50544357299805,917600,0.0,0 -1996-03-19,41.872560823711986,41.872560823711986,41.27721635702414,41.41613006591797,858300,0.0,0 -1996-03-20,41.614583971403746,41.614583971403746,41.04900664990399,41.36652374267578,744300,0.0,0 -1996-03-21,41.41615110316165,41.43599592879805,41.12840113143389,41.26731491088867,650800,0.0,0 -1996-03-22,41.2871364758169,41.48558462037742,41.23752443967677,41.37643814086914,344500,0.0,0 -1996-03-25,41.75350039994012,41.793190039103564,41.18792304186108,41.29706954956055,802400,0.0,0 -1996-03-26,41.22760129624836,41.60465276418035,41.18791166804499,41.495506286621094,969400,0.0,0 -1996-03-27,41.55504759122046,41.58481481728867,41.078771974129104,41.11846160888672,809600,0.0,0 -1996-03-28,40.969623212630935,41.297062681271484,40.95970080449031,41.277217864990234,1001300,0.0,0 -1996-03-29,41.39628674419606,41.39628674419606,40.880321521114034,41.07876968383789,457700,0.0,0 -1996-04-01,41.27721864833303,41.564968489871895,41.14822734005699,41.55504608154297,773400,0.0,0 -1996-04-02,41.604681763226246,41.63444900512695,41.465767967689594,41.63444900512695,638800,0.0,0 -1996-04-03,41.4856127956234,41.66421624702767,41.38638865595437,41.63444900512695,288000,0.0,0 -1996-04-04,41.63443489538693,41.733659001429324,41.59474525296998,41.60466766357422,934900,0.0,0 -1996-04-08,40.56281541742419,40.890254974365234,40.38421202272907,40.890254974365234,2217200,0.0,0 -1996-04-09,41.049004349145186,41.049004349145186,40.65210800542611,40.73148727416992,1180900,0.0,0 -1996-04-10,40.662027665546965,40.84063100814819,39.84839021591913,40.00714874267578,939500,0.0,0 -1996-04-11,40.10636324393474,40.30481135498835,39.451484477457825,39.95752716064453,1276000,0.0,0 -1996-04-12,40.23537707363875,40.523126995990296,40.1163081402519,40.463592529296875,411300,0.0,0 -1996-04-15,40.67195016400823,40.85055350700705,40.54295886073131,40.800941467285156,484200,0.0,0 -1996-04-16,40.8803009270003,41.05890418347748,40.790999298761704,40.91999053955078,429700,0.0,0 -1996-04-17,40.88031232849625,40.99938119935595,40.54295052772711,40.820777893066406,525300,0.0,0 -1996-04-18,40.92001877201414,41.00932046186577,40.70172575237682,40.88032913208008,818600,0.0,0 -1996-04-19,41.078765850667516,41.18791232998088,40.91008492809231,40.97954177856445,885100,0.0,0 -1996-04-22,41.35660400830571,41.45582810621431,41.019242075416464,41.29706954956055,828900,0.0,0 -1996-04-23,41.227596346917984,41.455811681690335,41.13829469418098,41.42604446411133,225400,0.0,0 -1996-04-24,41.63442455805265,41.63442455805265,41.18791619172463,41.277217864990234,699000,0.0,0 -1996-04-25,41.36651613062494,41.634421128352656,41.11845594754371,41.46574020385742,475500,0.0,0 -1996-04-26,41.57489089820082,41.793183881437194,41.42605477326693,41.55504608154297,563300,0.0,0 -1996-04-29,41.3764427316223,41.634425348174375,41.3764427316223,41.55504608154297,219900,0.0,0 -1996-04-30,41.55503958972125,41.63441884395185,41.356591454144734,41.525272369384766,184400,0.0,0 -1996-05-01,41.515346558024675,41.78325151908267,41.45581212223401,41.61457061767578,561900,0.0,0 -1996-05-02,41.2871548709564,41.51537033888045,40.70173258367295,40.90018081665039,1299600,0.0,0 -1996-05-03,41.13830564738015,41.26729695790016,40.483426686278584,40.840633392333984,1329300,0.0,0 -1996-05-06,40.99938962617273,40.99938962617273,40.443734781287525,40.800941467285156,647500,0.0,0 -1996-05-07,40.800963282323146,40.800963282323146,40.49336847158579,40.63228225708008,582100,0.0,0 -1996-05-08,40.43383340702158,41.13832473754883,40.056781708992915,41.13832473754883,1694700,0.0,0 -1996-05-09,40.99941210754822,41.31692933587386,40.95972245400751,41.108558654785156,593400,0.0,0 -1996-05-10,41.515357971191406,41.65427169289234,41.31690979733294,41.515357971191406,925100,0.0,0 -1996-05-13,41.61458095068198,42.319071949131775,41.57489131696651,42.14046859741211,867500,0.0,0 -1996-05-14,42.30915869300605,42.507606904511704,42.26946905070491,42.398460388183594,632300,0.0,0 -1996-05-15,42.40838089632787,42.7457428407535,42.31907920515638,42.348846435546875,466100,0.0,0 -1996-05-16,42.11069382031387,42.507590086292325,42.09084900701495,42.438133239746094,514400,0.0,0 -1996-05-17,42.5472900390625,42.73581581115723,42.5472900390625,42.666358947753906,427700,0.0,0 -1996-05-20,42.96402015430488,43.02355459331778,42.537356674712484,42.954097747802734,788500,0.0,0 -1996-05-21,43.02357983065236,43.1029591292329,42.86482123349128,42.894588470458984,352700,0.0,0 -1996-05-22,42.9441811048471,43.301387786865234,42.79534498733954,43.301387786865234,1218100,0.0,0 -1996-05-23,43.36093678761889,43.460160899261034,42.88466105173657,43.122798919677734,967900,0.0,0 -1996-05-24,43.162493472959426,43.390708955690016,43.142648648374156,43.29148483276367,659100,0.0,0 -1996-05-28,43.42046242263699,43.42046242263699,42.74573860071301,42.85488510131836,456400,0.0,0 -1996-05-29,42.94417100741869,42.98386062942185,42.42820592137761,42.56711959838867,649600,0.0,0 -1996-05-30,42.507588275067214,43.00370858640087,42.38851940034714,42.78541564941406,895800,0.0,0 -1996-05-31,42.775509289714776,42.954112668795005,42.46791458129883,42.46791458129883,923500,0.0,0 -1996-06-03,42.47784002451617,42.616753773720376,42.358771096626846,42.58698654174805,503100,0.0,0 -1996-06-04,42.7854270952711,42.9243408196064,42.70604782422236,42.88465118408203,627100,0.0,0 -1996-06-05,42.904492981936954,43.3113117174271,42.815191308292775,43.26169967651367,428000,0.0,0 -1996-06-06,43.49982276112667,43.49982276112667,42.864788852205116,42.94416809082031,523300,0.0,0 -1996-06-07,42.03130684674557,42.954090495647215,42.03130684674557,42.94416809082031,1422800,0.0,0 -1996-06-10,42.88467717071236,43.013668564330885,42.73584094730637,42.8052978515625,548800,0.0,0 -1996-06-11,42.96403888428018,43.202176744146854,42.76559066772461,42.76559066772461,688700,0.0,0 -1996-06-12,42.90451133511666,43.01365787181562,42.616761374728505,42.68621826171875,1120600,0.0,0 -1996-06-13,42.78544238599053,42.844976860553594,42.43815795103931,42.68621826171875,1502000,0.0,0 -1996-06-14,42.70604705098185,42.70604705098185,42.36868515513302,42.507598876953125,1468200,0.0,0 -1996-06-17,42.527463934795236,42.68622254957749,42.368705320012985,42.47785186767578,1101000,0.0,0 -1996-06-18,42.44807517275853,42.567144107324474,42.12063560270219,42.130558013916016,718000,0.0,0 -1996-06-19,42.32901039436582,42.54730346250366,42.18017421154456,42.319087982177734,552100,0.0,0 -1996-06-20,42.358752039887435,42.49766572659589,42.0313126355032,42.2892951965332,1234400,0.0,0 -1996-06-21,42.49345725891855,42.65305709838867,42.37375737931597,42.65305709838867,573300,0.351,0 -1996-06-24,42.752787647906246,42.912387415140614,42.67298776428907,42.73283767700195,416500,0.0,0 -1996-06-25,42.85252376448526,42.88244871124817,42.6330741548906,42.68294906616211,454400,0.0,0 -1996-06-26,42.63308785292681,42.722862722060256,42.383713216445024,42.3936882019043,838200,0.0,0 -1996-06-27,42.39369018055569,42.802664603473985,42.234090405758295,42.69293975830078,1090500,0.0,0 -1996-06-28,42.87248858628367,43.091938271927745,42.75278875775054,42.84256362915039,1060800,0.0,0 -1996-07-01,42.95229355978504,43.2216182058868,42.89244363842909,43.21164321899414,471300,0.0,0 -1996-07-02,43.171762885375635,43.18173787680017,42.982238048309526,43.05206298828125,389400,0.0,0 -1996-07-03,43.03208991715657,43.091939833592114,42.812640223559576,42.96226501464844,308300,0.0,0 -1996-07-05,42.21414529956293,42.413645041054245,41.735345919983764,41.865020751953125,842900,0.0,0 -1996-07-08,41.89493042430239,42.12435504329262,41.57573095440294,41.695430755615234,942000,0.0,0 -1996-07-09,41.88497072610225,42.014645558071614,41.735345919983764,41.865020751953125,716300,0.0,0 -1996-07-10,41.85504572234224,42.03459548950195,41.44607125270067,42.03459548950195,1132300,0.0,0 -1996-07-11,41.855045938526466,41.93484583545407,40.77774733000386,41.18672180175781,1587400,0.0,0 -1996-07-12,41.25652514122578,41.436074815438076,40.90740077470187,41.21662521362305,1312000,0.0,0 -1996-07-15,41.316381187153574,41.316381187153574,39.99968338012695,39.99968338012695,1951300,0.0,0 -1996-07-16,40.1193876826348,40.53833703188161,38.54334013070633,40.09943771362305,4141000,0.0,0 -1996-07-17,40.69793161037749,40.85753134218289,40.21913241496128,40.57823181152344,1340500,0.0,0 -1996-07-18,40.6979188077318,41.20664279282845,40.428594345033574,41.136817932128906,1432500,0.0,0 -1996-07-19,41.037088967208234,41.09693887819589,40.61813959029458,40.837589263916016,1216000,0.0,0 -1996-07-22,40.558287676863785,40.69793746227354,40.22911318268363,40.53833770751953,519800,0.0,0 -1996-07-23,40.59818329625686,40.81763293569609,39.94980936155006,40.01963424682617,1479800,0.0,0 -1996-07-24,39.54083858129397,40.33883734176408,39.34133889117644,40.09943771362305,2463400,0.0,0 -1996-07-25,40.49844563124918,40.578245524118636,40.29894589907554,40.45854568481445,1989800,0.0,0 -1996-07-26,40.57824771763239,40.73784751199869,40.46852285900555,40.67799758911133,642300,0.0,0 -1996-07-29,40.618123541391434,40.6779734287314,40.179224367565,40.22909927368164,1297900,0.0,0 -1996-07-30,40.49844134767304,40.65804111653086,40.17924180995739,40.618141174316406,1868200,0.0,0 -1996-07-31,40.64807947643323,41.02712905191899,40.5483295881475,40.91740417480469,767100,0.0,0 -1996-08-01,40.957281307522344,41.7453049858697,40.897431407901024,41.595680236816406,1168600,0.0,0 -1996-08-02,42.134346803477115,42.513396324909905,41.97474700497909,42.493446350097656,1098500,0.0,0 -1996-08-05,42.503429311056486,42.513404300333896,42.11440472923738,42.24407958984375,710200,0.0,0 -1996-08-06,42.234087541727476,42.46351220244068,42.00466288101426,42.37373733520508,640000,0.0,0 -1996-08-07,42.53334585325515,42.61314575166651,42.214146259609706,42.48347091674805,917800,0.0,0 -1996-08-08,42.4934198445906,42.4934198445906,42.25402029617037,42.41361999511719,925100,0.0,0 -1996-08-09,42.56326138405037,42.62311129459743,42.17423696549449,42.27398681640625,648800,0.0,0 -1996-08-12,42.29394301063536,42.68296748644073,42.13434322568956,42.58321762084961,764200,0.0,0 -1996-08-13,42.503429311056486,42.53335427888872,42.134354707792205,42.24407958984375,805200,0.0,0 -1996-08-14,42.254038405474496,42.43358814374138,42.134338579963234,42.3936882019043,533800,0.0,0 -1996-08-15,42.28396740526256,42.53334206559084,42.2640174324363,42.31389236450195,632600,0.0,0 -1996-08-16,42.43358544112924,42.692935046552215,42.43358544112924,42.6729850769043,475100,0.0,0 -1996-08-19,42.682964772375946,42.72286471607529,42.533339983503396,42.69293975830078,436400,0.0,0 -1996-08-20,42.70290576416615,42.71288074799333,42.5632559905856,42.66300582885742,645700,0.0,0 -1996-08-21,42.55327807587114,42.65302790727262,42.37372837934848,42.51337814331055,266400,0.0,0 -1996-08-22,42.613153433699985,42.992203019486645,42.59320345550069,42.91240310668945,584800,0.0,0 -1996-08-23,42.83257379997666,42.90239867575678,42.543299314601875,42.68294906616211,757100,0.0,0 -1996-08-26,42.58321269345765,42.63308762048208,42.403662956169704,42.473487854003906,784700,0.0,0 -1996-08-27,42.59317959476198,42.67297946285521,42.45352982559883,42.633079528808594,389400,0.0,0 -1996-08-28,42.732841522095214,42.772741467493994,42.553291767800694,42.56326675415039,227600,0.0,0 -1996-08-29,42.51339597261869,42.51339597261869,41.894946758563705,42.14432144165039,680200,0.0,0 -1996-08-30,42.13434589698936,42.14432088418088,41.57574661426412,41.705421447753906,1500900,0.0,0 -1996-09-03,41.156794002300884,42.034592807972835,41.09694408373234,41.9747428894043,1782000,0.0,0 -1996-09-04,41.97472562001981,42.61312448876536,41.80515092050928,42.014625549316406,930200,0.0,0 -1996-09-05,41.8151450034547,41.98471978042482,41.50592041015625,41.50592041015625,616600,0.0,0 -1996-09-06,41.65554108099915,42.24406524857074,41.585716179761846,42.09444046020508,804900,0.0,0 -1996-09-09,42.25403593898657,42.60316040968169,42.184211044847544,42.59318542480469,719200,0.0,0 -1996-09-10,42.533338430560185,42.71288817065167,42.373738661589975,42.573238372802734,669900,0.0,0 -1996-09-11,42.49344536887077,42.85254490719926,42.393695497112866,42.812644958496094,713500,0.0,0 -1996-09-12,42.93233534121392,43.2415598755024,42.872485431351635,43.11188507080078,713300,0.0,0 -1996-09-13,43.610640999612315,43.81014072971118,43.49094116155299,43.770240783691406,2008800,0.0,0 -1996-09-16,43.830059775647854,44.14925911857473,43.77020989884906,43.9298095703125,1220200,0.0,0 -1996-09-17,43.96973554969756,44.039560447349075,43.560761149167256,43.83008575439453,604700,0.0,0 -1996-09-18,43.7702423659683,43.889942208354725,43.55079265492653,43.720367431640625,225500,0.0,0 -1996-09-19,43.65054627852006,43.91987094705755,43.5906963521784,43.88994598388672,410000,0.0,0 -1996-09-20,44.01553719509931,44.13585301431143,43.87516873935185,44.045616149902344,948400,0.352,0 -1996-09-23,43.935335551889,44.11580931727786,43.73480914590137,44.03559875488281,466800,0.0,0 -1996-09-24,43.99549095659423,44.43664902452726,43.83506984098222,44.025569915771484,1269800,0.0,0 -1996-09-25,44.236130219130935,44.236130219130935,43.955393218646876,44.05565643310547,1353300,0.0,0 -1996-09-26,44.11580931727786,44.396546285660534,43.88520395039209,44.03559875488281,773200,0.0,0 -1996-09-27,44.09576675651071,44.09576675651071,43.875187659502245,44.075714111328125,407600,0.0,0 -1996-09-30,44.13586195787662,44.31633572326549,44.00551979398467,44.03559875488281,578200,0.0,0 -1996-10-01,44.08574117007463,44.30632027076638,43.91529368317645,44.276241302490234,561400,0.0,0 -1996-10-02,44.436654060422114,44.6572331193863,44.37649613525006,44.577022552490234,609000,0.0,0 -1996-10-03,44.597072747310825,44.617125387934614,44.406572661384814,44.53691482543945,342200,0.0,0 -1996-10-04,44.71737202831185,45.13847732543945,44.597056229132534,45.13847732543945,754100,0.0,0 -1996-10-07,45.1184410939916,45.31896749885378,45.07833581301916,45.18862533569336,235100,0.0,0 -1996-10-08,45.208682246557665,45.359077064410485,44.9279452532324,45.008155822753906,386200,0.0,0 -1996-10-09,45.07833582754353,45.15854638951425,44.60709877596557,44.657230377197266,528800,0.0,0 -1996-10-10,44.65723059603816,44.82767804106121,44.51686211190154,44.566993713378906,1562200,0.0,0 -1996-10-11,44.73744613647461,45.118446350097656,44.73744613647461,45.118446350097656,331300,0.0,0 -1996-10-14,45.11846524580182,45.3590970604461,45.108438920191645,45.17862319946289,201600,0.0,0 -1996-10-15,45.63981506347656,45.63981506347656,44.8878409576416,45.118446350097656,776900,0.0,0 -1996-10-16,45.23876799254858,45.33903121948242,44.87782037558676,45.33903121948242,590100,0.0,0 -1996-10-17,45.4793994164856,45.579662642712414,45.268846641409276,45.459346771240234,792500,0.0,0 -1996-10-18,45.47939118757327,45.76012817021262,45.37912797948779,45.69997024536133,695800,0.0,0 -1996-10-21,45.74008332405023,45.96066241943144,45.519504228669014,45.63982009887695,879200,0.0,0 -1996-10-22,45.59969903051326,45.6097253495613,45.29890945907188,45.31896209716797,848900,0.0,0 -1996-10-23,45.2186985625716,45.48940917480873,45.038224821080185,45.469356536865234,735900,0.0,0 -1996-10-24,45.46936898469077,45.5495795584234,45.05828979431098,45.07834243774414,379300,0.0,0 -1996-10-25,45.06831474304199,45.27886749267578,44.99813049316406,45.118446350097656,568300,0.0,0 -1996-10-28,45.158537029633315,45.38914234750223,44.79758957557763,44.81764221191406,975400,0.0,0 -1996-10-29,44.95804403603897,45.28891278117485,44.72743854700487,45.17862319946289,815900,0.0,0 -1996-10-30,45.31896916934999,45.31896916934999,44.9780742685186,45.02820587158203,495400,0.0,0 -1996-10-31,45.088372834200996,45.4793994164856,45.03824122108759,45.459346771240234,726300,0.0,0 -1996-11-01,45.549566203062916,45.65985570960786,45.0883555393295,45.29890823364258,821300,0.0,0 -1996-11-04,45.35907684970343,45.599708557128906,45.25881363827614,45.599708557128906,1608400,0.0,0 -1996-11-05,45.7501077956386,46.07095010321266,45.740081473526914,45.86039733886719,764000,0.0,0 -1996-11-06,45.94061190434558,46.762770388884285,45.90050661241686,46.74271774291992,1665000,0.0,0 -1996-11-07,46.60234260191735,47.03347442891444,46.54218467256892,46.85300064086914,1446300,0.0,0 -1996-11-08,46.863016182525435,47.12370048307008,46.68254243599453,47.11367416381836,1355700,0.0,0 -1996-11-11,47.0033758786774,47.17382327414189,46.98332324391687,47.063533782958984,655900,0.0,0 -1996-11-12,47.19387493133544,47.22395388285319,46.85298014746772,46.92316436767578,719900,0.0,0 -1996-11-13,46.9732955100054,47.203900802797314,46.85297970507049,47.13371658325195,481900,0.0,0 -1996-11-14,46.96327861486001,47.444541931152344,46.94322597668116,47.444541931152344,558800,0.0,0 -1996-11-15,47.56488435808844,47.805516150793785,47.304199915991,47.50472640991211,2250900,0.0,0 -1996-11-18,47.59491235491947,47.64504392470557,47.314175564117335,47.51470184326172,1518200,0.0,0 -1996-11-19,47.57491474003755,47.86567818101986,47.50473046117975,47.85565185546875,1029300,0.0,0 -1996-11-20,47.84561133289955,48.136374687604935,47.68519017168279,47.935848236083984,730000,0.0,0 -1996-11-21,47.99598085765415,48.02605980951815,47.725270290878164,47.865638732910156,653000,0.0,0 -1996-11-22,47.93584744317248,48.28676872752952,47.93584744317248,48.236637115478516,965100,0.0,0 -1996-11-25,48.286765876857714,48.86829254231821,48.17647633685658,48.84823989868164,2058800,0.0,0 -1996-11-26,48.94849330550167,49.20917762052483,48.42712467545536,48.687808990478516,2861800,0.0,0 -1996-11-27,48.80812887479429,48.8883394399131,48.53741821751832,48.59757614135742,872000,0.0,0 -1996-11-29,48.76802696235868,48.90839546101679,48.67779007036419,48.778053283691406,1073400,0.0,0 -1996-12-02,48.7178927661213,48.848234936518416,48.37699785892885,48.79810333251953,1350600,0.0,0 -1996-12-03,48.80813433733273,49.13900295547817,47.96592330932617,47.96592330932617,1777800,0.0,0 -1996-12-04,48.04612465692058,48.166440494959616,47.544808665091274,48.096256256103516,2365100,0.0,0 -1996-12-05,48.02608123989807,48.216581353375744,47.82555480465841,47.96592330932617,1697700,0.0,0 -1996-12-06,47.00337582420561,47.965902291595484,46.622375764197116,47.68516540527344,3401800,0.0,0 -1996-12-09,47.92581317141201,48.39705024652841,47.85562892618191,48.38702392578125,1864600,0.0,0 -1996-12-10,48.48727490379243,48.55745913132067,48.1062748114963,48.15640640258789,1331600,0.0,0 -1996-12-11,47.24403003965964,47.885714658194914,47.043503596367366,47.715267181396484,1847900,0.0,0 -1996-12-12,47.98595398796929,48.04611189100477,46.80284856160482,46.92316436767578,2540200,0.0,0 -1996-12-13,46.883074052295214,47.21394262452056,46.46196859673567,47.043495178222656,1678300,0.0,0 -1996-12-16,47.16380863486176,47.284124473216,46.241387207479264,46.44191360473633,1831100,0.0,0 -1996-12-17,46.30155431404694,47.023449487414496,46.12108052070505,46.812896728515625,2023200,0.0,0 -1996-12-18,47.08359758123357,47.33425557517114,47.013413342931045,47.183860778808594,1666800,0.0,0 -1996-12-19,47.60495890058033,48.20653799367949,47.41445885443226,48.15640640258789,2269300,0.0,0 -1996-12-20,48.44345710133212,48.82632968241586,48.201642839595024,48.2620964050293,1543200,0.367,0 -1996-12-23,48.42328703039208,48.49381616256286,47.92958310519666,48.141170501708984,1263700,0.0,0 -1996-12-24,48.26208918698483,48.49382781982422,48.23186240878839,48.49382781982422,633000,0.0,0 -1996-12-26,48.644952298193864,48.89684206775784,48.60464993506363,48.866615295410156,1384300,0.0,0 -1996-12-27,48.86661326080021,49.02782270660903,48.685252634265275,48.927066802978516,410400,0.0,0 -1996-12-30,49.08827522002071,49.08827522002071,48.46358863060337,48.50389099121094,694100,0.0,0 -1996-12-31,48.54421079153738,48.60466435416694,47.61725616455078,47.61725616455078,1378100,0.0,0 -1997-01-02,47.95983372080824,47.95983372080824,46.9119718075805,47.7381706237793,2031900,0.0,0 -1997-01-03,47.959820623949476,48.44344906721619,47.7683843651564,48.42329788208008,2123200,0.0,0 -1997-01-06,48.42330079835368,48.64496384820049,47.91952113961092,48.000125885009766,1374100,0.0,0 -1997-01-07,48.00010754883116,48.66509644434393,47.79859576231214,48.58449172973633,939000,0.0,0 -1997-01-08,48.8464675839476,48.86661876694428,48.16132736206055,48.16132736206055,1802200,0.0,0 -1997-01-09,48.40314446920181,48.92707525862698,48.322539732367176,48.564353942871094,1415700,0.0,0 -1997-01-10,47.87921623643396,49.1688920946544,47.87921623643396,49.088287353515625,2369500,0.0,0 -1997-01-13,49.33007007061761,49.33007007061761,48.77591282921974,49.01772689819336,1364600,0.0,0 -1997-01-14,49.45098271991391,49.90438415071996,49.33007567169896,49.63234329223633,2111200,0.0,0 -1997-01-15,49.47115698237219,49.783500336028716,49.24949395719659,49.51145935058594,1583900,0.0,0 -1997-01-16,49.672695047032946,49.84398020236754,49.33012473636375,49.71299743652344,1308400,0.0,0 -1997-01-17,49.78351628290464,50.136162117735985,49.72306271121927,50.015254974365234,1604000,0.0,0 -1997-01-20,50.136148593219474,50.357811629604285,49.95478792708644,50.0756950378418,1889900,0.0,0 -1997-01-21,49.89433344614482,50.65000287434774,49.72304837575216,50.47871780395508,2785800,0.0,0 -1997-01-22,50.49887194729872,50.8414421081543,50.216755344241186,50.8414421081543,1201600,0.0,0 -1997-01-23,50.982507923408335,51.385531701458994,49.59207588913356,50.13615798950195,2601100,0.0,0 -1997-01-24,50.21675277610555,50.23690396100768,49.491310119628906,49.491310119628906,2176000,0.0,0 -1997-01-27,49.57191710279347,49.80365573965612,49.24949812976717,49.35025405883789,2108500,0.0,0 -1997-01-28,50.055543296888516,50.19660159120342,49.00768168197781,49.491310119628906,4376000,0.0,0 -1997-01-29,49.57191753387451,49.97494125366211,49.39055685997009,49.97494125366211,1122700,0.0,0 -1997-01-30,50.216776677757316,50.63995176212044,49.91450876035508,50.61980056762695,2126300,0.0,0 -1997-01-31,50.90189633724841,51.20416413022494,50.53917498567657,50.559326171875,3208100,0.0,0 -1997-02-03,50.76084244741541,50.871673981143395,50.529103785984184,50.71046447753906,755000,0.0,0 -1997-02-04,50.78098242881739,51.07317458961812,50.579470593782396,51.022796630859375,654100,0.0,0 -1997-02-05,51.09330752582515,51.24444134812596,49.73310312511792,50.06559753417969,2255400,0.0,0 -1997-02-06,50.15631042199819,50.42835147892747,49.914496149172166,50.39812469482422,2483100,0.0,0 -1997-02-07,50.821305534167166,51.1034222183378,50.15631620719353,51.08327102661133,2321000,0.0,0 -1997-02-10,51.1034273658792,51.28478810968555,50.56942073133827,50.599647521972656,1670000,0.0,0 -1997-02-11,50.80113325344296,51.18400573730469,50.37795840285895,51.18400573730469,1664300,0.0,0 -1997-02-12,51.18401166074764,52.00013468132256,51.11348251082142,51.909454345703125,2675400,0.0,0 -1997-02-13,52.11096488495576,52.594593329363704,52.030360144221106,52.47368621826172,1104800,0.0,0 -1997-02-14,52.35276412963867,52.534124744406476,52.17140351487087,52.35276412963867,1112900,0.0,0 -1997-02-18,52.45353428789677,52.83640680094712,52.070661774846435,52.796104431152344,833100,0.0,0 -1997-02-19,52.65503833781745,52.87670133885687,52.33261942721467,52.443450927734375,648100,0.0,0 -1997-02-20,52.25202281778307,52.46361026073977,51.6877896365652,51.80869674682617,1193900,0.0,0 -1997-02-21,51.849016242969086,52.08075494751403,51.677731113522825,51.82886505126953,1844400,0.0,0 -1997-02-24,51.56687451453305,52.47367770060338,51.56687451453305,52.443450927734375,787300,0.0,0 -1997-02-25,52.49384024157408,52.574444986666705,52.15127007493041,52.4837646484375,1653900,0.0,0 -1997-02-26,52.4333792572199,52.51398399089741,51.34521535257352,51.96990203857422,1597800,0.0,0 -1997-02-27,52.11095529521363,52.11095529521363,51.18400094734827,51.19407653808594,1813100,0.0,0 -1997-02-28,51.103391771583844,51.506415365996965,50.982484693259906,51.042938232421875,2961200,0.0,0 -1997-03-03,50.78101178337546,51.425850028243715,50.74070939307119,51.38554763793945,1210400,0.0,0 -1997-03-04,51.52658757501597,51.667645890630006,51.00265668844951,51.10341262817383,1478700,0.0,0 -1997-03-05,51.40566890283166,51.96990203857422,51.23438384376695,51.96990203857422,1254800,0.0,0 -1997-03-06,51.990059660675,52.171420333909914,51.506431198715234,51.667640686035156,1528500,0.0,0 -1997-03-07,51.86914196685331,52.332619148375315,51.748234876021485,52.131107330322266,1859300,0.0,0 -1997-03-10,52.1915729408877,52.675201416015625,51.93968311009191,52.675201416015625,1074900,0.0,0 -1997-03-11,52.71551598182091,52.74574276850773,52.393096923828125,52.393096923828125,624600,0.0,0 -1997-03-12,52.43337934832264,52.453530531777034,51.77846588605497,51.92959976196289,1055600,0.0,0 -1997-03-13,51.748240938889595,51.88929922805323,50.98249594057269,51.12355422973633,2514100,0.0,0 -1997-03-14,51.35532084521125,51.60721078461292,51.10343090580959,51.38554763793945,1642700,0.0,0 -1997-03-17,51.10341726936397,51.60719701373862,50.57948633521434,51.52659225463867,3013500,0.0,0 -1997-03-18,51.58703470918166,51.65756385819812,50.76083610641742,50.9724235534668,1352500,0.0,0 -1997-03-19,50.8414383857603,51.264613259363536,50.33765877432788,50.8011360168457,1510000,0.0,0 -1997-03-20,50.780987351705015,50.94219683536122,50.216754158908294,50.5391731262207,1808200,0.0,0 -1997-03-21,50.93499348249093,50.97545018899013,50.71248159674534,50.77316665649414,2810600,0.299,0 -1997-03-24,50.813634846205794,51.511513191028286,50.550666194533555,51.481170654296875,2145600,0.0,0 -1997-03-25,51.359787308223666,51.76435436067127,50.833850140041775,50.97544860839844,2125800,0.0,0 -1997-03-26,51.177742987082254,51.56208176840817,50.93500270413957,51.19797134399414,1335300,0.0,0 -1997-03-27,51.380017670718104,51.380017670718104,49.29649726911024,49.8426628112793,2898500,0.0,0 -1997-03-31,49.782003271441354,49.92360181792656,48.70989999091052,48.79081344604492,4270700,0.0,0 -1997-04-01,48.70986769388436,49.3167182050208,48.57838341647147,49.10432052612305,3210900,0.0,0 -1997-04-02,48.952612620872145,49.154896144098885,48.183935232610516,48.22439193725586,2672700,0.0,0 -1997-04-03,48.18395556854515,48.62897950746539,48.022128681665066,48.48738098144531,2284200,0.0,0 -1997-04-04,48.22440740823451,49.10434101656429,48.00189546130054,49.0942268371582,3706700,0.0,0 -1997-04-07,49.31672329651167,49.59992023094611,49.286380767822266,49.286380767822266,2596200,0.0,0 -1997-04-08,49.27628184647315,49.7010773796324,49.094226617976325,49.6403923034668,1822700,0.0,0 -1997-04-09,49.84266761648136,49.873010149527104,49.094218468019584,49.235816955566406,2453200,0.0,0 -1997-04-10,49.25605939884775,49.54937063551441,48.993090703905246,49.053775787353516,1996500,0.0,0 -1997-04-11,48.588504943977625,48.750331771434674,47.49617385864258,47.49617385864258,4221600,0.0,0 -1997-04-14,47.7288250523371,48.194077426231466,47.45574213722519,48.133392333984375,3988500,0.0,0 -1997-04-15,48.70987359669583,48.962728006977684,48.22439312895468,48.952613830566406,2760400,0.0,0 -1997-04-16,48.79079543842989,49.58981551298129,48.70988201315886,49.51901626586914,2273300,0.0,0 -1997-04-17,49.51903320512779,49.842687016926014,49.195379393329574,49.316749572753906,1386000,0.0,0 -1997-04-18,49.721301802031846,49.83255776619425,49.357191373864,49.55947494506836,1702100,0.0,0 -1997-04-21,49.6808407735707,49.78198255038986,48.8514782036536,49.235816955566406,2809400,0.0,0 -1997-04-22,49.26614941774301,50.318023681640625,49.19535018844221,50.318023681640625,3215000,0.0,0 -1997-04-23,50.26744575194087,50.51018593263435,49.96402052607402,50.368587493896484,2047700,0.0,0 -1997-04-24,50.52030492141677,50.67201754880841,49.761741784458565,50.11573791503906,2689900,0.0,0 -1997-04-25,49.88313535205098,49.97416297130655,49.46845397544228,49.53925323486328,1606200,0.0,0 -1997-04-28,49.519014166474484,50.36860509580126,49.43810074463384,50.024723052978516,1666500,0.0,0 -1997-04-29,50.87431820548314,51.64299577677871,50.68214881265925,51.6025390625,3197400,0.0,0 -1997-04-30,51.29910649817947,52.22961079585938,51.27887814388208,51.845272064208984,3372200,0.0,0 -1997-05-01,51.92619399279356,52.128477568924424,51.33957162201404,51.78459548950195,2149500,0.0,0 -1997-05-02,51.96663130894132,52.86679288669448,51.82503285850824,52.71508026123047,1448300,0.0,0 -1997-05-05,52.8567014376799,54.09063132198854,52.62407531194958,53.969261169433594,3636200,0.0,0 -1997-05-06,53.70630194885071,54.02995574590592,53.40287651411143,53.92881393432617,1721100,0.0,0 -1997-05-07,53.72653085907544,53.72653085907544,52.69488437044108,52.75556945800781,2327200,0.0,0 -1997-05-08,52.63420159019592,53.86813175814441,52.55328813655996,53.11968231201172,2923700,0.0,0 -1997-05-09,53.70627269802584,53.8074144545193,52.8566819434808,53.483760833740234,2558200,0.0,0 -1997-05-12,53.686087281931016,54.53567871593294,53.645630546978545,54.37385177612305,2357900,0.0,0 -1997-05-13,54.33336900177401,54.434510790682744,53.73663244721246,54.15131378173828,1195100,0.0,0 -1997-05-14,54.52553950060134,54.697480545214624,54.00971636676148,54.25245666503906,2772000,0.0,0 -1997-05-15,54.252436319986984,54.758145085087534,54.060266989248774,54.616546630859375,884100,0.0,0 -1997-05-16,54.454705972130746,54.576076044876956,53.72648553565352,53.86808395385742,1934200,0.0,0 -1997-05-19,53.92881500404098,54.313153895667675,53.76698810230342,54.02995681762695,1375800,0.0,0 -1997-05-20,53.908561046062644,54.818836936146255,53.56467904314217,54.67723846435547,1756400,0.0,0 -1997-05-21,54.81886165337426,55.01103109459458,54.15132569966159,54.55589294433594,1208000,0.0,0 -1997-05-22,54.61659218583788,54.67727728826659,54.09065463145574,54.37385177612305,907600,0.0,0 -1997-05-23,54.616548036940195,55.1627135173096,54.474949579066646,54.8795166015625,644400,0.0,0 -1997-05-27,54.61654747110106,55.3649964549643,54.54574824289778,55.102027893066406,1531000,0.0,0 -1997-05-28,55.10202549093466,55.31442316628518,54.7075726652837,55.09191131591797,716700,0.0,0 -1997-05-29,55.081815746022066,55.182957530351885,54.69747696556873,54.76827621459961,1282700,0.0,0 -1997-05-30,53.86811436504399,55.385241130863854,53.8074292944112,55.12227249145508,2143300,0.0,0 -1997-06-02,55.24362692180877,55.34476867743273,54.839059899312915,54.8795166015625,1479100,0.0,0 -1997-06-03,54.63678274352169,55.3043184082889,54.596326036566104,54.69746780395508,1562100,0.0,0 -1997-06-04,54.71769701503286,54.85929549159672,54.42438588500773,54.636783599853516,1063100,0.0,0 -1997-06-05,54.75813309357466,55.223385055581396,54.64687718961653,54.839046478271484,1180800,0.0,0 -1997-06-06,54.758151035060415,55.95162385037943,54.758151035060415,55.91116714477539,1511100,0.0,0 -1997-06-09,55.951618614773516,56.234815527501944,55.890933562045994,56.194358825683594,1823400,0.0,0 -1997-06-10,56.21461648220608,56.578726988388055,55.99210450620598,56.366329193115234,1217500,0.0,0 -1997-06-11,56.31571329446663,56.57868178326982,56.20445739535759,56.49776840209961,1673800,0.0,0 -1997-06-12,56.88211101375214,57.61033149614726,56.679827546420164,57.59010314941406,4273300,0.0,0 -1997-06-13,57.650808057316674,58.25765866844632,57.54966628879506,58.07560348510742,2132900,0.0,0 -1997-06-16,58.09584426879883,58.25767113305732,57.91378904650803,58.09584426879883,800400,0.0,0 -1997-06-17,57.8935605771372,58.409383705969134,57.569906849242656,58.014930725097656,2048100,0.0,0 -1997-06-18,57.69124055492702,58.01489407837683,57.59009882884896,57.8126106262207,1971900,0.0,0 -1997-06-19,58.00478820140228,58.58129612249729,57.8530755905878,58.40935516357422,2029900,0.0,0 -1997-06-20,58.44389719874078,58.70788978511452,58.159597490338285,58.210365295410156,1396900,0.35,0 -1997-06-23,58.09868244038849,58.42359642817116,56.75841224078498,56.79902648925781,3991500,0.0,0 -1997-06-24,57.347327313496315,58.403297929750494,57.184870295611056,58.240840911865234,4895100,0.0,0 -1997-06-25,58.149431343828695,58.646955725852024,57.144229020965234,57.83467102050781,4708900,0.0,0 -1997-06-26,57.73314862194075,58.240826678764,56.98178509784233,57.550384521484375,2569900,0.0,0 -1997-06-27,57.81436835827015,58.30173921903533,57.631604285483206,57.77375411987305,2617900,0.0,0 -1997-06-30,57.77375949500557,58.13928767458733,57.103624499105685,57.38792419433594,2384900,0.0,0 -1997-07-01,57.50976741826797,58.2002095412274,57.43869249384568,58.05805969238281,1749000,0.0,0 -1997-07-02,58.20021958689154,59.01250457763671,57.97684121443662,59.01250457763672,1961800,0.0,0 -1997-07-03,59.70294058929879,59.88570469314358,59.43894799485631,59.82478332519531,2539100,0.0,0 -1997-07-07,60.027837965223526,60.10906643337674,59.073403464423286,59.215553283691406,1158600,0.0,0 -1997-07-08,59.29679172787099,59.9060053415135,59.25617748696149,59.834930419921875,3396500,0.0,0 -1997-07-09,59.98724220710498,60.027856453690696,58.50482220672629,59.174957275390625,5390300,0.0,0 -1997-07-10,59.215594032008696,59.68265804529271,58.79929784625555,59.43897247314453,2072200,0.0,0 -1997-07-11,59.52018605311143,59.9060214454721,59.378036171715394,59.64202880859375,2258900,0.0,0 -1997-07-14,59.7130941506235,59.98724030639069,59.27649101366094,59.82478332519531,3186400,0.0,0 -1997-07-15,59.98725227373994,60.28170561089946,59.43895985282221,60.12940216064453,2983100,0.0,0 -1997-07-16,60.5152214050293,61.14474216461182,60.36291799545288,60.921363830566406,2621300,0.0,0 -1997-07-17,60.840119456126665,60.9619621519667,60.29182732484649,60.61674118041992,1794800,0.0,0 -1997-07-18,60.4441197219214,60.57611595178617,59.17492520399092,59.32722854614258,3961900,0.0,0 -1997-07-21,59.31710285131936,59.52017406957105,58.931267536641144,59.33740997314453,3810300,0.0,0 -1997-07-22,59.581107613801514,60.95183861718652,59.540493361849364,60.911224365234375,4243400,0.0,0 -1997-07-23,61.04319190406227,61.398566441095234,60.77919939083778,60.86042785644531,3204300,0.0,0 -1997-07-24,61.0432016454397,61.25642640168625,60.23091685973857,61.144737243652344,4152700,0.0,0 -1997-07-25,61.44934319102832,61.61180014592859,60.840129610152296,61.104122161865234,2364800,0.0,0 -1997-07-28,61.246278804047066,61.44935002024086,60.75890788518197,61.063514709472656,2794700,0.0,0 -1997-07-29,60.84012917078288,61.3884213896117,60.70813289587965,61.266578674316406,2737100,0.0,0 -1997-07-30,61.40871709579333,62.13977325169563,61.34779574946813,61.997623443603516,4839800,0.0,0 -1997-07-31,61.99765844126217,62.403800979364114,61.753972918401004,61.936737060546875,2138700,0.0,0 -1997-08-01,62.058559475485,62.2007093172155,60.961974982135466,61.693031311035156,7077700,0.0,0 -1997-08-04,61.59150285902418,62.089027362831004,61.34781738777186,61.85549545288086,2339500,0.0,0 -1997-08-05,61.79457111183427,62.180406422752725,61.67272838207055,61.8961067199707,1466700,0.0,0 -1997-08-06,62.01797313547429,62.72872266387691,61.774287582879104,62.40380859375,2478200,0.0,0 -1997-08-07,62.70840788294058,62.789636390560965,61.8148942991163,61.936737060546875,3641900,0.0,0 -1997-08-08,61.286867662605985,61.571167247521984,60.04813375690056,60.67765426635742,7113100,0.0,0 -1997-08-11,60.92134900267338,61.26656998035519,60.190292814641296,61.124420166015625,6355900,0.0,0 -1997-08-12,61.22595830192282,61.43918303232753,60.08875973976439,60.149681091308594,6132500,0.0,0 -1997-08-13,60.880762484531424,60.98229811242424,59.43895656845346,59.966941833496094,6982300,0.0,0 -1997-08-14,60.49490676910771,60.63705660038792,59.6013935439178,60.19029998779297,3462700,0.0,0 -1997-08-15,59.86540342729929,59.86540342729929,58.24083345640921,58.342369079589844,4907100,0.0,0 -1997-08-18,58.728208142476376,59.64202880859375,58.05807298732364,59.64202880859375,5638900,0.0,0 -1997-08-19,59.92629711750741,60.373053653117424,59.47954058189739,60.33243942260742,3802800,0.0,0 -1997-08-20,60.3933928208895,61.28690636632297,60.18016799754742,61.24629211425781,3564600,0.0,0 -1997-08-21,61.165070342245116,61.24629885531582,59.845107004846064,60.170021057128906,5392600,0.0,0 -1997-08-22,59.13432523223856,60.2613702358063,58.85002559169895,60.149681091308594,8087800,0.0,0 -1997-08-25,60.29185500705658,60.697997512998356,59.682641248143916,59.926326751708984,3888000,0.0,0 -1997-08-26,59.784174985221405,60.14970322901692,58.9414293120262,59.042964935302734,4290000,0.0,0 -1997-08-27,59.134334309895834,59.763855039156404,58.74849902422,59.3983268737793,5484300,0.0,0 -1997-08-28,59.25618802034033,59.743558997889394,58.48451730588765,58.49467086791992,4287900,0.0,0 -1997-08-29,58.56574582723826,59.205420235545475,58.30175321428607,58.72820281982422,2652300,0.0,0 -1997-09-02,58.9312787729865,60.66753802008862,58.870357395895205,60.63707733154297,7294000,0.0,0 -1997-09-03,60.626913256275934,61.08382350523463,60.27153861819694,60.31215286254883,2812500,0.0,0 -1997-09-04,60.47460826466657,60.90105781925287,60.271537048196905,60.6979866027832,2473700,0.0,0 -1997-09-05,61.06349484053779,61.36810156571507,60.169981780017785,60.52535629272461,3663300,0.0,0 -1997-09-08,60.901064486461394,61.08382860129239,60.63707187614995,60.78937530517578,803500,0.0,0 -1997-09-09,60.576161575954224,61.2666039137291,60.37309030013809,60.819847106933594,1885200,0.0,0 -1997-09-10,60.51521415723455,60.75889958337107,59.5607795715332,59.5607795715332,3623700,0.0,0 -1997-09-11,59.642026631941604,59.723255132632026,58.64697749848395,59.25619125366211,7055900,0.0,0 -1997-09-12,59.78415613801644,60.41367680387191,59.09371411740076,60.21060562133789,6708000,0.0,0 -1997-09-15,60.21059013057399,60.63703950418008,59.905983435141074,60.10905456542969,2060500,0.0,0 -1997-09-16,60.63704438483,61.91639260862246,60.45428035285965,61.611785888671875,6979000,0.0,0 -1997-09-17,61.977313952612576,62.05854241126607,61.40871474203815,61.611785888671875,2220000,0.0,0 -1997-09-18,61.73365503754974,62.6271684657248,61.71334791418212,61.87580490112305,5045400,0.0,0 -1997-09-19,61.73588565900427,62.19447180206389,61.57283280813862,61.980464935302734,1566400,0.348,0 -1997-09-22,62.286186861945104,62.7447729890373,62.10275241110822,62.32695007324219,3259000,0.0,0 -1997-09-23,62.32697620467037,62.418693468542514,61.797054235631315,62.04163360595703,1872800,0.0,0 -1997-09-24,62.20469788345685,62.6836659045123,61.49134125635299,61.5321044921875,2793100,0.0,0 -1997-09-25,61.470937747968044,61.79704351851429,61.06330553478523,61.104068756103516,6327800,0.0,0 -1997-09-26,61.59325058382156,61.83783000374408,61.43019763720655,61.61363220214844,3995800,0.0,0 -1997-09-29,61.634003805458,62.326978715969105,61.409806040292644,62.204689025878906,2065000,0.0,0 -1997-09-30,61.960130299953434,62.40852597975573,61.55249786376953,61.55249786376953,4137600,0.0,0 -1997-10-01,62.12319165398093,62.490060896032,61.81746728560504,62.36777114868164,3567500,0.0,0 -1997-10-02,62.306601072155814,62.73461501475159,62.16392975795723,62.7142333984375,2577500,0.0,0 -1997-10-03,63.57023729279626,63.7536717703965,62.18428790648329,63.03012466430664,6499900,0.0,0 -1997-10-06,63.46835677615324,63.66198214204067,63.20339574914939,63.447975158691406,2272100,0.0,0 -1997-10-07,63.61101050470985,64.24284047127378,63.3970035805511,64.03902435302734,1832800,0.0,0 -1997-10-08,64.15111236388866,64.16130316807673,63.09126872832958,63.59061813354492,4439400,0.0,0 -1997-10-09,63.12185284408123,63.661965566189124,62.754983825290964,63.366432189941406,3607600,0.0,0 -1997-10-10,62.81612584021783,63.25433048186763,62.77536261773878,63.1829948425293,2858100,0.0,0 -1997-10-13,63.48871613409379,63.621196601147275,63.081083927775374,63.244136810302734,1760300,0.0,0 -1997-10-14,63.570239060932835,63.59062067012197,62.73459308417802,63.2645149230957,2235700,0.0,0 -1997-10-15,62.81613248850324,63.30529121002306,62.795750875106584,63.121856689453125,2601700,0.0,0 -1997-10-16,63.46834008524737,63.590629757858636,61.96010078970842,62.12315368652344,9488100,0.0,0 -1997-10-17,61.97027020933299,62.204658667615284,60.65565668244531,61.491302490234375,8151300,0.0,0 -1997-10-20,61.85823053472183,62.44929764691521,61.40983479443719,62.36777114868164,3636400,0.0,0 -1997-10-21,62.754981445566855,63.590627512234036,62.6326917772741,63.58043670654297,5225400,0.0,0 -1997-10-22,63.48872252763107,63.5192949461837,62.95880060605212,63.16261672973633,4485200,0.0,0 -1997-10-23,61.91932678222656,62.449248604589265,61.491313002625915,61.91932678222656,8054100,0.0,0 -1997-10-24,62.7142465545776,62.7142465545776,61.09390771769463,61.30791473388672,6778700,0.0,0 -1997-10-27,60.665863005662054,61.26712050899383,56.64049497488152,56.86469268798828,10840700,0.0,0 -1997-10-28,55.03037005753809,60.57417030037156,55.03037005753809,60.146156311035156,19548000,0.0,0 -1997-10-29,60.3295768818157,61.14484143427267,59.534693943170154,59.983089447021484,10134400,0.0,0 -1997-10-30,59.106655664291544,60.370315199183295,58.535970713050105,58.658260345458984,9772900,0.0,0 -1997-10-31,59.88119372946019,60.329589325800605,58.98440253677938,60.044246673583984,7072700,0.0,0 -1997-11-03,60.77799259855392,61.55249418096339,60.57417639265669,61.30791473388672,5548500,0.0,0 -1997-11-04,61.22638825152782,61.59325742214284,60.83913746032309,61.30791473388672,3455700,0.0,0 -1997-11-05,61.430184664514535,62.14354115531016,61.205986910264485,61.51171112060547,4774900,0.0,0 -1997-11-06,61.32826725972307,61.532083368927864,60.98177987407492,61.277313232421875,3679800,0.0,0 -1997-11-07,60.248029758886915,60.81871474983713,59.6365815542974,60.614898681640625,10606800,0.0,0 -1997-11-10,61.063315245714826,61.20598654301789,60.003471322892004,60.248050689697266,4347900,0.0,0 -1997-11-11,60.451859490630355,60.69643882774686,60.02384565067646,60.26842498779297,3212400,0.0,0 -1997-11-12,59.758892217393736,60.472248707028385,58.943627657811284,59.02515411376953,6775300,0.0,0 -1997-11-13,59.65698586393166,60.105381384603504,58.76019482258796,59.88118362426758,8589600,0.0,0 -1997-11-14,60.20725646572997,60.91042178328843,59.74867038906141,60.696414947509766,5827900,0.0,0 -1997-11-17,61.55244484538887,62.16389297299207,61.32824719860103,61.817405700683594,5149900,0.0,0 -1997-11-18,61.837819522789324,62.02125405664071,61.236561884054225,61.4301872253418,3433600,0.0,0 -1997-11-19,61.10405959906693,62.00085033367632,60.492611370924166,61.73588943481445,4387900,0.0,0 -1997-11-20,62.16393292434816,62.95881600108573,62.14355130699592,62.6734733581543,4822700,0.0,0 -1997-11-21,63.0199330697072,63.142222719907146,62.388103210340795,63.10145950317383,5436500,0.0,0 -1997-11-24,62.61231753700658,62.83651528860394,61.71552653061717,61.960105895996094,4337200,0.0,0 -1997-11-25,62.36773303174597,62.49002270435724,61.73590305658776,62.12315368652344,4525000,0.0,0 -1997-11-26,62.53078112042258,62.602116757293985,62.163912130798195,62.306583404541016,2681100,0.0,0 -1997-11-28,62.44929764691521,62.77540363984949,62.34738952412325,62.36777114868164,1564700,0.0,0 -1997-12-01,62.75501181343324,63.977909088134766,62.63272208596309,63.977909088134766,4850900,0.0,0 -1997-12-02,63.71290778380173,63.90653306337503,63.42756526653583,63.59061813354492,1974900,0.0,0 -1997-12-03,63.67214743448698,64.26321410401327,63.18298881143074,63.77405548095703,3302500,0.0,0 -1997-12-04,64.24284307146714,64.38551436001417,63.50910501608236,63.712921142578125,2872500,0.0,0 -1997-12-05,63.50907986629484,64.56892330437164,63.34602702966764,64.52816009521484,3458800,0.0,0 -1997-12-08,64.54854261116171,64.56892421602788,64.07976569923979,64.3447265625,2289200,0.0,0 -1997-12-09,64.05940852095323,64.30398787260815,63.67215788083292,63.95750045776367,1703000,0.0,0 -1997-12-10,63.63136315537357,63.814797578307065,62.91800706618777,63.40716552734375,3558400,0.0,0 -1997-12-11,62.8161086088072,62.99954305964408,62.16389722805385,62.32695007324219,5072800,0.0,0 -1997-12-12,62.8976600288411,62.93842325633873,61.8989609551492,62.44926452636719,4478400,0.0,0 -1997-12-15,62.775357247939596,63.33585150908191,62.530777933986585,63.08108139038086,4674700,0.0,0 -1997-12-16,63.40718936736413,63.79443996137889,63.1829916550398,63.46833419799805,2885800,0.0,0 -1997-12-17,63.81485884969969,63.83524047181713,63.070929642413184,63.14226531982422,2236300,0.0,0 -1997-12-18,63.22375554677871,63.22375554677871,62.10276697325426,62.53078079223633,4658300,0.0,0 -1997-12-19,61.89971380488455,62.77961056310274,60.48778644867396,62.06341552734375,8556000,0.38,0 -1997-12-22,62.49311929838663,62.80005996291702,61.920163391263245,62.462425231933594,5136800,0.0,0 -1997-12-23,62.4931023605988,62.615878593134354,61.244877329820625,61.347190856933594,4436500,0.0,0 -1997-12-24,61.83830573400074,61.83830573400074,61.06072280286506,61.16303634643555,2019200,0.0,0 -1997-12-26,61.633701175739276,61.633701175739276,61.16305870328177,61.40861129760742,941800,0.0,0 -1997-12-29,61.94066637824563,62.67732445211971,61.83835275687423,62.615936279296875,2080000,0.0,0 -1997-12-30,62.820564807612,63.6799992447194,62.7591766335329,63.598148345947266,3616000,0.0,0 -1997-12-31,63.43441365690901,63.92551879489798,63.31163737241177,63.55718994140625,4359500,0.0,0 -1998-01-02,63.72085420020798,63.9459439228163,63.209286648825454,63.88455581665039,2360900,0.0,0 -1998-01-05,64.06876509347332,64.45755670534685,63.373032735383866,64.02783966064453,4191800,0.0,0 -1998-01-06,63.67998087115782,63.700443589946744,62.98424843233411,63.00471115112305,3154900,0.0,0 -1998-01-07,62.92285863581621,63.332113000927215,62.34990252466081,63.16841125488281,4424200,0.0,0 -1998-01-08,63.066116213331036,63.066116213331036,62.452234485102636,62.615936279296875,3831000,0.0,0 -1998-01-09,62.370352577824164,62.534054290626855,60.18084216908821,60.44685745239258,10258800,0.0,0 -1998-01-12,59.669272108280914,61.67461801589804,59.526033114879695,61.551841735839844,12097900,0.0,0 -1998-01-13,61.961109424028244,62.45221465063877,61.69509409294754,62.41128921508789,5224900,0.0,0 -1998-01-14,62.656847540454514,62.84101201722267,62.02250323158643,62.69777297973633,3770400,0.0,0 -1998-01-15,62.53405422243963,62.69775593506381,62.083874512723106,62.17595672607422,2875400,0.0,0 -1998-01-16,63.0251794477162,63.31165753611491,62.63638775631795,63.066104888916016,4374800,0.0,0 -1998-01-20,63.3116350332287,64.1813003496192,63.18885875326768,64.08921813964844,5091700,0.0,0 -1998-01-21,63.65953683760918,63.96647770953594,62.963804194575204,63.475372314453125,4699400,0.0,0 -1998-01-22,62.96378115239735,63.43442365044908,62.77961669663799,62.91262435913086,4543400,0.0,0 -1998-01-23,63.18888563721499,63.37305013550998,62.2066749796417,62.820556640625,6350300,0.0,0 -1998-01-26,63.107016955080994,63.34233819210545,62.472672750928105,62.77961349487305,4362900,0.0,0 -1998-01-27,62.73868607320721,63.843672716375245,62.636372495136094,63.41395568847656,7044200,0.0,0 -1998-01-28,63.78228461738588,64.24269571905133,63.63904560797886,63.98691177368164,4268600,0.0,0 -1998-01-29,64.06874733359456,65.19419642441146,63.88458293691543,64.33476257324219,8007700,0.0,0 -1998-01-30,64.68262730020668,64.80540356208623,64.17105954237525,64.37568664550781,3649100,0.0,0 -1998-02-02,65.41932609515163,65.80811783609873,65.31701247911292,65.43978881835938,5756300,0.0,0 -1998-02-03,65.4807206194716,66.01275147450481,65.29655609272935,65.93090057373047,2759600,0.0,0 -1998-02-04,65.66482703029331,66.23778282862557,65.43973725237707,65.84899139404297,3374000,0.0,0 -1998-02-05,66.3401207900166,66.52428522157432,65.50114949069807,65.80809020996094,5076200,0.0,0 -1998-02-06,66.13544662118984,66.5447006225586,65.93081962050547,66.5447006225586,5701200,0.0,0 -1998-02-09,66.6061573564105,66.62662007756455,65.95135027948112,66.3196792602539,2322200,0.0,0 -1998-02-10,66.4219490927997,67.09721844586883,66.2582474314496,66.9539794921875,3660400,0.0,0 -1998-02-11,66.8516832166726,67.0153849202947,66.59589930476308,66.89260864257812,4073200,0.0,0 -1998-02-12,66.60612883089956,67.40417461412693,66.05363559635754,67.17908477783203,5024700,0.0,0 -1998-02-13,66.9130747458514,67.12793324274176,66.70844760595584,66.79029846191406,2101300,0.0,0 -1998-02-17,67.32232579952333,67.50649021660409,66.89260882633488,67.1176986694336,3055500,0.0,0 -1998-02-18,66.99494003802988,67.762291977989,66.97447731963098,67.73159790039062,3007400,0.0,0 -1998-02-19,67.60879529114465,67.71110884334068,67.28139192411732,67.37347412109375,3387800,0.0,0 -1998-02-20,67.54745145975411,67.91578048922263,67.03588336327006,67.8748550415039,3707000,0.0,0 -1998-02-23,68.26358433628941,68.26358433628941,67.67016588732287,68.14080810546875,3227800,0.0,0 -1998-02-24,68.0385120844437,68.1612883468517,67.40416806200226,67.60879516601562,3386800,0.0,0 -1998-02-25,67.93620138353653,68.67285898890017,67.85435053849612,68.44776916503906,3481800,0.0,0 -1998-02-26,68.38640618522726,68.89797415489532,68.22270443493348,68.83658599853516,3187600,0.0,0 -1998-02-27,68.73427240460154,69.10260134276255,68.44779434158743,68.83658599853516,3442900,0.0,0 -1998-03-02,68.91842635912947,69.24582980976668,68.50917204583298,68.6933364868164,4252300,0.0,0 -1998-03-03,68.44778622496185,69.16398129756982,68.44778622496185,69.0821304321289,3349200,0.0,0 -1998-03-04,68.81608422540381,69.02071129714156,68.38636737475456,68.63191986083984,4404100,0.0,0 -1998-03-05,67.7724916846717,68.38637294993141,67.5474018874098,67.9975814819336,7268000,0.0,0 -1998-03-06,68.46823201137306,69.36859130859375,68.38638116617118,69.36859130859375,6896300,0.0,0 -1998-03-09,69.10256890702911,69.5527485090293,68.91840452439267,69.12303161621094,3362800,0.0,0 -1998-03-10,69.55276506485478,69.96201934590718,69.3686006383812,69.7778549194336,5481900,0.0,0 -1998-03-11,70.04386698761253,70.26895683186136,69.92109070893136,70.10525512695312,3439600,0.0,0 -1998-03-12,70.12573880040368,70.45314230807992,69.73694713503815,70.39175415039062,3191300,0.0,0 -1998-03-13,70.61685300436874,70.71916661347387,69.98250862791686,70.12574768066406,2879400,0.0,0 -1998-03-16,70.6168429306418,70.964709151975,70.41221574162225,70.88285827636719,3223600,0.0,0 -1998-03-17,70.92378451402804,71.08748626708984,70.4940674122408,71.08748626708984,4581900,0.0,0 -1998-03-18,70.88282751811415,71.35346984863281,70.7395885479563,71.35346984863281,1944100,0.0,0 -1998-03-19,71.35347140899239,71.61948664510277,71.1488443042921,71.53763580322266,2554800,0.0,0 -1998-03-20,71.94841039872414,72.35884057783836,71.49693720169849,72.15362548828125,3123300,0.313,0 -1998-03-23,72.05102070598537,72.44092939109323,71.84580560856017,71.98945617675781,4453100,0.0,0 -1998-03-24,72.27675837834316,72.76927461942216,72.19467233816333,72.6051025390625,3333600,0.0,0 -1998-03-25,73.15915506782261,73.24124107631386,71.702128417103,72.33829498291016,4597600,0.0,0 -1998-03-26,72.1536059459434,72.72820804107606,71.98943391876264,72.29725646972656,3333500,0.0,0 -1998-03-27,72.7282305274885,72.74875203723103,71.57902598190742,71.98945617675781,2611300,0.0,0 -1998-03-30,71.98946831937661,72.29729101743551,71.55851654209414,71.94842529296875,3108700,0.0,0 -1998-03-31,72.33830691061621,73.01551659233262,72.07152733903096,72.19465637207031,5926500,0.0,0 -1998-04-01,72.44092847973877,72.94370546210523,71.84580470469275,72.77953338623047,2929000,0.0,0 -1998-04-02,72.85137288241206,73.7132764489082,72.72824380148404,73.56962585449219,3920900,0.0,0 -1998-04-03,73.77481568035006,74.08263827706918,73.44647157718299,73.9389877319336,3787600,0.0,0 -1998-04-06,74.36996297724232,74.45204902909359,73.34388732910156,73.34388732910156,4550500,0.0,0 -1998-04-07,73.38491573709837,73.50804479034854,72.33831878447197,72.85135650634766,5583700,0.0,0 -1998-04-08,73.03603396537284,73.07707697406369,72.0715232611378,72.44091033935547,4854800,0.0,0 -1998-04-09,72.6050804828646,73.07707507051465,72.58455897905372,73.01551055908203,4481200,0.0,0 -1998-04-13,73.13866215547822,73.13866215547822,72.23571570911429,72.81031799316406,4350200,0.0,0 -1998-04-14,72.9744532133628,73.4259262084961,72.8308027149113,73.4259262084961,3279100,0.0,0 -1998-04-15,73.52857225688139,73.63117980957031,72.995012982899,73.63117980957031,3867200,0.0,0 -1998-04-16,73.09761599881193,73.22074505439667,72.56405675794468,72.76927185058594,7177900,0.0,0 -1998-04-17,72.70774210020257,73.83642564959888,72.52304842848316,73.73381805419922,5688800,0.0,0 -1998-04-20,73.54909238411749,73.91847956685021,73.4670063435102,73.71326446533203,3688300,0.0,0 -1998-04-21,73.8364199846859,74.30841488731174,73.4875541870929,74.0621566772461,4573200,0.0,0 -1998-04-22,74.12369104971968,74.49307821441928,74.08264803141974,74.26734161376953,2386100,0.0,0 -1998-04-23,73.95951770033155,74.20577580588204,73.38491545404706,73.54908752441406,5062000,0.0,0 -1998-04-24,73.38491712850967,73.85691184158453,72.46144921162406,72.76927185058594,11039700,0.0,0 -1998-04-27,71.82529994419643,72.03051508689413,70.67609514508929,71.39434814453125,14510200,0.0,0 -1998-04-28,72.09206404216549,72.11258555199815,71.00442402103404,71.2917251586914,6511400,0.0,0 -1998-04-29,71.59955474565614,72.21520010030494,71.20964602104523,71.78424835205078,7703100,0.0,0 -1998-04-30,72.60508826526403,73.4977737767222,72.50248073521136,73.11812591552734,8684500,0.0,0 -1998-05-01,73.38490705783917,73.9389877319336,73.09760596756799,73.9389877319336,4008800,0.0,0 -1998-05-04,74.02107493719527,74.41098356591905,73.6516878152464,73.7542953491211,4537200,0.0,0 -1998-05-05,73.54908697289157,73.65169451610151,72.97448473091585,73.24126434326172,5146400,0.0,0 -1998-05-06,73.63116833194984,73.63116833194984,72.35883487693845,72.37935638427734,5526100,0.0,0 -1998-05-07,72.56405966715937,72.6051026873331,71.80476379394531,71.80476379394531,6940400,0.0,0 -1998-05-08,72.23573562398938,73.13868231928925,72.23573562398938,72.9745101928711,7951000,0.0,0 -1998-05-11,73.2617541844904,73.69270567969329,72.4819371931709,72.72819519042969,6336300,0.0,0 -1998-05-12,72.76927464930856,73.52857052128385,72.46145199850775,73.50804901123047,6045200,0.0,0 -1998-05-13,73.59014908300074,73.91849330646086,73.28232637350688,73.69275665283203,4441500,0.0,0 -1998-05-14,73.24129344941254,74.00058957091106,73.11816434862898,73.32337951660156,4187500,0.0,0 -1998-05-15,73.54910023219814,73.69275081858915,72.76928276321836,72.91293334960938,6716100,0.0,0 -1998-05-18,72.70772692833152,73.28232934266775,72.12286375659642,72.62564086914062,4847200,0.0,0 -1998-05-19,72.89238934941149,73.3438624816432,72.74873880733776,73.11812591552734,5918700,0.0,0 -1998-05-20,73.61066469855862,73.87744435874296,72.81032571800557,73.81587982177734,5716600,0.0,0 -1998-05-21,73.7953606142835,74.0621402828001,73.09762917354779,73.34388732910156,6301500,0.0,0 -1998-05-22,73.38491610409169,73.59013119386823,72.85135687067267,73.05657196044922,4862200,0.0,0 -1998-05-26,73.61064745145902,73.61064745145902,71.70214725268966,71.8868408203125,6899300,0.0,0 -1998-05-27,71.27120333576963,72.17414976444049,70.64529728862279,71.98945617675781,10202600,0.0,0 -1998-05-28,72.15362273442489,72.4819668651845,71.62006352194051,72.31779479980469,4907600,0.0,0 -1998-05-29,72.64616857185922,72.76929767113356,71.59957122802734,71.59957122802734,4772600,0.0,0 -1998-06-01,71.55847704094249,72.3793371159748,71.29169751655698,71.92786407470703,6092200,0.0,0 -1998-06-02,72.23571429366804,72.46145090083576,71.68163353062002,71.98945617675781,6701100,0.0,0 -1998-06-03,72.15363243695344,72.35884754627355,70.84025573730469,70.84025573730469,6445100,0.0,0 -1998-06-04,71.08650702258426,72.27675454201552,70.96337796885,72.15362548828125,6566300,0.0,0 -1998-06-05,72.48196906702859,73.54908752441406,72.1536249262946,73.54908752441406,8463200,0.0,0 -1998-06-08,73.50804588701472,73.85691154309491,73.32335230438403,73.46700286865234,4159900,0.0,0 -1998-06-09,73.36441242937191,73.82614649361271,73.15919728970933,73.69275665283203,2725300,0.0,0 -1998-06-10,73.3028196668411,74.24680894586538,73.05656159405217,73.22073364257812,6186900,0.0,0 -1998-06-11,73.1797081501407,73.46700930384287,71.82528842554471,71.84580993652344,8056600,0.0,0 -1998-06-12,72.15362310490504,72.52301025390625,71.08650467445706,72.52301025390625,9779000,0.0,0 -1998-06-15,71.45589913742656,72.17415200066893,70.5939957015357,70.61451721191406,10234200,0.0,0 -1998-06-16,71.18911074118131,71.72266994535275,70.75815907627361,71.7021484375,7471500,0.0,0 -1998-06-17,72.33833749320348,73.40545623069187,72.1946868939262,73.20024108886719,12057700,0.0,0 -1998-06-18,73.01555307614437,73.17972520222902,72.72825185549625,72.87190246582031,3844600,0.0,0 -1998-06-19,73.16552999952448,73.27875746575897,72.21853664556328,72.50675201416016,3549100,0.352,0 -1998-06-22,72.6302726683087,73.16552977980984,72.50675179642383,72.85672760009766,5438300,0.0,0 -1998-06-23,73.18610224634601,73.82429329265732,73.12434182250942,73.72135925292969,5004600,0.0,0 -1998-06-24,73.88605374388538,74.89480733359015,73.52578460470512,74.70952606201172,8291900,0.0,0 -1998-06-25,75.03890059384528,75.38887626190986,74.31836245371234,74.58599090576172,5854800,0.0,0 -1998-06-26,74.6477794259246,74.99775522577035,74.5242585553908,74.89482116699219,4833100,0.0,0 -1998-06-29,75.26537148092453,75.55358679841166,74.96686275924144,75.16243743896484,5953400,0.0,0 -1998-06-30,75.03896915248528,75.22425055780005,74.48312493654095,74.64781951904297,4284800,0.0,0 -1998-07-01,75.14182010679754,75.71825050761682,74.85360490638791,75.51238250732422,3489500,0.0,0 -1998-07-02,75.57419266266076,75.67712673057504,75.26539045891793,75.65653991699219,3503900,0.0,0 -1998-07-06,75.61536531818325,76.41825103759766,75.47125762495502,76.41825103759766,3144400,0.0,0 -1998-07-07,76.4079231128358,76.50056373091684,75.94472002243063,76.27410888671875,4920700,0.0,0 -1998-07-08,76.33588031633873,77.03583175397506,76.25353308838152,76.82996368408203,6875000,0.0,0 -1998-07-09,76.60353062652597,76.8917460064699,76.17120755661007,76.31531524658203,6942500,0.0,0 -1998-07-10,76.43882020254829,77.03583765093877,75.80062913702741,76.72703552246094,7849700,0.0,0 -1998-07-13,76.78884667899987,76.97412807849344,76.45945752434464,76.74767303466797,6555100,0.0,0 -1998-07-14,77.03582834097055,77.83871377798226,77.03582834097055,77.61225891113281,6983600,0.0,0 -1998-07-15,77.77697233250254,77.92108001019643,77.42699654381738,77.46817016601562,4977500,0.0,0 -1998-07-16,77.52992895291959,78.12694646211625,77.1181927396805,78.00342559814453,6315600,0.0,0 -1998-07-17,78.14751211115103,78.39455377219788,77.94164406027866,78.10633850097656,3539500,0.0,0 -1998-07-20,78.22985933149998,78.54895481035216,77.69460239923183,78.10633850097656,2338400,0.0,0 -1998-07-21,78.3946188079441,78.3946188079441,76.6035652795063,76.74767303466797,5518600,0.0,0 -1998-07-22,76.6447389238382,77.06676877824022,76.10948154752346,76.74767303466797,10417300,0.0,0 -1998-07-23,76.62410034948056,76.80938162383448,75.03891611334139,75.22419738769531,15110900,0.0,0 -1998-07-24,75.7388680739391,75.82121530750685,74.35955191167926,75.16243743896484,11540500,0.0,0 -1998-07-27,74.85363374470951,75.75945329497553,74.33896354569474,75.69769287109375,9600000,0.0,0 -1998-07-28,75.3889058515409,75.53301353612876,73.7007872606544,74.42132568359375,13693000,0.0,0 -1998-07-29,74.91540890274959,75.18303745887373,73.94782873830079,74.13311004638672,7462400,0.0,0 -1998-07-30,74.85363974095043,75.49183083885183,74.70953207368238,75.24478912353516,6821600,0.0,0 -1998-07-31,75.32714913069353,75.43008319619051,73.33022826005201,73.63903045654297,7680500,0.0,0 -1998-08-03,73.63902525818796,74.06105489693351,73.14494177868097,73.3302230834961,10486500,0.0,0 -1998-08-04,73.92726407764114,73.92726407764114,70.48926544189453,70.48926544189453,15091600,0.0,0 -1998-08-05,71.10686463246391,71.72446913129828,69.56285338537798,71.45684051513672,21718400,0.0,0 -1998-08-06,71.23038304515495,72.13620294515114,70.85982035879287,71.76564025878906,13084400,0.0,0 -1998-08-07,72.25973050618909,72.85674822262199,71.45684461167588,71.88916778564453,12083800,0.0,0 -1998-08-10,71.6421115013861,72.23912909723097,71.27154885568926,71.4774169921875,6273000,0.0,0 -1998-08-11,70.34517617476614,70.77749946995786,69.50111640796327,70.40693664550781,14287100,0.0,0 -1998-08-12,70.98330223430087,71.7244271996242,70.81860779756235,71.60090637207031,11158400,0.0,0 -1998-08-13,71.68329884592396,72.23914292083492,70.7363052368164,70.7363052368164,9073900,0.0,0 -1998-08-14,71.37448267268348,71.62152443561172,69.68636395934053,69.9128189086914,8628500,0.0,0 -1998-08-17,69.8304750295109,71.76563559931455,69.50108599635281,71.39507293701172,11290000,0.0,0 -1998-08-18,71.80679628884131,72.85672364283526,71.66268861280292,72.71261596679688,7603900,0.0,0 -1998-08-19,73.18610638270079,73.18610638270079,72.21852635457508,72.52732849121094,6258600,0.0,0 -1998-08-20,72.25973391791604,72.7332307498568,71.90975799865548,72.09503936767578,7402800,0.0,0 -1998-08-21,71.2715510630237,71.62152690590972,69.50108503430619,71.51859283447266,16685400,0.0,0 -1998-08-24,71.97148132324219,72.42439110273628,71.35387707847752,71.97148132324219,7201700,0.0,0 -1998-08-25,72.71259232089945,73.28902283759966,71.57002468958294,72.13616180419922,9688300,0.0,0 -1998-08-26,71.33330733849999,72.21854030114227,70.98333151606002,71.72445678710938,9339700,0.0,0 -1998-08-27,70.48923369258283,70.85979625288262,68.16292428625636,68.34820556640625,24887800,0.0,0 -1998-08-28,69.15108530812569,69.64516868037785,67.29827266218008,68.10115814208984,23735900,0.0,0 -1998-08-31,68.34823315342267,68.52322109974921,62.583924333254494,63.24270248413086,22563100,0.0,0 -1998-09-01,63.283849093111364,66.24834950606127,61.67807803609682,65.91896057128906,24748500,0.0,0 -1998-09-02,65.7542595540851,67.03064154918631,65.07489494378929,65.4454574584961,13843200,0.0,0 -1998-09-03,64.31318195272868,65.46604308888514,63.73675138465045,64.9307861328125,17311300,0.0,0 -1998-09-04,65.50726481776712,65.75430667125966,63.078019925090665,64.39557647705078,17783800,0.0,0 -1998-09-08,66.45423783607853,67.85414123535156,65.75428613644202,67.85414123535156,14746500,0.0,0 -1998-09-09,67.68942642211914,67.93646812438965,66.166002591451,66.2071762084961,12109700,0.0,0 -1998-09-10,64.84842143082982,65.44543864400254,63.77790780720977,64.88959503173828,19889300,0.0,0 -1998-09-11,64.68376373497343,66.98948669433594,63.901464873761135,66.98948669433594,20379800,0.0,0 -1998-09-14,67.77177903097561,68.81141294381409,67.25710877709518,68.14234161376953,10686800,0.0,0 -1998-09-15,67.77177082783467,68.71876398034998,67.38062148223052,68.55406951904297,8337900,0.0,0 -1998-09-16,69.00698977879115,69.33637875148227,67.95706242833819,69.17168426513672,11024900,0.0,0 -1998-09-17,67.36001454147639,67.87468457923217,67.05121251882292,67.19532012939453,12945200,0.0,0 -1998-09-18,67.68059512472021,67.70125464704155,66.83355470954514,67.49465942382812,7019200,0.359,0 -1998-09-21,65.86255544571928,68.36235758151979,65.40804596648282,67.45333862304688,8834600,0.0,0 -1998-09-22,68.42439071636733,68.52768840766619,67.5360305711971,68.01119995117188,7270100,0.0,0 -1998-09-23,68.67228233480007,70.73823547363281,68.61030374063509,70.73823547363281,13688500,0.0,0 -1998-09-24,70.28368251594954,70.61423481467241,68.25904968627198,69.00279235839844,11129500,0.0,0 -1998-09-25,68.17643076395817,69.69490581279179,67.84587837237534,68.92017364501953,10247400,0.0,0 -1998-09-28,69.6226008704781,70.28370568586543,68.92017700412906,69.53996276855469,8847800,0.0,0 -1998-09-29,69.66392055418322,70.03579201621623,68.3417109113992,69.37468719482422,10618100,0.0,0 -1998-09-30,68.4243436246305,68.96149124970307,67.01949598982527,67.26741027832031,7908400,0.0,0 -1998-10-01,66.13113029812952,67.13311712082846,64.8502399268443,65.32540893554688,13335600,0.0,0 -1998-10-02,65.3667506147829,66.688960488154,64.27179556339748,66.58566284179688,14351800,0.0,0 -1998-10-05,65.84190114258662,66.0898154236381,63.69331070680721,65.2427749633789,12807200,0.0,0 -1998-10-06,66.60631641321439,66.9575283794131,64.47838508859867,65.1808090209961,12621000,0.0,0 -1998-10-07,65.20148111586404,66.13116002911306,63.30080422655496,64.20982360839844,14348500,0.0,0 -1998-10-08,62.51571636761481,63.96188297228534,60.96625214832495,63.858585357666016,20625000,0.0,0 -1998-10-09,64.12714887111481,65.30474148891557,62.18515402772409,65.13946533203125,12708500,0.0,0 -1998-10-12,66.52365553039951,67.06080305952696,65.90386991986784,66.08980560302734,9508500,0.0,0 -1998-10-13,65.82124503792603,66.3790521992644,65.2840974010817,65.86256408691406,6256800,0.0,0 -1998-10-14,65.40807289422261,67.30874968078878,65.34609430335632,66.48236846923828,8176900,0.0,0 -1998-10-15,66.193097055222,70.90346725765353,66.0691399446317,70.05642700195312,20541100,0.0,0 -1998-10-16,70.15974075389359,70.57293121769743,69.41599791904666,70.07710266113281,16573900,0.0,0 -1998-10-19,69.87049514734647,70.61423785145779,69.74653802999458,70.32500457763672,7915900,0.0,0 -1998-10-20,71.1101070386227,71.92615852846163,70.13910906337131,70.73823547363281,14611600,0.0,0 -1998-10-21,70.65560219016751,71.15143097746693,69.99449714043494,70.49032592773438,9178400,0.0,0 -1998-10-22,70.59359949846127,71.70921388913055,70.18040898339858,71.54393768310547,8277500,0.0,0 -1998-10-23,71.37868426563656,71.39934379798552,70.59362203637632,70.63494110107422,6237200,0.0,0 -1998-10-26,71.21336863846729,71.70919714073686,70.59358301063033,71.1513900756836,5838600,0.0,0 -1998-10-27,71.68857391749586,72.03978595109743,70.26306625170128,70.73823547363281,10089700,0.0,0 -1998-10-28,70.44900444392366,71.08944993886843,70.0977923983088,70.6142807006836,5650600,0.0,0 -1998-10-29,70.800204885309,72.3496695384745,70.49031195467589,72.32901000976562,9625600,0.0,0 -1998-10-30,72.8041881127791,73.3206763939424,72.39099748784845,72.72154998779297,9872800,0.0,0 -1998-11-02,73.25866632727937,73.96109008789062,72.84547587986098,73.96109008789062,6501400,0.0,0 -1998-11-03,73.77516211239757,73.91977878413847,73.21735494996835,73.4239501953125,6866000,0.0,0 -1998-11-04,74.35363921396981,74.76682976253313,73.44462000713051,74.20902252197266,8233600,0.0,0 -1998-11-05,73.73385044926636,75.32463399776552,73.46527660341584,75.2213363647461,6841500,0.0,0 -1998-11-06,75.01474306956831,75.73782651970185,74.91144543383496,75.44859313964844,5224800,0.0,0 -1998-11-09,75.32465917605164,75.53125451114778,74.37432063460942,74.91146850585938,6188700,0.0,0 -1998-11-10,74.70486450195312,75.3246504353211,74.20903575525875,74.70486450195312,14015200,0.0,0 -1998-11-11,75.24199889338095,75.36595605794996,73.97143795654874,74.20902252197266,10922400,0.0,0 -1998-11-12,74.25034572129266,74.78749346440718,73.8371551496661,74.12638854980469,5457400,0.0,0 -1998-11-13,74.18833688330064,74.84944152832031,74.12635832283004,74.84944152832031,5524600,0.0,0 -1998-11-16,75.51055469251659,75.60352254371121,74.63252498678965,75.40725708007812,6023700,0.0,0 -1998-11-17,75.13868328773812,76.44023320446276,74.70483331549657,75.40725708007812,9058900,0.0,0 -1998-11-18,75.57256010051387,76.02706975666786,75.03541232505914,75.8617935180664,4567700,0.0,0 -1998-11-19,76.21297248238879,76.62616289975061,75.77912254415887,76.52286529541016,5249300,0.0,0 -1998-11-20,76.92573529884363,77.18397934107152,76.58485316310282,77.1013412475586,5562000,0.0,0 -1998-11-23,77.6591492478136,79.08465637686365,77.45255401171939,78.91938018798828,7151300,0.0,0 -1998-11-24,78.67146010243101,79.10531006623118,78.30991846593088,78.42354583740234,5323700,0.0,0 -1998-11-25,78.63014105825957,78.79541723494535,78.15497205028795,78.42354583740234,4393500,0.0,0 -1998-11-27,78.98132412802724,79.14660024443431,78.68176116703943,79.00198364257812,4557900,0.0,0 -1998-11-30,78.68181168173307,78.91939625160045,76.77080535888672,76.77080535888672,8705400,0.0,0 -1998-12-01,76.77082411211686,78.03105561664837,76.17169765914285,77.76248168945312,8950600,0.0,0 -1998-12-02,77.49386009787548,77.94836954126478,76.68813881186718,77.5351791381836,7495500,0.0,0 -1998-12-03,77.51453394077231,78.21695775580064,76.08902678674426,76.25430297851562,12145300,0.0,0 -1998-12-04,77.10138211758864,78.34095417735695,77.01874398027076,78.25831604003906,10339500,0.0,0 -1998-12-07,78.0516604384935,78.98133876557984,78.01034140173411,78.630126953125,4290000,0.0,0 -1998-12-08,78.36156875396914,79.16729013055885,77.67980451223939,78.2789306640625,10102600,0.0,0 -1998-12-09,78.46486488157379,78.65080058034529,77.927717307345,78.42354583740234,5327900,0.0,0 -1998-12-10,78.56817498657732,78.56817498657732,77.16332726133744,77.2769546508789,5966600,0.0,0 -1998-12-11,76.97739047250981,77.57651670001995,76.39892377008623,77.43190002441406,8198200,0.0,0 -1998-12-14,76.79145170358511,76.95672789772789,75.20066833496094,75.20066833496094,9521400,0.0,0 -1998-12-15,75.8204375248129,77.18396582907384,75.71713992600525,77.14264678955078,9631500,0.0,0 -1998-12-16,77.4319063137031,77.4319063137031,76.5228871360609,77.03937530517578,7260000,0.0,0 -1998-12-17,77.49388348308925,78.4029026441812,77.36992632475852,78.26861572265625,6914700,0.0,0 -1998-12-18,78.47681207294706,79.01574422136139,78.1866178391855,78.60118103027344,4802400,0.392,0 -1998-12-21,79.09865905206132,80.48744578070075,78.93283377102975,79.69977569580078,8580700,0.0,0 -1998-12-22,79.86557065310842,80.40450261183689,79.0571727150157,80.0521240234375,5461100,0.0,0 -1998-12-23,80.38381715368686,81.73114776611328,80.13507919446968,81.73114776611328,7791000,0.0,0 -1998-12-24,81.68967605256573,81.751860530657,81.25438470592684,81.37875366210938,1507100,0.0,0 -1998-12-28,81.75185909407618,81.7933154120752,80.92273273409569,81.17147064208984,4203600,0.0,0 -1998-12-29,81.39949064988356,82.57063178095522,81.00565557925769,82.45662689208984,3935800,0.0,0 -1998-12-30,82.20788290388259,82.74681506613699,81.60676626136807,81.79331970214844,6810700,0.0,0 -1998-12-31,81.79331970214844,82.20788290388259,81.23365937980734,81.79331970214844,6790500,0.0,0 -1999-01-04,81.83476785587604,83.05772917895018,80.73617548091114,81.60675811767578,9450400,0.0,0 -1999-01-05,81.54458381350109,82.82972977090756,81.54458381350109,82.53953552246094,8031000,0.0,0 -1999-01-06,83.45156991312233,84.73671579852063,83.41011359423852,84.52943420410156,7737700,0.0,0 -1999-01-07,83.82468154478568,84.38434188150902,83.43084649301738,84.11487579345703,5504900,0.0,0 -1999-01-08,85.02690380566742,85.23418538491087,83.55520459303884,84.73670959472656,6224400,0.0,0 -1999-01-11,84.69528687397738,84.69528687397738,83.0577617484159,83.9283447265625,7578300,0.0,0 -1999-01-12,83.72103516484651,83.72103516484651,82.08351058499434,82.4151611328125,7768800,0.0,0 -1999-01-13,79.86560258024733,82.99555482255651,79.84487441970222,81.83477783203125,10810600,0.0,0 -1999-01-14,82.00057837851854,82.1871317671451,80.19722895512848,80.40451049804688,11400700,0.0,0 -1999-01-15,81.17143760949523,82.76750520294037,80.96415610385301,82.49803924560547,7817700,0.0,0 -1999-01-19,83.10954348182773,83.32718912506485,81.91767448314832,83.03699493408203,6535100,0.0,0 -1999-01-20,83.63814052111327,84.86110217929064,82.93338295538395,83.70032501220703,6534400,0.0,0 -1999-01-21,83.29608183506336,83.4722711334578,81.31654324722,81.48236846923828,6937500,0.0,0 -1999-01-22,81.00566599066315,82.14571502584391,80.77765618362699,81.29586029052734,7522300,0.0,0 -1999-01-25,81.77256037766497,82.24930787796568,80.86052168143753,82.12493896484375,5700300,0.0,0 -1999-01-26,82.33222509789834,83.61737060546875,82.00057464433178,83.61737060546875,6047000,0.0,0 -1999-01-27,83.82467058926619,83.9904958525486,82.35297137763466,82.6431655883789,7399400,0.0,0 -1999-01-28,83.07843401494377,84.21848238590731,83.03697771054509,84.03192901611328,5961700,0.0,0 -1999-01-29,84.46724843803788,85.0994572913778,83.18210257223215,84.67453002929688,6456800,0.0,0 -1999-02-01,85.35855270870447,85.35855270870447,84.17704772949219,84.17704772949219,9426800,0.0,0 -1999-02-02,84.29106048738991,84.38433720500784,82.75717668656196,83.65885162353516,9194500,0.0,0 -1999-02-03,83.36864885559906,84.86107618468984,83.34792069825058,84.50869750976562,10290700,0.0,0 -1999-02-04,84.48795187900741,84.57086449125374,82.76751517489612,83.2442626953125,7761100,0.0,0 -1999-02-05,83.34788415750269,83.34788415750269,81.73108859314426,82.2907485961914,7516100,0.0,0 -1999-02-08,82.97483093238704,82.97483093238704,81.81405388212133,82.45662689208984,8528400,0.0,0 -1999-02-09,82.49807120902155,82.58098384340246,80.60144469755785,80.61180877685547,8985700,0.0,0 -1999-02-10,81.0056435609875,81.58603200001197,80.4770755183045,81.13001251220703,6936700,0.0,0 -1999-02-11,81.62749351249947,83.63812501852091,81.25438663509343,82.99555206298828,9181800,0.0,0 -1999-02-12,82.78826511641485,83.24428460378618,81.33729402023332,82.00059509277344,10676600,0.0,0 -1999-02-16,82.74679445905093,83.32718279694006,81.50310516357422,81.50310516357422,6915500,0.0,0 -1999-02-17,81.71043665588752,83.1510443036765,81.08859162806493,81.42024230957031,7858100,0.0,0 -1999-02-18,81.71040358113412,82.49807363087615,81.06783064581825,82.06278228759766,9048900,0.0,0 -1999-02-19,82.24933585890342,83.41011277626698,81.83477267413073,82.4151611328125,5312200,0.0,0 -1999-02-22,82.53953443094541,84.71599126551328,82.43589362929931,84.61235046386719,10695800,0.0,0 -1999-02-23,84.63309971865486,85.23421651802812,83.96979842279472,84.57091522216797,7770700,0.0,0 -1999-02-24,84.79892902793047,85.4622303549639,82.91266587917914,83.0784912109375,7271000,0.0,0 -1999-02-25,82.60167082010649,83.09914637837062,81.37871007270718,82.2907485961914,11633000,0.0,0 -1999-02-26,82.74682237454357,82.80900686029598,81.46167633566039,81.95915222167969,9621300,0.0,0 -1999-03-01,82.02133900665244,82.45663041912141,81.17148434421303,82.18716430664062,7607200,0.0,0 -1999-03-02,82.58097510883826,83.11990717531161,81.13000416064081,81.46165466308594,9651500,0.0,0 -1999-03-03,81.64823469829632,81.95915714573843,80.77765184545844,81.89697265625,7881400,0.0,0 -1999-03-04,82.29081464451393,83.23394614736667,81.76224643961844,82.93338775634766,8256400,0.0,0 -1999-03-05,84.57084411822974,84.98540707959361,83.94899967618393,84.60193634033203,10703100,0.0,0 -1999-03-08,85.08910640653409,85.43112108514744,84.40507704930738,85.15129089355469,4802200,0.0,0 -1999-03-09,84.98547183065196,86.18770533459777,84.73673386431834,84.94401550292969,7893400,0.0,0 -1999-03-10,85.21346836985167,85.73167238572282,84.75744883588506,85.69021606445312,3950000,0.0,0 -1999-03-11,86.02185491169467,87.01680648657694,85.48292280863346,86.6436996459961,6583700,0.0,0 -1999-03-12,86.89243169959617,86.91315985601305,85.71092678383353,85.81456756591797,5286500,0.0,0 -1999-03-15,86.18767457668145,87.05825714816308,85.89748038618757,87.03752899169922,5394400,0.0,0 -1999-03-16,86.97533759459793,87.32771622641589,86.54004634352869,86.70587158203125,4547500,0.0,0 -1999-03-17,86.68511165696748,86.85093683469482,85.98035465162629,86.33273315429688,4524100,0.0,0 -1999-03-18,86.08402577960874,87.80446260592888,86.06329762507477,87.72154998779297,3506300,0.0,0 -1999-03-19,87.97587211884648,88.18365641766285,86.23048400878906,86.23048400878906,5526700,0.32,0 -1999-03-22,86.4798575250388,86.83309096519393,86.05389955308702,86.39674377441406,4603800,0.0,0 -1999-03-23,85.9811325337758,86.12658152549558,83.58122417039951,83.90328979492188,9713800,0.0,0 -1999-03-24,84.33964583850852,84.55781934954679,83.52928708322351,84.3812026977539,6280900,0.0,0 -1999-03-25,85.15002694737497,86.1058349609375,84.94224259660051,86.1058349609375,6639600,0.0,0 -1999-03-26,85.52404741390156,85.85650240870778,84.92147273581527,85.48249053955078,6159700,0.0,0 -1999-03-29,85.877242383941,87.39406761840209,85.877242383941,87.20706176757812,5863900,0.0,0 -1999-03-30,86.39673607375094,87.24865194172203,86.14739484410086,86.74996948242188,5401400,0.0,0 -1999-03-31,87.20713845710792,87.50842592616392,85.31629985820469,85.35785675048828,7413600,0.0,0 -1999-04-01,86.23050828865975,86.23050828865975,85.19158650204939,86.00194549560547,7683600,0.0,0 -1999-04-05,87.06163688625456,88.162893868348,86.60451134651765,88.03822326660156,5791100,0.0,0 -1999-04-06,87.89279491026576,88.42264509234892,87.20710643933461,87.83045959472656,5381300,0.0,0 -1999-04-07,88.22528010280836,88.68240590644984,87.3525853867655,88.53695678710938,6248600,0.0,0 -1999-04-08,88.55768616854247,89.7212784785937,87.9551115794088,89.65894317626953,5909100,0.0,0 -1999-04-09,89.38882755636617,90.09529434783907,88.8278098101965,89.67972564697266,4365800,0.0,0 -1999-04-12,88.74466120087187,90.69783332751247,88.57843378583864,90.635498046875,8213200,0.0,0 -1999-04-13,90.59399614039246,90.73944521676465,89.43040352941495,90.05375671386719,10071400,0.0,0 -1999-04-14,90.46935222977568,90.46935222977568,88.22528010280836,88.53695678710938,11551700,0.0,0 -1999-04-15,88.72392104006207,88.80703478342512,87.10320304448247,88.20446014404297,11150000,0.0,0 -1999-04-16,88.37066420366827,88.37066420366827,87.22785053538665,87.45641326904297,6476200,0.0,0 -1999-04-19,88.22523533883702,89.45116300840635,85.35781129814943,86.1058349609375,12487200,0.0,0 -1999-04-20,86.313638238025,87.22788958190394,85.77339880755109,87.18633270263672,9049600,0.0,0 -1999-04-21,87.14475657168751,90.17840808801235,86.70840943577778,89.67972564697266,5772200,0.0,0 -1999-04-22,89.84598104719014,90.67711870720115,89.35768767193366,90.53166961669922,6897400,0.0,0 -1999-04-23,90.34459640285247,90.92639233184968,89.76280047385526,90.30303955078125,4593100,0.0,0 -1999-04-26,90.76021260174481,90.96799697125431,90.0745241823635,90.82254791259766,3606500,0.0,0 -1999-04-27,91.17578212550428,91.42512337106173,90.32386620318303,91.25889587402344,5147200,0.0,0 -1999-04-28,90.71865096228716,91.25889029463242,89.76284291275321,90.0121841430664,5544300,0.0,0 -1999-04-29,90.13683587957411,90.46929078369425,88.9732437151536,89.32647705078125,9824300,0.0,0 -1999-04-30,89.82517851316013,90.17841192392203,87.43565838153546,88.59925079345703,10991900,0.0,0 -1999-05-03,88.7239157818584,90.32385524677714,88.4953530011557,90.21996307373047,10709700,0.0,0 -1999-05-04,89.8459527987186,90.30307836799977,88.51613296080973,88.93170166015625,10509300,0.0,0 -1999-05-05,89.05638731636822,89.80441110157336,87.66423193834753,89.63818359375,10032300,0.0,0 -1999-05-06,89.38881932383724,89.84594485268997,88.01744273727907,89.08753204345703,13507200,0.0,0 -1999-05-07,89.43038530702944,89.84595401198776,88.7239185086003,89.7628402709961,8680700,0.0,0 -1999-05-10,89.65894524491193,90.24074141336095,88.7862509922384,89.31610107421875,5580100,0.0,0 -1999-05-11,89.97062185841845,91.00954358888518,89.5758316008411,90.21996307373047,7000600,0.0,0 -1999-05-12,90.26148954736685,91.23807564513993,87.4356233921086,90.92639923095703,13865800,0.0,0 -1999-05-13,91.25890034229681,91.7575828578285,90.96800220823667,91.32123565673828,4485700,0.0,0 -1999-05-14,89.47194502861024,90.3446393368317,88.76547820766906,88.95248413085938,8370100,0.0,0 -1999-05-17,88.84857580702861,89.41998269072677,88.0174385216495,89.22258758544922,6268100,0.0,0 -1999-05-18,89.45117152966576,89.75245886698984,88.18368686919895,89.05638122558594,8218600,0.0,0 -1999-05-19,89.40960240932921,89.76283579091383,88.59924347510568,89.70050048828125,5052400,0.0,0 -1999-05-20,89.8459283406016,90.15760478026604,89.13946174402889,89.16024017333984,4670400,0.0,0 -1999-05-21,89.18103615238037,89.55504795357861,88.16289291578516,88.66157531738281,6418200,0.0,0 -1999-05-24,88.99405695076098,88.99405695076098,86.69803937124684,87.18633270263672,7952000,0.0,0 -1999-05-25,87.35254523550817,87.99667675365774,85.39937224499015,85.77338409423828,15406400,0.0,0 -1999-05-26,85.98118604834592,87.10322182568055,85.17082687582648,86.72920989990234,12575900,0.0,0 -1999-05-27,86.33440646374173,86.62530458419718,85.10847867039378,85.48249053955078,14515400,0.0,0 -1999-05-28,85.77337169658662,86.9369639482845,85.50325206672818,86.5733413696289,8748000,0.0,0 -1999-06-01,86.52137482924269,86.54215325739573,85.35778285267266,86.27203369140625,6705300,0.0,0 -1999-06-02,86.27205746809489,86.56295554240927,85.11885438777715,86.35517120361328,6981900,0.0,0 -1999-06-03,86.89538124013272,87.02005180145285,86.29280686041874,86.83304595947266,6076600,0.0,0 -1999-06-04,87.41486843466171,88.671963642719,87.06163507041421,88.57846069335938,9787200,0.0,0 -1999-06-07,88.72394647450999,89.22262907764541,88.37071296395573,88.80706024169922,5299100,0.0,0 -1999-06-08,88.6823343518551,88.96284314139353,87.49796390713726,87.93431091308594,4895700,0.0,0 -1999-06-09,88.03825566626543,88.49538137423282,87.64346528211176,87.85124969482422,7409700,0.0,0 -1999-06-10,87.3940887669727,87.41486719987022,86.16816122601897,87.04085540771484,7040700,0.0,0 -1999-06-11,87.24864341137096,87.91355329209587,85.83570991483055,86.31361389160156,12824800,0.0,0 -1999-06-14,86.89542627816249,86.93698315347486,86.13701330371175,86.39674377441406,6823500,0.0,0 -1999-06-15,86.74997570294828,87.53955632012482,86.49024523677178,86.9785385131836,5700900,0.0,0 -1999-06-16,88.01748532752616,89.01485060035931,88.01748532752616,88.64083862304688,7865800,0.0,0 -1999-06-17,88.34991868971892,90.13686436406414,88.18369118512867,89.47195434570312,8162800,0.0,0 -1999-06-18,89.40858808102969,89.8254113354867,88.95008250112697,89.5753173828125,2875100,0.405,0 -1999-06-21,89.6794932568195,90.20052215094464,89.13762320692935,89.78369903564453,4646400,0.0,0 -1999-06-22,89.36691231390982,90.15887655549764,89.03345368587284,89.15850067138672,5862400,0.0,0 -1999-06-23,88.69998403365045,89.1168072668913,88.11643150711329,88.7208251953125,9629200,0.0,0 -1999-06-24,88.61662067481046,88.65830299874028,87.13689817530162,88.05390930175781,9176900,0.0,0 -1999-06-25,88.42904848276841,88.7104041637765,87.53287853585371,87.83507537841797,4087000,0.0,0 -1999-06-28,88.49157822864244,89.11681311956549,88.36653125045784,88.90840148925781,5028900,0.0,0 -1999-06-29,88.69997691266548,90.15885811188694,88.55408879274333,89.74203491210938,6956200,0.0,0 -1999-06-30,89.78371710672866,91.70110382302835,89.26268810773418,91.36764526367188,16856100,0.0,0 -1999-07-01,91.36763123125141,92.36800675568118,90.74239652848281,92.05538940429688,9939500,0.0,0 -1999-07-02,92.11793213301084,93.03494322211773,91.97204400519837,92.97241973876953,3772800,0.0,0 -1999-07-06,92.86821921310083,93.86859500354716,92.43055480478056,92.95158386230469,11221100,0.0,0 -1999-07-07,92.74313303584002,93.18079725915523,92.37841284974402,93.07659149169922,3230700,0.0,0 -1999-07-08,92.74313363709936,93.78519131841509,92.53472210083622,93.1495361328125,7101500,0.0,0 -1999-07-09,93.36839994926045,93.7643820026167,93.07662369941902,93.70185852050781,2976800,0.0,0 -1999-07-12,93.99363363502918,93.99363363502918,93.03494025427278,93.2850341796875,4436300,0.0,0 -1999-07-13,92.95158386230469,93.31630420257157,92.47223712938248,92.95158386230469,6477600,0.0,0 -1999-07-14,93.36840466485506,93.51429279714391,92.53475819463314,93.47261047363281,4382500,0.0,0 -1999-07-15,93.88941662459723,94.28539862589965,93.57679925514796,94.06656646728516,3348600,0.0,0 -1999-07-16,94.20203049627365,94.80642405476745,93.8685719812426,94.5771713256836,2281500,0.0,0 -1999-07-19,94.82730190206019,94.86898423256659,93.74356130889379,93.95197296142578,4287000,0.0,0 -1999-07-20,93.4517743198454,93.639344785697,91.72195780143613,92.02415466308594,7060100,0.0,0 -1999-07-21,92.0970640633331,92.63893409402932,91.57603518766363,91.91991424560547,4793700,0.0,0 -1999-07-22,91.65940850798526,92.03454933407525,90.34641561667034,90.71113586425781,7804100,0.0,0 -1999-07-23,91.13839020562216,91.36764295939801,90.11717339334785,90.53399658203125,4603000,0.0,0 -1999-07-26,89.95043769086226,90.78408400866451,89.7837084273018,89.86707305908203,4333400,0.0,0 -1999-07-27,90.70073525183993,91.5031199731625,90.28391201998404,90.61737060546875,5908500,0.0,0 -1999-07-28,90.8674515938879,91.57605098705125,90.42978726281643,90.90913391113281,3955500,0.0,0 -1999-07-29,89.99210939671211,90.20052095159102,88.9083693113418,89.63780975341797,7760600,0.0,0 -1999-07-30,89.9087887241342,90.2630885406178,88.40822479549774,88.53327178955078,5994300,0.0,0 -1999-08-02,88.53324946756932,89.86708373450068,88.3665201842029,88.74166107177734,6065500,0.0,0 -1999-08-03,89.17931659405048,89.26268122746394,87.61622971754808,88.3248291015625,5445400,0.0,0 -1999-08-04,88.5124084709934,89.28353140799052,86.99100375745856,87.11605072021484,6497900,0.0,0 -1999-08-05,87.28280789414646,87.99140757619062,85.92813203141496,87.90804290771484,10322000,0.0,0 -1999-08-06,87.51204459939227,88.03307368131291,86.36578061916684,86.94933319091797,7537700,0.0,0 -1999-08-09,87.09519251086463,87.89757703148399,86.5324812886121,86.76173400878906,5565900,0.0,0 -1999-08-10,86.61588314594734,86.80345363399198,84.69849593482435,85.8030776977539,9793300,0.0,0 -1999-08-11,86.49081593369992,87.05352726628061,85.78221647785756,86.8451156616211,8003400,0.0,0 -1999-08-12,87.15771951903271,87.90800117916785,86.6366905883833,86.79299926757812,7036800,0.0,0 -1999-08-13,87.78300481445771,88.8667456146362,87.44954610671049,88.8042221069336,5857700,0.0,0 -1999-08-16,88.7833415949456,89.34605291491357,88.19978911497883,89.20016479492188,3927000,0.0,0 -1999-08-17,89.6586521010545,89.92958712599957,88.78332355892425,89.78369903564453,4808000,0.0,0 -1999-08-18,89.50233922730492,89.61696557862642,88.86668400634024,89.13761901855469,4355500,0.0,0 -1999-08-19,88.28317139880491,88.85630341331557,87.8246657871964,88.40821838378906,6448100,0.0,0 -1999-08-20,88.74168609298653,89.4502857470874,88.4915920974215,89.30439758300781,3663700,0.0,0 -1999-08-23,89.90878496460492,91.06546961122883,89.80457914058475,91.01336669921875,5637800,0.0,0 -1999-08-24,90.74241571341534,92.01372654449442,90.28391016778025,91.34680938720703,9279500,0.0,0 -1999-08-25,91.49271135407734,92.55561073427278,90.80495293159795,92.28467559814453,6005300,0.0,0 -1999-08-26,92.2221577671596,92.31594301234654,91.034211328125,91.18009948730469,4322300,0.0,0 -1999-08-27,91.28429559357241,91.40934257383758,90.07550811767578,90.07550811767578,6247400,0.0,0 -1999-08-30,90.26308199438718,90.36728781520729,88.03307742883663,88.40821838378906,4652000,0.0,0 -1999-08-31,88.65832071805305,89.20019103743937,87.28280375345702,88.07476806640625,11453700,0.0,0 -1999-09-01,88.65831272933124,89.18976241776518,88.24148944428502,89.15850067138672,6863900,0.0,0 -1999-09-02,88.11645390867552,88.48117433048296,87.13691906153556,88.10603332519531,10896300,0.0,0 -1999-09-03,89.95043770665822,91.03417791999145,89.82539075896592,90.67987823486328,9160800,0.0,0 -1999-09-07,90.74240229165541,91.11754313714226,90.17969102342511,90.34642028808594,4560800,0.0,0 -1999-09-08,89.9296393856496,90.74244493282,89.38776902086933,89.90879821777344,6159600,0.0,0 -1999-09-09,89.86707305908203,90.20053158620293,89.15847368895012,89.86707305908203,6177800,0.0,0 -1999-09-10,90.86746454458228,90.94040861015706,89.99213575768492,90.61737060546875,2934500,0.0,0 -1999-09-13,90.11717459619135,90.34642735302717,89.70035140194439,90.00254821777344,2320500,0.0,0 -1999-09-14,89.40856170654297,89.7420202117422,88.95005626189403,89.40856170654297,3736000,0.0,0 -1999-09-15,90.32557307414565,90.32557307414565,87.94968121202,87.99136352539062,6984500,0.0,0 -1999-09-16,88.36655075291044,88.57496242921448,86.9076690187822,88.33528900146484,15377600,0.0,0 -1999-09-17,88.69902849286515,89.57682283704526,88.38553051280084,89.45142364501953,8542300,0.372,0 -1999-09-20,89.57677940257977,89.61857911298695,89.01248331208289,89.32598114013672,2803900,0.0,0 -1999-09-21,88.4482159587211,88.59451499267928,87.0479252051213,87.44502258300781,9335200,0.0,0 -1999-09-22,87.77941454967139,88.17651190120561,86.7762212405323,87.35096740722656,13009100,0.0,0 -1999-09-23,88.15559883900752,88.15559883900752,85.35501793705707,85.522216796875,12204100,0.0,0 -1999-09-24,85.43865203857422,85.85664935774533,84.47725820448068,85.43865203857422,13792900,0.0,0 -1999-09-27,86.10742135586744,86.77621686154409,85.79392346258152,86.00292205810547,6970300,0.0,0 -1999-09-28,85.56404091106124,86.14923708729712,83.97565128984955,85.83573913574219,11063400,0.0,0 -1999-09-29,85.89840749380564,86.35820432223964,84.76981527855857,84.81161499023438,7580300,0.0,0 -1999-09-30,85.22960511364982,86.56719577752271,84.91610730180463,86.1073989868164,7498900,0.0,0 -1999-10-01,85.56401395693338,85.98201109399704,84.68621996909967,85.9193115234375,11127100,0.0,0 -1999-10-04,86.40002948330647,87.52862203098391,86.1074314153901,87.44502258300781,6341600,0.0,0 -1999-10-05,87.4241268961053,88.26012141579075,86.06563580161647,87.3614273071289,11976000,0.0,0 -1999-10-06,87.44499849396759,88.82438900558371,87.40319878149437,88.69898986816406,10308200,0.0,0 -1999-10-07,88.85574081113553,88.94979016633961,87.94659704416284,88.19739532470703,6535600,0.0,0 -1999-10-08,88.11379811120412,89.53498840332031,87.76895046679357,89.53498840332031,9674300,0.0,0 -1999-10-11,89.34686454289533,89.7021620159314,89.15876588069976,89.38866424560547,4282000,0.0,0 -1999-10-12,89.03337781657461,89.15877694025994,87.73758687182635,88.00928497314453,8686100,0.0,0 -1999-10-13,87.40322060587347,87.82121783497855,85.73123168945312,85.73123168945312,10469300,0.0,0 -1999-10-14,85.92979097959326,86.40003792037908,84.76984852565494,85.71034240722656,10562200,0.0,0 -1999-10-15,84.26824896185248,84.7698456818635,83.26505552183043,83.51585388183594,14238700,0.0,0 -1999-10-18,83.55762163055608,84.22641700128591,82.55442857446137,84.12191772460938,9758800,0.0,0 -1999-10-19,85.06241085022454,85.77300592858022,84.22641664039432,84.93701171875,14392900,0.0,0 -1999-10-20,85.43861255311128,86.58810464959394,85.02061542711759,85.77301025390625,9759400,0.0,0 -1999-10-21,85.08332806409791,86.27462005615234,84.6862307334131,86.27462005615234,9105400,0.0,0 -1999-10-22,86.77620509173073,87.75849835746082,86.65080595142476,87.006103515625,8309600,0.0,0 -1999-10-25,86.48360790877109,87.25690261457692,86.10741048432502,86.56720733642578,8114300,0.0,0 -1999-10-26,87.06881225138247,87.4032099940666,85.48042297363281,85.48042297363281,6256300,0.0,0 -1999-10-27,85.8566310710339,87.1524224844721,85.77303162500563,87.02702331542969,5433300,0.0,0 -1999-10-28,88.57357624371109,90.19331483712487,88.40637742116515,89.99476623535156,10509700,0.0,0 -1999-10-29,90.85165967384394,92.08475098296674,90.76806026305596,91.62495422363281,10988600,0.0,0 -1999-11-01,91.29060830186181,91.62500613446936,90.66361236572266,90.66361236572266,4006500,0.0,0 -1999-11-02,90.93528747027176,91.79218169832994,90.01569366455078,90.01569366455078,6516900,0.0,0 -1999-11-03,90.95619342423893,91.20699175169547,90.37099732684034,90.62179565429688,7222300,0.0,0 -1999-11-04,91.45780723049647,91.86535458904187,90.79946149746158,91.31150817871094,7907500,0.0,0 -1999-11-05,92.71184019640373,93.03578824037223,91.47874764194299,92.21024322509766,7431500,0.0,0 -1999-11-08,91.62499712515569,92.54459107440451,91.45779822529227,92.29379272460938,4649200,0.0,0 -1999-11-09,92.62817159572701,92.75357074499921,91.14428166267273,91.42642974853516,4533700,0.0,0 -1999-11-10,91.1233738638902,92.55501402666003,91.00842465374079,92.10566711425781,6405600,0.0,0 -1999-11-11,92.41917524096769,92.628173828125,91.93847849050584,92.628173828125,4794100,0.0,0 -1999-11-12,93.12973659836116,93.62088309972145,91.70854672208455,93.4641342163086,11802900,0.0,0 -1999-11-15,93.52682961476162,93.79852766727377,93.23423171205623,93.68357849121094,2187500,0.0,0 -1999-11-16,94.00753418913985,95.63772264328679,93.6940364094962,94.46733093261719,7544800,0.0,0 -1999-11-17,95.13614439732821,95.595941228774,94.50914871808395,94.71814727783203,9459000,0.0,0 -1999-11-18,95.26158658628606,95.63778416385367,94.71819008535508,95.3869857788086,4491000,0.0,0 -1999-11-19,95.24064515766344,95.61684257105776,94.96894702576753,95.3033447265625,4832100,0.0,0 -1999-11-22,95.26159372432213,95.63779133007856,94.63459771472807,95.2824935913086,4155400,0.0,0 -1999-11-23,95.53323407478105,95.53323407478105,93.88214558388022,94.44644165039062,5918000,0.0,0 -1999-11-24,94.1329494562806,95.26154165668895,93.63135292276579,94.94804382324219,4459700,0.0,0 -1999-11-26,95.28247655412554,95.55417477636806,94.46738188739799,94.59278106689453,1693900,0.0,0 -1999-11-29,94.2165620994145,94.91670735902639,93.92396408047222,94.25836181640625,7348600,0.0,0 -1999-11-30,94.13298171952565,95.17797485584364,92.96258940684947,93.15068817138672,7682000,0.0,0 -1999-12-01,93.17155075158145,93.96574521738677,92.96255220794848,93.90304565429688,6980200,0.0,0 -1999-12-02,94.04933389309234,94.55093034052217,93.8821350772824,94.46733093261719,6698300,0.0,0 -1999-12-03,95.65868327629559,97.20527330523286,95.65868327629559,96.20207977294922,10045400,0.0,0 -1999-12-06,95.99308236836603,96.11848156153177,95.13618788173355,95.49148559570312,3138900,0.0,0 -1999-12-07,95.82583964449688,95.8467395004717,94.55094843003357,94.71814727783203,10714200,0.0,0 -1999-12-08,94.53007303331525,95.01076984511411,93.96577677598614,94.11207580566406,4611400,0.0,0 -1999-12-09,94.84355178074284,95.11524992379036,93.2133629224577,94.57185363769531,6474700,0.0,0 -1999-12-10,95.15702828226635,95.51232577420541,94.21653492125121,94.88533020019531,5127300,0.0,0 -1999-12-13,94.5927847775851,95.44967920442579,94.48828545723867,95.05258178710938,4210800,0.0,0 -1999-12-14,94.71818417130737,95.29293043448277,94.04938851961235,94.13298797607422,5739000,0.0,0 -1999-12-15,93.88215715388105,95.10479878199816,93.65225872808125,94.63455200195312,6879100,0.0,0 -1999-12-16,95.09438151524795,95.40787947628722,94.40468600096153,95.05258178710938,5854900,0.0,0 -1999-12-17,95.87252891831267,96.08204056367612,95.24399398222234,95.66301727294922,4775400,0.348,0 -1999-12-20,95.57918700229351,95.99821018073408,94.59448253295817,94.97160339355469,4608700,0.0,0 -1999-12-21,94.92972653391878,96.5848685326342,94.76211721759317,96.4172592163086,7981300,0.0,0 -1999-12-22,96.29153450319765,96.66865539550781,95.85156012883577,96.66865539550781,5377500,0.0,0 -1999-12-23,97.22384510986328,98.20854949951172,97.21336953125,98.20854949951172,5721700,0.0,0 -1999-12-27,98.21907639009426,98.4076369036418,97.25532265418464,98.07241821289062,2691000,0.0,0 -1999-12-28,97.79997944271223,98.21900249088152,97.53809003760642,98.00949096679688,4084500,0.0,0 -1999-12-29,98.09330934643897,98.42852783203125,97.42287237525443,98.42852783203125,3001000,0.0,0 -1999-12-30,98.63802104578033,98.93133716613737,98.00948650215811,98.31327819824219,3641300,0.0,0 -1999-12-31,98.44948493957519,98.88945922851562,98.05141296386718,98.4704360961914,3172700,0.0,0 -2000-01-03,99.39227190005406,99.39227190005406,96.45911041902379,97.50666809082031,8164300,0.0,0 -2000-01-04,96.22866296512282,96.58483262991862,93.62024394941244,93.69357299804688,8089800,0.0,0 -2000-01-05,93.81927322660174,94.8877821445465,92.0174738747733,93.86117553710938,12177900,0.0,0 -2000-01-06,93.60974548949088,94.86681458738019,92.35267639160156,92.35267639160156,6227200,0.0,0 -2000-01-07,94.07070760252545,97.7162094116211,93.90309832394634,97.7162094116211,8066500,0.0,0 -2000-01-10,98.05142211914062,98.49139644916241,97.23432693481446,98.05142211914062,5741700,0.0,0 -2000-01-11,97.75809184407692,97.94665224411908,96.20770633261921,96.87814331054688,7503700,0.0,0 -2000-01-12,96.94101261290571,96.94101261290571,95.78869886885776,95.9144058227539,6907700,0.0,0 -2000-01-13,96.85720919905037,97.71620672817888,96.06106514766299,97.21337890625,5158300,0.0,0 -2000-01-14,98.24000128994034,98.86853616703529,97.86288036368336,98.53331756591797,7437300,0.0,0 -2000-01-18,97.44383504959937,98.30283252047307,97.33907926046844,97.75810241699219,6488500,0.0,0 -2000-01-19,97.4228598633591,98.5542221069336,97.21334833677123,98.5542221069336,6157900,0.0,0 -2000-01-20,98.53328553794374,98.53328553794374,96.41721880621243,97.0457534790039,5800100,0.0,0 -2000-01-21,97.54855123509168,97.54855123509168,96.5847983663601,96.83621215820312,6244800,0.0,0 -2000-01-24,97.65334882717094,97.7790557769592,93.46311716756267,94.0916519165039,7896900,0.0,0 -2000-01-25,94.20688614788584,95.16016387939453,93.19075493957439,95.16016387939453,9942500,0.0,0 -2000-01-26,94.53162124979195,94.89826650064997,93.92403769122724,94.40591430664062,5158100,0.0,0 -2000-01-27,95.09733321449973,95.34874718201989,92.60414470325817,94.02882385253906,10922700,0.0,0 -2000-01-28,93.4840429704345,93.90306602274484,90.86514889349495,91.09561157226562,11916200,0.0,0 -2000-01-31,91.05371729931488,93.64118487558395,90.50898728325824,93.56785583496094,10768700,0.0,0 -2000-02-01,93.69360945674109,94.99258168087302,92.8765140254323,94.48975372314453,8419900,0.0,0 -2000-02-02,94.72019021807913,95.36967614967843,94.11260660464751,94.57353210449219,6205900,0.0,0 -2000-02-03,94.4478063695767,96.04009414333176,93.86117403187745,95.9981918334961,7997500,0.0,0 -2000-02-04,95.99822313524824,96.54295334072978,95.28588363577236,95.60015106201172,4925400,0.0,0 -2000-02-07,95.57919053972762,95.72584865760972,94.82494879061973,95.45348358154297,5845800,0.0,0 -2000-02-08,96.52197868310822,96.92005065944402,96.29151595996643,96.75244140625,4936400,0.0,0 -2000-02-09,96.85719461827065,96.85719461827065,94.7097011187308,94.72017669677734,8511500,0.0,0 -2000-02-10,94.95067765865367,95.57921259461123,94.44784970988763,94.90877532958984,6690600,0.0,0 -2000-02-11,95.09736090063136,95.16021441081023,92.54131815335728,92.98129272460938,9849800,0.0,0 -2000-02-14,93.71456910717872,93.71456910717872,92.72986426746546,93.52600860595703,8528800,0.0,0 -2000-02-15,93.35836446223193,94.67828747864141,92.38413556916781,94.5840072631836,11078300,0.0,0 -2000-02-16,94.1126318869831,94.48975285180181,93.05459806901945,93.19078063964844,8845400,0.0,0 -2000-02-17,94.15450751870365,94.15450751870365,92.66697524593376,92.70887756347656,7584200,0.0,0 -2000-02-18,93.10696114414559,93.10696114414559,90.25760319734005,90.7185287475586,9409200,0.0,0 -2000-02-22,90.63472575924965,91.40991874424553,89.52431418614742,90.48806762695312,16415400,0.0,0 -2000-02-23,90.92799925640465,92.16411721864608,90.17375778791833,91.55653381347656,12119000,0.0,0 -2000-02-24,91.64036667675462,91.87082941874006,89.23098346508868,89.71286010742188,17375000,0.0,0 -2000-02-25,90.63472429233266,91.66133120179275,89.25194763877418,89.38813018798828,10559900,0.0,0 -2000-02-28,89.41955766774187,91.64038079632216,88.9795832743439,91.26325988769531,13397800,0.0,0 -2000-02-29,91.2213451217228,92.14319610595703,91.01183353439686,92.14319610595703,8242500,0.0,0 -2000-03-01,92.26890663164195,93.1907576515766,91.99654155757034,92.81363677978516,6868000,0.0,0 -2000-03-02,92.98120533680502,93.27452144196845,92.08030587094593,92.87644958496094,7600200,0.0,0 -2000-03-03,94.15452243206879,95.01352007775522,93.6726457040008,94.61544799804688,12770300,0.0,0 -2000-03-06,94.40591232763846,94.76208199243426,93.02313598196066,93.69357299804688,11967100,0.0,0 -2000-03-07,93.86118627793296,93.96594206618958,90.65565915728034,91.88130187988281,20062000,0.0,0 -2000-03-08,91.493694857593,92.41554568739242,90.52994171734815,91.76605987548828,11808500,0.0,0 -2000-03-09,92.01750304959153,94.44783782958984,91.26326122131618,94.44783782958984,5500900,0.0,0 -2000-03-10,93.98688674845087,95.20205380850663,93.54691246808585,93.94498443603516,7924600,0.0,0 -2000-03-13,91.64036769243346,94.17545788237045,90.96993061740879,92.91838836669922,10540500,0.0,0 -2000-03-14,93.37932899384354,93.9240592056093,91.28421279474452,91.59848022460938,8263900,0.0,0 -2000-03-15,91.76607240242888,94.15450442386195,91.22134229227747,93.73548126220703,10300800,0.0,0 -2000-03-16,94.95064820821739,98.44949159982646,94.44782041541129,98.11427307128906,25601400,0.0,0 -2000-03-17,98.00653686263824,99.47684495959166,97.75448404601765,98.7626953125,10272900,0.371,0 -2000-03-20,98.72067986823086,99.03574586781032,97.31338507010928,98.25858306884766,12502300,0.0,0 -2000-03-21,97.81750915297216,100.65310368499948,97.12436382292104,100.2750244140625,13612600,0.0,0 -2000-03-22,100.52708039530958,101.38826098373576,99.93895706662828,100.8841552734375,8260000,0.0,0 -2000-03-23,100.25402817350327,103.15263615337828,100.25402817350327,102.60652160644531,11654500,0.0,0 -2000-03-24,102.75353274192081,104.68593769127827,101.97636988185313,103.21562957763672,11462900,0.0,0 -2000-03-27,103.08965418575134,103.36271154198907,102.039433584837,102.12345123291016,8798600,0.0,0 -2000-03-28,101.661335286593,102.82707993709009,101.22024271613465,101.53530883789062,6334400,0.0,0 -2000-03-29,101.87145240249208,102.49108288617734,100.59018258877002,101.6404037475586,6747500,0.0,0 -2000-03-30,100.92614882229856,102.11289750251913,98.88872188457474,99.9389419555664,9491900,0.0,0 -2000-03-31,100.56908310202887,102.37546178765427,99.77091577582229,101.07318878173828,9249100,0.0,0 -2000-04-03,100.90516494246553,101.66132354736328,99.93896228065175,101.66132354736328,8508200,0.0,0 -2000-04-04,101.99738031620785,102.83755643083889,95.03442076620314,100.9051513671875,19585500,0.0,0 -2000-04-05,99.3928394485429,101.36725341899155,99.22480421701535,100.2750244140625,8387200,0.0,0 -2000-04-06,100.98918021781064,101.95538285716574,100.14900400967578,101.14671325683594,6378500,0.0,0 -2000-04-07,101.8713253271565,102.24940447270058,101.15717583001766,101.78730773925781,6023600,0.0,0 -2000-04-10,101.9974259905423,102.91111792435379,101.03122302605199,101.38829803466797,9624200,0.0,0 -2000-04-11,100.82116569869365,101.91339499376282,99.72893640362446,101.09422302246094,9006400,0.0,0 -2000-04-12,101.07322547813176,101.59833575181283,98.237630000254,98.32164764404297,10779200,0.0,0 -2000-04-13,99.11979076808619,99.58188769474394,96.64127088874011,96.95633697509766,12225800,0.0,0 -2000-04-14,95.86411283997928,95.9901392810485,89.73082604127772,91.41117858886719,29604000,0.0,0 -2000-04-17,90.86507411367305,94.6038589477539,90.52900356678937,94.6038589477539,23918200,0.0,0 -2000-04-18,94.47779017734548,97.10334014892578,93.95268018302943,97.10334014892578,11069200,0.0,0 -2000-04-19,97.12438932860263,97.54447751774018,95.80111153281933,96.2001953125,6553700,0.0,0 -2000-04-20,96.4942724367993,96.74632539048707,95.69610475012138,96.66230773925781,8537600,0.0,0 -2000-04-24,95.10797754700029,96.32623344314119,94.43583636292254,95.6120834350586,12893100,0.0,0 -2000-04-25,97.20838102683868,99.58187866210938,97.08235460372697,99.58187866210938,14102000,0.0,0 -2000-04-26,99.45586975911458,99.98097994791667,98.13259208333332,98.45816040039062,7711100,0.0,0 -2000-04-27,96.11617561235819,99.0357884642196,96.11617561235819,98.13259887695312,15595300,0.0,0 -2000-04-28,98.80471373867583,99.38233483302396,97.5024407259637,97.52344512939453,8743400,0.0,0 -2000-05-01,98.51067780941737,99.80244895766452,98.02757640438185,98.84674835205078,7328300,0.0,0 -2000-05-02,97.79648515315854,98.88871393923334,96.8722915649414,96.8722915649414,9411900,0.0,0 -2000-05-03,96.78831750249778,96.78831750249778,93.95272226316679,94.6038589477539,12630700,0.0,0 -2000-05-04,95.44404251683699,95.68559324063621,94.60386608623104,95.3180160522461,5963600,0.0,0 -2000-05-05,94.81389551974577,96.78830982609405,94.72987788968841,96.4732437133789,7862400,0.0,0 -2000-05-08,95.94813042695394,96.3682185636744,95.33900262870927,95.74858856201172,5064100,0.0,0 -2000-05-09,96.15820362102875,96.38925216620815,94.27830863979631,94.9819564819336,5620300,0.0,0 -2000-05-10,94.43580468639529,94.75087076074936,92.58741705018471,92.83946990966797,10293900,0.0,0 -2000-05-11,94.18375163003424,95.10794544620764,93.51161067281721,94.9609146118164,7091100,0.0,0 -2000-05-12,95.31800177843357,96.43123538228042,95.19197533271506,95.99014282226562,5960800,0.0,0 -2000-05-15,95.94814084734705,97.8700442815704,95.44403502853437,97.64949798583984,4441300,0.0,0 -2000-05-16,98.51063267139358,99.28779544513378,97.67045669978255,98.59465026855469,8192200,0.0,0 -2000-05-17,97.92256571561322,98.2586362972198,97.10339367294722,97.56549072265625,5907200,0.0,0 -2000-05-18,97.88055024151191,98.34264725981947,96.36823272705078,96.36823272705078,4325600,0.0,0 -2000-05-19,95.82210636392328,96.27370112210485,94.37280225627079,94.85590362548828,6518400,0.0,0 -2000-05-22,94.9398908568301,95.0869216612544,92.08329237087237,94.1417236328125,10839400,0.0,0 -2000-05-23,94.39379865190257,94.64585151879685,92.46139333904654,92.75545501708984,7979200,0.0,0 -2000-05-24,92.75545921937666,94.56183818062358,91.74724770612256,94.26777648925781,11081500,0.0,0 -2000-05-25,94.56183737904219,95.31799600757296,92.56641877597488,92.65043640136719,8278900,0.0,0 -2000-05-26,93.30156956202742,93.88969291811405,92.30386029723762,92.75545501708984,4814000,0.0,0 -2000-05-30,94.09978284333882,96.07419792978388,93.74270777451365,95.78013610839844,5362700,0.0,0 -2000-05-31,95.82210756130762,96.7883103118162,95.50704144701135,95.99014282226562,6056500,0.0,0 -2000-06-01,96.57825735440818,97.75450407294817,96.11616042926748,97.67048645019531,8961600,0.0,0 -2000-06-02,100.10698793000435,100.21200994839504,99.13028315897094,99.37183380126953,8962200,0.0,0 -2000-06-05,99.11980429319577,99.62391010015418,98.7207205293537,98.88875579833984,6998100,0.0,0 -2000-06-06,98.5527073083108,99.32987060123652,98.06960580189751,98.44768524169922,4858900,0.0,0 -2000-06-07,98.55268121576496,99.47687515725978,98.13259306054005,99.13030242919922,4919500,0.0,0 -2000-06-08,99.14081351956366,99.30884879671547,98.1746106759408,98.74172973632812,5723100,0.0,0 -2000-06-09,99.1407897207585,99.45585578978634,97.88052544464716,98.53166198730469,3085300,0.0,0 -2000-06-12,98.78372190572559,98.78372190572559,97.37642669677734,97.37642669677734,3678900,0.0,0 -2000-06-13,97.33440450054091,99.30881840279616,97.20837808124801,99.20379638671875,6558700,0.0,0 -2000-06-14,99.64489104908532,100.06497912264807,98.93074132402863,99.37183380126953,6420500,0.0,0 -2000-06-15,99.56087425825743,99.98096233529648,98.69969370032734,99.58187866210938,5881200,0.0,0 -2000-06-16,99.92160347097084,99.92160347097084,98.2794026553923,98.76364135742188,5567900,0.348,0 -2000-06-19,98.6794239317987,100.49005556357481,98.53204693851458,100.02687072753906,5106900,0.0,0 -2000-06-20,99.83737614530524,100.30056093551964,99.03732968948036,99.6689453125,6480000,0.0,0 -2000-06-21,98.9952533783191,100.00583869566478,98.96367258715206,99.62686920166016,3115000,0.0,0 -2000-06-22,99.41632408502277,99.50053952262125,97.68990761425363,98.1109848022461,7490500,0.0,0 -2000-06-23,98.237306867327,98.44784545898438,96.93196759905135,97.26882934570312,4863300,0.0,0 -2000-06-26,97.94257180040393,98.53207997117163,97.60570998853667,98.52155303955078,5201300,0.0,0 -2000-06-27,98.35312391923755,98.84788971440014,97.7004541468954,97.79519653320312,4159500,0.0,0 -2000-06-28,98.11097826042518,99.02682108324245,97.90043968046719,98.0688705444336,5347700,0.0,0 -2000-06-29,97.52148659734638,98.19521016623997,96.68985906699336,97.14251708984375,6345700,0.0,0 -2000-06-30,96.97405588039662,98.0899101925245,96.9424750979779,97.8793716430664,7420200,0.0,0 -2000-07-03,97.98466701495428,99.33211409036404,97.81623613052805,99.22684478759766,1436600,0.0,0 -2000-07-05,98.61626419819113,98.80574890736784,97.26881737737895,97.43724822998047,2748200,0.0,0 -2000-07-06,97.64780531371233,98.67944448153723,97.16356652065166,98.19520568847656,5963200,0.0,0 -2000-07-07,98.82682248091592,100.23743115288468,98.53206843005678,99.77424621582031,3034800,0.0,0 -2000-07-10,99.62685830183398,100.32163563149597,99.39526585861331,99.60580444335938,2816100,0.0,0 -2000-07-11,99.35317550623776,100.46903020041675,99.14263688469457,99.81636047363281,5431600,0.0,0 -2000-07-12,100.57427105100237,101.14272516830968,100.17424778326759,100.46900177001953,5883000,0.0,0 -2000-07-13,101.04799051760334,101.31116374012028,100.5111171436688,100.91114044189453,5356000,0.0,0 -2000-07-14,101.35331054561394,101.90071105957031,100.83749083053966,101.90071105957031,5341900,0.0,0 -2000-07-17,101.72174235527089,102.39546599293386,101.52173065033969,101.73226928710938,4208300,0.0,0 -2000-07-18,101.47961597711267,101.47961597711267,100.61640762544013,100.900634765625,4262100,0.0,0 -2000-07-19,100.70064238314373,100.99539651096393,99.87954159850175,100.09008026123047,8506800,0.0,0 -2000-07-20,100.38479079883624,101.4795913696289,100.25846765605246,101.4795913696289,4538900,0.0,0 -2000-07-21,100.89008870167193,100.89008870167193,99.50053405761719,99.50053405761719,5656900,0.0,0 -2000-07-24,99.79529134616823,100.29005703111231,98.7425983994787,98.93208312988281,5628500,0.0,0 -2000-07-25,99.54268658216797,99.60584818532925,98.89001668283481,99.24793243408203,4757100,0.0,0 -2000-07-26,99.0163117354,99.1426349058045,98.1215226117014,98.27942657470703,12062500,0.0,0 -2000-07-27,98.32155075138843,98.78473578704808,97.47939614109816,97.94258117675781,7652600,0.0,0 -2000-07-28,98.17418217454502,98.30050537699994,95.34243705284734,95.73193359375,6229500,0.0,0 -2000-07-31,96.30036053957639,97.10040726028123,95.71085242958335,96.34246826171875,5265500,0.0,0 -2000-08-01,96.76355304602019,97.5004382411052,96.42669124255276,96.9319839477539,3946600,0.0,0 -2000-08-02,96.93196759905135,97.96360669817244,96.76353672572544,97.41620635986328,7439800,0.0,0 -2000-08-03,96.25824945355261,98.23731232508234,96.08981857086923,98.08993530273438,4607100,0.0,0 -2000-08-04,98.57419476073385,98.84789500248728,97.96363268297621,98.61630249023438,3686600,0.0,0 -2000-08-07,98.84789469272276,100.00585725035849,98.6163021811956,99.79531860351562,4159800,0.0,0 -2000-08-08,99.37419363809965,100.25845553064207,99.37419363809965,100.17424011230469,3658700,0.0,0 -2000-08-09,100.47956602105452,100.53220068109698,99.29002270409495,99.3321304321289,5383800,0.0,0 -2000-08-10,99.39528556068103,99.61635111848386,98.5531310547655,98.84788513183594,4193400,0.0,0 -2000-08-11,98.7847039532252,99.71107372601759,98.06887276515835,99.31105041503906,5089400,0.0,0 -2000-08-14,99.56370970542545,100.7637797949178,99.07947089738468,100.57429504394531,2966700,0.0,0 -2000-08-15,100.61638967920443,100.93219755641474,100.09004321718724,100.49006652832031,5564600,0.0,0 -2000-08-16,100.59530296036934,101.01637999243451,99.6057719350162,100.13211822509766,5191600,0.0,0 -2000-08-17,100.17422953973549,101.35324527202326,99.94263716375039,101.184814453125,5652200,0.0,0 -2000-08-18,101.31117687504077,101.31117687504077,100.53218403539478,100.84799194335938,4626400,0.0,0 -2000-08-21,101.07957024906958,101.5427551158639,100.65849309743837,101.39537811279297,2380600,0.0,0 -2000-08-22,101.43750547450315,101.94279815432633,101.12169754961366,101.22696685791016,3075300,0.0,0 -2000-08-23,100.93222140732428,101.92175298974902,100.5743057285749,101.62699890136719,5483200,0.0,0 -2000-08-24,101.83752549497217,102.0691179656037,101.39539441467562,101.94279479980469,4529000,0.0,0 -2000-08-25,101.83754946180612,102.1533574506271,101.69017240035632,101.90071105957031,2822200,0.0,0 -2000-08-28,101.90070388811226,103.01655870341597,101.90070388811226,102.24809265136719,5518700,0.0,0 -2000-08-29,102.02706077681702,102.32181497633734,101.66914496311378,102.26918029785156,3561900,0.0,0 -2000-08-30,101.9428156977804,102.0691388894753,101.29014587402344,101.29014587402344,3964800,0.0,0 -2000-08-31,101.77436493389423,103.14286591045673,101.66909562800481,102.6375732421875,4863100,0.0,0 -2000-09-01,103.2481593022581,103.47975182924114,102.4060046586834,102.74286651611328,3191200,0.0,0 -2000-09-05,102.32171506040527,102.54278049417775,101.60588413199915,101.92169189453125,3470800,0.0,0 -2000-09-06,101.85855632101298,102.37437579804168,100.74270194213459,100.76375579833984,4322200,0.0,0 -2000-09-07,101.22697549570611,101.78490287728603,100.9427483390522,101.62699890136719,4265500,0.0,0 -2000-09-08,101.2480054480561,101.39538245744193,100.60586276430362,100.93219757080078,3518200,0.0,0 -2000-09-11,100.89013567323448,101.85861360331978,100.17430415969316,100.78486633300781,3937500,0.0,0 -2000-09-12,100.89008982494623,101.22695156058879,100.00582776888452,100.04793548583984,4769100,0.0,0 -2000-09-13,99.71109163474655,100.61640771166677,99.47949914995301,100.31112670898438,7691600,0.0,0 -2000-09-14,100.97431019630365,101.01641791531796,99.81634792341026,100.81640625,3397100,0.0,0 -2000-09-15,100.0882287188752,100.13044222740278,98.61075592041016,98.61075592041016,4085700,0.375,0 -2000-09-18,98.86401916358868,99.26504742236497,97.3971000064859,97.7031478881836,5109300,0.0,0 -2000-09-19,98.01977821305996,98.82183496846399,97.73483699732432,98.58966064453125,6588200,0.0,0 -2000-09-20,98.3996953553885,98.63186966875385,96.69004813878908,97.8614730834961,6508100,0.0,0 -2000-09-21,97.57655181584002,98.31528841838261,96.33125297155394,96.37346649169922,5972300,0.0,0 -2000-09-22,96.33122348928995,98.14640429999963,96.19402959080608,98.12529754638672,7791300,0.0,0 -2000-09-25,98.56850576152834,98.65293274719133,97.06992676601047,97.42874145507812,9726300,0.0,0 -2000-09-26,97.51317389000397,97.93530884190875,96.1834487915039,96.1834487915039,5302400,0.0,0 -2000-09-27,96.96441308974802,97.23880084990621,95.99350255380367,96.69002532958984,7186200,0.0,0 -2000-09-28,96.71118679046631,98.8324164439892,96.51067254461091,97.93537902832031,7036400,0.0,0 -2000-09-29,98.25193601032254,98.58964406105619,97.00663757324219,97.00663757324219,9333600,0.0,0 -2000-10-02,97.44991359341904,97.8720488049998,96.67951683228415,97.1544189453125,5517800,0.0,0 -2000-10-03,97.61874236558613,98.44190581472296,96.0990559979489,96.2468032836914,9347200,0.0,0 -2000-10-04,96.50008301736999,97.42878022926068,95.74023984400488,97.04885864257812,6148900,0.0,0 -2000-10-05,96.85888211862526,97.82979268246417,96.79556186446185,97.38655090332031,4566900,0.0,0 -2000-10-06,97.17552550133742,97.69264113443533,94.3894331107691,95.27591705322266,10014900,0.0,0 -2000-10-09,95.44474942684174,95.44474942684174,94.13613057136536,94.55826568603516,4508000,0.0,0 -2000-10-10,94.62156535775024,95.40251514990656,92.99634552001953,92.99634552001953,6104700,0.0,0 -2000-10-11,92.95416778753048,93.62958408389764,91.26562704661258,92.2154312133789,10346000,0.0,0 -2000-10-12,92.72194671272672,92.93301419898378,89.68257491062505,89.91474914550781,12336900,0.0,0 -2000-10-13,89.78815633174995,92.9752770666099,89.74594281208293,92.91195678710938,11778800,0.0,0 -2000-10-16,92.80640702267029,93.36573606203821,92.32095163001134,93.33407592773438,5659000,0.0,0 -2000-10-17,93.50291839557146,93.58734540992411,90.78014718269816,91.01232147216797,7831700,0.0,0 -2000-10-18,89.57707029658766,91.94102691138923,87.909636612933,90.67462158203125,10897300,0.0,0 -2000-10-19,92.42645415301385,94.18886769989136,92.15206641517662,94.09388732910156,8767300,0.0,0 -2000-10-20,93.46071826695385,95.36032636181062,93.46071826695385,94.49494934082031,7373500,0.0,0 -2000-10-23,94.5160173819493,95.25475356068272,93.84060144710732,94.91704559326172,5290000,0.0,0 -2000-10-24,95.21257943554107,95.86688889297885,93.882853763974,94.28388214111328,5750700,0.0,0 -2000-10-25,93.71399975216536,94.26277542638977,91.94103218928656,92.06767272949219,9137600,0.0,0 -2000-10-26,92.61647092298553,92.97528587414567,90.52690150152345,92.32097625732422,9345800,0.0,0 -2000-10-27,93.12299578185036,94.07279968261719,92.2787256478354,94.07279968261719,9762900,0.0,0 -2000-10-30,93.50289347968634,95.29696705661034,93.31293274801203,94.91704559326172,10154100,0.0,0 -2000-10-31,95.24422250610712,97.04884987990704,94.60046654235393,96.55284118652344,7752400,0.0,0 -2000-11-01,96.07795308676432,96.75336927718095,95.38143014039719,96.22570037841797,6753600,0.0,0 -2000-11-02,96.69005065202896,97.19661280344758,96.25736214769222,96.38400268554688,11395100,0.0,0 -2000-11-03,96.90112387343449,97.0910846913088,96.16238735947888,96.43677520751953,5187100,0.0,0 -2000-11-06,96.69003231228498,97.46042877144203,96.6056053030623,97.11216735839844,4042500,0.0,0 -2000-11-07,96.67947516980378,97.25991083559782,96.28900026736052,97.09105682373047,5231300,0.0,0 -2000-11-08,97.30214327162983,97.30214327162983,94.93818664550781,94.93818664550781,6123300,0.0,0 -2000-11-09,94.55828471951016,95.38144835880946,92.7008898410912,94.57939147949219,10635300,0.0,0 -2000-11-10,93.88286119410454,94.19946256953429,92.21542728350781,92.27874755859375,8569500,0.0,0 -2000-11-13,91.60330969817961,92.52145347050008,89.84089579039205,91.56109619140625,17285300,0.0,0 -2000-11-14,92.84858930678594,94.30495499493512,92.53198807023178,93.96724700927734,7668900,0.0,0 -2000-11-15,93.92503310467062,94.63210919658219,93.03854964615464,94.26274108886719,8837700,0.0,0 -2000-11-16,93.59794211539493,94.47387279479258,92.74311819935626,92.78533172607422,6684100,0.0,0 -2000-11-17,92.74306363890415,93.88282818976916,91.68772609180692,92.28926849365234,6551100,0.0,0 -2000-11-20,91.68773765475457,92.10987272682986,90.71682698898138,90.97010803222656,5458500,0.0,0 -2000-11-21,91.09671741179152,91.98320076009904,90.17857394390158,91.4344253540039,7684300,0.0,0 -2000-11-22,90.73795010342417,91.09676497938561,89.23937032734995,89.24992370605469,5736900,0.0,0 -2000-11-24,90.25249714414878,91.16008773750669,90.25249714414878,91.0756607055664,3411600,0.0,0 -2000-11-27,92.17319536373421,92.32094264276927,91.39224546026313,91.87770080566406,5992000,0.0,0 -2000-11-28,91.26561138194094,92.25762889696205,90.26304048910048,90.2947006225586,5336100,0.0,0 -2000-11-29,90.75904953396014,91.79328056353317,90.00975970641232,90.12584686279297,6914100,0.0,0 -2000-11-30,89.49264169499689,90.16805785873272,87.63524724472337,89.34489440917969,11201600,0.0,0 -2000-12-01,89.95698269307825,90.54797178632231,88.4795099599681,89.30267333984375,7587200,0.0,0 -2000-12-04,89.07049786550031,90.42133006061691,88.81721682891596,90.06251525878906,6996600,0.0,0 -2000-12-05,91.09675656659061,93.37628615630142,90.78015523468635,93.01747131347656,8883400,0.0,0 -2000-12-06,93.05968930747947,93.43961092406705,91.20229473749576,91.52944946289062,12888000,0.0,0 -2000-12-07,91.0967227274886,91.7721386513254,90.2735595703125,90.2735595703125,6529100,0.0,0 -2000-12-08,92.5741869724239,94.19940639715637,90.42129890329775,90.484619140625,10276300,0.0,0 -2000-12-11,92.78529976379559,94.26277268997069,92.34205788594306,93.62957000732422,6405600,0.0,0 -2000-12-12,93.33404937599049,93.75618437995246,92.78527387083994,93.228515625,5022900,0.0,0 -2000-12-13,94.05169050780802,94.15722427184281,91.87769496869127,91.95156860351562,6070500,0.0,0 -2000-12-14,91.77218425709047,92.19431941926659,90.52688552867089,90.78016662597656,7678400,0.0,0 -2000-12-15,90.19058500602576,90.19058500602576,88.45452210215389,88.72975158691406,9065300,0.411,0 -2000-12-18,89.47075041035974,90.4234678188941,89.26962117966916,89.91535186767578,7235400,0.0,0 -2000-12-19,89.74593857099426,91.43965762871531,88.08397674560547,88.08397674560547,9616600,0.0,0 -2000-12-20,87.14187047977259,87.35358542262918,85.4269794426342,85.5328369140625,9994300,0.0,0 -2000-12-21,85.36345193238385,87.30064336388511,85.04587956656397,86.12562561035156,14331500,0.0,0 -2000-12-22,87.3959395743213,88.82501562113978,87.29008208937178,88.70857238769531,10182900,0.0,0 -2000-12-26,88.64506113712171,89.66129302978516,88.26397417737292,89.66129302978516,4665300,0.0,0 -2000-12-27,89.25902923998898,90.60341926767856,88.9202852960042,90.3176040649414,4854100,0.0,0 -2000-12-28,89.97882317928376,90.69865376471805,89.83062276463554,90.5927963256836,8358700,0.0,0 -2000-12-29,90.82570708894116,90.97390754339864,88.8779296875,88.8779296875,8774600,0.0,0 -2001-01-02,89.42840602824782,89.53426351644413,86.42205336347244,87.26891326904297,8737500,0.0,0 -2001-01-03,86.93016113705104,92.13834906684028,86.48555972841051,91.46086120605469,19431600,0.0,0 -2001-01-04,91.41852629297698,91.77844175082335,90.10589344671375,90.47639465332031,9219000,0.0,0 -2001-01-05,90.42345154775647,90.52930901854523,87.52295684814453,87.52295684814453,12911400,0.0,0 -2001-01-08,87.98872452404885,88.200439453125,86.50672002051577,88.200439453125,6625300,0.0,0 -2001-01-09,88.78265465416202,89.08964129836981,87.6817370335548,87.9675521850586,5702400,0.0,0 -2001-01-10,87.39592737867342,89.51307678222656,87.26889841446024,89.51307678222656,8746100,0.0,0 -2001-01-11,88.8144102168669,90.43402937815185,88.8144102168669,89.5977554321289,7245100,0.0,0 -2001-01-12,89.89414036273956,90.59279948472977,88.94142337820747,89.4283676147461,7244000,0.0,0 -2001-01-16,89.42837737627912,90.23289402881193,89.10021926800916,90.00000762939453,8542200,0.0,0 -2001-01-17,91.35502699903464,91.49264175581186,89.86243617552782,90.41289520263672,7851400,0.0,0 -2001-01-18,90.40227835620055,91.93721165381754,90.0635344560368,91.31265258789062,8107000,0.0,0 -2001-01-19,92.26537954288858,92.26537954288858,90.69868883931498,90.79396057128906,7782500,0.0,0 -2001-01-22,90.95273749674253,91.99014069444746,90.48696463246684,91.3973388671875,7050900,0.0,0 -2001-01-23,91.10093296360515,92.58293745057989,90.88921803689446,92.1171646118164,8463100,0.0,0 -2001-01-24,92.30769380312464,93.02752444287378,92.03246444086761,92.39237976074219,6199900,0.0,0 -2001-01-25,92.3077005587472,92.98518826927013,91.90544223062422,92.15950012207031,10818300,0.0,0 -2001-01-26,91.56670557213356,92.22302184328643,91.09034698823228,92.05364990234375,7136800,0.0,0 -2001-01-29,91.7995896659353,92.74806837613515,91.7115129508301,92.54483032226562,6705900,0.0,0 -2001-01-30,92.34163220667143,93.43915964569229,91.99610665168467,93.35786437988281,7069100,0.0,0 -2001-01-31,93.0867762883932,93.96751208627377,92.54479457059463,92.82933807373047,9706900,0.0,0 -2001-02-01,92.88355619283011,93.45941446325163,92.30768758476798,93.44586181640625,8239100,0.0,0 -2001-02-02,93.08681756905284,93.48654321900538,91.2914790729901,91.32535552978516,8276600,0.0,0 -2001-02-05,91.32537207829299,92.09770788001174,91.29149561535938,91.99607849121094,4352900,0.0,0 -2001-02-06,91.66411859445782,92.61259755723928,91.6099183197781,91.72509002685547,7106700,0.0,0 -2001-02-07,91.27117830386575,91.73186515210054,90.5665850402003,91.2508544921875,5748700,0.0,0 -2001-02-08,91.32536453255697,91.73185104123911,90.17363725149124,90.18717956542969,5943300,0.0,0 -2001-02-09,90.34299757704147,90.34299757704147,88.92704029190833,89.31998443603516,9913000,0.0,0 -2001-02-12,89.22512617609415,90.44460607838727,89.22512617609415,90.34298706054688,5804400,0.0,0 -2001-02-13,90.58012981959197,90.89854995839823,89.42840246148067,89.60454559326172,6587600,0.0,0 -2001-02-14,89.86873225959413,89.86873225959413,88.5205384578529,89.4690170288086,8400100,0.0,0 -2001-02-15,89.99748349207084,90.45818060553886,89.42162502229105,90.33622741699219,5929800,0.0,0 -2001-02-16,88.75089528374679,88.94736218275872,87.59916817583739,88.34439849853516,6434900,0.0,0 -2001-02-20,88.77800471129548,88.84575763241844,86.78619908459939,86.982666015625,5760000,0.0,0 -2001-02-21,86.65067386532805,87.28750875914349,85.0247024265932,85.10600280761719,10910800,0.0,0 -2001-02-22,85.60060057926934,85.72932494248516,83.34456448816695,85.23475646972656,21281600,0.0,0 -2001-02-23,84.7401672714314,85.05181100977713,82.51800832404723,84.65886688232422,20173000,0.0,0 -2001-02-26,85.22797841461295,86.46100616455078,84.34724209230491,86.46100616455078,11503700,0.0,0 -2001-02-27,85.90547138510256,86.6100542820455,85.03151133724391,85.66157531738281,11415000,0.0,0 -2001-02-28,85.87156944989694,85.93254086433016,83.51390988421016,83.97460174560547,14825800,0.0,0 -2001-03-01,84.04234765081603,84.41496276855469,82.48412394006675,84.41496276855469,14672000,0.0,0 -2001-03-02,82.99225086579833,85.12633835039743,82.85675538089295,83.7442626953125,12564300,0.0,0 -2001-03-05,84.11010374618715,84.53691916055307,83.8797552273713,84.50981903076172,5293200,0.0,0 -2001-03-06,85.60055242409808,86.54903604465278,85.0179127072782,85.41763305664062,6917000,0.0,0 -2001-03-07,85.97319689500111,86.0680447669215,85.20086127003708,86.02739715576172,6371700,0.0,0 -2001-03-08,85.76994166115372,86.20353337501572,85.45829793986672,86.12223815917969,6055000,0.0,0 -2001-03-09,85.43115835094196,85.43115835094196,83.40547251383153,83.57484436035156,10020300,0.0,0 -2001-03-12,82.88386694001902,82.9922674847073,79.77419996999416,79.99777221679688,13972900,0.0,0 -2001-03-13,80.89204886133524,81.59663683285581,79.62514474396336,81.31208801269531,12888000,0.0,0 -2001-03-14,79.29998248660607,80.81755435107165,78.41924590780098,79.70647430419922,19883400,0.0,0 -2001-03-15,80.24842417211673,80.52619663844656,79.50996498492636,79.72676086425781,10370300,0.0,0 -2001-03-16,79.5678161022104,79.75123325240038,77.99181240201762,78.12767791748047,58514600,0.316,0 -2001-03-19,78.63718125243128,79.94825399789259,77.99862612977672,79.71728515625,10067800,0.0,0 -2001-03-20,80.09084892953169,80.47126181575538,77.51625701401198,77.577392578125,15083900,0.0,0 -2001-03-21,77.56380626927312,78.29746411277014,76.01497649927052,76.25952911376953,19004600,0.0,0 -2001-03-22,76.09650679381654,76.4905088880847,73.3928486881565,75.4851303100586,28624800,0.0,0 -2001-03-23,76.9320755817863,77.88990788469133,75.74327971186906,77.76763153076172,12861700,0.0,0 -2001-03-26,78.59638371683188,78.9835912873984,77.96462345088248,78.7594223022461,9943800,0.0,0 -2001-03-27,78.54208411596235,80.60039940173874,78.3111152562158,80.36943054199219,12880700,0.0,0 -2001-03-28,79.41156130674126,79.44552379173899,78.0529375211092,78.14804077148438,10953300,0.0,0 -2001-03-29,77.91705478961067,79.1398179991735,76.17801838733223,78.4469223022461,12060300,0.0,0 -2001-03-30,78.49450561390886,79.2689208984375,77.78122592317699,79.2689208984375,9183600,0.0,0 -2001-04-02,79.00395126693762,79.73760394997807,77.30567204952914,77.577392578125,10561000,0.0,0 -2001-04-03,77.42799080044392,77.54347260666891,74.76508358907051,74.9892578125,12836000,0.0,0 -2001-04-04,75.1115283916328,76.15087493289629,74.24880442332093,75.3017349243164,14884300,0.0,0 -2001-04-05,76.96605021394389,78.45373994147701,76.42259855115115,78.15484619140625,21522800,0.0,0 -2001-04-06,77.43477861083504,77.7132990371887,76.12370615578736,76.96605682373047,14937800,0.0,0 -2001-04-09,77.44155508055351,78.11407239719156,76.61279374957611,77.82196807861328,9034300,0.0,0 -2001-04-10,78.42654484140188,79.98896404661772,78.23633836759912,79.2417221069336,17873600,0.0,0 -2001-04-11,80.688706665875,80.83136161368823,78.89532277516426,79.2961196899414,12722300,0.0,0 -2001-04-12,79.00396408159854,80.79734681145457,78.77299537554406,80.7362060546875,9233200,0.0,0 -2001-04-16,80.35581954304799,80.76340571888214,79.41837082035548,79.88709259033203,7350000,0.0,0 -2001-04-17,79.69004863500903,81.2864351713585,79.49304763301832,81.01470947265625,10924700,0.0,0 -2001-04-18,82.23751631982233,85.59331955448273,81.98617417459195,84.23469543457031,32481600,0.0,0 -2001-04-19,84.4045223941398,85.48462606824917,83.94938456351785,85.35556030273438,13809900,0.0,0 -2001-04-20,84.84605899273771,85.18571494932775,84.00371367156124,84.57433319091797,7626700,0.0,0 -2001-04-23,83.99690993961553,84.15994332982969,82.81490879077137,83.03907775878906,8451800,0.0,0 -2001-04-24,83.22931676068781,83.99694275570572,82.26469481618146,82.59076690673828,10044700,0.0,0 -2001-04-25,82.48204921309501,84.01050097992207,82.16277179256409,83.67084503173828,8249000,0.0,0 -2001-04-26,84.0512815711258,85.06345506656159,83.8950375204394,84.04448699951172,10590400,0.0,0 -2001-04-27,84.85963902333295,85.48460471067823,84.37053363924069,85.44384765625,7938700,0.0,0 -2001-04-30,85.89900403656365,86.45603969331039,84.68982945358216,86.04166412353516,10766900,0.0,0 -2001-05-01,84.96155475873857,86.37452501458436,84.6422772777529,86.30659484863281,10578000,0.0,0 -2001-05-02,86.55114161070497,86.74134813531992,85.5933092339437,86.15034484863281,9572900,0.0,0 -2001-05-03,85.68160631626917,85.6951954563228,84.38412330901988,85.056640625,9926200,0.0,0 -2001-05-04,83.99692070286746,86.51037275646331,83.85426582030821,86.50357818603516,12145300,0.0,0 -2001-05-07,86.17750763924606,86.53074754516311,85.7495430100649,85.75633239746094,7185200,0.0,0 -2001-05-08,86.17750080295147,86.34053419407711,85.29439333410635,85.71556854248047,6952600,0.0,0 -2001-05-09,85.0838344456017,85.966942185598,84.95476349734724,85.35556030273438,9507400,0.0,0 -2001-05-10,86.44924605330363,86.61227948116,85.43706744779469,85.60689544677734,6872400,0.0,0 -2001-05-11,85.59329847160338,85.92615984782618,84.50640047994023,85.01588439941406,7734400,0.0,0 -2001-05-14,84.84606636497165,85.21289545189111,84.54716743872488,85.18572235107422,7914000,0.0,0 -2001-05-15,85.28760760179605,85.93295180709394,84.8120861817581,85.5797119140625,9782200,0.0,0 -2001-05-16,84.80529483621692,87.76709512533408,84.65585057219668,87.5972671508789,14909000,0.0,0 -2001-05-17,87.63123114508622,88.36488920783249,87.3323322640996,87.73312377929688,11824600,0.0,0 -2001-05-18,87.69239022708969,88.13394927978516,87.01987793011368,88.13394927978516,6683100,0.0,0 -2001-05-21,88.20188137765321,89.56050558999715,87.73315436591773,89.43143463134766,11531500,0.0,0 -2001-05-22,89.55367360962975,89.7302909416641,89.03740038604657,89.31591033935547,8342700,0.0,0 -2001-05-23,89.0238347727809,89.0238347727809,87.80107116699219,87.80107116699219,12330800,0.0,0 -2001-05-24,87.95051933082826,88.31055383646176,87.32555357830448,88.05921173095703,7902800,0.0,0 -2001-05-25,88.07279991941193,88.10676759376712,86.88400905807266,87.0198745727539,7425000,0.0,0 -2001-05-29,87.1013728558726,87.18968672003678,86.20468135303429,86.32695770263672,9003900,0.0,0 -2001-05-30,85.99408266935691,86.33373858671638,84.91397933986804,85.1177749633789,10041800,0.0,0 -2001-05-31,85.20612427671428,86.10961069168184,85.09064245358802,85.55936431884766,9874200,0.0,0 -2001-06-01,85.7291859981265,86.34056793217134,84.99553286001276,86.08922576904297,8848300,0.0,0 -2001-06-04,86.1367543067335,86.56471895441122,85.64764889067969,86.50357818603516,5623500,0.0,0 -2001-06-05,86.60547445540723,87.78747573447369,86.45602500510508,87.49537658691406,9115400,0.0,0 -2001-06-06,87.51578941978384,87.51578941978384,86.51719968564267,86.76854705810547,12064900,0.0,0 -2001-06-07,86.30657094357107,87.18967840455781,86.2726032786339,87.08098602294922,7355300,0.0,0 -2001-06-08,86.74813746600724,86.86362444108039,85.68841243943284,86.27262115478516,8170600,0.0,0 -2001-06-11,86.07558968115332,86.2657961385136,85.19248753158956,85.66120910644531,7012200,0.0,0 -2001-06-12,84.81891420045906,86.09601915765332,84.2618784530643,85.51181030273438,9364400,0.0,0 -2001-06-13,85.70877587671404,85.98729622619769,84.67622413299847,84.77812194824219,7629400,0.0,0 -2001-06-14,84.35698408752462,84.43850341236761,82.70625533432256,82.87608337402344,12603000,0.0,0 -2001-06-15,82.36920910662299,83.38426114443642,82.02177323422498,83.00957489013672,16821100,0.346,0 -2001-06-18,82.87332019915998,83.4115034955753,82.36920117621183,82.60763549804688,11368300,0.0,0 -2001-06-19,83.37063567353424,83.71807155559549,82.35558360748915,82.96870422363281,7732300,0.0,0 -2001-06-20,82.5599601473972,83.69763635415372,82.4986454861011,83.40470123291016,8787200,0.0,0 -2001-06-21,83.26164181318957,84.68543926645658,83.21395494148875,84.35163116455078,12259100,0.0,0 -2001-06-22,84.12679916350379,84.19492250705039,83.22074881912594,83.69080352783203,12212000,0.0,0 -2001-06-25,83.98375948457064,84.0927610193557,82.77114599622266,82.9210205078125,8406800,0.0,0 -2001-06-26,82.36238909202109,83.37744105441331,82.1375773561454,82.8051986694336,8005800,0.0,0 -2001-06-27,82.83928380966863,83.27527962991844,82.36922890196563,82.75753784179688,10105100,0.0,0 -2001-06-28,83.11180919705855,84.4334248753535,83.06412230132017,83.21399688720703,10269300,0.0,0 -2001-06-29,83.65675972193675,84.48106428348329,83.28888736267585,83.5205078125,9824200,0.0,0 -2001-07-02,83.65678491081968,84.6922737469281,83.53416075414417,84.56283569335938,8522200,0.0,0 -2001-07-03,84.46061246509292,84.5423583984375,83.82705549428262,84.5423583984375,3303100,0.0,0 -2001-07-05,83.84072790018084,84.23585080437881,82.88017623029933,82.893798828125,5517900,0.0,0 -2001-07-06,82.64171195901484,82.76433609282283,81.10210418701172,81.10210418701172,11665900,0.0,0 -2001-07-09,81.40184599658355,82.11715429219987,81.20428460829447,81.54490661621094,8339300,0.0,0 -2001-07-10,81.94686687414325,82.18530130881497,80.52987766597865,80.5639419555664,8630700,0.0,0 -2001-07-11,80.4549357518259,80.99311927192615,79.76687768214323,80.64568328857422,15328600,0.0,0 -2001-07-12,81.4086629478484,82.75071454101217,81.27922491678807,82.55996704101562,12002800,0.0,0 -2001-07-13,82.32150324963169,83.3297464211773,82.17163397049691,83.2752456665039,10433800,0.0,0 -2001-07-16,82.95506515434103,83.30250098916217,81.94682712041858,82.23294830322266,6915300,0.0,0 -2001-07-17,81.88556731906907,83.07774491013902,81.63351024048835,83.0028076171875,7469800,0.0,0 -2001-07-18,82.13079205925408,82.86653697967726,81.79016998840783,82.4373550415039,7709300,0.0,0 -2001-07-19,83.23438396475753,83.77938119029909,82.26701882702606,83.1594467163086,10082900,0.0,0 -2001-07-20,82.5327451612658,83.07092876355371,82.37605669073382,82.66217803955078,6705800,0.0,0 -2001-07-23,82.97550767471465,83.03000323569557,81.0339584350586,81.0339584350586,8065200,0.0,0 -2001-07-24,81.06799383586389,81.20424048600917,79.53519563308494,80.25050354003906,12269000,0.0,0 -2001-07-25,80.33228609828357,81.39503020464572,80.01891450200978,81.13615417480469,12088500,0.0,0 -2001-07-26,81.10891126630078,82.32833868441956,80.7682892566859,81.98771667480469,12898200,0.0,0 -2001-07-27,82.3147371084175,82.66898180197563,81.68799369809426,82.30110931396484,8478800,0.0,0 -2001-07-30,82.55995664124224,82.66895297144774,81.95364993656474,82.32833099365234,8547700,0.0,0 -2001-07-31,82.43050338223921,83.5749932238752,82.29425669530933,82.66893768310547,11918100,0.0,0 -2001-08-01,83.09134041793875,83.58864568065522,82.8052191546652,83.18671417236328,11940800,0.0,0 -2001-08-02,83.94967864462818,83.96330123420593,83.03680921858198,83.52730560302734,11070100,0.0,0 -2001-08-03,83.35701355732691,83.35701355732691,82.36239797322257,83.07089233398438,10816300,0.0,0 -2001-08-06,82.66898526006491,82.77798683032283,81.81742998297837,81.95368194580078,8550100,0.0,0 -2001-08-07,81.93321983197325,82.56677700811508,81.68797675497994,82.27384185791016,8865100,0.0,0 -2001-08-08,81.83107553733015,82.53957030532442,80.67977088965421,80.74789428710938,15183800,0.0,0 -2001-08-09,80.86362775314899,81.0475664687461,80.29138552124047,80.98625183105469,14118500,0.0,0 -2001-08-10,80.93175599740985,81.64024489227609,79.93713559264606,81.26556396484375,11173300,0.0,0 -2001-08-13,81.47678111820717,81.6470921177007,80.93859773611011,81.2860336303711,7431600,0.0,0 -2001-08-14,81.84464484101397,81.9877054417541,80.9317804751068,81.25196075439453,13178100,0.0,0 -2001-08-15,81.22471291673953,81.4835837290268,80.4412813880689,80.55027770996094,8520600,0.0,0 -2001-08-16,80.25051084353495,80.89769028683887,79.70551379840124,80.8295669555664,10734700,0.0,0 -2001-08-17,80.14836083729831,80.29823535487476,79.0311210485204,79.53524017333984,11604600,0.0,0 -2001-08-20,79.56927766659949,80.31864480472697,79.39896671713971,80.27095794677734,10417400,0.0,0 -2001-08-21,80.25055316145095,80.75467231567292,78.88806502762313,78.90168762207031,14480800,0.0,0 -2001-08-22,79.53522841405146,79.99847449194252,78.87442097378995,79.71916198730469,11752300,0.0,0 -2001-08-23,79.67830798008066,80.05980300650846,79.35812242683737,79.43305969238281,8744100,0.0,0 -2001-08-24,79.84859993748806,81.15658702792678,79.52841446069263,81.08164978027344,11687700,0.0,0 -2001-08-27,81.04761556722035,81.2042988076711,80.56393285509978,80.59799194335938,7425100,0.0,0 -2001-08-28,80.57752319235735,80.72058377972718,79.4194107055664,79.4194107055664,12046600,0.0,0 -2001-08-29,79.79409756684572,79.82816184144798,78.45886012259848,78.71092224121094,16180000,0.0,0 -2001-08-30,78.24091140700715,78.84721845378925,76.32661647486242,77.1986083984375,17692600,0.0,0 -2001-08-31,77.25308212181265,78.18638321414478,77.069143303885,77.7640151977539,15985400,0.0,0 -2001-09-04,77.55962058436931,79.1401062980105,77.23262640774216,77.26668548583984,24473400,0.0,0 -2001-09-05,77.45744323730469,77.79125655033407,76.2652661985754,77.45744323730469,21477100,0.0,0 -2001-09-06,76.74215282223084,77.18496254933255,75.46141052246094,75.46141052246094,21653000,0.0,0 -2001-09-07,74.95047167169511,75.7884041800829,74.00354281279404,74.06485748291016,33133900,0.0,0 -2001-09-10,73.36997399084635,75.17527156316547,73.36997399084635,74.97090148925781,23408700,0.0,0 -2001-09-17,68.80564187491451,72.4843604007919,68.12439789595496,71.05374908447266,32388700,0.0,0 -2001-09-18,71.07417029306856,71.73497764219886,70.41336294393827,70.8834228515625,22029200,0.0,0 -2001-09-19,70.91751875240361,71.19001746641233,67.14342533670666,69.45284271240234,42771800,0.0,0 -2001-09-20,68.39688639769733,69.35743756308693,67.14339495936028,67.2455825805664,36210900,0.0,0 -2001-09-21,64.46869481800229,67.68939377325744,64.14047357836164,66.52009582519531,49782100,0.369,0 -2001-09-24,68.1885594246049,69.17323342024682,67.73724877094179,68.85868072509766,25549600,0.0,0 -2001-09-25,68.89286005643427,69.74761018120392,68.31163101498706,69.57666015625,25466200,0.0,0 -2001-09-26,69.98691446213157,70.02110654184229,68.67401998611062,69.3304672241211,18587500,0.0,0 -2001-09-27,69.2347845533365,69.94593753429263,68.3800341267521,69.93225860595703,20536800,0.0,0 -2001-09-28,70.41771419890388,74.95814500157658,70.08948795981638,71.41606140136719,21687200,0.0,0 -2001-10-01,71.04687051474706,71.33406546265142,70.31520421395244,71.29987335205078,20457400,0.0,0 -2001-10-02,71.11524981388989,72.1956558227539,70.87592068964372,72.1956558227539,19833100,0.0,0 -2001-10-03,71.52550928563835,73.7683734019655,71.35455921315022,73.40596008300781,32045800,0.0,0 -2001-10-04,74.04870486529383,74.5136890880343,72.9956522074116,73.46747589111328,32674100,0.0,0 -2001-10-05,73.33754150079571,73.59054934958702,72.1545653424215,73.32386779785156,29796100,0.0,0 -2001-10-08,72.66746343276841,73.37178220009176,72.39394745681768,72.84525299072266,12970300,0.0,0 -2001-10-09,72.89991536069702,72.99564693932464,72.20927592890084,72.4554443359375,15976300,0.0,0 -2001-10-10,72.34607001502832,74.22652074095126,72.15460155885128,74.06924438476562,19987400,0.0,0 -2001-10-11,74.50004043667789,75.42317501326218,74.50004043667789,75.21803283691406,23006300,0.0,0 -2001-10-12,74.63680010061226,75.14281083685538,73.37177065151349,74.87612915039062,31360500,0.0,0 -2001-10-15,74.28120693833952,74.84192284150316,73.89144106927434,74.7393569946289,16873000,0.0,0 -2001-10-16,75.08125553550559,75.63513196528352,74.50002125780969,75.21117401123047,15877100,0.0,0 -2001-10-17,75.94971063053919,76.0044159149113,73.61111450195312,73.61111450195312,28542300,0.0,0 -2001-10-18,73.7273021206087,73.95979679032851,72.99563646495528,73.45378112792969,16510000,0.0,0 -2001-10-19,73.16663102492087,73.78889179292912,72.48967019862287,73.40596008300781,21912500,0.0,0 -2001-10-22,73.37176842785867,74.92399268964871,73.31022369293402,74.8556137084961,17540600,0.0,0 -2001-10-23,75.19065078174708,75.40946658298503,74.11024548070584,74.47266387939453,22062500,0.0,0 -2001-10-24,74.52055204734809,74.84193377614397,74.00086240700587,74.27438354492188,16065200,0.0,0 -2001-10-25,73.47435182106517,75.62832415166285,72.98885415697211,75.6078109741211,27467900,0.0,0 -2001-10-26,75.18382069216483,76.44201561884918,74.99235749433872,75.43682861328125,18623300,0.0,0 -2001-10-29,75.32742234012271,75.5941039646672,73.47431945800781,73.47431945800781,18727500,0.0,0 -2001-10-30,73.40592729635412,73.64525624754513,72.18192469800026,72.59220886230469,26178600,0.0,0 -2001-10-31,73.09821774098161,73.75466508528719,72.34603881835938,72.34603881835938,28124200,0.0,0 -2001-11-01,72.89308189918073,74.54104246985663,72.27766083094117,74.19914245605469,29806800,0.0,0 -2001-11-02,74.15128562844505,74.79405418456345,73.76151977426338,74.70516204833984,17575900,0.0,0 -2001-11-05,75.30011020752004,75.96339228620117,75.18386016182791,75.68303680419922,15929500,0.0,0 -2001-11-06,75.45733859355465,76.9138361184368,75.11543854988926,76.859130859375,23245800,0.0,0 -2001-11-07,76.42835772590233,77.3514923104111,76.3394655644456,76.75658416748047,19716000,0.0,0 -2001-11-08,77.1805166989574,78.00791416748181,76.51722978843455,76.99588775634766,22563500,0.0,0 -2001-11-09,76.75657783146511,77.24207538146594,76.20270130006645,77.07796478271484,15895800,0.0,0 -2001-11-12,75.90183428271159,77.03010583571594,75.21803397385834,76.60614776611328,26068800,0.0,0 -2001-11-13,77.57031165528923,78.32933044433594,77.39252210747205,78.32933044433594,15296200,0.0,0 -2001-11-14,78.75326006845253,78.91053639452001,77.75491250027326,78.40452575683594,17571300,0.0,0 -2001-11-15,78.20621854467677,78.76009495078651,77.90534483420694,78.5481185913086,19470200,0.0,0 -2001-11-16,78.69173122328058,78.70540493232222,77.54294663545964,78.19939422607422,18134900,0.0,0 -2001-11-19,78.5823145977499,79.21824896706558,78.26092768185104,79.16354370117188,13625400,0.0,0 -2001-11-20,78.89003294397035,79.18406724607354,78.39085648989501,78.5002670288086,16209700,0.0,0 -2001-11-21,78.29510770766198,78.41135246703035,77.61814710177386,77.98056030273438,11470200,0.0,0 -2001-11-23,77.98059569110973,79.14989371082127,77.95324304996653,79.1020278930664,6717100,0.0,0 -2001-11-26,79.14987260431386,79.55331221538128,78.68488826284036,79.27295684814453,13726000,0.0,0 -2001-11-27,79.06096922029917,79.93623251114876,78.01475068794416,78.93104553222656,19261400,0.0,0 -2001-11-28,78.45925178345414,78.75328614670038,77.44039070861689,77.5019302368164,20195500,0.0,0 -2001-11-29,77.72072110449726,78.58230546578336,77.26941053879251,78.5481185913086,16354700,0.0,0 -2001-11-30,78.22675582081548,78.57549543660973,77.96690836642742,77.9874267578125,13680300,0.0,0 -2001-12-03,77.71387834440345,78.00791258070637,77.27624672064756,77.52241516113281,15220400,0.0,0 -2001-12-04,77.89852651765621,78.8421742413758,77.50876056737529,78.83533477783203,17239900,0.0,0 -2001-12-05,79.05415687375313,80.68843925140173,79.01996477032817,80.27816009521484,25204000,0.0,0 -2001-12-06,80.23710632324219,80.64739058287132,79.95675097727542,80.23710632324219,17972900,0.0,0 -2001-12-07,79.93623009070622,80.06614855786421,79.11566686764557,79.7037353515625,18857800,0.0,0 -2001-12-10,79.21822233418209,79.5874749293512,78.19252241992774,78.2130355834961,13862700,0.0,0 -2001-12-11,78.56864391147649,79.1293598659985,77.88484371245055,78.05579376220703,20833300,0.0,0 -2001-12-12,78.32929751340133,78.4865686027882,77.34462377575011,78.14466857910156,16171500,0.0,0 -2001-12-13,77.5771298000195,77.74807984824959,76.61297424083219,76.62664794921875,19026700,0.0,0 -2001-12-14,76.81127748600186,77.60448300277493,76.58562216860808,77.35831451416016,16721900,0.0,0 -2001-12-17,77.26259663503355,78.19940495080745,77.2010571104337,78.15837860107422,13925900,0.0,0 -2001-12-18,78.38401779879653,78.73959683678534,78.18571510779927,78.62335205078125,13663700,0.0,0 -2001-12-19,78.01476729061544,79.26612298851826,77.95322777284079,79.17723083496094,20143400,0.0,0 -2001-12-20,78.97888817131101,79.18403022737883,78.32928035539494,78.39765930175781,14867900,0.0,0 -2001-12-21,78.92807763015605,78.95552434318328,78.35857011342254,78.87318420410156,14037700,0.393,0 -2001-12-24,78.79085079971232,78.93494211965417,78.63989649265172,78.72223663330078,5728800,0.0,0 -2001-12-26,78.66732036439204,79.73771570740357,78.66732036439204,79.15448760986328,10304800,0.0,0 -2001-12-27,79.11333957221778,79.64853737498565,79.07902987309673,79.63481140136719,9407300,0.0,0 -2001-12-28,79.79265087004299,80.10828029698338,79.53877263677663,79.59366607666016,10593800,0.0,0 -2001-12-31,79.69657311605947,79.86124816596332,78.37916224697776,78.42719268798828,14619500,0.0,0 -2002-01-02,78.98295846379344,79.42209533236635,78.09095875485974,79.2711410522461,18651900,0.0,0 -2002-01-03,79.35351104525357,80.24550585499165,79.27803387678537,80.17002868652344,15743000,0.0,0 -2002-01-04,80.3964742553178,80.95226125079829,79.97106312400143,80.70524597167969,20140700,0.0,0 -2002-01-07,80.7601151043466,80.95909987856587,79.9779019835818,80.1357192993164,13106500,0.0,0 -2002-01-08,80.13570344951526,80.3209622109805,79.57305894349582,79.950439453125,12683700,0.0,0 -2002-01-09,80.0602285050172,80.81499477998264,79.14078195429825,79.29859924316406,16610300,0.0,0 -2002-01-10,79.3809149717877,79.83377250354538,79.11331614963008,79.64851379394531,12823400,0.0,0 -2002-01-11,79.73774397043135,79.78577441349024,78.70165271595997,78.8663330078125,13708400,0.0,0 -2002-01-14,78.6673524855355,78.7977178466173,78.1939057820766,78.37230682373047,12301100,0.0,0 -2002-01-15,78.59874668589606,79.17511209506252,78.1527466517021,79.01043701171875,20219900,0.0,0 -2002-01-16,78.42721276040801,78.49582694585173,77.32250709950569,77.41170501708984,17067000,0.0,0 -2002-01-17,78.05669051388315,78.38604070067056,77.80967525632919,77.99493408203125,17283400,0.0,0 -2002-01-18,77.53519106222005,78.11841932853487,77.30875960185097,77.63811492919922,17028000,0.0,0 -2002-01-22,78.049816356805,78.17332396790951,76.86277069258237,77.1029281616211,11689300,0.0,0 -2002-01-23,77.2813205435483,77.91258454725285,76.86276728198452,77.6930160522461,12438900,0.0,0 -2002-01-24,77.97432632644507,78.39287953751817,77.75475785792517,77.93315887451172,12142800,0.0,0 -2002-01-25,77.61754435016525,78.34486405947902,77.56265091382143,77.91259002685547,12810700,0.0,0 -2002-01-28,78.1527290011106,78.35171374788546,77.48029760735677,78.12528228759766,10589200,0.0,0 -2002-01-29,78.11841658004356,78.31053833301827,75.5110417062186,75.66885375976562,27720800,0.0,0 -2002-01-30,75.7443269181641,77.80278313712301,74.37888575870032,76.75983428955078,34711800,0.0,0 -2002-01-31,76.95195561251832,77.74103153913202,76.58829585340783,77.65869140625,19909200,0.0,0 -2002-02-01,77.59694734406516,77.74104390826668,76.96568859630652,77.2950439453125,15838500,0.0,0 -2002-02-04,77.00688639956329,77.00688639956329,75.09252056930139,75.37384033203125,24243400,0.0,0 -2002-02-05,75.06502091891267,75.81292399719501,74.46806686534035,74.9072036743164,33614000,0.0,0 -2002-02-06,75.23659509145303,75.29834628105053,74.14561029422798,74.58474731445312,29486000,0.0,0 -2002-02-07,74.59845074402863,75.3806636520682,74.1044204368616,74.1181411743164,23445400,0.0,0 -2002-02-08,74.53670874992574,75.99135324284968,74.31028251113162,75.53849029541016,19277800,0.0,0 -2002-02-11,75.51106196363011,76.6020415970967,75.35324463282016,76.46481323242188,18792400,0.0,0 -2002-02-12,76.13545723851219,76.6500714544461,75.49733540135706,76.22465515136719,13942500,0.0,0 -2002-02-13,76.4922309992826,77.21955047962943,76.40302788457431,77.03428649902344,16781100,0.0,0 -2002-02-14,77.19899996032551,77.51462940330566,76.56773583943837,76.89022827148438,20453800,0.0,0 -2002-02-15,76.95197084671925,77.01372203241203,75.96390999622761,76.08741760253906,18366800,0.0,0 -2002-02-19,75.57968213044357,75.67574304030747,74.52300688701379,74.62593078613281,15988100,0.0,0 -2002-02-20,74.824884086363,75.88155364990234,73.98091475089483,75.88155364990234,29242800,0.0,0 -2002-02-21,75.42869047627643,75.9089947880814,74.28281787888143,74.31026458740234,26288600,0.0,0 -2002-02-22,74.34458417044361,75.43556880765524,74.01523407104325,75.22972106933594,26572900,0.0,0 -2002-02-25,75.29835976076694,76.71869495996245,75.27091303772366,76.4716796875,17458700,0.0,0 -2002-02-26,76.57458636068623,76.87649501130497,75.86785041485233,76.31385040283203,22346500,0.0,0 -2002-02-27,76.82159220486585,77.4391301717308,75.92273458555013,76.60888671875,28597900,0.0,0 -2002-02-28,76.73241477807176,77.36367365260193,76.18349083113361,76.26583099365234,23755400,0.0,0 -2002-03-01,76.65692079045408,78.1184230188383,76.51282946384653,78.0429458618164,26273600,0.0,0 -2002-03-04,78.15270855597001,79.5867636261194,77.9811705675833,79.42208862304688,27184600,0.0,0 -2002-03-05,79.13394656331609,79.86812932000261,78.88693131481159,79.16825103759766,22718900,0.0,0 -2002-03-06,78.97611656945999,80.38273066268063,78.95553284120543,80.10826873779297,20143200,0.0,0 -2002-03-07,80.52678998529235,80.62285083557914,79.29857741671269,79.93669891357422,19330800,0.0,0 -2002-03-08,80.5405252094951,80.89732720468314,79.92299255653637,80.2729263305664,19930100,0.0,0 -2002-03-11,80.20431346442018,80.89732850725485,79.88868414662537,80.44446563720703,15621800,0.0,0 -2002-03-12,79.6622485168497,80.45132438724899,79.55246691575277,80.39643096923828,17153600,0.0,0 -2002-03-13,80.02591332552964,80.10825345776794,79.34662424806926,79.62108612060547,17175300,0.0,0 -2002-03-14,79.62110125594386,79.88870019293076,79.3397763435123,79.51131439208984,11168100,0.0,0 -2002-03-15,79.8010310495772,80.47538362919792,79.75286300817574,80.26895141601562,21220100,0.331,0 -2002-03-18,80.57859043833938,80.89512398498945,79.89047266303345,80.28269958496094,17548900,0.0,0 -2002-03-19,80.71621402785992,81.0189822673613,80.38591519849632,80.81942749023438,17912000,0.0,0 -2002-03-20,80.16568980975968,80.2207404704682,79.26425755281745,79.29866027832031,17114500,0.0,0 -2002-03-21,79.33995149277632,79.7528209513412,78.52797261596675,79.33306884765625,25846800,0.0,0 -2002-03-22,79.47755937368666,79.78033270841767,78.9270633559792,79.16102600097656,15235400,0.0,0 -2002-03-25,79.19548211212249,79.38127687457168,77.96375576071519,78.17707061767578,17499600,0.0,0 -2002-03-26,78.11509929411757,79.1472755838121,78.08069656774647,78.63118743896484,19947600,0.0,0 -2002-03-27,78.46603950757012,79.1403969831984,78.28025008821947,78.8376235961914,19020300,0.0,0 -2002-03-28,79.11290169416395,79.6633927660368,78.78948549885362,78.8032455444336,17532900,0.0,0 -2002-04-01,78.60366616071875,79.20232503967527,78.10133806408625,78.8376235961914,17711000,0.0,0 -2002-04-02,78.4316925254858,79.09916258044767,78.28718312449254,78.40416717529297,15669500,0.0,0 -2002-04-03,78.45229430804389,78.58991573730637,77.1792777126424,77.85363006591797,25658500,0.0,0 -2002-04-04,77.48204437806028,78.03254058408935,77.22744421395657,77.53021240234375,23549000,0.0,0 -2002-04-05,77.88802697484594,78.19079512616302,77.19302678106033,77.5439682006836,19404900,0.0,0 -2002-04-08,76.60124441427966,77.7779247787872,76.53931635558358,77.70911407470703,16470100,0.0,0 -2002-04-09,77.88118586444917,77.88118586444917,77.02103847031535,77.16554260253906,15122700,0.0,0 -2002-04-10,77.13799852027779,78.12888975762276,77.13111587281796,78.03943634033203,17199300,0.0,0 -2002-04-11,77.68160309472961,77.7917044415352,76.03700228874945,76.09893035888672,25453700,0.0,0 -2002-04-12,76.394803521188,76.82832091170447,75.7204513024823,76.67005157470703,14950600,0.0,0 -2002-04-15,76.80772335752363,76.97287018670494,75.83059193088688,76.08519744873047,17394900,0.0,0 -2002-04-16,76.8627362866034,77.97748872434791,76.84209359792825,77.89491271972656,15040900,0.0,0 -2002-04-17,78.02566529500234,78.21833741030373,77.48205168401832,77.72977447509766,12920100,0.0,0 -2002-04-18,77.6884765264363,78.07382069470631,76.48427075067198,77.39258575439453,25204800,0.0,0 -2002-04-19,77.89494881283763,77.92247416046546,77.45455375063894,77.67475128173828,10499200,0.0,0 -2002-04-22,77.33065818874732,77.36506617058022,76.27095639732926,76.38105773925781,13922900,0.0,0 -2002-04-23,76.44297753322999,76.71134821265484,75.80991063542048,76.05075073242188,16967000,0.0,0 -2002-04-24,76.07831103635127,76.93845838526053,75.28009702652332,75.28697967529297,18902700,0.0,0 -2002-04-25,75.14931216068555,75.51401359868626,74.81213605290074,75.3282241821289,25451500,0.0,0 -2002-04-26,75.54840968347222,75.69979635087311,73.82811619013306,73.89692687988281,19769800,0.0,0 -2002-04-29,74.26853509566372,74.49561517073107,73.37398008777946,73.5322494506836,17724400,0.0,0 -2002-04-30,73.64236860677667,74.75712139270394,73.38088571868519,74.22039031982422,19473500,0.0,0 -2002-05-01,74.29605572886177,75.1768453886222,73.49095942266706,75.12867736816406,24575600,0.0,0 -2002-05-02,75.07365634040205,75.63103536851816,74.16534098893872,74.8396987915039,15666800,0.0,0 -2002-05-03,74.72955696000788,74.83965827630082,73.7661914421235,74.02767944335938,18185500,0.0,0 -2002-05-06,74.06895037370369,74.30979039374776,72.46563570468089,72.57573699951172,23630400,0.0,0 -2002-05-07,73.00930007496287,73.16068683622744,72.18356078614825,72.32118225097656,21910000,0.0,0 -2002-05-08,73.66299358123614,75.25254360907772,73.48408152942618,75.01170349121094,27917400,0.0,0 -2002-05-09,74.76399852488494,75.0736494287238,74.02771270360577,74.14469146728516,18085600,0.0,0 -2002-05-10,74.29610648949237,74.3511571933193,72.66526482560727,72.74784088134766,18958900,0.0,0 -2002-05-13,73.09184651616044,74.28228692980876,72.7959557616263,74.22724151611328,14677700,0.0,0 -2002-05-14,75.43145269733607,75.94754089388344,75.00481789821882,75.84432220458984,34201200,0.0,0 -2002-05-15,75.34887666391367,76.31912499297253,75.20437259893225,75.54843139648438,29535300,0.0,0 -2002-05-16,75.48649843449031,76.0232345711044,75.23189828306533,75.94065856933594,28092000,0.0,0 -2002-05-17,76.147101464402,76.55308835684927,75.7617520114909,76.31224822998047,27823700,0.0,0 -2002-05-20,76.13333586773062,76.16774384996933,75.34199952552947,75.48650360107422,13833800,0.0,0 -2002-05-21,75.76862628738984,76.02323167904984,74.53689520328406,74.79837799072266,16877200,0.0,0 -2002-05-22,74.4681011502056,75.0874081536107,74.31671441049306,74.96354675292969,15844200,0.0,0 -2002-05-23,75.18373298402739,75.9406613195956,74.64700207789575,75.76174926757812,13879800,0.0,0 -2002-05-24,75.67916852364574,75.83054997084149,74.7364456142824,74.79149627685547,11877000,0.0,0 -2002-05-28,75.03923588784016,75.09428131287501,73.93824338840201,74.3855209350586,24236900,0.0,0 -2002-05-29,74.05524235525561,74.33048528583353,73.7180608404296,73.83504486083984,14773300,0.0,0 -2002-05-30,73.31895777632408,73.97955027115086,72.8716801314111,73.62860870361328,18217900,0.0,0 -2002-05-31,73.90382963694512,74.70204330513238,73.52536286544218,73.77996826171875,19826300,0.0,0 -2002-06-03,73.69051559902711,74.04145706564971,71.65368801319721,71.81884002685547,26056300,0.0,0 -2002-06-04,71.6674633840862,72.3899838582408,71.25459379172335,71.99775695800781,25856200,0.0,0 -2002-06-05,72.21793614087453,72.71338162624917,71.80506665303577,72.6720962524414,19695900,0.0,0 -2002-06-06,72.62393578116881,72.66522115926756,70.97933505457053,71.1926498413086,22998500,0.0,0 -2002-06-07,70.0366225422545,71.50919408176163,69.99533715794438,71.1100845336914,24011600,0.0,0 -2002-06-10,71.041263750477,71.88076811205438,70.88987702954718,71.38532257080078,18759900,0.0,0 -2002-06-11,71.65368296993799,71.93581370263936,70.00220494896038,70.16046905517578,19990700,0.0,0 -2002-06-12,69.98846328835859,70.74539184519924,69.34851350168226,70.58712768554688,31266000,0.0,0 -2002-06-13,70.27742285850718,70.87608684121439,69.73380952361829,69.8783187866211,21043900,0.0,0 -2002-06-14,69.02508779950399,69.88523496179438,67.77959638848245,69.77513885498047,39267500,0.0,0 -2002-06-17,70.13296537783208,71.79820920481609,70.08479734151179,71.6468276977539,17647200,0.0,0 -2002-06-18,71.38532530097628,72.27299772135173,71.30963193761643,72.2317123413086,21628500,0.0,0 -2002-06-19,71.22014896966334,71.86009834431505,70.35311959918577,70.54579162597656,21540700,0.0,0 -2002-06-20,70.36691962800504,70.9105332576518,69.4723644906275,69.64439392089844,25691000,0.0,0 -2002-06-21,69.3771552623971,69.69479662316424,68.14111296193396,68.55542755126953,31190700,0.353,0 -2002-06-24,68.09277728247399,69.52907279563189,67.15366139066275,68.91450500488281,37169700,0.0,0 -2002-06-25,69.25978246583466,69.66719040974925,67.35392860995873,67.36773681640625,33355000,0.0,0 -2002-06-26,65.73806688451836,67.77512155312041,65.73116541834273,67.47819519042969,37913600,0.0,0 -2002-06-27,68.01682990102658,68.7004493558732,66.68411413994973,68.65901947021484,31616400,0.0,0 -2002-06-28,68.5278114998591,69.39787589667166,68.27922167219836,68.33446502685547,28184200,0.0,0 -2002-07-01,68.4863871093401,68.91451523981617,66.90508151648899,67.00175476074219,20270200,0.0,0 -2002-07-02,66.88435563199383,67.1191319672587,65.44115340466244,65.57926177978516,34213900,0.0,0 -2002-07-03,65.33757307957062,66.18001038790828,64.71609861580072,65.95214080810547,30565800,0.0,0 -2002-07-05,66.82913357301001,68.7280808724916,66.74627378983395,68.57616424560547,19013500,0.0,0 -2002-07-08,68.34830648965053,68.84548108027855,67.3677549819685,67.71992492675781,19118600,0.0,0 -2002-07-09,67.48510592658593,67.9063219249525,65.60687442966078,66.0142822265625,28620400,0.0,0 -2002-07-10,66.29049457142756,66.33883117965408,63.556012302551586,63.61125564575195,50522500,0.0,0 -2002-07-11,63.362681199032096,64.46061525221378,62.36832185404003,64.12916564941406,59476500,0.0,0 -2002-07-12,64.44682800478441,64.83352108989888,63.19697168045682,63.42484664916992,39018600,0.0,0 -2002-07-15,63.279851457231146,63.80465310070731,60.69037694233474,63.76321792602539,77317200,0.0,0 -2002-07-16,62.92074439777459,63.79080354963516,62.05758671420913,62.5340461730957,53282400,0.0,0 -2002-07-17,63.846034596538836,64.4260791875789,61.97470973154771,62.658329010009766,48880600,0.0,0 -2002-07-18,62.63071041032797,62.90692188302854,60.593660677215624,60.62818908691406,32656700,0.0,0 -2002-07-19,59.91004938332599,60.455565666137964,58.211355711070425,58.494468688964844,77572600,0.0,0 -2002-07-22,58.07324252414458,59.323098316762085,56.24334735061406,56.7612419128418,78134000,0.0,0 -2002-07-23,57.00291787450485,57.479377185817995,55.06944315485352,55.20754623413086,74484100,0.0,0 -2002-07-24,53.950782346985605,58.777561794356316,53.6400478242046,58.50135040283203,107022800,0.0,0 -2002-07-25,58.190620600215404,59.28165288645098,56.34691754288118,58.004180908203125,87176600,0.0,0 -2002-07-26,58.453041550147525,59.33691420793483,57.86609535723844,59.109039306640625,41206800,0.0,0 -2002-07-29,60.42104090543757,62.38213273290023,60.282937776400956,61.98853302001953,53492900,0.0,0 -2002-07-30,61.67783099760166,63.11412748045898,61.26351612285806,62.796485900878906,47532200,0.0,0 -2002-07-31,62.48569638889801,63.2176575327916,61.62944562232122,62.9483528137207,44669900,0.0,0 -2002-08-01,62.75503209108542,63.07958031489123,60.994193079214625,61.304927825927734,66571900,0.0,0 -2002-08-02,61.11155451087617,61.39467271592313,59.122841413210345,59.930755615234375,51772900,0.0,0 -2002-08-05,59.72359527452007,60.027428415685584,57.693452314656156,57.84536361694336,47191300,0.0,0 -2002-08-06,58.85353397673449,60.69723715360475,58.770668959192605,59.79264450073242,64730000,0.0,0 -2002-08-07,60.67655100317299,61.11158069799522,59.22644148383652,60.83536911010742,43289400,0.0,0 -2002-08-08,61.05632571678936,62.906936154953534,60.62820284185456,62.8033561706543,48339800,0.0,0 -2002-08-09,62.21640015955575,63.48697091496663,61.69850558785862,63.03812789916992,41879200,0.0,0 -2002-08-12,62.1404352054088,63.02430767008327,61.83660733836161,62.575469970703125,25841700,0.0,0 -2002-08-13,62.25092863992701,63.29362452054368,61.21513949539676,61.43610763549805,49690500,0.0,0 -2002-08-14,61.4706339562372,63.96343371436882,60.78010782419622,63.680320739746094,57423600,0.0,0 -2002-08-15,64.10843637143635,64.90254238777592,63.66650011801699,64.5641860961914,45551500,0.0,0 -2002-08-16,64.09463049449528,64.96469482987007,63.52839931998378,64.37084197998047,36517300,0.0,0 -2002-08-19,64.53653798513618,66.1178426343835,64.28794828588285,65.87615966796875,33669900,0.0,0 -2002-08-20,65.47569080517307,65.87619724557379,64.64706151385126,65.17876434326172,30508300,0.0,0 -2002-08-21,65.64141702455987,66.13859671738739,64.612534490862,66.11788177490234,39628900,0.0,0 -2002-08-22,65.93832789581288,67.08460361294689,65.64830823303032,66.76005554199219,38399800,0.0,0 -2002-08-23,66.29739746836772,66.39407067922424,65.01301878893688,65.3237533569336,33716400,0.0,0 -2002-08-26,65.53783504475471,66.0419161503161,64.56419070955049,65.7795181274414,33830100,0.0,0 -2002-08-27,66.08334884643679,66.46314032705276,64.56419346056553,65.01994323730469,35335700,0.0,0 -2002-08-28,64.41229055090814,64.55730043750218,63.39031460682712,63.597469329833984,38970600,0.0,0 -2002-08-29,63.02432800881756,64.25346914922854,62.7066865685868,63.62508773803711,42965700,0.0,0 -2002-08-30,63.3074437932788,64.48824299230213,63.11409729542192,63.376495361328125,30366700,0.0,0 -2002-09-03,62.651409008859,62.83784865935946,60.86985115610422,60.959617614746094,76586400,0.0,0 -2002-09-04,61.187507285490234,62.31996946708501,60.80771589056114,61.82969665527344,51099500,0.0,0 -2002-09-05,61.10467455446675,61.75377100207837,60.42105495071917,61.304927825927734,67250900,0.0,0 -2002-09-06,61.974711174435086,62.54094230813821,61.69159297343576,62.147342681884766,38622200,0.0,0 -2002-09-09,61.52587925523271,63.07956310141685,61.3187245700527,62.60310363769531,33998400,0.0,0 -2002-09-10,62.93452759522162,63.37646373213725,62.534021324799845,63.32122039794922,41416600,0.0,0 -2002-09-11,63.85296990775372,64.44682296678377,62.906946948997046,62.92766189575195,27711200,0.0,0 -2002-09-12,62.66524124069568,62.727386058598654,61.44991387484419,61.767555236816406,43601700,0.0,0 -2002-09-13,61.24275913899988,62.07829505566339,60.93892598083284,61.919471740722656,41131000,0.0,0 -2002-09-16,61.6708742779624,62.071380615234375,61.08392824205426,62.071380615234375,28167600,0.0,0 -2002-09-17,62.76195034944109,62.96911039747218,60.59369765812426,60.64894104003906,47609700,0.0,0 -2002-09-18,60.082679656808715,61.11156210871383,59.57859326712717,60.04124450683594,54719400,0.0,0 -2002-09-19,59.378324108264934,59.937653702131676,58.48754501342774,58.487545013427734,48510500,0.0,0 -2002-09-20,58.90231811295457,59.09653122558997,58.2988709832532,58.506954193115234,46325600,0.378,0 -2002-09-23,58.021451278910966,58.30583339968537,57.355575139144285,58.02838897705078,46893800,0.0,0 -2002-09-24,57.182165618155906,58.021447107688964,56.772926127938184,57.09199142456055,69507000,0.0,0 -2002-09-25,57.82720829889133,58.79827386206834,56.904690721962744,58.506954193115234,59294400,0.0,0 -2002-09-26,58.9717153665287,59.630659165179864,58.57635120410347,59.46419143676758,53638000,0.0,0 -2002-09-27,58.957858359345494,59.394838227978354,57.39720916748047,57.39720916748047,64648300,0.0,0 -2002-09-30,56.876979349330846,57.43187882560195,56.11399653839327,56.731319427490234,73096400,0.0,0 -2002-10-01,57.175243828956525,59.49193804586444,56.50936755178692,59.45726013183594,67198100,0.0,0 -2002-10-02,58.74279142298954,59.325430793048874,57.29312010897117,57.67461395263672,56749100,0.0,0 -2002-10-03,57.66769861477411,58.68038550194407,56.84228722861039,57.09199142456055,55547000,0.0,0 -2002-10-04,57.43186745266893,57.51509865328824,55.19840517623333,56.04462432861328,68483700,0.0,0 -2002-10-07,55.53134455586728,56.32207277008829,54.483979732064924,54.88627624511719,53188000,0.0,0 -2002-10-08,55.35794808842792,56.398380674228704,54.241216689648645,55.74637985229492,79531000,0.0,0 -2002-10-09,54.858524503644034,55.2816340621177,53.949881988845995,54.17184066772461,79956400,0.0,0 -2002-10-10,54.06088444835932,56.231918763734406,53.457431581032495,55.92672348022461,76749000,0.0,0 -2002-10-11,56.94635282820233,58.77058168057855,56.75213955690328,58.37521743774414,82308300,0.0,0 -2002-10-14,57.70930065139041,58.85377706515079,57.5983239747841,58.70117950439453,40631900,0.0,0 -2002-10-15,60.33812374630806,61.53809108963021,60.241017174237044,61.52421569824219,82320300,0.0,0 -2002-10-16,60.62945479412546,60.89996674211519,59.595955001126946,60.03293991088867,62977800,0.0,0 -2002-10-17,61.64214838091222,61.94040585583395,60.93465144416187,61.22597122192383,68534100,0.0,0 -2002-10-18,60.795936314224676,61.808623248773316,60.29652789895948,61.48262023925781,47448700,0.0,0 -2002-10-21,61.121936488423124,62.772753969493586,60.74044249670529,62.54385757446289,45859100,0.0,0 -2002-10-22,61.76701979638815,62.43289605043693,61.39939581866827,62.093017578125,40966800,0.0,0 -2002-10-23,61.57278763973309,62.61322004879316,60.81674262926764,62.564666748046875,54905800,0.0,0 -2002-10-24,62.946142020452925,63.05018628878635,61.10804425293347,61.288387298583984,54987400,0.0,0 -2002-10-25,61.18436123376279,62.696456546606605,60.99708572857365,62.564666748046875,43672100,0.0,0 -2002-10-28,63.223596061243896,63.32070264063809,61.62826461363357,62.155418395996094,39416100,0.0,0 -2002-10-29,61.787815280976645,62.07219739384821,60.345081038951776,61.43406677246094,59508200,0.0,0 -2002-10-30,61.510343510542,62.39817802042788,61.19821600975469,62.03055953979492,41688600,0.0,0 -2002-10-31,62.190151835620206,62.63406949780251,61.17052663619911,61.399417877197266,41620600,0.0,0 -2002-11-01,61.28150533337956,62.994752595339726,61.073421899389125,62.613258361816406,51878900,0.0,0 -2002-11-04,63.6744740597562,64.46520237295006,63.05021347252063,63.20974349975586,49080600,0.0,0 -2002-11-05,63.008581503208575,63.86173837120642,63.008581503208575,63.70914077758789,37270800,0.0,0 -2002-11-06,64.14611196293781,64.5553460651684,62.973890056698494,64.53453826904297,65013100,0.0,0 -2002-11-07,63.82709638504232,63.965823965133254,62.578579915720404,62.9531364440918,51572000,0.0,0 -2002-11-08,62.7935746117489,63.51494184875353,62.09301518001811,62.183189392089844,37905400,0.0,0 -2002-11-11,62.08605912316675,62.12073702144241,60.89996704713765,61.219032287597656,33505100,0.0,0 -2002-11-12,61.4964836842525,62.37738064582985,61.29533281764401,61.704566955566406,37724500,0.0,0 -2002-11-13,61.26064090418736,62.24558200714188,60.65718839028137,61.76698684692383,63891500,0.0,0 -2002-11-14,62.47450769533751,63.119576102345725,62.252548958082734,62.93230056762695,31896800,0.0,0 -2002-11-15,62.425954598759375,63.50107037805906,62.39127139610568,63.39702606201172,39152100,0.0,0 -2002-11-18,63.917219571637055,63.917219571637055,62.668698807841835,62.758872985839844,28934800,0.0,0 -2002-11-19,62.43982884291977,63.188941617812205,62.259490994527,62.675662994384766,32806600,0.0,0 -2002-11-20,62.41203941636572,64.10447158686607,62.391226334657304,64.06979370117188,36688400,0.0,0 -2002-11-21,64.2293532916132,65.33221428764621,64.11143890033847,65.26284790039062,55128200,0.0,0 -2002-11-22,64.83973947937933,65.38769580184251,64.69407430899979,64.7981185913086,32513800,0.0,0 -2002-11-25,64.80505374842876,65.38076083498662,64.3472610409745,64.83973693847656,33846400,0.0,0 -2002-11-26,64.55538932508685,64.81896373915473,63.54963969770001,63.605125427246094,42284700,0.0,0 -2002-11-27,64.173877641144,65.6512952555435,64.11145422798474,65.3946533203125,37764000,0.0,0 -2002-11-29,65.75536957584934,65.8594086452581,65.04093445044097,65.18659973144531,19385700,0.0,0 -2002-12-02,66.22009808521909,66.62240014503847,64.65944846977284,65.29064178466797,49911900,0.0,0 -2002-12-03,64.68021554373873,64.78425984428283,64.05595503238708,64.41664123535156,34407700,0.0,0 -2002-12-04,63.65366506675127,64.60392876034868,63.417836214101456,64.12532806396484,64040800,0.0,0 -2002-12-05,64.31951852235875,64.36807181152962,63.18891218723286,63.417808532714844,36724900,0.0,0 -2002-12-06,62.5091663558066,63.931087138981546,62.41205977712779,63.833980560302734,49824100,0.0,0 -2002-12-09,63.1681371688275,63.43864924770776,62.06528104599481,62.07915115356445,36789600,0.0,0 -2002-12-10,62.43981324208486,63.18892582980854,62.2594754387502,62.911476135253906,33319900,0.0,0 -2002-12-11,62.717271934041094,63.54962113711357,62.536934104835225,62.966976165771484,39201000,0.0,0 -2002-12-12,63.258287098404075,63.459437995192374,62.564665506132485,62.96002960205078,34465600,0.0,0 -2002-12-13,62.36352048405518,62.75888458366822,61.91959779229306,61.9681510925293,36862200,0.0,0 -2002-12-16,62.30109801821239,63.66753355110069,62.1901213031093,63.57042694091797,37098400,0.0,0 -2002-12-17,63.376208202660564,63.6328448106935,62.93922320297136,63.01552200317383,32353900,0.0,0 -2002-12-18,62.6479124047418,62.70340341139667,61.96122839610723,62.2872314453125,35612600,0.0,0 -2002-12-19,61.97510347569874,62.91149179751749,61.45488715336453,61.843318939208984,39264200,0.0,0 -2002-12-20,62.175084096692856,62.746648577962304,62.105382148814684,62.725738525390625,31176900,0.436,0 -2002-12-23,62.44691993073127,63.060309781182724,62.251752366648454,62.74664306640625,22599300,0.0,0 -2002-12-24,62.44692593764259,62.63512704819542,62.20993824929344,62.279640197753906,10937000,0.0,0 -2002-12-26,62.52360711075862,63.157907148381895,61.92416071046877,62.30752944946289,17485600,0.0,0 -2002-12-27,62.00779531456861,62.237816517402045,60.90648651123047,60.90648651123047,22205700,0.0,0 -2002-12-30,61.1922871384948,61.66626792781748,60.79498010317423,61.41533660888672,29968000,0.0,0 -2002-12-31,61.33166756052057,61.638362459001264,60.71828308147599,61.498958587646484,34036600,0.0,0 -2003-01-02,61.93113065702954,63.638857795056836,61.715053002169235,63.478538513183594,44516300,0.0,0 -2003-01-03,63.367020187151155,63.694619925228125,63.08123524284234,63.673709869384766,32222600,0.0,0 -2003-01-06,63.597051095944614,65.16536946854616,63.54825918151381,64.79594421386719,40984500,0.0,0 -2003-01-07,64.75409870156489,65.08170370625143,64.26617443065722,64.63560485839844,38640400,0.0,0 -2003-01-08,64.26621890571738,64.40562821584743,63.46463797363567,63.70162582397461,38702200,0.0,0 -2003-01-09,64.00131727466815,64.94927883910017,63.71553763778783,64.69137573242188,34804900,0.0,0 -2003-01-10,64.09192712753595,65.2699099107321,63.98737684801324,64.86563110351562,37768900,0.0,0 -2003-01-13,65.20020582564649,65.42325527788591,64.4334736659434,64.84471893310547,31649900,0.0,0 -2003-01-14,64.60770377523139,65.40231744370023,64.4125362521571,65.05380249023438,30733000,0.0,0 -2003-01-15,65.20021562688828,65.22112568525428,64.06405813967528,64.40560150146484,33511800,0.0,0 -2003-01-16,64.47531639561255,64.77503970076303,63.7434322985483,64.14073944091797,44812100,0.0,0 -2003-01-17,63.4227802204316,64.33589345349047,62.83727736984611,63.19276428222656,35618300,0.0,0 -2003-01-21,63.33913263918914,63.37398095648535,62.00083068856403,62.20994186401367,36826200,0.0,0 -2003-01-22,61.875366548747586,62.59331209899469,61.33865565167941,61.457149505615234,42286500,0.0,0 -2003-01-23,61.86145042824288,62.30057768302874,61.303823959186445,61.83356857299805,55919800,0.0,0 -2003-01-24,61.749885437144464,61.812620902755604,60.06307410552961,60.209449768066406,68633900,0.0,0 -2003-01-27,59.75637796006253,60.50219976896715,58.89902881027826,59.38694763183594,57884400,0.0,0 -2003-01-28,59.68671300904594,60.2234294110108,59.33819779870203,59.82612228393555,46929100,0.0,0 -2003-01-29,59.5403116312003,60.76708613259378,59.087240989182234,60.27916717529297,53712200,0.0,0 -2003-01-30,60.49527696084919,60.55800715244643,58.82937451255027,58.850284576416016,49845900,0.0,0 -2003-01-31,58.655105898613115,60.090986739483235,58.655105898613115,59.98643112182617,55317000,0.0,0 -2003-02-03,60.04217251505262,60.509181406736204,59.88882504186276,60.10490798950195,39696000,0.0,0 -2003-02-04,59.46364020076457,59.770335167497734,58.75964358046235,59.51243209838867,43633400,0.0,0 -2003-02-05,59.77035668161884,60.3210113346786,58.88513041525688,59.143028259277344,55270600,0.0,0 -2003-02-06,58.80843459328501,59.170887924765275,58.306572043606224,58.864192962646484,53638000,0.0,0 -2003-02-07,59.18484204081884,59.24060042010567,57.8326016321346,58.146263122558594,43165000,0.0,0 -2003-02-10,58.1741416271233,58.64115059905833,57.609548849647176,58.55751037597656,45455900,0.0,0 -2003-02-11,58.80843883779369,59.1639204045415,57.73501171082106,58.153228759765625,46861000,0.0,0 -2003-02-12,57.96503669298051,58.28566996181169,57.21920923893054,57.22618103027344,35873600,0.0,0 -2003-02-13,57.26102868189969,57.6165155523573,56.459442934675614,57.40043258666992,57934100,0.0,0 -2003-02-14,57.41437747050557,58.6899386500554,57.03100874681249,58.65509033203125,59580900,0.0,0 -2003-02-18,58.919955398389746,59.80518663191355,58.82237160668256,59.68668746948242,39492700,0.0,0 -2003-02-19,59.47061923804746,59.575174836530564,58.74570715792823,59.3730354309082,31432000,0.0,0 -2003-02-20,59.393905671928394,59.54028128451343,58.58535390937555,58.780521392822266,29280100,0.0,0 -2003-02-21,58.81540911761075,59.76337065946524,58.17414257986173,59.3730354309082,60955800,0.0,0 -2003-02-24,59.19874409395154,59.247535969680534,58.264721349819276,58.411102294921875,30628600,0.0,0 -2003-02-25,57.81865440213824,58.89208157500975,57.30982532150603,58.878143310546875,56770600,0.0,0 -2003-02-26,58.56445738229262,58.919944165980944,57.90925280829697,58.020774841308594,37787200,0.0,0 -2003-02-27,58.34143762666526,59.07332161454423,57.96504592092582,58.78753662109375,51126000,0.0,0 -2003-02-28,58.87814088089745,59.40788531324147,58.66206322416902,59.17786407470703,43666800,0.0,0 -2003-03-03,59.428791485500376,59.79124482000272,58.35536442705249,58.61326217651367,42923100,0.0,0 -2003-03-04,58.51568291916405,58.5575083471744,57.609546853688386,57.67924880981445,31440500,0.0,0 -2003-03-05,57.58165729959585,58.22989550883805,57.40739977364813,58.16716003417969,43974700,0.0,0 -2003-03-06,57.76289434791676,58.21595972169541,57.48408120549411,57.67924880981445,41217700,0.0,0 -2003-03-07,56.88463239642417,58.54356228066201,56.759166753554545,58.07655334472656,63538000,0.0,0 -2003-03-10,57.574685164430484,57.755914479346735,56.52914001501134,56.68248748779297,41014100,0.0,0 -2003-03-11,56.79401626286615,57.156469583757385,56.09698614599106,56.12486267089844,48102700,0.0,0 -2003-03-12,56.02728951205217,56.52915214230561,55.330259262904335,56.50127029418945,62459800,0.0,0 -2003-03-13,57.28193116824331,58.4877955250783,56.82886056071858,58.45294189453125,72117800,0.0,0 -2003-03-14,58.68992042445558,59.08722728839479,58.097446022850306,58.64112854003906,63951800,0.0,0 -2003-03-17,58.174126472241774,60.60675982165377,58.00684075173913,60.48826599121094,88217500,0.0,0 -2003-03-18,60.74619669300459,60.88560063727547,60.139778367795124,60.843780517578125,50792300,0.0,0 -2003-03-19,60.83678743768284,61.45017734085142,60.41857043328827,61.310768127441406,49630800,0.0,0 -2003-03-20,60.87166119147982,61.74991559563773,60.18856911477083,61.4432258605957,67321600,0.0,0 -2003-03-21,62.14584563437148,62.90166940279262,61.536982407654556,62.754703521728516,71165300,0.354,0 -2003-03-24,61.599961867599134,61.683944654413324,60.431229449406125,60.6691780090332,65398900,0.0,0 -2003-03-25,60.704182315336865,61.76794319553053,60.494233303791944,61.250057220458984,61040100,0.0,0 -2003-03-26,61.27804392583687,61.48099834949735,60.74616889075452,60.94212341308594,45740800,0.0,0 -2003-03-27,60.466223721001484,61.34802429638031,60.1792865367225,60.99110412597656,53120200,0.0,0 -2003-03-28,60.515251935818235,61.08212143545648,60.36128606199968,60.68321228027344,32583000,0.0,0 -2003-03-31,59.73138847368106,60.599189240306856,59.06654210251831,59.30448532104492,61119500,0.0,0 -2003-04-01,59.66141586052148,60.45923378036378,59.423472600627676,60.214290618896484,53574000,0.0,0 -2003-04-02,61.26402842584804,62.124829116132915,61.23603416950468,61.66993713378906,50431200,0.0,0 -2003-04-03,62.19485154697264,62.278829022714596,61.34104494785363,61.376033782958984,48755500,0.0,0 -2003-04-04,61.88691800481719,61.99888974883561,61.32004870345116,61.739952087402344,36250100,0.0,0 -2003-04-07,63.22362164719743,63.5805419859995,61.565002202114265,61.62099075317383,69776200,0.0,0 -2003-04-08,61.795938901483346,62.040882090326974,61.38303009226604,61.718955993652344,39712700,0.0,0 -2003-04-09,61.83792441828568,62.355805039079975,60.72517493351219,60.907135009765625,55647300,0.0,0 -2003-04-10,60.9491277105626,61.32704235229255,59.98334940793792,61.243064880371094,41812400,0.0,0 -2003-04-11,61.697944566363695,62.07585375930932,60.78814972866305,60.99110412597656,47730100,0.0,0 -2003-04-14,61.21505904655219,62.285814326176485,60.88613310536353,62.25082015991211,36711700,0.0,0 -2003-04-15,62.1738360576501,62.831687927246094,61.87990428843657,62.831687927246094,49709800,0.0,0 -2003-04-16,62.92267865364152,63.02765048507379,61.60697474650954,61.76094055175781,51788000,0.0,0 -2003-04-17,61.7959539393693,62.789726741287524,61.718971012804694,62.67774963378906,37403100,0.0,0 -2003-04-21,62.88767709826489,63.097631415194485,62.32780247935935,62.7407112121582,32052700,0.0,0 -2003-04-22,62.35581243243125,64.07742011057148,62.20884650934919,63.92345428466797,59763600,0.0,0 -2003-04-23,64.11939015199509,64.6302707398601,63.85344733808673,64.51129913330078,44227100,0.0,0 -2003-04-24,64.05640294426576,64.44131737203632,63.65749405519421,63.93743133544922,49692400,0.0,0 -2003-04-25,63.895454816377494,64.01442644791791,62.999654280589446,63.14662551879883,43917200,0.0,0 -2003-04-28,63.29362659523386,64.51834843901554,63.19564927488041,64.23841094970703,46432900,0.0,0 -2003-04-29,64.48331278421914,64.94521014545691,63.96543223261078,64.46231842041016,52017100,0.0,0 -2003-04-30,64.32231903076172,64.78421081276393,63.9723989107102,64.32231903076172,48709100,0.0,0 -2003-05-01,64.32934785649427,64.89622238370968,63.33557546762003,64.31535339355469,50240400,0.0,0 -2003-05-02,64.07739407232772,65.41409198189515,64.02840545120719,65.23213195800781,50201500,0.0,0 -2003-05-05,65.41408689825414,65.63103572644788,64.73524081594091,65.10615539550781,35437800,0.0,0 -2003-05-06,65.11315986149313,66.05094355564962,65.08516560115662,65.7220230102539,44401000,0.0,0 -2003-05-07,65.37913341008586,65.88301969553241,65.06420715136284,65.35813903808594,41413100,0.0,0 -2003-05-08,64.7492831481623,65.31615795546337,64.58132281309963,64.7002944946289,40570700,0.0,0 -2003-05-09,64.96620409944657,65.64505033490823,64.81223831333855,65.59606170654297,33608100,0.0,0 -2003-05-12,65.43509321362602,66.56883685778566,65.28112743411992,66.40087127685547,35662300,0.0,0 -2003-05-13,66.15594221451687,66.61083974906344,65.96698756998633,66.28191375732422,39253600,0.0,0 -2003-05-14,66.54784074996438,66.65281790887572,65.72203395957412,66.14193725585938,32195100,0.0,0 -2003-05-15,66.40787046482217,66.7158020205294,65.95997293253517,66.56183624267578,43879200,0.0,0 -2003-05-16,66.40788484580402,66.79979393658522,65.96698711867518,66.39389038085938,38905000,0.0,0 -2003-05-19,65.89000150513155,66.07895614060371,64.61629167307865,64.84024047851562,41606000,0.0,0 -2003-05-20,64.95918019338778,65.10614602417378,64.09837422523202,64.70723724365234,55404600,0.0,0 -2003-05-21,64.46232586821061,65.00120084588808,64.32235986707276,64.84024047851562,49333800,0.0,0 -2003-05-22,65.05017440764718,65.82000325361274,64.8612198159571,65.48407745361328,38421800,0.0,0 -2003-05-23,65.45610733028633,65.77103888505322,65.18316985310521,65.61707305908203,26155900,0.0,0 -2003-05-27,65.29512922394083,67.0727196250256,65.13416353882089,66.7647933959961,43719200,0.0,0 -2003-05-28,67.07971449135626,67.51361754703349,66.78578274687791,66.95374298095703,37727100,0.0,0 -2003-05-29,67.10073472459011,67.75858679246781,66.54086528200968,66.77880859375,50844200,0.0,0 -2003-05-30,67.11472641359514,67.94753324332403,66.87677779127188,67.84955596923828,52529500,0.0,0 -2003-06-02,68.25547290132907,68.8993251608971,67.65360938149236,68.12950134277344,50305500,0.0,0 -2003-06-03,67.98950533908399,68.47239165116207,67.77955105427839,68.40940856933594,38254500,0.0,0 -2003-06-04,68.34642607429117,69.52915289339643,68.283437652565,69.39618682861328,49360700,0.0,0 -2003-06-05,68.99028366857016,69.7391128540039,68.77332946426111,69.7391128540039,46262400,0.0,0 -2003-06-06,70.26398902747928,70.96382954500525,69.37518858018004,69.46617126464844,60356800,0.0,0 -2003-06-09,69.12326080833903,69.35420951149284,68.42342013649882,68.75934600830078,37808500,0.0,0 -2003-06-10,68.90629286181547,69.46616738027323,68.71733828196749,69.45916748046875,29965900,0.0,0 -2003-06-11,69.39619008990543,70.25699095886192,69.08125864519293,70.19400787353516,37610200,0.0,0 -2003-06-12,70.5089422251382,70.61391938565312,69.71812424939812,70.41096496582031,36442000,0.0,0 -2003-06-13,70.41097471755998,70.50895199044747,69.24923656852141,69.67613983154297,48628300,0.0,0 -2003-06-16,69.95611052058636,71.17383244914082,69.8441387293702,71.14584350585938,36326300,0.0,0 -2003-06-17,71.43277555908362,71.50975850151626,70.84491164163094,71.14584350585938,36801800,0.0,0 -2003-06-18,70.88683971803579,71.48170303179809,70.68388534710816,71.08279418945312,35521000,0.0,0 -2003-06-19,71.1318137051722,71.19480214940774,69.87209821407374,69.9980697631836,43551700,0.0,0 -2003-06-20,70.51079211607639,70.5880531004005,69.82949363175355,69.84354400634766,41545000,0.36,0 -2003-06-23,69.85053669319932,69.99803877588347,68.77591387617252,69.1270980834961,34237500,0.0,0 -2003-06-24,68.98664219134122,69.59769942114889,68.84616526136185,69.19734954833984,36213600,0.0,0 -2003-06-25,69.2044059389963,69.84356420164536,68.50203704833984,68.50203704833984,47743400,0.0,0 -2003-06-26,68.67761620632804,69.52046192996923,68.10167403989833,69.39403533935547,33477300,0.0,0 -2003-06-27,69.35889427140769,69.66793814799156,68.53712435446978,68.59331512451172,54208800,0.0,0 -2003-06-30,68.98668903973062,69.30275296918889,68.4599122515331,68.5722885131836,33349000,0.0,0 -2003-07-01,68.30534528411577,69.42913395484996,67.72940325544906,69.20437622070312,51322800,0.0,0 -2003-07-02,69.37292607874805,70.08934486378814,69.23245453903019,70.0752944946289,34662100,0.0,0 -2003-07-03,69.58364292361478,70.1314894635021,68.76187311378376,69.35186004638672,30792800,0.0,0 -2003-07-07,69.99105446234039,70.86901549333149,69.99105446234039,70.7285385131836,31391100,0.0,0 -2003-07-08,70.58803035133758,71.14290207872891,70.35624747306409,71.04457092285156,30952500,0.0,0 -2003-07-09,70.88305176119921,71.22019111328397,70.25794401299774,70.64424896240234,36528500,0.0,0 -2003-07-10,70.12447542284772,70.26495235196818,69.27461009659501,69.74520111083984,49777700,0.0,0 -2003-07-11,69.80843648917573,70.55294572252099,69.80843648917573,70.40544891357422,39976300,0.0,0 -2003-07-14,71.07968140747523,71.57134251283712,70.55290509657405,70.74957275390625,42114900,0.0,0 -2003-07-15,71.20618870463669,71.26237952761093,70.20180051824224,70.59513092041016,42573600,0.0,0 -2003-07-16,70.80577164181699,70.84791739859625,69.69603340803596,70.1806640625,39894200,0.0,0 -2003-07-17,69.63986751240108,70.15259373497376,68.9445239016148,69.1833267211914,52253500,0.0,0 -2003-07-18,69.54854331831568,70.09639538196485,69.15521857803722,69.89270782470703,35698100,0.0,0 -2003-07-21,69.85056340831814,69.8786587986869,68.72677458680643,69.02879333496094,34786000,0.0,0 -2003-07-22,69.31676618365232,69.82247248654814,68.77593930358128,69.65390014648438,49968300,0.0,0 -2003-07-23,69.681963254181,69.85053015750323,69.02876047533148,69.70303344726562,37275400,0.0,0 -2003-07-24,70.2298609706175,70.47568900044645,69.09202684436653,69.17630767822266,40896200,0.0,0 -2003-07-25,69.29567347739449,70.44053211564001,68.86020311161812,70.39839172363281,43241100,0.0,0 -2003-07-28,70.49675172989798,70.92519708614267,70.00509040112384,70.13854217529297,34382800,0.0,0 -2003-07-29,70.33521161973373,70.41949780534628,69.30975380870026,69.81546020507812,53472100,0.0,0 -2003-07-30,69.95590435332704,70.06126070431097,69.48531872539833,69.64686584472656,28363300,0.0,0 -2003-07-31,70.22278785674966,70.87599061674479,69.6538658666603,69.80838775634766,54937200,0.0,0 -2003-08-01,69.66794903748179,69.90675180951607,69.00069559589359,69.19033813476562,49321000,0.0,0 -2003-08-04,69.04986118770346,69.53449727743462,68.12975995869857,69.19033813476562,55214100,0.0,0 -2003-08-05,69.12009901491578,69.36592696213732,67.66619081567556,67.72238159179688,61415600,0.0,0 -2003-08-06,67.91200465261053,68.87424596425879,67.72236217722944,68.11569213867188,50096900,0.0,0 -2003-08-07,68.2491555786359,68.88128839039044,67.96118723912097,68.83212280273438,43427400,0.0,0 -2003-08-08,69.0568887253297,69.21843588028815,68.66356397746254,69.02879333496094,27357300,0.0,0 -2003-08-11,69.01474243704484,69.5625891059239,68.71974354263915,69.28866577148438,34631400,0.0,0 -2003-08-12,69.33080681971316,69.94888928495955,69.12711927398884,69.9207992553711,43285600,0.0,0 -2003-08-13,70.1104151724419,70.13148536756913,69.20435927145053,69.56256866455078,36152000,0.0,0 -2003-08-14,69.60474623866088,70.06128702534271,69.14820545197905,69.75224304199219,35525100,0.0,0 -2003-08-15,69.78736856259124,70.08938737896594,69.6188015409504,69.96998596191406,12567000,0.0,0 -2003-08-18,70.18770780915432,70.65829357490026,70.05425603491514,70.57401275634766,22873800,0.0,0 -2003-08-19,70.7214799988292,70.89707210897932,70.23684406004817,70.84088134765625,37437700,0.0,0 -2003-08-20,70.44054130091398,70.86196135187609,70.3492353201103,70.55291748046875,21295300,0.0,0 -2003-08-21,70.97436244819593,71.30447125067444,70.5178217010771,70.77769470214844,46494200,0.0,0 -2003-08-22,71.46598631587713,71.51515189064297,70.04720447360194,70.0752944946289,52040300,0.0,0 -2003-08-25,70.03317640617392,70.81983121157943,69.7311576768229,70.18769836425781,23473000,0.0,0 -2003-08-26,69.88573284178827,70.51084097821364,69.41514678109078,70.31417846679688,45065800,0.0,0 -2003-08-27,70.27197159616723,70.48970411958467,69.93483235343226,70.3351821899414,18919500,0.0,0 -2003-08-28,70.51780728011501,70.93922736102535,69.99805602561382,70.77066040039062,27402400,0.0,0 -2003-08-29,70.66530850610246,71.27637114515835,70.57400251304017,71.24827575683594,28706600,0.0,0 -2003-09-02,71.38874864008422,72.25968425935282,70.9743537117374,72.20349884033203,49419100,0.0,0 -2003-09-03,72.36503409861828,72.83561976217439,72.18944195323344,72.59681701660156,44912400,0.0,0 -2003-09-04,72.4142200424437,72.73028920817964,72.17541722973738,72.6319580078125,28381000,0.0,0 -2003-09-05,72.30182457244157,72.73026984223672,71.92254488973865,72.22456359863281,31637300,0.0,0 -2003-09-08,72.37207107218015,72.96205820461456,72.29481008693547,72.82158660888672,32632800,0.0,0 -2003-09-09,72.60385723994227,72.6670678532219,72.11922110353926,72.34397888183594,35053200,0.0,0 -2003-09-10,72.01382937781175,72.20347184186889,71.32551136401857,71.61347961425781,45904900,0.0,0 -2003-09-11,71.71185243017051,72.17541840399916,71.52923504423964,71.82423400878906,38396300,0.0,0 -2003-09-12,71.57841291011924,72.09113917575318,71.1850827056524,71.95768737792969,42524800,0.0,0 -2003-09-15,72.00685280700098,72.08411380990407,71.60650277316181,71.704833984375,21312800,0.0,0 -2003-09-16,71.80313868045414,72.79347554195682,71.76099292389355,72.75133514404297,37892600,0.0,0 -2003-09-17,72.68109624090881,72.89882876564486,72.37907756531698,72.61085510253906,31885800,0.0,0 -2003-09-18,72.62491795983216,73.5379939705096,72.46337081591255,73.46775817871094,30243600,0.0,0 -2003-09-19,73.51710826135384,73.74978094881101,72.90370529524397,73.09407043457031,34331600,0.4,0 -2003-09-22,72.51593675117668,72.5934943342704,71.93778364579946,72.3044204711914,36677400,0.0,0 -2003-09-23,72.33260682722555,72.82615549375137,72.17044490963242,72.57938385009766,32489200,0.0,0 -2003-09-24,72.70632905350482,72.7768345012419,71.26094316840084,71.28914642333984,41694700,0.0,0 -2003-09-25,71.50062221622728,71.83199814564912,70.64748909520323,70.70389556884766,52673100,0.0,0 -2003-09-26,70.81674586969247,70.97186106442422,70.4007546311646,70.47126007080078,42914700,0.0,0 -2003-09-29,70.71798922971622,71.20448019880646,70.35840473839305,71.16217803955078,36771600,0.0,0 -2003-09-30,70.844949121391,71.0423665040604,69.97771661412727,70.47126007080078,70764500,0.0,0 -2003-10-01,70.67571530038495,72.04354314508642,70.64751205439718,71.97303771972656,65797600,0.0,0 -2003-10-02,71.86727816105719,72.31146718996463,71.65575650202359,72.2339096069336,44591500,0.0,0 -2003-10-03,73.09406951307531,73.5241594889948,72.67808384609421,72.89665222167969,48806900,0.0,0 -2003-10-06,72.96011226951019,73.31969146615205,72.76268959506514,73.22803497314453,20226500,0.0,0 -2003-10-07,72.80500587372774,73.54532081960284,72.5582342251027,73.51007080078125,42602900,0.0,0 -2003-10-08,73.55943973089542,73.60174191356502,72.91078116027012,73.32676696777344,30920800,0.0,0 -2003-10-09,73.94724616981308,74.18697116720031,73.20693083792892,73.52420806884766,40066500,0.0,0 -2003-10-10,73.51710085483263,73.74977351884907,73.26328248770784,73.72862243652344,22682800,0.0,0 -2003-10-13,73.82733205274744,74.23627091385785,73.68632124922809,73.96129608154297,23825600,0.0,0 -2003-10-14,73.89083760846525,74.33502676295502,73.58060718863196,74.22221374511719,38484400,0.0,0 -2003-10-15,74.63815035844344,74.65930143899152,73.77797055470914,74.02474212646484,39021700,0.0,0 -2003-10-16,73.80619259952634,74.54651288269599,73.78504151358747,74.32089233398438,32772200,0.0,0 -2003-10-17,74.3631987170098,74.47600630814473,73.31265348188123,73.51007080078125,32790300,0.0,0 -2003-10-20,73.64402175684783,74.06001281738281,73.2844425547928,74.06001281738281,27657000,0.0,0 -2003-10-21,73.90492510683953,74.22925441409141,73.55239254949356,73.9331283569336,26729100,0.0,0 -2003-10-22,73.34792946602036,73.46074247630985,72.7556772996618,73.00244903564453,33914500,0.0,0 -2003-10-23,72.54412478150097,73.29149182994949,72.50886938595532,72.86845397949219,45830500,0.0,0 -2003-10-24,72.50181813501804,73.0306167602539,72.04352491730339,73.0306167602539,51723600,0.0,0 -2003-10-27,73.14341448518667,73.45364469155831,72.81203319732914,73.06585693359375,32460200,0.0,0 -2003-10-28,73.31264579442382,74.1375703815636,73.19983283589978,74.06001281738281,34956200,0.0,0 -2003-10-29,73.86964275024094,74.33498813819554,73.2350886818926,74.15872192382812,30955400,0.0,0 -2003-10-30,74.58881000105467,74.71572188730758,73.8907973162725,74.31383514404297,39123100,0.0,0 -2003-10-31,74.3138296826958,74.55354912843546,74.18691780576967,74.24332427978516,25761600,0.0,0 -2003-11-03,74.5606290338382,75.16698540714597,74.53242578633325,74.72984313964844,37589300,0.0,0 -2003-11-04,74.72982701423506,74.92724432495098,74.44075320332051,74.56766510009766,31421600,0.0,0 -2003-11-05,74.37729756551812,74.71573109698147,73.96131184104662,74.62406921386719,33558800,0.0,0 -2003-11-06,74.45483642988668,75.04709361632973,74.10230405533304,75.01889038085938,28392300,0.0,0 -2003-11-07,75.18810703048945,75.2445135033927,74.43368793786478,74.4618911743164,31723200,0.0,0 -2003-11-10,74.55355652266138,74.62406193256476,74.0388621890706,74.15872192382812,25530800,0.0,0 -2003-11-11,74.09528094158101,74.26450042072473,73.89081681791602,74.13758850097656,26558600,0.0,0 -2003-11-12,74.19400343424009,75.06828265906258,74.1446490920135,74.96957397460938,28000000,0.0,0 -2003-11-13,74.74391293160785,75.11759637482406,74.58174567815823,74.99068450927734,29714800,0.0,0 -2003-11-14,75.01888743743604,75.40666980669982,74.23626516629635,74.35612487792969,49158500,0.0,0 -2003-11-17,73.96834583497616,74.130507715839,73.35493756321759,73.9824447631836,44382100,0.0,0 -2003-11-18,74.20100458058346,74.34906751620841,73.11520434011722,73.21391296386719,41155000,0.0,0 -2003-11-19,73.34789986539981,74.03886582652243,73.27034229693038,73.83439636230469,29827000,0.0,0 -2003-11-20,73.32674599041422,74.20102491719581,73.15047977409111,73.171630859375,53578700,0.0,0 -2003-11-21,73.49597408736997,73.55943273455831,73.05883723010852,73.47482299804688,30016000,0.0,0 -2003-11-24,73.81323045174709,74.58174844777362,73.80617829806124,74.44778442382812,28906400,0.0,0 -2003-11-25,74.54653009969543,75.03302132630233,74.34910736716081,74.72984313964844,37580000,0.0,0 -2003-11-26,75.03300697623285,75.05415806301156,74.3067909743325,74.99775695800781,33053600,0.0,0 -2003-11-28,74.93430132241414,75.20222944360084,74.87789483593077,75.05416107177734,10507500,0.0,0 -2003-12-01,75.33616877447648,75.92137381818647,75.3009187638925,75.8649673461914,38699000,0.0,0 -2003-12-02,75.7098716016309,75.98484649891381,75.49130319076977,75.67462158203125,35352000,0.0,0 -2003-12-03,75.90022879005252,76.20340687718695,75.49128990429581,75.55474853515625,39078600,0.0,0 -2003-12-04,75.56178928323949,75.94957705418399,75.39962740027524,75.8649673461914,36089500,0.0,0 -2003-12-05,75.52657511733693,76.00601959840337,75.17404256888277,75.3362045288086,28824400,0.0,0 -2003-12-08,75.258674166532,75.89323405917833,75.21637196676282,75.84387969970703,32482900,0.0,0 -2003-12-09,76.07652216764646,76.09767325908211,75.11763324161981,75.2586441040039,43596100,0.0,0 -2003-12-10,75.27978477926202,75.42785315726312,74.70868387264206,75.2515869140625,36915400,0.0,0 -2003-12-11,75.21631756800845,76.21750835274638,75.20926541340667,76.09764862060547,45304000,0.0,0 -2003-12-12,76.12586016445142,76.2880220834577,75.7169212204225,76.24571990966797,34142200,0.0,0 -2003-12-15,76.97191880781263,77.01422635141755,75.78036301741605,75.8649673461914,38693400,0.0,0 -2003-12-16,75.92138552581966,76.49953850488137,75.80857256443294,76.25981903076172,32894200,0.0,0 -2003-12-17,76.18930435814565,76.4995346069336,76.00599137405986,76.4995346069336,23198800,0.0,0 -2003-12-18,76.53480126469732,77.36677810771822,76.42198829245515,77.35972595214844,29353100,0.0,0 -2003-12-19,77.4277230235399,77.47731055173068,76.91767678807169,77.14436340332031,41465100,0.516,0 -2003-12-22,77.06643254379344,77.6827392578125,77.0593470676411,77.6827392578125,27611300,0.0,0 -2003-12-23,77.55524646685845,77.8881882616531,77.48440249747111,77.73234558105469,24741200,0.0,0 -2003-12-24,77.58357497829087,77.83859812658832,77.51982189353444,77.6544189453125,8055800,0.0,0 -2003-12-26,77.718160305662,77.9802688920476,77.6614873024486,77.71107482910156,8308400,0.0,0 -2003-12-29,77.99443465686892,78.82325706378212,77.76774804802166,78.7453384399414,22483700,0.0,0 -2003-12-30,78.69577823669735,78.82328984499344,78.52576456051501,78.75953674316406,19559500,0.0,0 -2003-12-31,78.7878888538756,79.00040464001489,78.51869462493877,78.83039093017578,31501800,0.0,0 -2004-01-02,79.1562077566734,79.47498936146897,78.44073132437855,78.79492950439453,38072300,0.0,0 -2004-01-05,79.12080984343011,79.70877485341526,79.04996586700892,79.65210723876953,27959800,0.0,0 -2004-01-06,79.45372924051644,79.85751490332879,79.34038324166085,79.7300033569336,20472800,0.0,0 -2004-01-07,79.61665664840386,80.09128085395298,79.26245851208935,79.99919128417969,30170400,0.0,0 -2004-01-08,80.22587308221289,80.3392190732864,79.88584051362666,80.31796264648438,36438400,0.0,0 -2004-01-09,79.92834951927122,80.40297370570808,79.53164394742204,79.61665344238281,54084300,0.0,0 -2004-01-12,79.7300189469264,80.22589427729379,79.59542189812565,80.20464324951172,31564100,0.0,0 -2004-01-13,80.11254026350667,80.21172072432074,79.17037722980756,79.73709106445312,54239700,0.0,0 -2004-01-14,79.87877284064848,80.51633062780658,79.81501435961509,80.40298461914062,30112800,0.0,0 -2004-01-15,80.45258626794437,80.79969902229813,79.75127528129278,80.60134887695312,38408700,0.0,0 -2004-01-16,80.7855155819117,80.97678020695902,80.49507050151826,80.92011260986328,31922700,0.0,0 -2004-01-20,81.13262154662556,81.217631042188,80.62966085830865,80.89884948730469,29863000,0.0,0 -2004-01-21,80.84926980707114,81.67809760644255,80.55883012717534,81.53641510009766,30725000,0.0,0 -2004-01-22,81.56475046591063,81.73476406652277,81.16805026293734,81.32389831542969,29888500,0.0,0 -2004-01-23,81.46559915149238,81.72770780747503,80.72178064955895,81.06181335449219,44245300,0.0,0 -2004-01-26,81.03343472893796,82.12436544260822,81.02634925417875,82.08186340332031,30460600,0.0,0 -2004-01-27,81.99689856264949,82.52819596154355,81.2176634585322,81.2389144897461,35322800,0.0,0 -2004-01-28,81.45139319368015,81.66390879978395,80.0062643727123,80.31087493896484,52621300,0.0,0 -2004-01-29,80.44548443161709,80.65092001313137,79.73708811107201,80.3888168334961,60117100,0.0,0 -2004-01-30,80.4171479302391,80.55883043712912,80.1125372962193,80.3888168334961,30984400,0.0,0 -2004-02-02,80.54466135888957,81.23889214722216,80.13379559093266,80.73593139648438,38832400,0.0,0 -2004-02-03,80.57301236981297,80.85637203657845,80.36049667321593,80.60134887695312,25093500,0.0,0 -2004-02-04,80.18339299506042,80.56592771273424,79.90003334441658,79.94253540039062,39332600,0.0,0 -2004-02-05,80.16922220066752,80.43133082384969,79.89294802701086,80.17630767822266,37226800,0.0,0 -2004-02-06,80.34632601425396,81.25307262754559,80.1904779267252,81.07597351074219,37216000,0.0,0 -2004-02-09,81.23181301390645,81.3734955351582,80.96262433048143,81.09722137451172,24851300,0.0,0 -2004-02-10,80.95554347313475,81.56476483769475,80.94137792251898,81.35932922363281,27908100,0.0,0 -2004-02-11,81.35934238360917,82.45027371510321,80.87763251521748,82.22358703613281,42965700,0.0,0 -2004-02-12,82.15271961940275,82.36523526621741,81.8764454952993,81.92603302001953,27814700,0.0,0 -2004-02-13,82.04647348393979,82.3156621789724,81.28848952762364,81.55767822265625,44739900,0.0,0 -2004-02-17,82.06771645927257,82.47858764135107,82.01104345388893,82.29440307617188,23984300,0.0,0 -2004-02-18,82.3156653131789,82.59902497405457,81.71352941171557,81.93313598632812,28618000,0.0,0 -2004-02-19,82.4077674915003,82.4502695527126,81.5081008951723,81.62853240966797,51146200,0.0,0 -2004-02-20,81.80564226197633,81.8623098828095,80.98389960656789,81.38059997558594,46728800,0.0,0 -2004-02-23,81.62144891175262,81.64978542146055,80.87763039467005,81.17515563964844,36357000,0.0,0 -2004-02-24,80.94845301204526,81.45849927698701,80.07004300277643,81.03346252441406,43953000,0.0,0 -2004-02-25,81.08308229757857,81.50811921916441,80.9839071960298,81.37352752685547,31213600,0.0,0 -2004-02-26,81.18932356025533,81.67103339800053,80.99805347803965,81.423095703125,29683000,0.0,0 -2004-02-27,81.60020600450532,81.98982089134594,81.20350023373602,81.47977447509766,39312000,0.0,0 -2004-03-01,81.77020644496586,82.4148444356309,81.64269486153464,82.28733825683594,33130800,0.0,0 -2004-03-02,82.13145700077136,82.8611042206377,81.62849634828714,81.80559539794922,38556400,0.0,0 -2004-03-03,81.64264969281943,82.08185721601062,81.40887768509027,81.954345703125,31346200,0.0,0 -2004-03-04,81.97563597616451,82.24482467465685,81.83395344698232,82.16690063476562,21060000,0.0,0 -2004-03-05,81.76310876487123,82.84695435997045,81.66393370418474,82.44316864013672,55905600,0.0,0 -2004-03-08,82.41481785916295,82.61317335080899,81.40181640115908,81.4372329711914,39281600,0.0,0 -2004-03-09,81.53641058760898,81.61433461062737,80.9271893556297,81.11137390136719,39746100,0.0,0 -2004-03-10,81.26724986288403,81.30266644619962,79.73711078124578,79.75128173828125,67671800,0.0,0 -2004-03-11,79.62374931475863,80.24005066863407,78.70283191532467,78.71700286865234,89134800,0.0,0 -2004-03-12,79.14914577555078,79.84337134046562,79.04288521633092,79.75128173828125,54012200,0.0,0 -2004-03-15,79.53168101772101,79.58835404077723,78.56118116990864,78.77369689941406,57677200,0.0,0 -2004-03-16,79.18458016930263,79.38293037532041,78.51868555941059,79.19166564941406,59832600,0.0,0 -2004-03-17,79.4678891018571,80.23295832548499,79.41121610648445,80.07711029052734,41607300,0.0,0 -2004-03-18,79.83625721893783,80.2400428753971,79.2907944707729,80.0983657836914,60014300,0.0,0 -2004-03-19,79.91004044390952,80.02377844790016,78.93613268373622,78.95034790039062,48636200,0.395,0 -2004-03-22,78.58065777930399,78.60198330662622,77.55698907917453,77.9479751586914,62752100,0.0,0 -2004-03-23,78.37450006590163,78.48113312349693,77.7418174607075,77.81290435791016,54080200,0.0,0 -2004-03-24,77.89821761821482,78.29630861069592,77.37927292565938,77.87689208984375,51584300,0.0,0 -2004-03-25,78.2536457273354,79.12091990723904,78.04748994493353,78.90765380859375,49873600,0.0,0 -2004-03-26,78.8792166006311,79.46924809622296,78.7654786606177,78.9289779663086,37409500,0.0,0 -2004-03-29,79.35551226221318,80.144589295386,79.3199715254039,80.03795623779297,44113600,0.0,0 -2004-03-30,79.83180963963481,80.37918473991957,79.77493794975038,80.30809783935547,39059900,0.0,0 -2004-03-31,80.32229260933343,80.61375587813139,79.88865557558816,80.4004898071289,48517600,0.0,0 -2004-04-01,80.37918707349642,80.94789314168574,80.36497186240406,80.8839111328125,45103800,0.0,0 -2004-04-02,81.61610277305057,81.63742829788485,80.96920501755486,81.49525451660156,50987700,0.0,0 -2004-04-05,81.36730431031523,82.02131244919579,81.35308910015812,81.943115234375,30251800,0.0,0 -2004-04-06,81.63030761354578,81.8791143944497,81.48102354500342,81.68006896972656,28420900,0.0,0 -2004-04-07,81.71567112847647,81.73700208880244,81.11853440539242,81.48818969726562,45890500,0.0,0 -2004-04-08,82.04263745538282,82.04263745538282,80.85546410893083,81.3033218383789,46929700,0.0,0 -2004-04-12,81.45261270945856,81.80805262658109,81.44550239251295,81.62322235107422,23085200,0.0,0 -2004-04-13,81.93599667207395,81.96443251122702,80.34362222099257,80.47869110107422,56210300,0.0,0 -2004-04-14,80.05217356724847,80.78437888300573,80.00952251540471,80.60665893554688,62322300,0.0,0 -2004-04-15,80.64930152673743,80.88389313443265,79.87444524042405,80.30097198486328,61602500,0.0,0 -2004-04-16,80.59954208948497,81.07583563201162,80.3151945354524,80.91944122314453,47059200,0.0,0 -2004-04-19,80.72039576588895,81.03317916004117,80.52134488505143,80.91944122314453,28277600,0.0,0 -2004-04-20,81.09717141521047,81.26778105392897,79.46214565477841,79.5616683959961,53299400,0.0,0 -2004-04-21,79.76072656607519,80.29388651751576,79.52614030936479,80.09484100341797,50177300,0.0,0 -2004-04-22,79.95978524546135,81.51660876636265,79.931349394468,81.2180404663086,62071500,0.0,0 -2004-04-23,81.33886229349294,81.44549534411807,80.89100998916602,81.29621124267578,29395700,0.0,0 -2004-04-26,81.39570774394255,81.70849647867901,80.75591506997274,81.18244171142578,35515200,0.0,0 -2004-04-27,81.20379393370132,81.83647645943238,81.01185336942044,81.25355529785156,43485500,0.0,0 -2004-04-28,80.96209528749189,81.04740281102866,79.97397285674842,80.20145416259766,50165800,0.0,0 -2004-04-29,80.13040163372843,80.55692858715535,79.02143047010148,79.49771881103516,69687600,0.0,0 -2004-04-30,79.73938293070015,79.88866703237804,78.83656800429131,78.87921905517578,48681400,0.0,0 -2004-05-03,79.17067339838378,79.82468141458558,79.1564527673115,79.72515869140625,33758000,0.0,0 -2004-05-04,79.79623982701985,80.51422978415525,79.37682344149304,79.66117095947266,51185100,0.0,0 -2004-05-05,79.9099973659748,80.30097798442988,79.7322774238819,80.17301940917969,34405000,0.0,0 -2004-05-06,79.63273591876727,80.03793710187696,78.90764106294301,79.48345184326172,54997000,0.0,0 -2004-05-07,79.0640526618986,79.78204278248036,78.16834259033203,78.16834259033203,60950000,0.0,0 -2004-05-10,77.7986883888943,78.0190593951474,77.0309368899975,77.36505126953125,75279400,0.0,0 -2004-05-11,77.81292526194441,78.23234728820609,77.72051281311309,78.01908111572266,48300600,0.0,0 -2004-05-12,77.89108283038276,78.58063695685712,76.81765304307997,78.51665496826172,90830500,0.0,0 -2004-05-13,78.02618266009094,78.77260333267704,77.9337647980683,78.18968200683594,57393700,0.0,0 -2004-05-14,78.1612300963329,78.72282577663032,77.67783162617705,78.22521209716797,54123100,0.0,0 -2004-05-17,77.40768461337413,77.84132163352962,77.06646541876145,77.55696868896484,55020400,0.0,0 -2004-05-18,77.83423178152914,78.15413096211095,77.72049382794961,77.9479751586914,30193100,0.0,0 -2004-05-19,78.55221809972842,79.03561658190083,77.59253145200479,77.6778335571289,54804100,0.0,0 -2004-05-20,77.80578968715952,78.10436331643491,77.51433179786359,77.92664337158203,38082900,0.0,0 -2004-05-21,78.17547283209278,78.58778452512605,77.82003283952972,78.06172943115234,47480400,0.0,0 -2004-05-24,78.57354028117757,78.73704501500929,77.96929356008015,78.38871002197266,40961500,0.0,0 -2004-05-25,78.1256734690293,79.60430442091054,77.91240740773789,79.51188659667969,48668000,0.0,0 -2004-05-26,79.37684785541848,79.82470021520538,79.27021479158837,79.78915405273438,35977000,0.0,0 -2004-05-27,80.00239267786591,80.35072217128781,79.66116807562942,80.23698425292969,45306900,0.0,0 -2004-05-28,80.13749174233696,80.24411938611391,79.87446423265992,80.22990417480469,23367200,0.0,0 -2004-06-01,79.94552532556318,80.22987827219086,79.52610893256289,80.12324523925781,41044700,0.0,0 -2004-06-02,80.3507499515285,80.6706491436477,79.94554864704385,80.42183685302734,39774200,0.0,0 -2004-06-03,80.1943293185207,80.46446704899165,79.66827991096432,79.6824951171875,38688300,0.0,0 -2004-06-04,80.31517028808594,80.7416969139472,80.12322978112117,80.31517028808594,32739500,0.0,0 -2004-06-07,80.63511814131165,81.61613058303485,80.62800782275006,81.53793334960938,31643800,0.0,0 -2004-06-08,81.3033275089686,81.69430815843066,81.16114828986932,81.65165710449219,32846500,0.0,0 -2004-06-09,81.40284075159236,81.53790421449771,80.84124510474416,80.89100646972656,36737600,0.0,0 -2004-06-10,81.06872965373171,81.28910064697266,80.99053244511417,81.28910064697266,21711000,0.0,0 -2004-06-14,80.91238979699999,80.93371533671542,80.23705572927702,80.4858627319336,34633000,0.0,0 -2004-06-15,80.96920229805914,81.36018289524746,80.69195963736094,81.05450439453125,37445000,0.0,0 -2004-06-16,81.040283203125,81.18245696913647,80.82701713052627,81.040283203125,26633400,0.0,0 -2004-06-17,80.93365643141338,81.09005084028047,80.56400135702188,80.91944122314453,28402400,0.0,0 -2004-06-18,80.8152845733518,81.49308886895561,80.75107445705676,81.07213592529297,31799800,0.414,0 -2004-06-21,81.1577713506792,81.43602613126814,80.71541494501857,80.7653579711914,25284000,0.0,0 -2004-06-22,80.7153737942784,81.25047970619762,80.38717615484008,81.1719970703125,37334000,0.0,0 -2004-06-23,81.05788537183439,81.93545646729325,80.92232339636449,81.87124633789062,35580000,0.0,0 -2004-06-24,81.73569221154739,81.99967991455505,81.52165298293606,81.6144027709961,35272100,0.0,0 -2004-06-25,81.62864013588005,82.00678084248688,81.10780122832172,81.22195434570312,32837900,0.0,0 -2004-06-28,81.70712041052873,81.77133596421334,80.91516849987184,80.9437026977539,40824500,0.0,0 -2004-06-29,81.00079037805237,81.4574137988257,80.92230771729002,81.27904510498047,28418100,0.0,0 -2004-06-30,81.38606617751606,81.89976887895207,81.08640808280519,81.71426391601562,52230600,0.0,0 -2004-07-01,81.51449953091452,81.62152184435777,80.32299786825263,80.57984924316406,57734700,0.0,0 -2004-07-02,80.73680294822388,80.82955270337904,80.33725339847663,80.53702545166016,34615100,0.0,0 -2004-07-06,80.17315874793704,80.23023259034922,79.6451835194271,79.8306884765625,38698200,0.0,0 -2004-07-07,79.77362715694787,80.31586960733664,79.73082040465296,80.06615447998047,29839800,0.0,0 -2004-07-08,79.7736104710096,80.13748411955083,79.33839043577292,79.50962829589844,45291100,0.0,0 -2004-07-09,79.70938594640329,79.86635123478582,79.4668017434359,79.71652221679688,27412900,0.0,0 -2004-07-12,79.5666847167375,79.93769455572343,79.19568032113075,79.75218963623047,35691300,0.0,0 -2004-07-13,79.85211003609587,79.92345643789713,79.62379828430286,79.8093032836914,26752000,0.0,0 -2004-07-14,79.38119666418362,80.18742111575001,79.28131064163132,79.56669616699219,54089400,0.0,0 -2004-07-15,79.72367932947508,79.84497419264055,78.98166482189518,79.05301666259766,38403500,0.0,0 -2004-07-16,79.60239654441334,79.67374294768122,78.79617184506122,78.98880767822266,40871200,0.0,0 -2004-07-19,79.01733130085816,79.16716035034486,78.47508894792016,78.65345764160156,39592800,0.0,0 -2004-07-20,78.86036345178499,79.83782582144566,78.66059139220596,79.6523208618164,46679800,0.0,0 -2004-07-21,79.78073789936815,79.95197029713296,78.08980096087882,78.18255615234375,56241100,0.0,0 -2004-07-22,78.02560195679453,78.76048010530283,77.60464900829972,78.3966064453125,72477100,0.0,0 -2004-07-23,78.2110997795047,78.27530989067233,77.54756808053894,77.74020385742188,49610500,0.0,0 -2004-07-26,77.90430843442164,78.07554084750576,77.2051007956427,77.59037780761719,49679100,0.0,0 -2004-07-27,77.8044028653524,78.56068415629353,77.74732359420015,78.31809997558594,51295100,0.0,0 -2004-07-28,78.16115055577288,78.74619955456261,77.47621009747206,78.55355834960938,65862300,0.0,0 -2004-07-29,78.86753552247848,79.10298360387551,78.48225832838772,78.8889389038086,52200500,0.0,0 -2004-07-30,78.71051569289821,79.12433225699745,78.55355041386892,79.0815200805664,41581700,0.0,0 -2004-08-02,78.61780290668536,79.45256725380693,78.51791685369892,79.24565887451172,38263100,0.0,0 -2004-08-03,79.14575223852792,79.23850199407109,78.59637908997499,78.63204956054688,40948800,0.0,0 -2004-08-04,78.40373303584745,79.0173217030526,78.22536436383153,78.62490844726562,40763200,0.0,0 -2004-08-05,78.6891268693603,78.75333698080527,77.24790489862087,77.34066009521484,50772000,0.0,0 -2004-08-06,76.79128113176677,77.02672909264379,76.07067559339288,76.23477172851562,74729000,0.0,0 -2004-08-09,76.35607923629637,76.68428247115928,76.24906235903819,76.34181213378906,37476300,0.0,0 -2004-08-10,76.56295268385405,77.34777904832612,76.5272822221646,77.32637023925781,55870600,0.0,0 -2004-08-11,76.82694052308587,77.29070007385747,76.41312397357405,77.1694107055664,52933200,0.0,0 -2004-08-12,76.82693700879535,77.01957273530596,76.07778658078814,76.32750701904297,50015900,0.0,0 -2004-08-13,76.41315564850818,76.59152436171357,76.0492819494225,76.47737121582031,41634700,0.0,0 -2004-08-16,76.44170694689483,77.5119193892464,76.41316729522627,77.26934051513672,45731900,0.0,0 -2004-08-17,77.59037786692475,77.9685186076572,77.43341255340255,77.70453643798828,40701600,0.0,0 -2004-08-18,77.42626806726409,78.60350235040077,77.40486469830556,78.50361633300781,43165400,0.0,0 -2004-08-19,78.34669126292034,78.4965203659389,77.89720395386465,78.27534484863281,39881600,0.0,0 -2004-08-20,78.20397435755437,78.93171626864806,78.13262796523237,78.82469940185547,44870900,0.0,0 -2004-08-23,78.87462894279182,79.03158880172673,78.51789159875997,78.62490844726562,33745100,0.0,0 -2004-08-24,78.93886486232994,79.00308043580961,78.37521902126024,78.7319564819336,30453100,0.0,0 -2004-08-25,78.71766332546487,79.38832582806256,78.41086899309002,79.26703643798828,38551400,0.0,0 -2004-08-26,79.16715041752948,79.41686546867648,79.08866776668616,79.26703643798828,26629500,0.0,0 -2004-08-27,79.33838547311888,79.64517981576148,79.23136862145986,79.51675415039062,24902900,0.0,0 -2004-08-30,79.35264313191965,79.43825659718887,78.8032646606733,78.86034393310547,26726500,0.0,0 -2004-08-31,78.95314649464788,79.30988399637309,78.55359679121568,79.27420806884766,44125300,0.0,0 -2004-09-01,79.16004641788797,79.65234589326025,78.82471775157487,79.42403411865234,52778300,0.0,0 -2004-09-02,79.36693893960502,80.40861154311521,79.36693893960502,80.322998046875,42736600,0.0,0 -2004-09-03,80.1446028770782,80.49420390585313,79.91629122351796,79.9947738647461,30480500,0.0,0 -2004-09-07,80.29446200348825,80.71540956124164,80.13749666216283,80.52277374267578,37338800,0.0,0 -2004-09-08,80.3515376934154,80.66546291859783,80.13035679357253,80.322998046875,32963100,0.0,0 -2004-09-09,80.31585043293722,80.53702585816676,79.93057342411852,80.25164031982422,34314800,0.0,0 -2004-09-10,80.2801892291784,80.81529537669174,79.96626399080316,80.66546630859375,27900600,0.0,0 -2004-09-13,80.84381680605556,81.15061114589483,80.62977766131326,80.92943572998047,44398100,0.0,0 -2004-09-14,80.8366546305847,81.11490922121122,80.75817200826667,81.093505859375,28048900,0.0,0 -2004-09-15,80.83665665547426,80.87946338021895,80.39430054072633,80.47991943359375,38295000,0.0,0 -2004-09-16,80.51562584539296,80.88663577012125,80.47995537330246,80.7225341796875,23911700,0.0,0 -2004-09-17,80.92241215180265,81.2161570497699,80.73614049878948,81.06570434570312,33683000,0.469,0 -2004-09-20,80.721839028063,80.95110115883801,80.4424259769947,80.57855224609375,37149400,0.0,0 -2004-09-21,80.77913559486078,81.29497662577558,80.62868287185046,80.9295883178711,40920800,0.0,0 -2004-09-22,80.60000022570149,80.61432670957407,79.86206332042326,79.91938018798828,49042100,0.0,0 -2004-09-23,79.95522259074397,80.02686596320281,79.48953247070312,79.48953247070312,44068700,0.0,0 -2004-09-24,79.64714983072884,80.04836254862333,79.61849138901931,79.85491943359375,34981100,0.0,0 -2004-09-27,79.5969763852332,79.66861973620077,79.22442768057955,79.34622192382812,39355100,0.0,0 -2004-09-28,79.46090156767822,79.89076738788089,79.10267913983591,79.72598266601562,41662900,0.0,0 -2004-09-29,79.67580858792209,80.13433272501236,79.5253558678805,80.12716674804688,33325700,0.0,0 -2004-09-30,79.91940201740287,80.22747343216567,79.71163241525691,80.06985473632812,43536700,0.0,0 -2004-10-01,80.42808485408482,81.42394256591797,80.39226043208934,81.42394256591797,62824300,0.0,0 -2004-10-04,81.74632809158636,81.98992209889424,81.53139799035552,81.56005096435547,33082400,0.0,0 -2004-10-05,81.56721818543471,81.7893197326122,81.34512210429584,81.60304260253906,36910600,0.0,0 -2004-10-06,81.50987533170132,82.1618423461914,81.44539796070526,82.1618423461914,42297800,0.0,0 -2004-10-07,81.94693336118581,81.96126531451384,81.21616225657732,81.2806396484375,39388800,0.0,0 -2004-10-08,81.06567879004838,81.50987078601423,80.49252112720889,80.6071548461914,51872600,0.0,0 -2004-10-11,80.80064132094871,80.97258653745989,80.70033948914721,80.936767578125,20229100,0.0,0 -2004-10-12,80.38507011282803,80.83643364271894,80.19879847976732,80.62149810791016,41754700,0.0,0 -2004-10-13,80.95821671898965,81.0083676080502,79.75458991549947,79.9122085571289,54212600,0.0,0 -2004-10-14,80.0125285340803,80.1916396737549,79.22444061271969,79.26742553710938,64082200,0.0,0 -2004-10-15,79.53968873955826,80.05552980169547,79.21729080874216,79.71163940429688,63482200,0.0,0 -2004-10-18,79.44652804065484,80.17013849677181,79.31040184016733,80.01251983642578,43535100,0.0,0 -2004-10-19,80.25612910878655,80.40658729881436,79.23161301740087,79.33908081054688,55851900,0.0,0 -2004-10-20,79.08119380800348,79.3964313438856,78.62983544475154,79.1814956665039,57118500,0.0,0 -2004-10-21,79.37490585603204,79.75462065757425,78.95936663447907,79.69730377197266,53218300,0.0,0 -2004-10-22,79.66149480620321,79.70447974277445,78.70862196124904,78.8017578125,48752400,0.0,0 -2004-10-25,78.62979356328002,78.89488002871593,78.34321463476196,78.70860290527344,43990900,0.0,0 -2004-10-26,78.90201933543315,79.95519347174168,78.72290823649733,79.9122085571289,54337400,0.0,0 -2004-10-27,79.79760172099242,81.02988737150294,79.61133005087434,80.87226867675781,73896000,0.0,0 -2004-10-28,80.80057700792628,81.3594026163216,80.59280753141394,81.11581420898438,54413300,0.0,0 -2004-10-29,81.0442358127669,81.41678469483271,80.886617085956,81.10154724121094,48820200,0.0,0 -2004-11-01,81.359442605657,81.56004620818969,81.10152212638975,81.32362365722656,36720900,0.0,0 -2004-11-02,81.43824950957897,82.08305068846693,81.11585165315401,81.35227966308594,56210000,0.0,0 -2004-11-03,82.41262711933902,82.64905516541411,81.84663519057088,82.3768081665039,76960200,0.0,0 -2004-11-04,82.23353001305786,83.58761019415427,82.16188662910288,83.50164031982422,55350300,0.0,0 -2004-11-05,83.85984847701275,84.28254819685489,83.45863575606755,84.02462768554688,63287200,0.0,0 -2004-11-08,83.80969619604203,83.9888073556227,83.62341905958726,83.90283203125,33863800,0.0,0 -2004-11-09,83.8813445840229,84.18225003826774,83.6520825046879,83.73805236816406,44658100,0.0,0 -2004-11-10,83.86699050315494,84.21805223986063,83.65206043512946,83.8025131225586,45265400,0.0,0 -2004-11-11,83.95298010244119,84.62643978885612,83.89566322146149,84.4401626586914,37863200,0.0,0 -2004-11-12,84.5189686006026,85.25690564887971,84.31119901494544,85.10645294189453,55583700,0.0,0 -2004-11-15,85.1502787623764,85.34428964357481,84.95626788117801,85.3155517578125,35297900,0.351,0 -2004-11-16,85.04972621853561,85.08565681873976,84.59703026005873,84.7048110961914,40028700,0.0,0 -2004-11-17,85.0568574889083,85.61015218533957,84.84128499395592,85.20775604248047,54494000,0.0,0 -2004-11-18,85.1718629157227,85.36587934293554,84.95629580822238,85.32276153564453,31854300,0.0,0 -2004-11-19,85.29401847209509,85.30839290199123,84.17305415869971,84.37425231933594,54276500,0.0,0 -2004-11-22,84.19459055143732,84.87723327300488,84.09399149474103,84.7766342163086,37560200,0.0,0 -2004-11-23,84.74070233276602,84.97783102658698,84.33830611215153,84.90597534179688,41968800,0.0,0 -2004-11-24,84.98502465206757,85.21496616492111,84.82694431629922,85.10718536376953,29724800,0.0,0 -2004-11-26,85.15749212302266,85.49521994791823,85.00659350637034,85.04251861572266,15487700,0.0,0 -2004-11-29,85.35866352760362,85.5167493094786,84.41734153110409,84.65446472167969,61460800,0.0,0 -2004-11-30,84.79099510111196,84.96344982730824,84.53231027069911,84.71195220947266,53685200,0.0,0 -2004-12-01,84.90597549314948,85.86885373197553,84.8628576964087,85.67484283447266,49898300,0.0,0 -2004-12-02,85.58143108147763,86.13473140406646,85.5167626055125,85.7467041015625,60163500,0.0,0 -2004-12-03,85.73232129747264,86.3287338790966,85.5742355064651,85.689208984375,49067900,0.0,0 -2004-12-06,85.6604995727539,85.9694840643291,85.3946274113671,85.6604995727539,33030500,0.0,0 -2004-12-07,85.86165506366042,85.95507237560452,84.81973406576006,84.86284637451172,52047200,0.0,0 -2004-12-08,84.94191762328192,85.3802445160654,84.79820622463488,85.35868835449219,43895100,0.0,0 -2004-12-09,84.89163195170487,85.84014159152461,84.59702189168537,85.6604995727539,60922800,0.0,0 -2004-12-10,85.45208864730965,85.91197163940966,85.40178911636865,85.7467041015625,47828600,0.0,0 -2004-12-13,86.05566134199866,86.51554418896137,85.7610459807253,86.49398803710938,38541000,0.0,0 -2004-12-14,86.35748007977877,86.91796209737184,86.35748007977877,86.79580688476562,41500700,0.0,0 -2004-12-15,86.73110835550756,87.02572370715343,86.45086742611727,86.8604507446289,46699200,0.0,0 -2004-12-16,86.74551981240505,87.11917271703877,86.25689340958365,86.81018829345703,51641800,0.0,0 -2004-12-17,86.2455845833256,86.61378676577195,86.0289992763414,86.23114776611328,70761900,0.568,0 -2004-12-20,86.45496375862018,86.84482396389399,86.03622440760752,86.25281524658203,47187400,0.0,0 -2004-12-21,86.34666436688047,86.9819945276402,86.24559011551116,86.9170150756836,33094200,0.0,0 -2004-12-22,86.90982815304037,87.41520511712748,86.85207534960004,87.12641906738281,31500700,0.0,0 -2004-12-23,87.2635610902062,87.55956268724897,87.11194971004277,87.19136047363281,25646100,0.0,0 -2004-12-27,87.50179867448155,87.61731524693703,86.91701117379243,87.0108642578125,29944100,0.0,0 -2004-12-28,87.09752832178245,87.59568405360051,87.06864916983727,87.48738861083984,23422900,0.0,0 -2004-12-29,87.4151763133301,87.64620397537377,87.32131771091196,87.61732482910156,22650600,0.0,0 -2004-12-30,87.64618862450203,87.76892084356238,87.38628186170777,87.45125579833984,21076900,0.0,0 -2004-12-31,87.57398603161329,87.83389277216669,87.21300505952607,87.26354217529297,28648800,0.0,0 -2005-01-03,87.76171143533617,87.90610716074609,86.56325720916936,86.85204315185547,55748000,0.0,0 -2005-01-04,86.96756017996128,87.02531847408078,85.50919905631552,85.79076385498047,69167600,0.0,0 -2005-01-05,85.7257903091464,86.09399257438368,85.19153982203166,85.19876098632812,65667300,0.0,0 -2005-01-06,85.509187633332,86.02178003186476,85.37923424299036,85.63191986083984,47814700,0.0,0 -2005-01-07,85.8918247909627,86.07953646366374,85.28537381305672,85.50918579101562,55847700,0.0,0 -2005-01-10,85.43699266331294,86.2455922019626,85.43699266331294,85.91349029541016,56563300,0.0,0 -2005-01-11,85.6535816969342,85.72577680412202,85.18430523801288,85.32147979736328,63099700,0.0,0 -2005-01-12,85.48033322769673,85.79799287857941,84.84500290966146,85.60306549072266,72720500,0.0,0 -2005-01-13,85.65362030761743,85.71859978907126,84.8305835967762,84.91722106933594,55537500,0.0,0 -2005-01-14,85.16986453877921,85.5741615271148,85.01825316815335,85.36479187011719,42032500,0.0,0 -2005-01-18,85.2276303594549,86.36111066606928,85.15542974104083,86.25281524658203,57391700,0.0,0 -2005-01-19,86.22394591700358,86.28891987121257,85.34315115016285,85.35037231445312,54378900,0.0,0 -2005-01-20,85.11212359512363,85.33593011525102,84.67894737533679,84.83055877685547,72049300,0.0,0 -2005-01-21,85.03994399779306,85.19155542698347,84.21690737753914,84.31076049804688,63160400,0.0,0 -2005-01-24,84.53456917851271,84.71505976656981,84.01476091174223,84.14471435546875,58441900,0.0,0 -2005-01-25,84.40459806176355,84.80889510537054,84.26742348991084,84.3829345703125,68245000,0.0,0 -2005-01-26,84.70057879232576,84.90272726427666,84.49843032037485,84.63560485839844,57195100,0.0,0 -2005-01-27,84.60673705353875,85.01103405160609,84.4551256792635,84.7800064086914,55878800,0.0,0 -2005-01-28,84.82332237044619,84.86664384033446,84.18799772946416,84.7800064086914,60738900,0.0,0 -2005-01-31,85.15542047784602,85.3720112932598,84.98215113039494,85.30703735351562,52532700,0.0,0 -2005-02-01,85.37205866350412,85.9712888115939,85.26376319570751,85.84855651855469,49841200,0.0,0 -2005-02-02,85.95681755443341,86.339456638175,85.84130646695222,86.10842895507812,52468900,0.0,0 -2005-02-03,85.95680814740096,86.0290087658264,85.60304825127845,85.88461303710938,48837100,0.0,0 -2005-02-04,85.91352043783573,86.94592682812842,85.899083614283,86.8015365600586,50024600,0.0,0 -2005-02-07,86.81595806025169,87.01088543855407,86.60658835281005,86.68600463867188,45412000,0.0,0 -2005-02-08,86.75818445358402,87.10472868603576,86.68598934502891,86.78706359863281,39263500,0.0,0 -2005-02-09,86.93870777756014,86.98924492342775,86.09401312171478,86.1373291015625,55279400,0.0,0 -2005-02-10,86.39000873964716,86.64991009197294,86.10122272712013,86.44776153564453,45858600,0.0,0 -2005-02-11,86.4188612462475,87.386293325367,86.24559188436554,87.19136047363281,53133000,0.0,0 -2005-02-14,87.13364023336376,87.25637251436113,86.98202879657836,87.12641906738281,32432100,0.0,0 -2005-02-15,87.21301252255593,87.66784660337939,87.12637509891351,87.45125579833984,43852700,0.0,0 -2005-02-16,87.30690751389699,87.68954667944547,87.11919575995665,87.5090560913086,55523000,0.0,0 -2005-02-17,87.52349891667906,87.59569405071397,86.79431539421441,86.8015365600586,58124000,0.0,0 -2005-02-18,86.80871966117832,86.9819945276402,86.56325519589103,86.9170150756836,47723300,0.0,0 -2005-02-22,86.56327079641703,86.97478903919449,85.61028089166216,85.62471771240234,80697600,0.0,0 -2005-02-23,85.86296252108768,86.32501787689273,85.63915600728238,86.2383804321289,68292600,0.0,0 -2005-02-24,86.08677646422818,86.86649700998989,85.89907024657558,86.8087387084961,68563600,0.0,0 -2005-02-25,86.8303907776835,87.84113895241065,86.76541682403158,87.6678695678711,60899900,0.0,0 -2005-02-28,87.46573261878115,87.57402806401176,86.66435403546389,87.0903091430664,69381300,0.0,0 -2005-03-01,87.22749132632707,87.73286277050417,87.19861217121186,87.52349853515625,47294400,0.0,0 -2005-03-02,87.18418472985522,88.02887945236647,87.10476842177609,87.48018646240234,64226500,0.0,0 -2005-03-03,87.83393102552905,88.00720042531596,87.14084241011159,87.51626586914062,61230800,0.0,0 -2005-03-04,88.11548032532973,88.67860990642257,87.9277686289208,88.60641479492188,56168500,0.0,0 -2005-03-07,88.55588902029392,88.98184408845573,88.36817729981745,88.64974212646484,43442400,0.0,0 -2005-03-08,88.56312968160363,88.80137860469084,88.15883248470617,88.31766510009766,44362000,0.0,0 -2005-03-09,88.05773955767073,88.28876726533122,87.32855611768748,87.33577728271484,73263600,0.0,0 -2005-03-10,87.50182915981303,87.71842005455987,86.92426262071353,87.53070831298828,65149000,0.0,0 -2005-03-11,87.58121887272006,87.87722597182558,86.75096688049128,86.9170150756836,57976500,0.0,0 -2005-03-14,87.07587222021685,87.47295368289187,86.83762334261185,87.45851135253906,36336400,0.0,0 -2005-03-15,87.66066023050934,87.68953938318461,86.69323340249609,86.7365493774414,62438500,0.0,0 -2005-03-16,86.41889420920745,86.75100174934717,85.84132761325377,86.00016021728516,74874200,0.0,0 -2005-03-17,86.13732344749585,86.44776746834378,85.8990800658359,86.17342376708984,62584200,0.0,0 -2005-03-18,86.33066840893288,86.6350821648709,85.63486316831663,85.91753387451172,60232000,0.467,0 -2005-03-21,86.04078299024602,86.09151863676446,85.35222699752853,85.5986557006836,61244300,0.0,0 -2005-03-22,85.79432798658289,86.20021303430512,84.72887420654297,84.72887420654297,92472400,0.0,0 -2005-03-23,84.76513422644521,85.32323185118456,84.62017682067349,84.80137634277344,70817300,0.0,0 -2005-03-24,85.13478245619991,85.51892455673783,84.84486211605622,84.90284729003906,51932500,0.0,0 -2005-03-28,85.10576733420785,85.48266533552768,85.02603912353516,85.02603912353516,46765500,0.0,0 -2005-03-29,84.90284350235518,85.45369157107673,84.25777367744284,84.4607162475586,71160300,0.0,0 -2005-03-30,84.64191312102461,85.6711249972384,84.63466359238363,85.65663146972656,62002100,0.0,0 -2005-03-31,85.66387546398046,85.85956848648293,85.43194033038466,85.4971694946289,64575400,0.0,0 -2005-04-01,85.9827771619284,86.24370486128501,84.73612935694271,85.11302185058594,95255300,0.0,0 -2005-04-04,85.06227972259161,85.42467866294697,84.61290304583413,85.25797271728516,71581200,0.0,0 -2005-04-05,85.36670195035829,85.80157961585176,85.28697373321137,85.66387176513672,46853900,0.0,0 -2005-04-06,85.85231588251385,86.21471486138435,85.65662286702239,85.9610366821289,53268200,0.0,0 -2005-04-07,85.82332578864988,86.43940292494081,85.75809109928507,86.4249038696289,46734600,0.0,0 -2005-04-08,86.3742043190464,86.4031969120127,85.52619171142578,85.52619171142578,63772900,0.0,0 -2005-04-11,85.73634779153709,85.83056953170723,85.40294140735504,85.59138488769531,44945000,0.0,0 -2005-04-12,85.44643135012254,86.29444363903713,84.85209724210938,86.03351593017578,86144800,0.0,0 -2005-04-13,85.93204794368518,86.10600344275754,84.8955865965675,85.01880645751953,65949000,0.0,0 -2005-04-14,85.09131388313112,85.16379260066671,83.9098892211914,83.9098892211914,96119800,0.0,0 -2005-04-15,83.88808240160478,84.2214886726877,82.69941464217261,82.73565673828125,128677300,0.0,0 -2005-04-18,82.71392818775199,83.3227556947452,82.59795788369512,82.98934936523438,100035200,0.0,0 -2005-04-19,83.42424989655674,83.73591326223998,83.2285568668347,83.64894104003906,64930100,0.0,0 -2005-04-20,83.62719419480014,83.80839370118234,82.30081801070763,82.48201751708984,107735900,0.0,0 -2005-04-21,83.19953944659008,84.2287509870464,82.90236969672642,84.08379364013672,86952200,0.0,0 -2005-04-22,83.8881374557076,84.43898560541791,82.82268327618057,83.76492309570312,88845800,0.0,0 -2005-04-25,83.97513218043954,84.43900265392482,83.8736608599754,84.31578826904297,52284100,0.0,0 -2005-04-26,84.04757501545367,84.63465962312645,83.46049040778091,83.4967269897461,72626000,0.0,0 -2005-04-27,83.250300142015,84.12730507339782,82.94588630396873,83.82289123535156,84131900,0.0,0 -2005-04-28,83.54747589694796,83.84464577701496,82.77194213867188,82.77194213867188,72481500,0.0,0 -2005-04-29,83.40251519512958,83.9823558734761,82.60523840973102,83.89537811279297,103993800,0.0,0 -2005-05-02,84.1272933284774,84.3737274937557,83.72865226542544,84.3664779663086,56026400,0.0,0 -2005-05-03,84.1272868544119,84.69262829685636,83.85186566007887,84.51142883300781,86000300,0.0,0 -2005-05-04,84.5476953341061,85.34497209914187,84.27951805951034,85.16377258300781,81055700,0.0,0 -2005-05-05,85.28700310142418,85.52618783522716,84.61294055237941,85.13479614257812,96906700,0.0,0 -2005-05-06,85.4754178987897,85.51890400394053,84.84484172525661,84.86658477783203,67415400,0.0,0 -2005-05-09,84.95357133322123,85.5841475721869,84.83760653086271,85.39569854736328,43750500,0.0,0 -2005-05-10,85.06227675144265,85.16374800881633,84.35922194694729,84.51142883300781,74613500,0.0,0 -2005-05-11,84.75066372733764,85.09131980621636,83.96788025201276,84.97534942626953,91647400,0.0,0 -2005-05-12,85.03331198627502,85.2290050381403,84.04033660888672,84.04033660888672,95086800,0.0,0 -2005-05-13,84.2940185500995,84.52595371350215,83.20682143481758,83.8736343383789,85267000,0.0,0 -2005-05-16,83.85914309343394,84.68541253565114,83.83015603385702,84.65642547607422,49207000,0.0,0 -2005-05-17,84.37373603725693,85.30872057114567,84.1925365411162,85.22174835205078,61071800,0.0,0 -2005-05-18,85.59141571944193,86.30896990995508,85.53343606678914,86.0987777709961,77944900,0.0,0 -2005-05-19,86.26546779732857,86.54814414492485,86.03353262552884,86.46116638183594,61768100,0.0,0 -2005-05-20,86.49741024062884,86.53365236073861,86.06253244816719,86.33795928955078,46345500,0.0,0 -2005-05-23,86.40315722616951,87.00474081192064,86.38866370122922,86.81629180908203,51047900,0.0,0 -2005-05-24,86.56987906077089,86.85254985200939,86.39592355095478,86.61336517333984,50654100,0.0,0 -2005-05-25,86.50462695771985,86.88152495672072,86.12773448848802,86.5481185913086,47608800,0.0,0 -2005-05-26,86.82357485020158,87.12798875937322,86.70036048645657,87.01202392578125,43256200,0.0,0 -2005-05-27,87.01923090943257,87.15694427490234,86.83078744378533,87.15694427490234,24596100,0.0,0 -2005-05-31,87.03373935936247,87.09896852072016,86.54087653106053,86.59886169433594,43377200,0.0,0 -2005-06-01,86.62787589369654,87.64259444993121,86.57714024237337,87.33818054199219,69611000,0.0,0 -2005-06-02,87.14246166249569,87.58458333323732,87.04823438810402,87.52660369873047,39704500,0.0,0 -2005-06-03,87.37441589945469,87.62084460687159,86.78008166005831,87.0844955444336,60999400,0.0,0 -2005-06-06,86.93951841691582,87.12071791801799,86.64960363896829,87.00475311279297,36046400,0.0,0 -2005-06-07,87.25844111609291,87.88176791232694,86.98301983417787,87.06999206542969,66501300,0.0,0 -2005-06-08,87.28741495152721,87.4033797448743,86.73656697626282,86.9105224609375,46881200,0.0,0 -2005-06-09,86.78729974276611,87.39613285947311,86.56986368876082,87.32365417480469,56653300,0.0,0 -2005-06-10,87.38164763960172,87.44688233697019,86.68584220303508,87.12071990966797,36465300,0.0,0 -2005-06-13,86.93227079116055,87.75854003932977,86.83804351546618,87.3961410522461,49383200,0.0,0 -2005-06-14,87.30188271124536,87.84548099843808,87.25114709229807,87.59905242919922,33857100,0.0,0 -2005-06-15,87.8165340185432,87.87451365967102,87.1424716137212,87.76579284667969,53195600,0.0,0 -2005-06-16,87.74404431955743,88.16442848770393,87.64257304169722,87.990478515625,46564500,0.0,0 -2005-06-17,88.4474958560733,88.70947670396208,88.21462460818199,88.3165054321289,51529400,0.488,0 -2005-06-20,88.11272511492596,88.66579074142906,88.01084431256554,88.34559631347656,41019400,0.0,0 -2005-06-21,88.41839148221165,88.52755110063214,88.07636060213554,88.39656066894531,39879800,0.0,0 -2005-06-22,88.54936457622424,88.73857417430055,88.10545295309579,88.46931457519531,46310100,0.0,0 -2005-06-23,88.28738989483985,88.49115152903079,87.20308374027339,87.22491455078125,62185600,0.0,0 -2005-06-24,87.23947263107534,87.33408021929586,86.48263968575382,86.58452606201172,58572500,0.0,0 -2005-06-27,86.57725388949083,86.89745396254081,86.41715385296584,86.70824432373047,48183800,0.0,0 -2005-06-28,86.89019669405594,87.50148183717869,86.86836587495732,87.43598937988281,41174200,0.0,0 -2005-06-29,87.59606577623623,87.61789658943333,87.15215406759903,87.20309448242188,42316500,0.0,0 -2005-06-30,87.48686651759145,87.55963771263856,86.56265512902571,86.73003387451172,62288800,0.0,0 -2005-07-01,86.92654490333042,87.18125249689255,86.75189286804654,86.9847640991211,49737500,0.0,0 -2005-07-05,86.78101232740228,87.7998261611606,86.73735070164179,87.68338775634766,51549000,0.0,0 -2005-07-06,87.61060481111149,87.7998144175806,86.89743910933157,86.94837951660156,52363600,0.0,0 -2005-07-07,86.08238751491683,87.2904052734375,86.06055670483634,87.2904052734375,103268800,0.0,0 -2005-07-08,87.30496630545579,88.28739166259766,87.12303547812996,88.28739166259766,64491200,0.0,0 -2005-07-11,88.29468233259396,88.85502691324747,88.28012475527939,88.73859405517578,49688300,0.0,0 -2005-07-12,88.77497763369269,89.24072017403657,88.52027554945603,88.97146606445312,51871100,0.0,0 -2005-07-13,88.9787459063976,89.1606767732278,88.77498422388209,89.09518432617188,41182300,0.0,0 -2005-07-14,89.49539077418446,89.83014273951953,89.13880245173226,89.44445037841797,63638800,0.0,0 -2005-07-15,89.35713371124356,89.53906451392496,89.04421250854807,89.39351654052734,56075900,0.0,0 -2005-07-18,89.1461011299174,89.24070315685462,88.81862787721411,89.03694152832031,56598400,0.0,0 -2005-07-19,89.29892081008633,89.59001122529189,89.08060716274805,89.5245132446289,59165700,0.0,0 -2005-07-20,89.21162313582371,90.04123305174815,89.00058820208334,89.83019256591797,69477000,0.0,0 -2005-07-21,89.9102174310577,89.95387905311559,89.12427492148618,89.30620574951172,101110900,0.0,0 -2005-07-22,89.42260843617811,89.91746034361111,89.24067766950549,89.90290832519531,52607100,0.0,0 -2005-07-25,89.80836208633595,90.2013279005011,89.40083314054012,89.64826202392578,57301600,0.0,0 -2005-07-26,89.67734080230808,89.89565445156184,89.47357362341482,89.75738525390625,42758800,0.0,0 -2005-07-27,89.87384418125085,90.15765587660346,89.54637085648683,90.08488464355469,43181600,0.0,0 -2005-07-28,90.20856947178353,90.70342148229768,89.97569826401731,90.65248107910156,47880700,0.0,0 -2005-07-29,90.53604831965976,90.69614276404884,89.8738175255223,90.04846954345703,62358100,0.0,0 -2005-08-01,90.11399214625389,90.26681339772013,89.83745369419101,89.98300170898438,40418200,0.0,0 -2005-08-02,90.14311635576537,90.67435142759619,90.04850874279744,90.52153015136719,45147400,0.0,0 -2005-08-03,90.4196192490503,90.77620210840554,90.32501721961388,90.76165008544922,36837200,0.0,0 -2005-08-04,90.40506835652091,90.46328200116224,89.92476831163468,90.03392791748047,50855600,0.0,0 -2005-08-05,89.83740167831535,90.22309953013185,89.26977862949771,89.42259979248047,53595500,0.0,0 -2005-08-08,89.619148915457,89.80835857746646,89.05879871891467,89.25528717041016,47616000,0.0,0 -2005-08-09,89.55361222654511,89.93930462133892,89.41534859857899,89.79376220703125,47170000,0.0,0 -2005-08-10,90.10669729745084,90.60154935537092,89.37897400945589,89.75011444091797,72863700,0.0,0 -2005-08-11,89.70647743626216,90.2595488757194,89.51727331525807,90.10672760009766,58570200,0.0,0 -2005-08-12,89.92475978862963,90.01208857544694,89.32802695893047,89.55361938476562,54776900,0.0,0 -2005-08-15,89.67009459087981,90.14311599756995,89.38628285728372,90.10672760009766,36208500,0.0,0 -2005-08-16,89.83016834918226,89.88838199516384,88.84773742603969,88.93506622314453,71942100,0.0,0 -2005-08-17,88.92047640118827,89.41532827025326,88.8040380545443,88.92774963378906,62275100,0.0,0 -2005-08-18,88.81862090271743,89.18975574608093,88.66579414122947,88.92050170898438,53388600,0.0,0 -2005-08-19,89.24075388691355,89.37902316434335,88.92783247889794,89.12432098388672,39842100,0.0,0 -2005-08-22,89.20437103375754,89.67739254151478,88.69496112075315,89.12432098388672,69912000,0.0,0 -2005-08-23,89.14612646882543,89.2261764959442,88.16370087938282,88.95691680908203,55168600,0.0,0 -2005-08-24,88.73858311737989,89.31348520448633,88.12001385580105,88.16368103027344,79104600,0.0,0 -2005-08-25,88.30924226934563,88.54211355844066,88.20736142737215,88.48389434814453,35631100,0.0,0 -2005-08-26,88.40381387001506,88.4110871042728,87.82163310833658,87.87985229492188,61956800,0.0,0 -2005-08-29,87.62517088785077,88.62214832002448,87.60333452368377,88.55665588378906,56179200,0.0,0 -2005-08-30,88.23647723730335,88.27286563431963,87.61063456283446,88.09093475341797,74160200,0.0,0 -2005-08-31,88.19281050791244,89.26256491415195,87.86533160995305,89.204345703125,102945200,0.0,0 -2005-09-01,89.16066290457476,89.6191321710107,88.15640667463303,89.13883209228516,74578700,0.0,0 -2005-09-02,89.40081777815905,89.42264859162913,88.8113636061116,88.9787368774414,47653400,0.0,0 -2005-09-06,89.26253611252761,90.09214016966646,89.25525732547544,90.01936340332031,57251300,0.0,0 -2005-09-07,89.96845108629135,90.33231282326881,89.8447394282205,90.1722183227539,41749700,0.0,0 -2005-09-08,89.99027110231467,90.23769437349759,89.73556349104126,89.87383270263672,39068700,0.0,0 -2005-09-09,90.11397194316676,90.77619721771967,90.09214113386437,90.67431640625,43093900,0.0,0 -2005-09-12,90.56518762163293,90.7252876804401,90.43419716916247,90.49241638183594,33017600,0.0,0 -2005-09-13,90.33229783422324,90.54333827290247,89.88838614460288,89.99027252197266,58427500,0.0,0 -2005-09-14,90.04848851943099,90.17947894850762,89.5245268031245,89.66279602050781,57694600,0.0,0 -2005-09-15,89.9393121856405,89.98297935527519,89.437186927587,89.6191177368164,73156900,0.0,0 -2005-09-16,90.11025431413329,90.43181184394642,89.79600098164732,90.25641632080078,75424100,0.522,0 -2005-09-19,90.23447214760061,90.2929391673195,89.62788936339146,89.95675659179688,53355300,0.0,0 -2005-09-20,90.03716380320965,90.33680315223307,89.06517590744288,89.19672393798828,84480300,0.0,0 -2005-09-21,89.0067070196252,89.06517404880813,88.26857610942828,88.36358642578125,94469100,0.0,0 -2005-09-22,88.39278334196909,88.91167107420328,88.02006870711355,88.67780303955078,84597200,0.0,0 -2005-09-23,88.6047403461364,89.07977513201462,88.35626387163755,88.75090789794922,59368100,0.0,0 -2005-09-26,89.17479083954196,89.3355723784731,88.48782277645799,88.85323333740234,70415400,0.0,0 -2005-09-27,88.80938476854168,89.1528716053107,88.44397418912322,88.83131408691406,66150800,0.0,0 -2005-09-28,89.1090061129692,89.24786388931935,88.57550432150958,88.91899108886719,58620500,0.0,0 -2005-09-29,88.8313052382831,89.7886790767625,88.48781843572935,89.64251708984375,66607700,0.0,0 -2005-09-30,89.61327592961878,89.92021942138673,88.97014986032755,89.92021942138672,47824200,0.0,0 -2005-10-03,89.8617593650452,90.13946936830052,89.4890390528881,89.59866333007812,50994800,0.0,0 -2005-10-04,89.73753028664525,89.91292580263328,88.54629381132044,88.59014129638672,60776300,0.0,0 -2005-10-05,88.61207109208124,88.65591858014277,87.38429124484863,87.42813873291016,106052100,0.0,0 -2005-10-06,87.53774626923116,87.8885428337315,86.3611239085819,87.1138687133789,140941800,0.0,0 -2005-10-07,87.47926150156918,87.73505328299946,87.06269380206537,87.41349029541016,75661400,0.0,0 -2005-10-10,87.46464957997573,87.48657331587428,86.45611869859411,86.67536163330078,52677000,0.0,0 -2005-10-11,86.96038251693518,87.25271200951667,86.47073382290095,86.5511245727539,75629800,0.0,0 -2005-10-12,86.52191320932471,87.06271928478915,85.80571162371125,85.8714828491211,100510400,0.0,0 -2005-10-13,85.84224386980208,86.29535494920678,85.41836630284821,85.82032012939453,99052900,0.0,0 -2005-10-14,86.3245989415899,86.82886175934888,85.91533529331508,86.72654724121094,88651000,0.0,0 -2005-10-17,86.82154296187802,87.16502417173817,86.5657511338251,87.048095703125,68109300,0.0,0 -2005-10-18,86.92383755785433,86.93845152218867,86.09070219777503,86.10531616210938,74996900,0.0,0 -2005-10-19,85.87149400081682,87.5523850498456,85.5937839423725,87.53776550292969,116563800,0.0,0 -2005-10-20,87.32577538893632,87.55963782072419,85.72528163652446,85.99568176269531,131966700,0.0,0 -2005-10-21,86.4488126929558,86.8069134049104,85.87877323188316,86.33187866210938,96579500,0.0,0 -2005-10-24,86.55845067412434,87.76430099798013,86.53652693379567,87.66929626464844,71308400,0.0,0 -2005-10-25,87.49390411376953,87.87392863735822,86.92386454052523,87.49390411376953,76594500,0.0,0 -2005-10-26,87.34045082240667,88.09319583221573,87.10658824095411,87.2381362915039,80855800,0.0,0 -2005-10-27,87.11384599954033,87.23808978573804,86.1857059423551,86.30994415283203,66623100,0.0,0 -2005-10-28,86.55114127091538,87.66198686617295,86.30996897482761,87.5523681640625,72322000,0.0,0 -2005-10-31,87.91045973344326,88.64859051282643,87.79352569580078,87.79352569580078,77698900,0.0,0 -2005-11-01,88.1223868888632,88.35624935762587,87.85929091454005,88.05661010742188,66365100,0.0,0 -2005-11-02,87.82278676342996,88.97748565673828,87.79355324484605,88.97748565673828,74012300,0.0,0 -2005-11-03,89.26981082267746,89.64253119641245,88.97748122711518,89.35750579833984,84897600,0.0,0 -2005-11-04,89.45252416358863,89.49637165536117,88.83132720200808,89.24058532714844,59156000,0.0,0 -2005-11-07,89.43056155713853,89.61326679443093,89.05053154116641,89.3282470703125,46765400,0.0,0 -2005-11-08,89.10899855527309,89.4670992591642,89.00668406844706,89.3282470703125,42152800,0.0,0 -2005-11-09,89.21860724163746,89.85441778798649,89.05782576876562,89.44515991210938,57666800,0.0,0 -2005-11-10,89.40862914937654,90.27099806256685,88.97744748064197,90.13945007324219,79048100,0.0,0 -2005-11-11,90.14677183781409,90.50487257695204,89.4744178365733,90.4464111328125,34867000,0.0,0 -2005-11-14,90.46836757344144,90.6364533466496,90.16872817013068,90.3952865600586,45092200,0.0,0 -2005-11-15,90.29296462134812,90.6876031763964,89.78869619163032,90.06640625,69592500,0.0,0 -2005-11-16,90.16138952039536,90.29293752450847,89.87636977410388,90.24908447265625,51133000,0.0,0 -2005-11-17,90.38794343888479,91.09684071618285,89.99329942134602,91.08953094482422,55717500,0.0,0 -2005-11-18,91.39647458778421,91.55725610361507,90.86297836786021,91.4476318359375,72437200,0.0,0 -2005-11-21,91.46222650381034,92.017651886789,91.33798830290154,91.90802764892578,50021200,0.0,0 -2005-11-22,91.76187707886737,92.46346452469459,91.65956259150016,92.30268859863281,66438800,0.0,0 -2005-11-23,92.26614220860013,93.11389716187284,92.23690870237819,92.836181640625,50854700,0.0,0 -2005-11-25,92.79969065334613,92.97508620324757,92.67544679543045,92.90930938720703,15270000,0.0,0 -2005-11-28,92.99696844447934,93.01158241056376,92.112675739752,92.25153350830078,54498500,0.0,0 -2005-11-29,92.55847924300257,92.79965150720966,92.1492156982422,92.14921569824219,51738900,0.0,0 -2005-11-30,92.20038322501075,92.4634736644455,91.56456692576182,91.65226745605469,56007200,0.0,0 -2005-12-01,92.09807601484367,92.83620691466564,92.0688480763858,92.58773040771484,65468200,0.0,0 -2005-12-02,92.64619148017955,92.87274982021863,92.4488722299238,92.70465850830078,46699400,0.0,0 -2005-12-05,92.59500389769815,92.61693320785331,92.21497949082153,92.50730895996094,59273400,0.0,0 -2005-12-06,92.85082293464419,93.35508570187784,92.5438738352625,92.68273162841797,57935200,0.0,0 -2005-12-07,92.64617707357039,92.7192636352182,91.84958484825,92.14191436767578,66816500,0.0,0 -2005-12-08,92.2442394797524,92.68273102149732,91.70343343079107,92.08345794677734,62608600,0.0,0 -2005-12-09,92.2003772504428,92.65348268828996,91.95189521857556,92.32461547851562,50744500,0.0,0 -2005-12-12,92.60235332951851,92.71197762436319,92.05423743101835,92.41233825683594,48389900,0.0,0 -2005-12-13,92.3903718819146,93.32582169160054,92.29536717727237,93.04080200195312,88630900,0.0,0 -2005-12-14,92.95315963730887,93.61089432342192,92.91661634331422,93.40626525878906,64375000,0.0,0 -2005-12-15,93.42815003797955,93.54508406941264,92.94581109762183,93.13582611083984,55900300,0.0,0 -2005-12-16,93.51201604190832,93.57079301064431,92.83609771728516,92.83609771728516,46238300,0.672,0 -2005-12-19,93.10790495876333,93.21076181602197,92.34382144392887,92.35851287841797,48733000,0.0,0 -2005-12-20,92.4687104847472,93.00503468034204,92.18952841068946,92.44667053222656,46603200,0.0,0 -2005-12-21,92.73319887778808,93.12993482937648,92.42462833942301,92.5936050415039,51806900,0.0,0 -2005-12-22,92.79934922300909,93.07853698730469,92.63037246541082,93.07853698730469,32247900,0.0,0 -2005-12-23,93.14462765137918,93.20340459440463,92.88013701304244,93.12993621826172,27977300,0.0,0 -2005-12-27,93.27689944973352,93.34302493072812,92.11607971920071,92.18220520019531,44499500,0.0,0 -2005-12-28,92.3805756726354,92.56424947819075,92.2042503887806,92.38792419433594,30764300,0.0,0 -2005-12-29,92.36587373271475,92.54219899652175,91.88097225064664,91.97648620605469,32788900,0.0,0 -2005-12-30,91.68997576196764,91.88099250433218,91.3667080359964,91.47691345214844,44645600,0.0,0 -2006-01-03,91.97648324751587,93.30627961207749,91.38872491335972,93.08586883544922,73256700,0.0,0 -2006-01-04,93.20343519336745,93.66629115977481,93.08588126872326,93.52670288085938,51899600,0.0,0 -2006-01-05,93.41647250384779,93.73973449963913,93.21810171036309,93.58544921875,47307500,0.0,0 -2006-01-06,94.05569476339781,94.46712233472677,93.57079317837702,94.36426544189453,62885900,0.0,0 -2006-01-09,94.34954929721486,94.81975374219844,94.32016642402262,94.60669708251953,43527400,0.0,0 -2006-01-10,94.32750374744894,94.76097116732531,94.23198979675979,94.70219421386719,44960800,0.0,0 -2006-01-11,94.79035371822569,95.09892427842549,94.57728588653968,95.00341033935547,49598900,0.0,0 -2006-01-12,94.83445215030434,94.98138893949888,94.36424769854676,94.62873840332031,40509200,0.0,0 -2006-01-13,94.45975978723918,94.702199318806,94.18791496152183,94.54056549072266,44856700,0.0,0 -2006-01-17,94.18793329119941,94.34956715073791,93.90140257848304,94.283447265625,52066600,0.0,0 -2006-01-18,93.73239667969688,94.70218832505795,93.42382610114758,93.90872192382812,75067600,0.0,0 -2006-01-19,94.13648280279274,94.60668719865257,93.90137499958429,94.26872253417969,81530400,0.0,0 -2006-01-20,94.2466969931859,94.26873695178789,92.54955291748047,92.54955291748047,114957800,0.0,0 -2006-01-23,92.72586454851582,93.17402899174755,92.6670875973723,92.8801498413086,67017400,0.0,0 -2006-01-24,93.03444884476055,93.4164934782174,92.88016352923046,92.97567749023438,53008800,0.0,0 -2006-01-25,93.33565486458377,93.43851171769548,92.45401748826878,93.05647277832031,87747700,0.0,0 -2006-01-26,93.48994572982144,93.79851630759214,93.12994672242229,93.57076263427734,71294000,0.0,0 -2006-01-27,93.79118190985223,94.52587703141981,93.63689100167757,94.43770599365234,65771200,0.0,0 -2006-01-30,94.36426544189453,94.63609911354533,94.29814555590819,94.36426544189453,33709600,0.0,0 -2006-01-31,94.27610818820769,94.43773084376829,93.66630412629833,93.67365264892578,72937000,0.0,0 -2006-02-01,93.90874621141339,94.35690515505448,93.83527780779745,94.32752227783203,63561000,0.0,0 -2006-02-02,94.11445617455519,94.14383904883844,93.15935020724883,93.23281860351562,83626900,0.0,0 -2006-02-03,92.9977407592934,94.3275375778597,92.67447300461308,92.76998138427734,86040400,0.0,0 -2006-02-06,92.8948570855875,93.15934778950718,92.69648625500815,93.01240539550781,45511900,0.0,0 -2006-02-07,92.85075810702291,93.05647742880521,92.13076009925919,92.18953704833984,71208100,0.0,0 -2006-02-08,92.46138121891477,94.11445087079635,92.27770743595892,93.027099609375,59422200,0.0,0 -2006-02-09,93.2475084894755,93.74710142317001,92.84342951409036,92.87281799316406,62023300,0.0,0 -2006-02-10,92.88753136381649,93.40181585584746,92.16752746969257,93.04181671142578,64508700,0.0,0 -2006-02-13,93.0124062621651,93.1520001364454,92.53485328645607,92.87281799316406,52308700,0.0,0 -2006-02-14,92.90953489282685,94.06300589143537,92.72586113123137,93.85729217529297,90964400,0.0,0 -2006-02-15,93.80588818875177,94.27609829781242,93.48262049042252,94.18792724609375,85471300,0.0,0 -2006-02-16,94.29075606797099,94.92994835781516,94.17320217437248,94.8932113647461,61017900,0.0,0 -2006-02-17,94.81242403504163,94.89324096077686,94.46711637149652,94.63609313964844,40342600,0.0,0 -2006-02-21,94.85650079857055,95.06955748083837,94.25404533395216,94.40099334716797,46456300,0.0,0 -2006-02-22,94.60668962638813,95.25321368068788,94.51851859264383,94.97403717041016,42326700,0.0,0 -2006-02-23,94.97403599736528,95.24586958920574,94.2466838333847,94.83444213867188,43423200,0.0,0 -2006-02-24,94.85648589285148,95.12831949557788,94.59933812069137,95.07689666748047,36777400,0.0,0 -2006-02-27,95.06954107945462,95.53974549317107,94.98138125518201,95.11363220214844,35858600,0.0,0 -2006-02-28,94.92261616760652,95.44425468439255,94.13649814494238,94.2099609375,74394800,0.0,0 -2006-03-01,94.48180862821704,95.13568691764968,94.40833462288603,95.04751586914062,48641600,0.0,0 -2006-03-02,94.7021888428408,95.08423341337217,94.48913220787648,95.04015350341797,60642300,0.0,0 -2006-03-03,94.53323009807862,95.56181010505978,94.51853305511284,94.59934997558594,73402500,0.0,0 -2006-03-06,94.87852581825541,94.9079086899361,93.93076845610659,94.1658706665039,57478400,0.0,0 -2006-03-07,93.9380963764468,94.08503312374296,93.60013737344354,94.01891326904297,61780800,0.0,0 -2006-03-08,93.82057399132577,94.36425247045311,93.43853495693311,94.21731567382812,66692400,0.0,0 -2006-03-09,94.24667585490208,94.5405493773891,93.58544921875001,93.58544921875,56313600,0.0,0 -2006-03-10,93.82788154052369,94.65808472895759,93.62951639117296,94.47441101074219,60490800,0.0,0 -2006-03-13,94.65809975003187,94.89320752772225,94.43034609699173,94.6507568359375,45479100,0.0,0 -2006-03-14,94.5626397223362,95.67936853893315,94.48916570599334,95.64263153076172,69877300,0.0,0 -2006-03-15,95.6205915094448,96.1422301198135,95.40019188167302,96.06875610351562,53398900,0.0,0 -2006-03-16,96.2524233169667,96.59038807391873,96.1275264662949,96.26712036132812,65526400,0.0,0 -2006-03-17,96.39175123677757,96.55402782176648,96.17047521646391,96.34749603271484,47286800,0.519,0 -2006-03-20,96.36225276775961,96.5540290728959,96.0450829644413,96.1926040649414,45538500,0.0,0 -2006-03-21,96.16310114401671,96.62043122554184,95.48449502078202,95.58776092529297,87102700,0.0,0 -2006-03-22,95.52874457242477,96.26636134815078,95.48448936670343,96.17047882080078,51605700,0.0,0 -2006-03-23,96.08195148433704,96.17784526116706,95.63938819810078,95.9713134765625,46704200,0.0,0 -2006-03-24,95.88281312317106,96.31063222331748,95.69840892078757,96.04508972167969,43209200,0.0,0 -2006-03-27,95.91230223017553,96.09670641215389,95.69839833134138,95.9049301147461,32523000,0.0,0 -2006-03-28,95.83854384060432,96.28111841535939,95.18944872080625,95.3148422241211,82079900,0.0,0 -2006-03-29,95.45497375729408,96.25897320775822,95.36645210544903,95.91229248046875,61505700,0.0,0 -2006-03-30,95.9713122763663,96.61303522370962,95.55824871232288,95.7426528930664,70571700,0.0,0 -2006-03-31,95.90491947138466,96.06719603392749,95.42546189836744,95.7647705078125,62925600,0.0,0 -2006-04-03,95.94183834618612,96.53192287905321,95.51401918125877,95.6910400390625,61624700,0.0,0 -2006-04-04,95.69105258650067,96.42866960444519,95.4181378915068,96.30327606201172,54809300,0.0,0 -2006-04-05,96.34011256171985,96.8343143740673,96.170463881096,96.6351547241211,50607200,0.0,0 -2006-04-06,96.51715426753606,96.78269674231609,96.03032452124965,96.53189849853516,57906200,0.0,0 -2006-04-07,96.67206117955595,96.92284820374076,95.41074268694783,95.5508804321289,80180900,0.0,0 -2006-04-10,95.69842529296875,95.94921234988178,95.34436106011849,95.69842529296875,41496500,0.0,0 -2006-04-11,95.77955289990092,95.93444613621043,94.59936143260387,94.88703155517578,72799400,0.0,0 -2006-04-12,94.98291809861095,95.24846059572948,94.8648967098607,95.06405639648438,43033700,0.0,0 -2006-04-13,94.85011513499981,95.33694478834313,94.6435833890607,94.93863677978516,51051800,0.0,0 -2006-04-17,95.02715739989715,95.3812102517472,94.4296896951698,94.90176391601562,64167700,0.0,0 -2006-04-18,95.10094714584922,96.5835644059311,95.10094714584922,96.40653228759766,92531800,0.0,0 -2006-04-19,96.44339838292954,96.67944116576001,96.06721785982526,96.5909194946289,87269000,0.0,0 -2006-04-20,96.62779244091278,97.26214328424186,96.33275024849199,96.72368621826172,86005500,0.0,0 -2006-04-21,97.1367378706463,97.21049278213238,96.3474826573012,96.73841857910156,72342600,0.0,0 -2006-04-24,96.5466611387459,96.67943801354373,96.17048062790694,96.56141662597656,52546400,0.0,0 -2006-04-25,96.6572954463379,96.71630613785722,95.83116827534465,96.16309356689453,84359800,0.0,0 -2006-04-26,96.25896971691903,96.73104390747086,96.11144864270966,96.1852035522461,67262400,0.0,0 -2006-04-27,95.8164449280355,97.0925304567885,95.58778545616137,96.64995574951172,124478600,0.0,0 -2006-04-28,96.4728944085573,97.18101147479032,96.41389497024856,96.97447967529297,55854400,0.0,0 -2006-05-01,96.97445874472773,97.21787358198459,96.12620412667155,96.1852035522461,64990300,0.0,0 -2006-05-02,96.6351704509444,96.96710700658788,96.43602202372496,96.90809631347656,49063500,0.0,0 -2006-05-03,96.73846062451643,96.86386541330737,96.22213099915437,96.54668426513672,60821300,0.0,0 -2006-05-04,96.68680926562558,97.08511737618187,96.60567096929056,96.89334106445312,42921400,0.0,0 -2006-05-05,97.40230448062802,97.95551710215169,97.2547833659163,97.74898529052734,62588200,0.0,0 -2006-05-08,97.74159657332685,97.9333841415886,97.6309585571289,97.6309585571289,30016700,0.0,0 -2006-05-09,97.67521753512115,97.93338792307034,97.59407923506335,97.82273864746094,29864000,0.0,0 -2006-05-10,97.66785987402149,97.91864692763052,97.28429592105755,97.77112579345703,64378200,0.0,0 -2006-05-11,97.74159992307904,97.77111089850253,96.27374966723224,96.5909194946289,80626900,0.0,0 -2006-05-12,96.15570928078654,96.42125173144468,95.29269912993183,95.32958221435547,91726500,0.0,0 -2006-05-15,94.99766467245023,95.69840965096562,94.86489904818797,95.52137756347656,84029300,0.0,0 -2006-05-16,95.7131202675769,95.89015229288945,95.15990785050253,95.38119506835938,62137600,0.0,0 -2006-05-17,94.90914312930741,95.22632417531385,93.50767021929174,93.56668090820312,144789500,0.0,0 -2006-05-18,93.93547939486652,94.23052718082899,93.02083632319447,93.09459686279297,87906300,0.0,0 -2006-05-19,93.5814270653817,94.0387457899337,92.79217746946908,93.7510757446289,124309400,0.0,0 -2006-05-22,93.14622711608376,93.80270546643801,92.57088704521763,93.03558349609375,110852800,0.0,0 -2006-05-23,93.81009532404109,94.14202059931104,92.32748413085938,92.32748413085938,92006500,0.0,0 -2006-05-24,92.70365580144221,93.59617122453768,92.02504987062768,93.0650863647461,168405000,0.0,0 -2006-05-25,93.61831640168128,94.21578979492188,93.25688577050948,94.21578979492188,78977900,0.0,0 -2006-05-26,94.42231037166346,94.69523620605467,94.05350764666801,94.69523620605469,62989700,0.0,0 -2006-05-30,94.39281115313155,94.414938753991,92.97658842243821,93.01346588134766,72419900,0.0,0 -2006-05-31,93.39704169763912,94.05352020263672,93.0872383631746,94.05352020263672,86926200,0.0,0 -2006-06-01,93.95761063670146,95.10829648381004,93.87647235172686,94.9533920288086,73721700,0.0,0 -2006-06-02,95.33695390982221,95.46971950699871,94.6509758141361,95.15254974365234,91702600,0.0,0 -2006-06-05,95.04192574644381,95.04929786232722,93.50767587971818,93.7658462524414,86105100,0.0,0 -2006-06-06,93.83221055742774,93.95760403355112,92.76266869802767,93.53716278076172,130498600,0.0,0 -2006-06-07,93.61095623491134,94.15679112294498,92.78482334492723,92.83645629882812,108599400,0.0,0 -2006-06-08,92.62992417572667,93.30853031833414,91.3686000538465,92.75531768798828,204957200,0.0,0 -2006-06-09,93.20524528621307,93.64781417416565,92.41599565396754,92.46025085449219,94972200,0.0,0 -2006-06-12,92.85120287756236,92.88808596943211,91.33171403569969,91.45710754394531,95815900,0.0,0 -2006-06-13,91.27271112687642,92.08408856910809,90.39495086669922,90.39495086669922,185688800,0.0,0 -2006-06-14,90.6088276526623,91.19154548833829,90.24001932331561,91.09565734863281,163566400,0.0,0 -2006-06-15,91.42760359517396,93.20526285219083,91.36122078187614,93.02823638916016,134057000,0.0,0 -2006-06-16,92.82451040936716,93.02454477780579,92.20958094138453,92.35034942626953,94253500,0.555,0 -2006-06-19,92.9059874199107,92.96525894318897,91.53536594565117,91.624267578125,95804400,0.0,0 -2006-06-20,91.87615894016517,92.46885715248928,91.66130393049816,91.9354248046875,65494700,0.0,0 -2006-06-21,91.86877026624639,93.12825921053172,91.83913450077041,92.61705780029297,75008200,0.0,0 -2006-06-22,92.57256177159536,92.65405867872134,91.89836676552989,92.20953369140625,74566100,0.0,0 -2006-06-23,92.1132281238418,92.83187963519981,91.89096278854511,92.1947250366211,54107000,0.0,0 -2006-06-26,92.2688338265023,92.6540874277286,92.05397879127169,92.60222625732422,37899600,0.0,0 -2006-06-27,92.61701878259319,92.82446340108845,91.69832739719716,91.80205535888672,69780200,0.0,0 -2006-06-28,92.00951104270356,92.4392153816461,91.60943680787355,92.42440032958984,62368100,0.0,0 -2006-06-29,92.75778219444467,94.3506686011244,92.73555679265597,94.29139709472656,110634800,0.0,0 -2006-06-30,94.49145009183438,94.5803573637345,94.06174008964788,94.29882049560547,54227800,0.0,0 -2006-07-03,94.40997833069116,94.83968279494233,94.32107103509907,94.6841049194336,23914000,0.0,0 -2006-07-05,94.30621280187947,94.42475015595393,93.73573447479353,94.14321899414062,69653400,0.0,0 -2006-07-06,94.23957432439656,94.72114561825407,94.15067268103128,94.41738891601562,50100300,0.0,0 -2006-07-07,94.23214684248039,94.50626771318227,93.56535641621124,93.80243682861328,81626500,0.0,0 -2006-07-10,94.04695227208825,94.40998051236758,93.65428826592671,93.98027038574219,60964100,0.0,0 -2006-07-11,93.80243015709634,94.39513397216797,93.30604396212829,94.39513397216797,73640800,0.0,0 -2006-07-12,94.20249855114183,94.38771777532715,93.14304436270412,93.38753509521484,82561300,0.0,0 -2006-07-13,92.94302095613168,93.1134251597466,91.8687515258789,91.8687515258789,102405700,0.0,0 -2006-07-14,91.9650886392287,92.0614062968129,91.00195163049942,91.51315307617188,103242500,0.0,0 -2006-07-17,91.5131035388733,91.94281345678579,91.23898272938283,91.37974548339844,81159000,0.0,0 -2006-07-18,91.65388987408315,91.90579098478501,90.67593249344627,91.84651947021484,122771000,0.0,0 -2006-07-19,92.00210846892722,93.54313402542566,91.66130571839366,93.12083435058594,133565300,0.0,0 -2006-07-20,93.43941276913128,93.57277086021604,92.35773298697403,92.48368072509766,112259800,0.0,0 -2006-07-21,92.72073588028542,92.7503716316107,91.73536834537558,91.83168029785156,101560000,0.0,0 -2006-07-24,92.19473089273382,93.5875775453973,92.19473089273382,93.5060806274414,92884000,0.0,0 -2006-07-25,93.3356809851454,94.31363833657947,93.14305139476582,93.8394775390625,95480700,0.0,0 -2006-07-26,93.7876242786778,94.42477900224536,93.48386762345702,93.96543884277344,84525800,0.0,0 -2006-07-27,94.3729121222988,94.60258784057716,93.49867701862634,93.87652587890625,87257100,0.0,0 -2006-07-28,94.12103278428452,94.93599650987719,93.98767467264615,94.81745910644531,82137000,0.0,0 -2006-07-31,94.5803828103891,94.80264257127382,94.42479362959224,94.72114562988281,49593100,0.0,0 -2006-08-01,94.34328090096048,94.37291666127477,93.79503346625448,94.25437927246094,65225600,0.0,0 -2006-08-02,94.52106397849809,95.17303918335708,94.49883857877634,94.8915023803711,64770900,0.0,0 -2006-08-03,94.34327645434999,95.23974261738556,94.20251366504574,95.14342498779297,63693800,0.0,0 -2006-08-04,95.63240599064021,95.89170616170547,94.4470039028573,94.98043060302734,96294200,0.0,0 -2006-08-07,94.7581558227539,94.89151388970076,94.38771737595069,94.7581558227539,45377300,0.0,0 -2006-08-08,94.8989248668036,95.17305702289416,94.05432560441416,94.39513397216797,90901300,0.0,0 -2006-08-09,94.9655977311119,95.27677598434194,93.80242685074093,94.07655334472656,78910600,0.0,0 -2006-08-10,93.78022308522382,94.46182864908566,93.55795769801324,94.36551666259766,69322300,0.0,0 -2006-08-11,94.21733041514692,94.23955582162455,93.63944723695583,94.09879302978516,47482200,0.0,0 -2006-08-14,94.55815097940615,94.95082062675861,94.03212886807208,94.17289733886719,57839000,0.0,0 -2006-08-15,95.01748196241093,95.47682211729706,94.75817612458113,95.29901885986328,68143000,0.0,0 -2006-08-16,95.81021789998785,96.23251190630636,95.60276194201835,96.09174346923828,71737600,0.0,0 -2006-08-17,96.00285786458979,96.58814581096186,95.9361816374501,96.33625030517578,70992800,0.0,0 -2006-08-18,96.45478729606138,96.82522583007814,96.01025653328654,96.82522583007812,58288400,0.0,0 -2006-08-21,96.44737416606519,96.52146639703254,96.1658485591412,96.41033935546875,42133600,0.0,0 -2006-08-22,96.3066172493572,96.69928120368756,96.07693585475451,96.40292358398438,60839900,0.0,0 -2006-08-23,96.44738991142036,96.64002522142891,95.71392870758494,96.13622283935547,66592100,0.0,0 -2006-08-24,96.30662484040336,96.38812177913455,95.86949872999708,96.05471801757812,57983000,0.0,0 -2006-08-25,96.04727769057924,96.4992130368435,95.98060148495433,96.17322540283203,41756000,0.0,0 -2006-08-28,96.05473078606275,96.92156711547157,96.04732608333495,96.63261413574219,52681500,0.0,0 -2006-08-29,96.67706766319884,96.92896319220328,96.17326530030132,96.74374389648438,61817800,0.0,0 -2006-08-30,96.95860218390476,97.08454995994006,96.72152734221763,96.80302429199219,50052200,0.0,0 -2006-08-31,96.94378957007102,97.04751192954328,96.74374955362833,96.78820037841797,37510300,0.0,0 -2006-09-01,97.15859845841855,97.4845861107312,96.93633312230679,97.36604309082031,48794500,0.0,0 -2006-09-05,97.43272650257622,97.68463326472937,97.20305645007414,97.55126953125,52348300,0.0,0 -2006-09-06,97.13638712086997,97.17343323306706,96.5585039462313,96.69185638427734,53795600,0.0,0 -2006-09-07,96.35849492627615,96.73634956517992,95.83247840077972,96.24736785888672,86269400,0.0,0 -2006-09-08,96.37333404340121,96.65487107441214,96.18811469245023,96.5215072631836,45096300,0.0,0 -2006-09-11,96.21028274388036,96.82521197896727,95.92874588073845,96.61776733398438,68496600,0.0,0 -2006-09-12,96.72892151328408,97.67724338656032,96.58815304219193,97.56611633300781,69875600,0.0,0 -2006-09-13,97.52904548689175,98.12915403370607,97.44014386658905,97.95875549316406,62898400,0.0,0 -2006-09-14,97.76611975491143,97.97356438051928,97.61053063326342,97.96614837646484,57805400,0.0,0 -2006-09-15,98.45656946612158,98.51610167065634,97.98776045203967,98.19612884521484,76703100,0.579,0 -2006-09-18,98.0695728578069,98.51605851894584,97.96539438415476,98.33002471923828,64154100,0.0,0 -2006-09-19,98.31515278387747,98.32260140386781,97.53381979794021,98.08447265625,92089100,0.0,0 -2006-09-20,98.41192131089021,98.79887495582595,98.27053374709021,98.60539245605469,75204100,0.0,0 -2006-09-21,98.67979176330434,98.78397026080764,97.79426885722401,98.1291275024414,88932500,0.0,0 -2006-09-22,97.9803067426533,97.98774400899448,97.48173738727101,97.83148193359375,65966800,0.0,0 -2006-09-25,98.0249520446634,98.8583914051391,97.51894542812903,98.58305358886719,92299100,0.0,0 -2006-09-26,98.59793613971833,99.4164895853616,98.52351806116727,99.40160369873047,73962700,0.0,0 -2006-09-27,99.33467987890826,99.69186183992615,99.17096911456468,99.52071380615234,82432200,0.0,0 -2006-09-28,99.52066851209237,99.70670235466832,99.17836124572655,99.48345947265625,58597500,0.0,0 -2006-09-29,99.56531438785913,99.66949288506785,99.3271856201794,99.40160369873047,47966600,0.0,0 -2006-10-02,99.37184459895845,99.58765024151676,98.93280740148609,99.02954864501953,51687400,0.0,0 -2006-10-03,98.88816282801604,99.61741241429598,98.70956622634073,99.23790740966797,73108100,0.0,0 -2006-10-04,99.14115208477246,100.45827486788514,99.02953632120555,100.39874267578125,80890500,0.0,0 -2006-10-05,100.39873776338683,100.7633681642055,100.27223611933236,100.59220886230469,60505900,0.0,0 -2006-10-06,100.4210671949423,100.53269431463276,100.01179046528681,100.46571350097656,64983600,0.0,0 -2006-10-09,100.34666044241547,100.68151909218608,100.1903870167333,100.5252456665039,41176800,0.0,0 -2006-10-10,100.5327085352188,100.79314914212692,100.33922604222869,100.65921020507812,56403700,0.0,0 -2006-10-11,100.33924895614452,100.77828626731794,99.93742069862846,100.54016876220703,104071800,0.0,0 -2006-10-12,100.79315563504153,101.4926448525288,100.75594658748446,101.4107894897461,59158600,0.0,0 -2006-10-13,101.32145153160657,101.73072816242399,101.23214758649965,101.67119598388672,53944000,0.0,0 -2006-10-16,101.58937432180096,101.98376520002444,101.51495623531865,101.8274917602539,42273000,0.0,0 -2006-10-17,101.55212309814353,101.72327100043834,100.95681271736898,101.50747680664062,90500600,0.0,0 -2006-10-18,101.97629997063818,102.22186599050968,101.2768223028089,101.64144134521484,86848600,0.0,0 -2006-10-19,101.49264023428482,101.85727071638084,101.37357582936286,101.80517578125,64063200,0.0,0 -2006-10-20,101.8274917602539,101.90934711354213,101.44798677024805,101.8274917602539,48094500,0.0,0 -2006-10-23,101.61912922148463,102.54186121253584,101.49262756502365,102.29629516601562,66219900,0.0,0 -2006-10-24,102.1548708815095,102.63855417958324,102.1102245899459,102.60135650634766,53234900,0.0,0 -2006-10-25,102.49721829060663,102.99578766651754,102.32605896626579,102.95114135742188,78105400,0.0,0 -2006-10-26,103.18179505120249,103.43479830756961,102.6757771838656,103.27108764648438,66843700,0.0,0 -2006-10-27,103.144595447363,103.24877393624968,102.41534602515637,102.62370300292969,80238000,0.0,0 -2006-10-30,102.43765489114175,102.83948290521168,102.24417247118775,102.54927062988281,49717800,0.0,0 -2006-10-31,102.74276927616953,102.8841454493686,102.13257286241009,102.5344009399414,71274100,0.0,0 -2006-11-01,102.85440906614569,102.92137853561543,101.73820582322378,101.8423843383789,83005600,0.0,0 -2006-11-02,101.5819400240975,101.9540077997614,101.47032423324131,101.7828598022461,60693100,0.0,0 -2006-11-03,102.14750577448058,102.23679842068384,100.91967511614023,101.60427856445312,71346400,0.0,0 -2006-11-06,101.91680077413386,102.89905370755325,101.90935215235386,102.75022888183594,63303300,0.0,0 -2006-11-07,102.8395093069232,103.41993400659184,102.69068449886035,103.14460754394531,63318900,0.0,0 -2006-11-08,102.69068531744453,103.47202975925916,101.84237141465854,103.36785125732422,87517800,0.0,0 -2006-11-09,103.44223382070734,103.53897503369302,102.61624326452853,102.82460021972656,95916300,0.0,0 -2006-11-10,102.79488274665565,102.94370758330746,102.4823471833047,102.86930084228516,48991500,0.0,0 -2006-11-13,102.82464578824644,103.46460282127771,102.74280177742178,103.12230682373047,59398200,0.0,0 -2006-11-14,103.41251852067512,103.98550607473297,102.77999875993268,103.89620208740234,96704000,0.0,0 -2006-11-15,103.85897376888042,104.51380514010782,103.82920199701313,104.19383239746094,76509600,0.0,0 -2006-11-16,104.50638489689482,104.68497013877099,103.79945848705447,104.46173858642578,76728800,0.0,0 -2006-11-17,104.12685518266775,104.49892286162465,103.97803038200588,104.49148559570312,56353800,0.0,0 -2006-11-20,104.40223105327688,104.72965254687979,104.13434177256617,104.55105590820312,69174200,0.0,0 -2006-11-21,104.54360424456453,104.67754318917302,104.3947680555235,104.65522003173828,51367900,0.0,0 -2006-11-22,104.73706949711504,105.04216777102212,104.5510356258946,104.86357116699219,45505300,0.0,0 -2006-11-24,104.35754437749078,104.80401876961916,104.32777260525303,104.43939971923828,30998000,0.0,0 -2006-11-27,104.38731961979597,104.43941455130825,102.97346681202673,103.00322723388672,84545100,0.0,0 -2006-11-28,102.8692823245664,103.55388553361358,102.77254108858409,103.44970703125,106652900,0.0,0 -2006-11-29,103.78456637342855,104.57334809001762,103.49435401818153,104.52870178222656,90034900,0.0,0 -2006-11-30,104.50637953675474,104.96030259425147,104.00036154997878,104.57334899902344,83994300,0.0,0 -2006-12-01,104.57334678308412,104.67008801849249,103.41249737660408,104.34266662597656,126080000,0.0,0 -2006-12-04,104.36496695962809,105.33234503837404,104.35008107560358,105.13886260986328,87813200,0.0,0 -2006-12-05,105.33983871116726,105.63749977803789,105.11659574966647,105.59284210205078,73374400,0.0,0 -2006-12-06,105.57051714938792,105.71935335760121,105.29519060248865,105.50354766845703,53253200,0.0,0 -2006-12-07,105.68953887203745,105.89045858826034,105.00493573837099,105.04214477539062,62857400,0.0,0 -2006-12-08,105.01986240713282,105.59283865224789,104.7594104014563,105.23565673828125,79625500,0.0,0 -2006-12-11,105.23561985993435,105.73418918200258,105.17608766936742,105.54071807861328,39779400,0.0,0 -2006-12-12,105.43653915264171,105.5704780649164,104.8412286040109,105.4588623046875,77451600,0.0,0 -2006-12-13,105.83838482913224,105.92024018510182,105.33981542626529,105.57049560546875,55520200,0.0,0 -2006-12-14,105.56306472447893,106.5899753697465,105.54817883487317,106.50067138671875,64755200,0.0,0 -2006-12-15,106.73485504359971,106.92192538764822,106.43554706026917,106.51036834716797,70857400,0.793,0 -2006-12-18,106.66004262075312,106.91446701461854,106.06890524501401,106.21855926513672,48954600,0.0,0 -2006-12-19,105.91926881938294,106.67502916815904,105.64988697126651,106.42061614990234,65023600,0.0,0 -2006-12-20,106.46549198657448,106.74984261317724,106.26345278252148,106.36073303222656,41469600,0.0,0 -2006-12-21,106.45801612538533,106.57773249221646,105.74715095776116,105.97162628173828,48698400,0.0,0 -2006-12-22,105.98661844280497,105.99409714929402,105.26078428782945,105.32064819335938,62069100,0.0,0 -2006-12-26,105.36549345113995,105.96412080553505,105.3430459244135,105.9416732788086,32696900,0.0,0 -2006-12-27,106.15868881544657,106.70494251106028,106.12876258041868,106.63758850097656,39727100,0.0,0 -2006-12-28,106.56276283041845,106.77975942460368,106.24848599511465,106.4131088256836,37288800,0.0,0 -2006-12-29,106.30087198073136,106.66004391696472,105.82945096463945,105.97162628173828,45461200,0.0,0 -2007-01-03,106.44303723416657,106.89948937954804,105.18592986726807,105.7845458984375,94807600,0.0,0 -2007-01-04,105.67978753344646,106.29338381200536,105.21585668137342,106.009033203125,69620600,0.0,0 -2007-01-05,105.75463147695052,105.80700524748706,105.04376629713062,105.16348266601562,76645300,0.0,0 -2007-01-08,105.37302653055258,105.8145099599799,104.94650051312932,105.64988708496094,71655000,0.0,0 -2007-01-09,105.73964645790917,105.9566544654077,105.05870762011074,105.56006622314453,75680100,0.0,0 -2007-01-10,105.1933918443427,105.93419447924104,104.98387398317557,105.91173553466797,72428000,0.0,0 -2007-01-11,105.94172005436823,106.71992796617049,105.8818561507108,106.37572479248047,54476800,0.0,0 -2007-01-12,106.36821758372533,107.18385314941406,106.33829134563938,107.18385314941406,55370600,0.0,0 -2007-01-16,107.05663850821189,107.33349900644883,106.80221412342908,106.97432708740234,44871300,0.0,0 -2007-01-17,106.89203482674964,107.34848707526258,106.8022332674892,107.01924133300781,50241400,0.0,0 -2007-01-18,107.13146281585743,107.1988054117197,106.48794025814409,106.66004180908203,68177300,0.0,0 -2007-01-19,106.66005377834857,107.079101063546,106.60020129833427,106.86958312988281,56973000,0.0,0 -2007-01-22,107.05669106551525,107.07913860785898,106.20363878495333,106.54037475585938,60253600,0.0,0 -2007-01-23,106.45052820117384,107.06412454703707,106.30087417614166,106.85460662841797,54064400,0.0,0 -2007-01-24,106.98180574360224,107.73756593951656,106.93691068097537,107.71511840820312,55834700,0.0,0 -2007-01-25,107.64777064299619,107.69266570346636,106.2634453831987,106.45051574707031,73583800,0.0,0 -2007-01-26,106.68250957467419,106.74236205291785,105.9417067053633,106.35326385498047,67255600,0.0,0 -2007-01-29,106.39816259283447,106.85461482581519,106.06143815621255,106.29340362548828,66114600,0.0,0 -2007-01-30,106.51789549282257,106.89951501689595,106.30088742429078,106.84712982177734,70407600,0.0,0 -2007-01-31,106.72740376092818,107.84982611359462,106.55529077931915,107.56547546386719,91868600,0.0,0 -2007-02-01,107.8647774783401,108.2464083642937,107.68519721941603,108.20899200439453,69312400,0.0,0 -2007-02-02,108.29876343740602,108.46338625824629,108.03687179906413,108.35862731933594,49607000,0.0,0 -2007-02-05,108.27633124604667,108.45592291727523,108.00694944813864,108.38858032226562,45705300,0.0,0 -2007-02-06,108.47839723038419,108.52329230480774,107.99949740674556,108.41853332519531,57081300,0.0,0 -2007-02-07,108.59063547210071,108.77022718858633,108.17908967586398,108.65798950195312,55669700,0.0,0 -2007-02-08,108.33619354868868,108.59060651579827,107.9545740980243,108.51578521728516,70641000,0.0,0 -2007-02-09,108.54569016674006,108.74772932705649,107.2960616897222,107.7076187133789,79084400,0.0,0 -2007-02-12,107.7076655471811,107.7824868635554,107.1464542939489,107.34100341796875,65657000,0.0,0 -2007-02-13,107.58041371706534,108.42596388494356,107.57292359607244,108.24638366699219,64081800,0.0,0 -2007-02-14,108.35116158371721,109.17426436856299,108.3361927569762,108.95726776123047,66039400,0.0,0 -2007-02-15,109.00213079231634,109.2116486336443,108.82253917780693,109.09941101074219,38715200,0.0,0 -2007-02-16,108.83008434033698,109.06952852958595,108.67294017093,109.04708099365234,39841800,0.0,0 -2007-02-20,108.91985790804281,109.39875763153094,108.50082207722447,109.2790298461914,56911800,0.0,0 -2007-02-21,108.95724752618149,109.3014619700826,108.76269848615658,109.2341079711914,63971600,0.0,0 -2007-02-22,109.28655976016206,109.56342037392837,108.62806811890793,109.15186309814453,79067400,0.0,0 -2007-02-23,109.05454933499398,109.09195427549753,108.52326444898348,108.72530364990234,71966200,0.0,0 -2007-02-26,109.12191275028775,109.21170289321982,108.31376721028403,108.62804412841797,69192800,0.0,0 -2007-02-27,107.6627143103242,107.9021583828344,104.01109800714745,104.38523864746094,274466500,0.0,0 -2007-02-28,105.05126281852972,106.24102792928137,104.60977937509944,105.45532989501953,177536300,0.0,0 -2007-03-01,104.26554893972545,105.6947694474094,103.30027075943156,105.14103698730469,212828600,0.0,0 -2007-03-02,104.79684587806841,105.25329813480214,103.75673485605178,103.76421356201172,162574000,0.0,0 -2007-03-05,103.21045958251867,104.4451308815409,102.76149754294912,102.7764663696289,143750400,0.0,0 -2007-03-06,103.8464566772397,104.84915067402893,103.05328048820152,104.53487396240234,143333300,0.0,0 -2007-03-07,104.45262331528554,105.10363605592849,104.31044798781328,104.43017578125,115144900,0.0,0 -2007-03-08,105.16345258139346,105.62739476788008,104.81177086244644,105.31311798095703,117891600,0.0,0 -2007-03-09,105.73963629986743,105.82194770551666,104.81925343151134,105.34304809570312,107765100,0.0,0 -2007-03-12,105.07365728992467,105.76207470604523,104.87910826510789,105.50018310546875,80366900,0.0,0 -2007-03-13,104.89410625040114,105.3356010595372,103.2927841282581,103.4499282836914,190605200,0.0,0 -2007-03-14,103.58462102254055,104.28052887883905,102.32751335910937,104.22066497802734,231853800,0.0,0 -2007-03-15,103.98863711773132,104.75188712288188,103.86143068651701,104.36277770996094,132435900,0.0,0 -2007-03-16,104.65654547739408,104.8969507725425,103.76255691368844,104.07057189941406,121531600,0.551,0 -2007-03-19,104.61900367320366,105.42284615918983,104.53636576775796,105.32518005371094,96161200,0.0,0 -2007-03-20,105.23502158316413,105.96373444768494,105.14487531972867,105.90363311767578,82147400,0.0,0 -2007-03-21,106.00133351308203,107.917011009924,105.79098452156087,107.64656066894531,152368700,0.0,0 -2007-03-22,107.78928096358938,107.93952857920036,107.27091694604692,107.56390380859375,118942200,0.0,0 -2007-03-23,107.6390112788053,108.03717253696084,107.54134519026135,107.72164916992188,74416800,0.0,0 -2007-03-26,107.80430322901344,107.91698606872845,106.74503868306182,107.57892608642578,113787500,0.0,0 -2007-03-27,107.51879939589539,107.54885578816996,106.97039060001144,107.32347869873047,99864600,0.0,0 -2007-03-28,106.782599681172,107.0305133829511,106.12149647642774,106.54220581054688,152907900,0.0,0 -2007-03-29,107.08309056004181,107.1356835233664,106.06891068989904,106.6548843383789,139432700,0.0,0 -2007-03-30,106.85771792171306,107.30846068018745,105.59561297904149,106.67741394042969,128194100,0.0,0 -2007-04-02,106.79764556884766,107.02302274080776,106.28678988152748,106.79764556884766,79416400,0.0,0 -2007-04-03,107.40616657956397,108.16492462194661,107.36109343332583,107.94706726074219,82417800,0.0,0 -2007-04-04,107.94706567460635,108.14238645982174,107.54890427113953,108.06726837158203,63995200,0.0,0 -2007-04-05,107.93203458254294,108.51050001598877,107.88696143817363,108.3602523803711,46822800,0.0,0 -2007-04-09,108.6682311278457,108.78092542611309,108.29260639326876,108.5104751586914,50967400,0.0,0 -2007-04-10,108.42784227909424,108.81849523082667,108.38276914296313,108.63819122314453,56620000,0.0,0 -2007-04-11,108.79591743954514,108.82596236452915,107.83430789275589,108.19491577148438,106365700,0.0,0 -2007-04-12,107.98457985519889,108.8710485379381,107.6840732535591,108.67572784423828,115534400,0.0,0 -2007-04-13,108.85601976957867,109.17155456542969,108.45035018844186,109.17155456542969,84287000,0.0,0 -2007-04-16,109.55468400576112,110.3284698480113,109.54717563968791,110.20826721191406,83064600,0.0,0 -2007-04-17,110.41112022379365,110.73415194881717,110.17071492439004,110.50126647949219,108424100,0.0,0 -2007-04-18,110.13317698657265,110.95954452642349,110.1106404195049,110.63651275634766,88345300,0.0,0 -2007-04-19,110.09557084913956,110.73412578136745,109.95283166924365,110.60641479492188,102947700,0.0,0 -2007-04-20,111.35015493616525,111.65065002441406,110.46367493847141,111.65065002441406,124114100,0.0,0 -2007-04-23,111.46284300445558,111.73329318194214,111.16234790198311,111.2299575805664,77270800,0.0,0 -2007-04-24,111.35769282228935,111.48540384180905,110.67406459581991,111.27505493164062,114471000,0.0,0 -2007-04-25,111.73330830950837,112.43197613892184,111.19992771093237,112.29674530029297,108418800,0.0,0 -2007-04-26,112.30429304368595,112.53717855699026,112.01130619418088,112.42448425292969,88741600,0.0,0 -2007-04-27,112.00374568270746,112.49206456329607,111.81593337397807,112.33429718017578,108191100,0.0,0 -2007-04-30,112.41696229424215,112.49209182119996,111.34268113031519,111.40277099609375,100874100,0.0,0 -2007-05-01,111.50045056251926,112.28926483827306,110.93701343171766,111.68826293945312,134342700,0.0,0 -2007-05-02,111.86105863422678,112.64987299120018,111.74837578172728,112.34185791015625,87129800,0.0,0 -2007-05-03,112.66491513089589,112.98794699013091,112.48461108143147,112.95039367675781,86569700,0.0,0 -2007-05-04,113.25086714095765,113.52882580005819,112.85270580537544,113.37857818603516,96409000,0.0,0 -2007-05-07,113.34850340725858,113.58889723377537,113.29591045145965,113.40108489990234,63461400,0.0,0 -2007-05-08,113.12313584058282,113.37855788500312,112.78507590377286,113.25084686279297,80584000,0.0,0 -2007-05-09,113.16819267921821,114.805922093592,112.9653521610698,113.55884552001953,102070100,0.0,0 -2007-05-10,113.23584250037517,113.4537112912421,112.13902456668426,112.37191009521484,153617800,0.0,0 -2007-05-11,112.49958599939859,113.38605469727982,112.477049436785,113.3334732055664,113408900,0.0,0 -2007-05-14,113.33348496669412,113.66403653686957,112.52964260620776,113.0855712890625,108027500,0.0,0 -2007-05-15,113.21325518961757,113.93445948478501,112.8301222140572,113.1156005859375,180673300,0.0,0 -2007-05-16,113.288410122604,113.91194849088085,112.97288675488969,113.88941192626953,114166500,0.0,0 -2007-05-17,113.72412567417653,114.15985165514198,113.52128514819239,113.66402435302734,101132800,0.0,0 -2007-05-18,114.19745320523985,114.65571594238283,114.04720557045653,114.65571594238281,99182000,0.0,0 -2007-05-21,114.625614556556,115.1139219949386,114.56551323960592,114.5955581665039,174664600,0.0,0 -2007-05-22,114.71578868718372,115.06136847786676,114.47539482409904,114.50543975830078,82148800,0.0,0 -2007-05-23,114.90364869340334,115.31683835473342,114.46041408541365,114.52051544189453,133786600,0.0,0 -2007-05-24,114.58808708876725,115.09894271750389,113.24335550677543,113.48374938964844,187593000,0.0,0 -2007-05-25,113.81427678028591,114.20492965284565,113.57387148543211,113.95701599121094,83309200,0.0,0 -2007-05-29,114.14480117812886,114.56549888089856,113.77668495662905,114.37017822265625,82020000,0.0,0 -2007-05-30,113.78422717907422,115.34681567885688,113.6940694656274,115.30174255371094,129013600,0.0,0 -2007-05-31,115.4445253322766,115.60980116229692,115.03133575722579,115.18159484863281,114866700,0.0,0 -2007-06-01,115.60228534042265,115.9929268560514,115.32431520976705,115.75253295898438,107771700,0.0,0 -2007-06-04,115.34683067460901,115.98539726560713,115.30175754360329,115.76753997802734,78008800,0.0,0 -2007-06-05,115.4970774714148,115.61726865362232,114.83597438507506,115.30926513671875,126917900,0.0,0 -2007-06-06,114.83597971927486,114.9035894117487,114.00209245596365,114.0697021484375,164096800,0.0,0 -2007-06-07,113.85932761019927,114.56550369659756,111.98120459877964,112.01126098632812,232414600,0.0,0 -2007-06-08,112.37193185393083,113.58144433324979,112.00381537303872,113.46875,175886000,0.0,0 -2007-06-11,113.386054309818,114.15233182552652,113.2132701759859,113.66402435302734,102015600,0.0,0 -2007-06-12,113.19076196054206,113.84434536409387,112.34936618004707,112.42448425292969,233898000,0.0,0 -2007-06-13,113.0630708923403,114.24253833021164,112.47709708981816,114.10730743408203,193208200,0.0,0 -2007-06-14,114.23497387671006,115.03129635046699,114.2124373133513,114.83597564697266,146396500,0.0,0 -2007-06-15,115.54221854034229,115.93455527489928,115.38377109535541,115.48941040039062,154030800,0.656,0 -2007-06-18,115.72329493367576,115.73083566405437,115.18006301971347,115.35359191894531,88537500,0.0,0 -2007-06-19,115.0970574469009,115.7232833827832,114.95370299605787,115.64028930664062,110851700,0.0,0 -2007-06-20,115.8741383619005,115.8741383619005,113.89738570467335,114.03318786621094,177119700,0.0,0 -2007-06-21,113.98789745668084,114.76501814646141,113.36167186454114,114.66693115234375,205262000,0.0,0 -2007-06-22,114.31991202957664,114.50853384320861,113.05991969602258,113.58805847167969,204964700,0.0,0 -2007-06-25,113.35422642137844,114.1162547881668,112.43375058571806,113.04488372802734,232014400,0.0,0 -2007-06-26,113.33153736484242,113.52015918146468,111.87537095398635,111.8829116821289,198445700,0.0,0 -2007-06-27,111.7622362275699,113.60318755588472,111.70941657693136,113.47491455078125,213638000,0.0,0 -2007-06-28,113.4598388671875,114.23696010497102,112.9241476533671,113.4598388671875,157705000,0.0,0 -2007-06-29,113.85209213710363,114.41795742906251,112.53173978919956,113.49748229980469,199701800,0.0,0 -2007-07-02,113.82947093119115,114.62168472933499,113.75402912485752,114.52359771728516,103357000,0.0,0 -2007-07-03,114.81786265261344,115.05930409543345,114.67451974757091,114.93858337402344,54048400,0.0,0 -2007-07-05,114.98384393890325,115.10456465314509,114.40289708766613,114.81785583496094,89279000,0.0,0 -2007-07-06,114.96879274277619,115.56483271830602,114.62926420554007,115.42147827148438,81109000,0.0,0 -2007-07-09,115.55723026806145,115.7081253637022,115.14980084601778,115.511962890625,72348100,0.0,0 -2007-07-10,114.90086959765314,115.14231106755503,113.75405715330798,113.86722564697266,180362600,0.0,0 -2007-07-11,113.73896919047905,114.7198050581501,113.56544032169957,114.6745376586914,175607600,0.0,0 -2007-07-12,114.96123053004152,116.75691405543115,114.93859683119736,116.48529815673828,133882500,0.0,0 -2007-07-13,116.62108856645482,117.29258169400944,116.48527488795666,116.83234405517578,111794300,0.0,0 -2007-07-16,116.93800437543008,117.34542249929927,116.6286617834279,116.8172836303711,98378700,0.0,0 -2007-07-17,116.89272969892559,117.30770007975593,116.70410784514492,116.75692749023438,126201300,0.0,0 -2007-07-18,116.36460367028927,116.79466707046632,115.66293582271484,116.54568481445312,237887400,0.0,0 -2007-07-19,117.09642757200467,117.34540976445672,116.75691058686557,116.99835205078125,145212700,0.0,0 -2007-07-20,116.8625030574686,116.9379563702965,115.30826151871095,115.81376647949219,245502500,0.0,0 -2007-07-23,116.32680894287532,116.73423840076057,115.66286816113751,116.16837310791016,121183900,0.0,0 -2007-07-24,115.52709156198483,116.40229959201504,113.74650107548592,114.1539306640625,256732400,0.0,0 -2007-07-25,114.69718288179408,114.97633954821126,113.36173690077601,114.3878402709961,265214500,0.0,0 -2007-07-26,113.31647377700355,113.77671158939606,110.44941911845503,111.67923736572266,467592500,0.0,0 -2007-07-27,111.82253422268376,112.32048694162089,109.43835230754341,109.4836196899414,422987600,0.0,0 -2007-07-30,110.10228889653158,111.52072822445093,109.61941764847201,111.19630432128906,283017500,0.0,0 -2007-07-31,111.91310580264006,112.7656801601307,109.43083606735887,109.94389343261719,316976700,0.0,0 -2007-08-01,109.53642154648095,110.91713419360782,108.60840572261347,110.47953033447266,467670000,0.0,0 -2007-08-02,110.72853433646782,111.48302151608753,109.59680356703825,111.36231231689453,294758400,0.0,0 -2007-08-03,111.12087439017944,111.34722285370032,108.04256521895435,108.4952621459961,359398200,0.0,0 -2007-08-06,108.80461643344478,110.78136943608972,107.53707180813488,110.31359100341797,324980000,0.0,0 -2007-08-07,110.10984212399289,112.41857065928147,109.57415125196978,111.49055480957031,232568700,0.0,0 -2007-08-08,111.97351266788787,113.61829018607492,111.16620537244489,113.04488372802734,274930600,0.0,0 -2007-08-09,111.23408037867416,112.38090453806126,109.6194776794666,109.69493103027344,357622100,0.0,0 -2007-08-10,108.94039757866263,110.53236590302429,107.98219568827317,109.18183898925781,411018400,0.0,0 -2007-08-13,110.53237494238424,110.82662449026084,109.4157371084629,109.57417297363281,181917200,0.0,0 -2007-08-14,109.92877266347023,110.20038849108144,107.68040423703076,107.89920043945312,264134500,0.0,0 -2007-08-15,107.68045543041362,108.99326780676432,106.09602709732019,106.41291046142578,323834000,0.0,0 -2007-08-16,105.46976370154785,107.84640535846793,103.36474941762111,107.21263885498047,546743700,0.0,0 -2007-08-17,109.7778787637545,110.01176793491851,106.67693616085326,109.18183898925781,388218100,0.0,0 -2007-08-20,109.52892093064212,109.75526942516157,108.11048111004536,109.12904357910156,187320400,0.0,0 -2007-08-21,109.09889912449606,110.13254333460829,108.75182980254277,109.34786987304688,157066400,0.0,0 -2007-08-22,110.16265181196299,110.75870303815921,109.64960613567355,110.64552307128906,173156700,0.0,0 -2007-08-23,111.16615896743902,111.40004819463245,109.8608991273372,110.5474853515625,203915300,0.0,0 -2007-08-24,110.5172875694141,111.91309356689453,110.36639242409336,111.91309356689453,128901900,0.0,0 -2007-08-27,111.55093256682066,111.91308318450534,110.70589910880898,110.87188720703125,113024300,0.0,0 -2007-08-28,110.27582565998829,110.3437267288074,108.23871300750658,108.43487548828125,219790700,0.0,0 -2007-08-29,108.92530998490524,110.71345242171242,108.61597899209312,110.56254577636719,207654200,0.0,0 -2007-08-30,109.74017935016833,111.05299144295958,109.6345515849481,110.26831817626953,191817300,0.0,0 -2007-08-31,111.40003423722214,112.04135298390543,110.78136069885979,111.35476684570312,185477500,0.0,0 -2007-09-04,111.24914025549653,113.15799203487657,111.21141359131653,112.47895812988281,120062000,0.0,0 -2007-09-05,111.81500353349215,111.9357242515255,110.9096211733647,111.50566101074219,166261800,0.0,0 -2007-09-06,111.62643905194533,112.12440363513005,111.00021295719495,111.76225280761719,127878400,0.0,0 -2007-09-07,110.51730837165698,110.82665096095589,109.59683284561287,110.20797729492188,235447600,0.0,0 -2007-09-10,110.54751115094057,110.69840634764589,108.89518169248825,109.9967269897461,192305900,0.0,0 -2007-09-11,110.33618808177266,111.43773270522942,110.25319404746632,111.279296875,162081900,0.0,0 -2007-09-12,111.12845119632291,111.99611866942044,110.89456192935663,111.56605529785156,149554600,0.0,0 -2007-09-13,112.07907689402121,112.75811077524622,111.81500176656641,112.35069274902344,154079000,0.0,0 -2007-09-14,111.63393893112483,112.48650169779856,111.46795081459116,112.34314727783203,121911000,0.0,0 -2007-09-17,111.89799885900838,112.15452175332183,111.38495307038146,111.73956298828125,109870800,0.0,0 -2007-09-18,112.2903515740039,115.05931871501505,111.76221274143121,115.02914428710938,263759500,0.0,0 -2007-09-19,115.74589469574609,116.48528899581959,115.21775590997932,115.70816802978516,193779900,0.0,0 -2007-09-20,115.693080506406,115.76098160079444,114.76506434540947,114.89332580566406,175186800,0.0,0 -2007-09-21,115.76438085829751,116.07517944111984,115.0290551703294,115.20340728759766,141457500,0.719,0 -2007-09-24,115.54454307034928,115.84777673801273,114.74099409360906,114.99115753173828,139450200,0.0,0 -2007-09-25,114.32404517593407,114.96840654289441,114.06630525602222,114.76372528076172,142289900,0.0,0 -2007-09-26,115.41564511119195,115.8098429999713,114.7637073427864,115.37016296386719,135547000,0.0,0 -2007-09-27,115.91599036486386,116.06002489916428,115.37018137550476,116.05243682861328,102713300,0.0,0 -2007-09-28,115.8704679348237,116.12820776599409,115.2109422210708,115.66578674316406,133372100,0.0,0 -2007-10-01,115.6809623111744,117.31080079715552,115.60515102789155,116.96967315673828,148162300,0.0,0 -2007-10-02,117.20466076622695,117.23497833634285,116.5982052593188,116.81046295166016,112978800,0.0,0 -2007-10-03,116.59822630297761,117.05307090704329,115.99177068661628,116.57548522949219,119055900,0.0,0 -2007-10-04,116.82566952173356,116.93937490951865,116.43147156544381,116.7574462890625,76864400,0.0,0 -2007-10-05,117.52304849723957,118.33418520398483,117.21982652429706,118.14466857910156,134579700,0.0,0 -2007-10-08,117.79596096403621,117.87177224605026,117.32596340364638,117.5154800415039,71280400,0.0,0 -2007-10-09,117.95517028975848,118.6374256185207,117.52306676561143,118.62226104736328,94054300,0.0,0 -2007-10-10,118.28869002710235,118.59192356345208,117.81111600401361,118.4251480102539,101711100,0.0,0 -2007-10-11,118.96338389813776,119.41065197534446,117.1516052186187,117.85661315917969,233529100,0.0,0 -2007-10-12,117.84903831307496,118.52371712202638,117.70500380883057,118.50855255126953,124546700,0.0,0 -2007-10-15,118.46303695166793,118.5312601500398,116.69674089059892,117.50786590576172,161151900,0.0,0 -2007-10-16,117.05307090704329,117.1364586988827,116.34048642535714,116.57548522949219,166525700,0.0,0 -2007-10-17,117.48517868750255,117.56856649056849,115.58243535759117,116.93179321289062,216687300,0.0,0 -2007-10-18,116.32534587913844,116.88631946438919,116.04486487010364,116.50728607177734,148367500,0.0,0 -2007-10-19,116.05240992320266,118.62225516598757,113.45224710678468,113.45982360839844,297169900,0.0,0 -2007-10-22,112.84580021879383,114.28612220442128,112.69418920459815,114.11934661865234,261989800,0.0,0 -2007-10-23,114.81680917146731,115.18825452167385,113.89954320154864,115.04421997070312,180085100,0.0,0 -2007-10-24,114.6272167074508,115.02899094349132,112.83059161054139,114.8318862915039,326694200,0.0,0 -2007-10-25,114.9608238578626,115.4459861398521,113.6190539704864,115.1048583984375,237374500,0.0,0 -2007-10-26,116.02964724278323,116.45416259765626,115.15028739787428,116.45416259765625,176484000,0.0,0 -2007-10-29,116.68920534325915,117.07582677572704,116.40114785364844,116.84082794189453,106841000,0.0,0 -2007-10-30,116.32530092584234,116.55272318695955,115.88562097226286,116.02965545654297,132981600,0.0,0 -2007-10-31,116.7270745633565,117.70498681032724,115.86287922987219,117.23497772216797,220954400,0.0,0 -2007-11-01,116.20401757756865,116.29499343020268,114.1572401845573,114.49079132080078,333040800,0.0,0 -2007-11-02,114.86983041807635,115.22612264373058,113.11112192949949,114.61966705322266,331228200,0.0,0 -2007-11-05,113.43711464288313,114.58937940909611,112.9292112787347,113.7479248046875,226841000,0.0,0 -2007-11-06,114.36192441457985,115.30950763703686,113.63417541017452,115.27919006347656,177800500,0.0,0 -2007-11-07,114.04351752682979,114.5665852232074,111.8527059694166,112.1256103515625,306639700,0.0,0 -2007-11-08,112.18627979311151,112.49707830665673,109.97272671913854,111.55708312988281,374509900,0.0,0 -2007-11-09,110.4427339609118,111.84515034687095,109.83627831719842,110.02579498291016,277745100,0.0,0 -2007-11-12,110.07888473922989,111.14017362870979,108.93419647216797,108.93419647216797,243087800,0.0,0 -2007-11-13,110.20012831721898,112.4288457773436,110.08642296401969,112.2544937133789,191117400,0.0,0 -2007-11-14,113.11871604790196,113.25516250424722,111.26903141402107,111.94371032714844,230558800,0.0,0 -2007-11-15,111.1098138979034,111.80723369888497,109.55577523931825,110.32899475097656,263111100,0.0,0 -2007-11-16,110.91273735268148,111.03403080116162,109.59370869379453,110.51853942871094,308770600,0.0,0 -2007-11-19,110.13192460842059,110.19257132992584,108.54756804832647,108.97966003417969,267746000,0.0,0 -2007-11-20,109.17676141495862,110.32143788433885,107.72885134737305,109.64675903320312,414767500,0.0,0 -2007-11-21,108.46416265218872,109.09335927263207,107.39528604756164,107.40286254882812,259012400,0.0,0 -2007-11-23,108.45659074430735,109.4193269689127,108.17609824508285,109.26013946533203,77688400,0.0,0 -2007-11-26,109.48758716289593,109.8287264915692,106.62968353020555,106.84951782226562,214232000,0.0,0 -2007-11-27,107.44835617544996,108.57786792369656,106.84947712770992,108.07755279541016,293897900,0.0,0 -2007-11-28,109.305622303084,111.7920797665277,109.26771666055055,111.53433990478516,258596900,0.0,0 -2007-11-29,111.14773486871717,111.98161285820834,110.75354851657568,111.57225036621094,199409900,0.0,0 -2007-11-30,112.98223314256556,113.61142976501135,111.68594582404347,112.69417572021484,222908000,0.0,0 -2007-12-03,112.33784649554077,112.53493956874028,111.6555798873756,111.95122528076172,146430400,0.0,0 -2007-12-04,111.17799897059872,111.84508940473795,110.91267115630237,110.95057678222656,136533900,0.0,0 -2007-12-05,112.14079710303547,113.10354501413806,112.06499737623349,112.80789947509766,171130000,0.0,0 -2007-12-06,112.67139979575524,114.6272122712358,112.62591766772587,114.42253112792969,154457400,0.0,0 -2007-12-07,114.78642051648565,114.84706722057084,114.1269064062203,114.39981079101562,148980100,0.0,0 -2007-12-10,114.68029530061409,115.41562070602,114.36190876948623,115.28675079345703,123914300,0.0,0 -2007-12-11,115.33222816639471,115.90077799860066,112.06496364806608,112.1256103515625,250346400,0.0,0 -2007-12-12,114.51358734099759,115.05181994496402,111.58744856055478,113.23245239257812,322435600,0.0,0 -2007-12-13,112.43642893952823,113.24755408037024,111.66319786998092,112.99739074707031,237551300,0.0,0 -2007-12-14,112.1407702276388,113.02771819937551,111.51158522053575,111.56464385986328,159152900,0.0,0 -2007-12-17,111.14013465419535,111.33722778821624,109.81351822397136,109.97271728515625,177269400,0.0,0 -2007-12-18,110.75355997795003,111.04161748552782,109.13129754911567,110.58678436279297,245569300,0.0,0 -2007-12-19,110.63226651834835,111.35242763806427,109.87419974660928,110.58678436279297,198917200,0.0,0 -2007-12-20,111.31449726207613,111.32966183295339,110.05610392436648,111.2841796875,214813800,0.0,0 -2007-12-21,112.30920136529878,113.10939820374118,112.09581709219023,112.88839721679688,146084400,0.775,0 -2007-12-24,113.41422890748734,113.91719942332251,113.15510949370436,113.72667694091797,45601400,0.0,0 -2007-12-26,113.28466262790316,114.06961431986929,113.17035379065351,113.97055053710938,67093100,0.0,0 -2007-12-27,113.56665266787964,113.57426938143406,112.27110202083705,112.53782653808594,122981700,0.0,0 -2007-12-28,113.20082814589023,113.25418002037547,111.95100118037165,112.25584411621094,116398100,0.0,0 -2007-12-31,112.10342277760724,112.49208441895247,111.31084281318726,111.42516326904297,108126800,0.0,0 -2008-01-02,111.66904035383217,112.01960685026161,109.64950662129158,110.44969177246094,204935600,0.0,0 -2008-01-03,110.43443860382182,110.876452094837,109.79428594589683,110.39633178710938,125133300,0.0,0 -2008-01-04,109.23794400087846,109.31415762871917,107.38607145573198,107.69090270996094,232330900,0.0,0 -2008-01-07,108.07197171337678,108.39204809032738,106.76880443783288,107.59947967529297,234991000,0.0,0 -2008-01-08,108.27773148172592,108.90263913610023,105.50372478531094,105.86190795898438,326365700,0.0,0 -2008-01-09,105.99909694327462,107.29464763753332,104.93979229208671,106.97457122802734,301824900,0.0,0 -2008-01-10,106.4487092618636,108.8264376039407,106.21246325873537,107.67567443847656,335701200,0.0,0 -2008-01-11,107.28702806958044,108.14056513889004,105.93050881504038,106.8069076538086,267076600,0.0,0 -2008-01-14,107.5766132357397,108.1100738408237,106.99741746858932,107.66806030273438,170365500,0.0,0 -2008-01-15,106.53254027079059,107.82810238256272,105.09219084837264,105.29795837402344,239940100,0.0,0 -2008-01-16,104.68070363044501,106.02197811022555,103.85764487174802,104.39110565185547,378802600,0.0,0 -2008-01-17,105.02358765854012,105.07693952329653,101.30458591945184,101.68563079833984,397892600,0.0,0 -2008-01-18,102.68399320078827,102.89737743395878,99.90998654100305,100.64158630371094,348561500,0.0,0 -2008-01-22,96.9454843886638,100.92358996886344,96.02335603241605,99.62042236328125,435923700,0.0,0 -2008-01-23,96.85399971511406,102.26484249536671,96.66347724578922,102.01335144042969,511913000,0.0,0 -2008-01-24,102.48586886022855,103.23272549777556,101.59422487808436,102.87454223632812,259949300,0.0,0 -2008-01-25,104.03289608025047,104.22341856993351,101.05313317932061,101.38844299316406,269603900,0.0,0 -2008-01-28,101.5561017560111,103.27843247181806,100.6415961488813,103.06504821777344,217934600,0.0,0 -2008-01-29,103.72043675436495,103.98716123377062,102.79068617554468,103.57563781738281,168968300,0.0,0 -2008-01-30,103.32417470409635,105.579954834622,102.57732967980073,102.8135757446289,334939200,0.0,0 -2008-01-31,101.6627879947622,105.57992961508732,101.51037234049672,104.68828582763672,343680800,0.0,0 -2008-02-01,105.12270088866806,106.39538984684923,104.8026244706139,106.37252807617188,206843600,0.0,0 -2008-02-04,106.09054693475132,106.15913223931614,104.89406013290605,105.03124237060547,124694300,0.0,0 -2008-02-05,103.59849699113694,103.83474298616756,101.86854976024898,102.2191162109375,286882500,0.0,0 -2008-02-06,102.562069106375,103.07266798859806,100.90833527418597,101.39607238769531,250792900,0.0,0 -2008-02-07,100.44344505643208,102.7220862770076,100.39009318495336,102.06668853759766,297368100,0.0,0 -2008-02-08,101.42653408342096,102.28769932434587,100.6720725835937,101.41130065917969,221643500,0.0,0 -2008-02-11,101.43415070684435,102.29530421972413,100.62632580121682,101.92950439453125,188576300,0.0,0 -2008-02-12,102.81357363559542,103.88049507698892,102.10482382707778,102.87454223632812,256654400,0.0,0 -2008-02-13,103.65185563380929,104.45205245118649,102.98884106185955,103.92620849609375,181967800,0.0,0 -2008-02-14,104.36822275548191,104.40632958104311,102.72210557123044,103.01170349121094,215207200,0.0,0 -2008-02-15,102.50107829980912,103.04978388716412,102.05144810778884,102.98881530761719,154110300,0.0,0 -2008-02-19,104.19290189599587,104.3224557460637,102.58489220734792,103.27839660644531,145190000,0.0,0 -2008-02-20,102.11243915316146,104.06338761362319,101.9371500876857,103.58326721191406,220085700,0.0,0 -2008-02-21,104.1471999484808,104.413924414375,102.17339006087784,102.72208404541016,201051200,0.0,0 -2008-02-22,102.85927572823765,103.52991856786683,101.2512655585407,103.35462951660156,205491000,0.0,0 -2008-02-25,103.29366650602644,104.90167676254949,102.71448233143526,104.6578140258789,190107000,0.0,0 -2008-02-26,104.21579901695726,105.89239455477025,104.02527653246557,105.44276428222656,212420700,0.0,0 -2008-02-27,104.83306988753093,106.03717315386625,104.71876107020086,105.33605194091797,168395800,0.0,0 -2008-02-28,104.58923982427176,105.13794557574185,104.06339584339865,104.30725860595703,170831100,0.0,0 -2008-02-29,103.33941424054268,103.40037121069744,101.19031474259472,101.98289489746094,252715200,0.0,0 -2008-03-03,101.46463798385109,101.97523676688793,100.77876179853422,101.7389907836914,189483500,0.0,0 -2008-03-04,100.77113084866109,101.66277451791159,99.82614694034473,101.35032653808594,282513100,0.0,0 -2008-03-05,101.67802651528298,102.70685246546205,100.85496808085338,101.99048614501953,270681400,0.0,0 -2008-03-06,101.34272805099357,101.52563384288655,99.4908548759322,99.8795166015625,247911700,0.0,0 -2008-03-07,98.89639338678253,100.39771117425865,97.98950469369555,98.85066986083984,326434600,0.0,0 -2008-03-10,98.94973540170213,99.0183206918482,97.23503337664624,97.54749298095703,235683600,0.0,0 -2008-03-11,99.62041333183718,101.14459344813999,98.27151067290919,101.05314636230469,341440600,0.0,0 -2008-03-12,101.15983462856857,101.9447864280972,99.95573098740549,100.10814666748047,229161100,0.0,0 -2008-03-13,98.77448129018144,101.0836129646321,98.00477460822125,100.32913970947266,351504200,0.0,0 -2008-03-14,101.1826664073715,101.2131448829239,97.37983410385173,98.77445983886719,484687800,0.0,0 -2008-03-17,96.45772019597342,98.50773811120818,96.07667523891985,97.77613830566406,405311100,0.0,0 -2008-03-18,99.54416084905473,101.88378199676364,99.05642386721436,101.83805847167969,334416600,0.0,0 -2008-03-19,102.22672884779497,102.61539047297316,99.10215590813877,99.3155517578125,345971600,0.0,0 -2008-03-20,99.6004509511651,101.79081883910935,98.99541284672017,101.1551513671875,245320700,0.642,0 -2008-03-24,102.09716316910671,104.01182007854501,102.04355885243437,103.17703247070312,208977300,0.0,0 -2008-03-25,103.28427337967337,103.81272066180524,102.4494856054184,103.27661895751953,192947200,0.0,0 -2008-03-26,102.97792651789615,103.46041217883901,101.9440069701872,102.01293182373047,196934300,0.0,0 -2008-03-27,102.77877735035679,102.96258861492996,101.36959271370982,101.69125366210938,225153200,0.0,0 -2008-03-28,101.85210574473571,102.13547126277649,100.37398435124393,100.71862030029297,180896100,0.0,0 -2008-03-31,100.5500996681855,101.6529437264548,100.39692947923393,101.07089233398438,166692100,0.0,0 -2008-04-01,102.32690852366385,104.80064159629215,102.25031758466599,104.62449645996094,254547300,0.0,0 -2008-04-02,104.96150760396601,105.43633883897533,104.14202873204748,104.69345092773438,210910800,0.0,0 -2008-04-03,104.12667513482778,105.26014841161805,103.93520950156629,104.95379638671875,175884800,0.0,0 -2008-04-04,105.01509627076884,105.65842986058182,104.24923352273548,104.83895111083984,204446800,0.0,0 -2008-04-07,105.58951977758556,106.12563318439356,104.72410260213073,104.89259338378906,154245500,0.0,0 -2008-04-08,104.30287249595715,104.86194915303304,104.11906118893708,104.78536987304688,148937300,0.0,0 -2008-04-09,104.62450976083767,104.77002555175103,103.30722490833712,104.02713775634766,195610600,0.0,0 -2008-04-10,103.71313847538885,104.6704669707895,103.3148865491833,104.17266082763672,192967800,0.0,0 -2008-04-11,103.00088017106569,103.48336573224258,101.8673949451885,102.15077209472656,222973300,0.0,0 -2008-04-14,102.00526124912254,102.2733061991693,101.51510955797674,101.8061294555664,160522000,0.0,0 -2008-04-15,102.30393909279218,102.38818445577554,101.34661073440716,102.04354858398438,172389200,0.0,0 -2008-04-16,103.03915887162157,104.85426135299511,103.02385003218195,104.80831146240234,189268900,0.0,0 -2008-04-17,104.17264915944352,105.11465702128626,103.89693811620448,104.96148681640625,179665700,0.0,0 -2008-04-18,106.40896549738069,106.88379663221654,105.88817278415074,106.0566635131836,218530600,0.0,0 -2008-04-21,105.86517838125641,106.43957530117272,105.5741585550708,106.11026000976562,118587400,0.0,0 -2008-04-22,105.83460080445494,105.92650061704383,104.84663107456055,105.64313507080078,162166000,0.0,0 -2008-04-23,105.75798247733196,106.28642963529263,105.01509468804491,105.47461700439453,193309000,0.0,0 -2008-04-24,105.75034702845237,107.02168220377598,104.95384309537299,105.93415832519531,229381300,0.0,0 -2008-04-25,106.76125445321897,107.13653137882638,105.6201265227325,106.91443634033203,190788100,0.0,0 -2008-04-28,107.128904687155,107.41227021661076,106.7459732425325,106.93743896484375,105610200,0.0,0 -2008-04-29,106.75362809020936,107.01401866891759,106.15625596910682,106.5162124633789,125514100,0.0,0 -2008-04-30,106.67702900728318,107.67265302872343,105.88819122314455,105.88819122314453,208395900,0.0,0 -2008-05-01,105.9801106613809,108.07856750488281,105.89586527587343,108.07856750488281,187279500,0.0,0 -2008-05-02,109.01289523424202,109.03587018062943,107.64966054661464,108.37722778320312,181585500,0.0,0 -2008-05-05,108.02498188906452,108.45386331278779,107.53483002107473,107.85649108886719,118504500,0.0,0 -2008-05-06,107.23613921294246,108.90571492305584,106.98340302371449,108.79084014892578,179339800,0.0,0 -2008-05-07,108.66825548976516,108.78313021761902,106.55447869429442,106.85316467285156,199267300,0.0,0 -2008-05-08,107.02165537110055,107.46585712891985,106.4395922537539,106.57745361328125,178321200,0.0,0 -2008-05-09,106.1485921763095,106.75361866591228,106.03370574092263,106.37834167480469,152588200,0.0,0 -2008-05-12,106.64636025319203,107.64963832546917,106.24810845445546,107.57305908203125,147865900,0.0,0 -2008-05-13,107.83346055700402,107.90238538897746,107.01398193419863,107.58837890625,159132200,0.0,0 -2008-05-14,108.04021638375909,108.90563296526042,107.57303984363783,107.81045532226562,181910800,0.0,0 -2008-05-15,108.01729969322763,109.23503060169288,107.85647502635337,109.15843963623047,166927000,0.0,0 -2008-05-16,109.41117347639616,109.41882789832368,108.45384485914019,109.25800323486328,204236800,0.0,0 -2008-05-19,109.37286748810592,110.51400729726753,108.98228165679573,109.55667877197266,165664400,0.0,0 -2008-05-20,108.95933613321111,109.0129404683119,107.98668681671376,108.66830444335938,178552100,0.0,0 -2008-05-21,108.60698020242702,108.84439575343626,106.4549080321348,106.83018493652344,252724800,0.0,0 -2008-05-22,106.7842419653087,107.35098463036383,106.4549265787641,106.84551239013672,170820400,0.0,0 -2008-05-23,106.49322229482374,106.96039905981789,105.32145317192898,105.4133529663086,181376400,0.0,0 -2008-05-27,105.53589185329761,106.45492483841596,105.329105633651,106.19453430175781,168322900,0.0,0 -2008-05-28,106.58514172192476,107.22080935112905,105.68908350325579,106.68470764160156,181288100,0.0,0 -2008-05-29,106.55449018267515,107.93303381010024,106.51619470721592,107.22078704833984,173927200,0.0,0 -2008-05-30,107.5807227114596,107.78750889010348,107.1748164594666,107.48882293701172,117362000,0.0,0 -2008-06-02,107.09060017855761,107.11357512840712,105.68906980704057,106.37834167480469,181069900,0.0,0 -2008-06-03,106.68468707731117,106.92975708893854,105.09934552100147,105.75798797607422,271965700,0.0,0 -2008-06-04,105.45927931677151,106.57744387199627,105.27547976905066,105.70436096191406,246637700,0.0,0 -2008-06-05,106.1332727456196,107.90241401916954,105.93415261615084,107.81816864013672,237867100,0.0,0 -2008-06-06,106.87618405655108,107.06764980667526,104.32585886255983,104.37946319580078,384276300,0.0,0 -2008-06-09,104.8159676236324,105.30611927499417,103.70546906668717,104.63215637207031,228263900,0.0,0 -2008-06-10,103.90458009277354,104.99976971447484,103.6595101315424,104.11136627197266,260234900,0.0,0 -2008-06-11,104.13438218952507,104.35647729447055,102.57201528815266,102.57968139648438,283890100,0.0,0 -2008-06-12,103.08516233821062,104.05779991403233,102.25802891301437,102.97027587890625,252791800,0.0,0 -2008-06-13,103.52166694150812,104.55558633272148,102.94726987664251,104.27220916748047,244726900,0.0,0 -2008-06-16,103.81271494857333,104.86959776853189,103.74379009455996,104.33349609375,185832500,0.0,0 -2008-06-17,104.97681230862626,105.0150960970541,103.67483629021278,103.82801818847656,191707700,0.0,0 -2008-06-18,103.15409739980443,103.78976514180984,102.40355487327999,102.8171157836914,265893000,0.0,0 -2008-06-19,102.74050226027877,103.5753016938055,102.24269605506603,102.9472885131836,304204900,0.0,0 -2008-06-20,102.24607754773191,102.43850091487742,100.99917788689797,101.2762680053711,289275700,0.669,0 -2008-06-23,101.66883486724556,101.77659151212632,101.07617919269815,101.17623138427734,165096400,0.0,0 -2008-06-24,100.86830237515706,101.93817551877666,100.20636571290837,100.97605895996094,267300600,0.0,0 -2008-06-25,101.38403087832837,102.67711034794806,101.0145812790929,101.45330047607422,287853900,0.0,0 -2008-06-26,100.49889926687455,101.15313178192547,98.5823579695299,98.69780731201172,297775000,0.0,0 -2008-06-27,98.73628964434906,99.1827133216972,97.78187126735666,98.15901947021484,303423400,0.0,0 -2008-06-30,98.43609562910879,99.22118624280216,97.98197930871943,98.50537109375,258842600,0.0,0 -2008-07-01,97.38161153880633,98.88251727162924,96.9274952274704,98.81324768066406,388622000,0.0,0 -2008-07-02,99.12881330593923,99.41360786602553,96.94288674763244,97.11991882324219,288064600,0.0,0 -2008-07-03,97.8357508003042,97.8357508003042,96.20399830707301,97.2199935913086,239352500,0.0,0 -2008-07-07,97.58944985529664,98.01277780153684,95.38042716344626,96.22708892822266,372427300,0.0,0 -2008-07-08,96.20399577600965,98.05126148210019,95.59593716300549,97.93580627441406,375973700,0.0,0 -2008-07-09,98.13591742719628,98.32064221575776,95.74217026565908,96.050048828125,336729400,0.0,0 -2008-07-10,95.77296098668124,96.81974460058152,95.11872269606741,96.44259643554688,436475700,0.0,0 -2008-07-11,95.41891921472784,96.9044281393919,94.2797700708849,95.31885528564453,481124600,0.0,0 -2008-07-14,96.41179372633353,96.59651849195619,94.21047020565759,94.45677185058594,322720800,0.0,0 -2008-07-15,93.74866934251982,95.04944734623247,92.37860999888363,93.12521362304688,502502500,0.0,0 -2008-07-16,93.47927670529779,95.88072262870382,93.20988514473035,95.41120910644531,371642900,0.0,0 -2008-07-17,96.31943611769785,97.18149488010165,95.51125566092584,96.36561584472656,375490600,0.0,0 -2008-07-18,97.11221828777356,97.30464164454838,96.32713357594194,96.96598052978516,267030100,0.0,0 -2008-07-21,97.37393290197737,97.5971447367196,96.35793764828956,97.0198745727539,222863000,0.0,0 -2008-07-22,96.32711945502744,98.36680791229492,96.09620911182962,98.1205062866211,296904200,0.0,0 -2008-07-23,98.43612093277247,99.40593070868502,98.17442790913476,98.6516342163086,311698400,0.0,0 -2008-07-24,98.78246873063524,98.8363529172714,96.33484884577891,96.60424041748047,248634500,0.0,0 -2008-07-25,96.8966945693773,97.35850940114213,96.34251442234184,96.58112335205078,219131000,0.0,0 -2008-07-28,96.60423840489221,97.02756633094795,94.99557584345239,95.16490936279297,205201300,0.0,0 -2008-07-29,95.4266227740838,97.2738828645725,95.16492387547672,97.19691467285156,261505600,0.0,0 -2008-07-30,97.83577014231992,98.9826180239973,97.19692293933943,98.9287338256836,354710000,0.0,0 -2008-07-31,98.05893371372078,98.95947939386168,97.46626654725146,97.62020874023438,277402100,0.0,0 -2008-08-01,97.84342766852991,97.96657555962456,96.56573379869195,97.10452270507812,248690900,0.0,0 -2008-08-04,97.0121599368991,97.08912810489667,96.02695329302254,96.2039794921875,188239600,0.0,0 -2008-08-05,96.99677332893863,98.95179554463124,96.1885986686277,98.79785919189453,251577600,0.0,0 -2008-08-06,98.53614499107834,99.52135152986872,98.120509881471,99.23655700683594,209555400,0.0,0 -2008-08-07,98.49000334459197,98.85945889764021,97.39703971994852,97.75879669189453,246312500,0.0,0 -2008-08-08,97.42783878582561,100.00630586777139,97.27389650849474,99.57527923583984,260811700,0.0,0 -2008-08-11,99.65221194102396,101.22238141187638,99.46748128491603,100.60663604736328,249425800,0.0,0 -2008-08-12,100.27566955648314,100.59893942137494,99.0826422669073,99.55986022949219,213200800,0.0,0 -2008-08-13,99.12883258851038,99.79076954769754,98.26677952337072,98.95951080322266,256393200,0.0,0 -2008-08-14,98.39762373625686,100.27567793699747,98.32835413326033,99.70610046386719,239555300,0.0,0 -2008-08-15,100.00627122328778,100.44500215747114,99.52137230264243,100.19100189208984,181000800,0.0,0 -2008-08-18,100.39112302690717,100.42961005291825,98.25908037207115,98.82095336914062,172275100,0.0,0 -2008-08-19,98.07434613141443,98.28216666865211,97.38931937382968,97.74337768554688,194673700,0.0,0 -2008-08-20,98.05125086811125,98.48227733303223,97.24307037408926,98.19749450683594,225498200,0.0,0 -2008-08-21,97.55865598368383,98.8594399426009,97.44320077847478,98.36683654785156,180609800,0.0,0 -2008-08-22,99.03645989428763,99.79075622558594,98.36683031662622,99.79075622558594,167715300,0.0,0 -2008-08-25,99.13652357436638,99.79075599222097,97.55864957550907,97.76646423339844,171936900,0.0,0 -2008-08-26,97.76646556408159,98.42070973543156,97.42780441801183,98.05125427246094,159117200,0.0,0 -2008-08-27,98.17439076960525,99.15959733437748,97.98196742891398,99.00566101074219,171032800,0.0,0 -2008-08-28,99.50599683918233,100.32187025124072,99.37515032447422,100.2064208984375,167537100,0.0,0 -2008-08-29,99.85235147784508,100.16792868531013,98.9133243083006,99.12883758544922,189195800,0.0,0 -2008-09-02,100.0832600952322,100.60665786206552,98.15132747200481,98.5130844116211,252364900,0.0,0 -2008-09-03,98.42838287353516,98.90559486160149,97.69717654448769,98.42838287353516,251947000,0.0,0 -2008-09-04,97.72800437565536,97.92812637032277,95.41122482842245,95.46510314941406,340042500,0.0,0 -2008-09-05,94.8955224143565,96.1732107066793,93.90261698905897,95.76527404785156,289503400,0.0,0 -2008-09-08,98.55155235176152,98.7055004502137,95.76526558972321,97.74337768554688,364075300,0.0,0 -2008-09-09,97.82804540707437,98.02816736690484,94.51836678803947,94.84163665771484,377326800,0.0,0 -2008-09-10,95.35732505930983,96.13471712073212,94.32593861165441,95.22647857666016,298916600,0.0,0 -2008-09-11,93.99497971730734,96.78126664790041,93.59473577738288,96.60424041748047,375369400,0.0,0 -2008-09-12,95.6652293214952,97.14303979519404,95.31117092919008,97.05067443847656,297851200,0.0,0 -2008-09-15,93.61780842819776,96.71197926070765,92.27854352353403,92.43247985839844,483607000,0.0,0 -2008-09-16,90.20806942562734,94.14890197895107,90.05413308551027,93.97956848144531,581744300,0.0,0 -2008-09-17,92.08613002511748,93.78715195830338,89.2844461501883,89.75395965576172,624095600,0.0,0 -2008-09-18,90.86231320020197,93.74096502977389,87.5911160708673,92.4170913696289,776114700,0.0,0 -2008-09-19,98.08463273059765,99.09102834978941,95.4757555298486,96.08733367919922,501087800,0.691,0 -2008-09-22,96.34279836557066,96.57504532606339,93.1765331814807,93.91197204589844,249966500,0.0,0 -2008-09-23,93.55587581102505,94.46162843638743,91.56631374797848,91.77533721923828,327470400,0.0,0 -2008-09-24,92.3946524722656,92.89785034288012,91.18698230781976,92.06951141357422,311818400,0.0,0 -2008-09-25,92.43334853876367,94.37646327348958,91.69016655519624,93.50941467285156,328253000,0.0,0 -2008-09-26,91.99209226683732,94.05906789694048,91.74436491685813,93.55587005615234,285917400,0.0,0 -2008-09-29,92.2320816241134,92.3869090116352,85.90728775263977,86.22468566894531,459562300,0.0,0 -2008-09-30,87.87363234119971,90.42058261353155,85.56666630794702,89.79351806640625,328154400,0.0,0 -2008-10-01,89.23610107278394,90.33539650641677,88.21422521945048,89.8476791381836,332783000,0.0,0 -2008-10-02,88.98839129896956,89.11225792681705,85.97695330828694,86.58853149414062,365337800,0.0,0 -2008-10-03,87.37044470324508,89.37548750492415,84.90865098255482,85.41958618164062,461798000,0.0,0 -2008-10-06,82.95005253323102,83.31390344683638,77.910341739934,81.0688705444336,610637500,0.0,0 -2008-10-07,82.7100296595078,83.08936670801111,77.14390550622296,77.43807983398438,540012100,0.0,0 -2008-10-08,75.4949656266967,79.10250078257738,74.94532085308748,75.48722839355469,725414800,0.0,0 -2008-10-09,77.15164718913833,77.89482908704639,69.86690651173471,70.21527099609375,534485200,0.0,0 -2008-10-10,67.16515162438063,72.7235402514695,64.70335820110088,68.51216888427734,871026300,0.0,0 -2008-10-13,72.66934673830329,78.45997619628906,69.63467908899304,78.45997619628906,455584000,0.0,0 -2008-10-14,81.05336410309856,81.695908922388,75.17757848086639,77.29874420166016,546268300,0.0,0 -2008-10-15,75.44854232854988,75.71175599527027,69.4488890498806,69.68887329101562,484627500,0.0,0 -2008-10-16,70.67204095879544,73.3660753341554,66.9948343514157,72.59192657470703,708811200,0.0,0 -2008-10-17,71.2139315762275,76.32331140723171,70.9507238742492,72.15839385986328,476649000,0.0,0 -2008-10-20,73.81507572189888,76.71813328232714,72.83964672783497,76.4936294555664,321294200,0.0,0 -2008-10-21,75.06919777255926,76.36202463907685,73.71443759468757,74.20989227294922,356502000,0.0,0 -2008-10-22,72.15068084034242,74.20991991269536,67.76125764669052,70.16886138916016,516168000,0.0,0 -2008-10-23,69.8978877076806,71.57004584936662,66.42969888945316,70.98169708251953,634666400,0.0,0 -2008-10-24,65.07493147331137,69.61144288453737,65.02848444586132,67.38189697265625,545812600,0.0,0 -2008-10-27,66.55357581313415,69.2940633781544,64.79625466275378,64.98979187011719,397288600,0.0,0 -2008-10-28,67.61415077375686,72.95577847093517,65.43879461887893,72.58419036865234,639939500,0.0,0 -2008-10-29,72.59189767288674,75.22400358831882,71.2990711768441,72.0577392578125,531270100,0.0,0 -2008-10-30,74.14796122080422,74.7363158840236,71.91841510069489,74.55052185058594,414582100,0.0,0 -2008-10-31,73.60606277949147,76.30784019760053,73.14157472203193,74.96082305908203,411394000,0.0,0 -2008-11-03,74.92211129500677,75.62658945693467,74.27956644745878,75.17758178710938,205419400,0.0,0 -2008-11-04,76.68714129732992,78.08061082860189,74.86789367492979,77.73224639892578,346793400,0.0,0 -2008-11-05,76.7955694002709,77.96453590646895,73.54414634540987,74.46538543701172,387844100,0.0,0 -2008-11-06,73.12606767601254,73.88473581592812,69.71981304469242,70.3391342163086,477721900,0.0,0 -2008-11-07,70.9507302696364,72.7699785521838,70.06045807417696,72.6615982055664,380391000,0.0,0 -2008-11-10,73.70670939047054,73.95443677980201,70.38561020124479,71.70940399169922,301773000,0.0,0 -2008-11-11,70.26171918631627,71.33004198507517,68.62826538642597,69.49530792236328,418498200,0.0,0 -2008-11-12,68.30314794780013,68.86053009579427,65.89554482273577,66.43744659423828,454330600,0.0,0 -2008-11-13,66.67742211578106,71.01265934696818,63.54986081329804,70.57913208007812,753141900,0.0,0 -2008-11-14,69.21663828270509,71.26812761803176,66.9793431000817,67.0567626953125,540352300,0.0,0 -2008-11-17,66.87096087523571,68.55860523447008,65.92650444658946,66.16648864746094,415254900,0.0,0 -2008-11-18,65.91877250093755,67.52126030498835,64.18468081639972,67.41287994384766,523811800,0.0,0 -2008-11-19,66.50711925948421,67.2503013206925,62.644112900590116,63.09312057495117,558327600,0.0,0 -2008-11-20,62.03252737810875,63.87500489107037,58.09985684027623,58.40951156616211,814180400,0.0,0 -2008-11-21,59.9655582840159,62.62863173270451,57.55021218592953,61.560302734375,718536500,0.0,0 -2008-11-24,63.41824893430696,67.34318191685078,62.21057906468881,65.82585144042969,523305300,0.0,0 -2008-11-25,67.58319460044778,67.7457651444994,64.8891540980389,66.31359100341797,454112400,0.0,0 -2008-11-26,65.26072703407354,69.04631308166478,65.21427410344283,68.8759994506836,370134200,0.0,0 -2008-11-28,68.6127857862151,69.7740086438109,68.49666822548342,69.7430419921875,118308100,0.0,0 -2008-12-01,67.74578215633257,67.77674882577854,63.371839027417145,63.56537628173828,369927100,0.0,0 -2008-12-02,64.61818611624292,66.18196372648544,63.511153355792764,66.01165008544922,469508400,0.0,0 -2008-12-03,64.56401645856957,67.99349616338812,64.36273610010772,67.59867858886719,519863500,0.0,0 -2008-12-04,66.62323800515539,68.16379823480644,64.82721318264797,66.0348892211914,444173800,0.0,0 -2008-12-05,64.75752973552187,68.4502158540768,63.66597740544816,68.07088470458984,471905300,0.0,0 -2008-12-08,69.93659166987361,71.51585574801001,68.1870198367115,70.4475326538086,412859300,0.0,0 -2008-12-09,69.95981207676623,71.32230937910298,68.88374598037228,69.28630065917969,370790000,0.0,0 -2008-12-10,69.92109251046442,70.72620766182908,68.8992167234024,69.7585220336914,396187400,0.0,0 -2008-12-11,69.31728063274151,70.44753711283036,67.63737924217504,68.07864379882812,365061000,0.0,0 -2008-12-12,66.22841976593601,68.95342043146078,65.95746301178781,68.89148712158203,415060400,0.0,0 -2008-12-15,68.91471533186765,69.01535844384955,66.80129266825061,67.93154907226562,256694200,0.0,0 -2008-12-16,71.12876892089844,71.23714924885932,68.26442155687239,71.12876892089844,377699500,0.0,0 -2008-12-17,70.32363486440666,71.55453383992412,69.71980008279871,70.43975830078125,281819800,0.0,0 -2008-12-18,70.75721107009424,70.96622867559458,68.28767417411521,69.1237564086914,374673300,0.0,0 -2008-12-19,69.5365764042206,70.72283785244521,68.74833743769788,68.82638549804688,301451300,0.719,0 -2008-12-22,69.13076543061132,69.2010015515836,66.71922405528524,67.94450378417969,243759500,0.0,0 -2008-12-23,68.31129287162246,68.62346723200727,66.96114724773689,67.24210357666016,221625200,0.0,0 -2008-12-24,67.46842805488923,67.79621442837971,67.11723559914427,67.63232421875,62061600,0.0,0 -2008-12-26,68.08497497720526,68.13180500726858,67.50745620976318,68.02254486083984,74767700,0.0,0 -2008-12-29,68.08497673243846,68.15521880222857,66.80506702336453,67.82743835449219,127795900,0.0,0 -2008-12-30,68.29568825094125,69.49755569312562,67.80401168800218,69.43511962890625,168256300,0.0,0 -2008-12-31,69.5209703824348,70.99598821909545,69.35708017327595,70.42626953125,193987200,0.0,0 -2009-01-02,70.58239057064816,72.92369050426028,70.12193182083628,72.54907989501953,227566300,0.0,0 -2009-01-05,72.29150721614579,73.09535821403452,71.7139884587796,72.46320343017578,240349700,0.0,0 -2009-01-06,73.0797470737174,73.71189591073356,72.33053209356419,72.94707489013672,328260900,0.0,0 -2009-01-07,71.79984110125814,72.00275536285962,70.39505921975825,70.7618637084961,280899200,0.0,0 -2009-01-08,70.36384213625543,71.0896391101751,69.98142567921857,71.05062103271484,263834400,0.0,0 -2009-01-09,71.14428021757722,71.26914641029214,66.61776611270149,69.52877807617188,330953600,0.0,0 -2009-01-12,69.33366037635875,69.38829639888604,67.43721402511325,67.858642578125,277858500,0.0,0 -2009-01-13,67.68695810522215,68.58445131033888,67.27332360514085,67.9835205078125,356432300,0.0,0 -2009-01-14,66.75825152417588,66.92214176910254,64.9008227941081,65.84514617919922,435491600,0.0,0 -2009-01-15,65.65001764366819,66.53190467650238,63.77697749418743,65.86853790283203,532647300,0.0,0 -2009-01-16,67.00798532589974,67.10943948368585,64.81497025679242,66.38363647460938,399237200,0.0,0 -2009-01-20,65.73588965179495,66.38364466874249,62.473678707303925,62.87950134277344,419855200,0.0,0 -2009-01-21,63.948698670473185,65.74369146795758,62.80146090738924,65.59541320800781,364360700,0.0,0 -2009-01-22,64.3233119022422,65.58761600641466,63.34777026593944,64.58085632324219,427940300,0.0,0 -2009-01-23,63.137044558597644,65.54858019260992,62.87950018382957,64.86180114746094,386800600,0.0,0 -2009-01-26,65.23639093013935,66.61776066007123,64.62765414917868,65.30663299560547,317978800,0.0,0 -2009-01-27,65.65781164003961,66.45385645853098,65.0100569183703,65.96998596191406,273789700,0.0,0 -2009-01-28,67.42940705490761,68.63907453664339,67.17186275627255,68.20203399658203,330007000,0.0,0 -2009-01-29,67.20309227775809,68.2800877731379,65.92318251655944,65.9856185913086,294392500,0.0,0 -2009-01-30,66.32121251303973,66.64899301100833,64.15940932689145,64.64328002929688,383383600,0.0,0 -2009-02-02,63.659926806786494,64.91642455592607,63.45701253654052,64.44816589355469,288233300,0.0,0 -2009-02-03,64.8539703992705,65.83731748406684,64.16719161620732,65.35344696044922,278385800,0.0,0 -2009-02-04,65.79049096323627,66.62555386601905,64.80714391511775,65.0334701538086,322989300,0.0,0 -2009-02-05,64.54181626316898,66.56314112829584,60.66306868110894,66.00122833251953,417679400,0.0,0 -2009-02-06,66.22754471923778,68.16301522086157,66.08706654135935,67.88206481933594,366101700,0.0,0 -2009-02-09,67.86645548948209,68.47519229944433,67.3669788272448,67.97571563720703,240075200,0.0,0 -2009-02-10,67.32796686513014,67.9210977407144,64.34671239792479,64.86180114746094,536212800,0.0,0 -2009-02-11,65.12715074345195,65.59541544542539,64.30769942346447,65.24421691894531,324442500,0.0,0 -2009-02-12,64.12817387542168,65.41588942981076,63.254092784815455,65.29102325439453,469302200,0.0,0 -2009-02-13,65.20518110504857,65.74367583916482,64.57302631091785,64.58863830566406,293998400,0.0,0 -2009-02-17,62.559533090735236,64.74474265007613,61.786899874915136,61.825923919677734,478910100,0.0,0 -2009-02-18,62.270766095417756,62.38783226692777,61.092310289553865,61.677635192871094,362964800,0.0,0 -2009-02-19,62.30978296560086,62.55172130312297,60.88939479947393,61.01426696777344,316867500,0.0,0 -2009-02-20,59.882624984335465,61.13911660023672,59.133404086200855,60.421119689941406,477176600,0.0,0 -2009-02-23,61.08451069376263,61.08451069376263,58.212515962247934,58.25934600830078,379641400,0.0,0 -2009-02-24,58.75881734455884,60.83476659576026,58.2983586525053,60.46796798706055,426260900,0.0,0 -2009-02-25,60.2025889422565,61.201542027119245,59.02413368391213,59.99187469482422,461985800,0.0,0 -2009-02-26,60.73330798401133,62.17710813229404,58.946115341608376,59.016357421875,363353900,0.0,0 -2009-02-27,57.75984283223122,59.07097039315789,57.60375267365023,57.69740676879883,470510900,0.0,0 -2009-03-02,56.59699395760929,57.68960125998963,54.91906790685213,55.09856414794922,426452600,0.0,0 -2009-03-03,55.88680787849536,55.95704399080639,54.34935390833129,54.684940338134766,443761000,0.0,0 -2009-03-04,55.59023704849973,56.87014650425405,54.68493204337915,55.98045349121094,462753100,0.0,0 -2009-03-05,54.70835749247988,55.98046721836403,53.20212141609634,53.69379806518555,485549400,0.0,0 -2009-03-06,54.16205555703648,54.981506697530584,52.3670571372712,53.787445068359375,490470000,0.0,0 -2009-03-09,53.03043559494792,54.63032609808504,52.85874528590967,53.15530776977539,379905300,0.0,0 -2009-03-10,54.247903694635475,56.47994272367879,54.13864354251994,56.3238525390625,406227900,0.0,0 -2009-03-11,56.97162645585002,57.55695138519095,56.05852099509412,56.690670013427734,356648300,0.0,0 -2009-03-12,56.67504645464248,59.11779959470231,56.167763815128815,58.922691345214844,409702700,0.0,0 -2009-03-13,59.32073331703166,60.07775452625878,58.32177970436489,59.38316345214844,337474700,0.0,0 -2009-03-16,60.06211497913464,60.8503538715086,59.16461595762731,59.20363998413086,360644900,0.0,0 -2009-03-17,59.3675524622782,61.154745179994016,58.883681741466695,61.01426696777344,356814300,0.0,0 -2009-03-18,60.725510907742354,63.137052811198146,60.14799195442014,62.38003158569336,473273200,0.0,0 -2009-03-19,63.16043984021523,63.21506990937508,61.41227167286904,61.60737991333008,428520400,0.0,0 -2009-03-20,61.906866155071235,62.02477021974584,60.154040918928416,60.29552459716797,371078200,0.561,0 -2009-03-23,61.89116069837233,64.68153173363942,61.553172144778166,64.62651062011719,419933300,0.0,0 -2009-03-24,63.856178176951836,64.73652156475383,63.282387698469606,63.353126525878906,330271000,0.0,0 -2009-03-25,63.84833632258416,65.0037794018796,62.142670259447975,64.02125549316406,441775100,0.0,0 -2009-03-26,64.65008797992618,65.4754106507509,63.91908978477758,65.32606506347656,422025200,0.0,0 -2009-03-27,64.49286108077737,64.87014684097431,63.91120270546279,64.14701080322266,322332300,0.0,0 -2009-03-30,62.724316017106936,62.77933710496839,61.27803799827192,61.93043518066406,324108500,0.0,0 -2009-03-31,62.535664346792906,63.730416482353284,62.13479900897396,62.50422286987305,364238300,0.0,0 -2009-04-01,61.72607166319377,63.9976661137855,61.568870260525834,63.714698791503906,377018300,0.0,0 -2009-04-02,65.30245499508743,66.50506301417184,63.769714463493735,65.57756042480469,476230700,0.0,0 -2009-04-03,65.6246969593539,66.24565242714164,64.98016189100466,66.22993469238281,284646300,0.0,0 -2009-04-06,65.50682264446584,66.24568244672585,64.68150626658425,65.71118927001953,264866600,0.0,0 -2009-04-07,64.65005404582627,64.96446280286558,64.06840174325488,64.1784439086914,258947800,0.0,0 -2009-04-08,64.5007329840878,65.19243371111321,64.09200564281413,64.87016296386719,230402800,0.0,0 -2009-04-09,66.55221926231575,67.45614220264198,66.28497571304187,67.44828033447266,269653500,0.0,0 -2009-04-13,66.74874707518846,68.02210030086314,66.48150343348227,67.46402740478516,224847500,0.0,0 -2009-04-14,66.835175071488,67.40897141235435,66.08845963852711,66.3006820678711,276598800,0.0,0 -2009-04-15,65.89982053839336,67.14173181779283,65.71903955280818,67.00811004638672,250726100,0.0,0 -2009-04-16,67.5425854368375,68.5015291862817,66.63080088921951,67.99061584472656,335202900,0.0,0 -2009-04-17,68.25004367601986,68.89457913387884,67.70768854795979,68.44654846191406,262649000,0.0,0 -2009-04-20,67.23606086847687,68.42295114736967,65.50681560182105,65.57756042480469,293690100,0.0,0 -2009-04-21,65.09808401964246,66.91378573068583,65.04306293739411,66.8587646484375,114090900,0.0,0 -2009-04-22,66.25354559402525,67.86488102774061,66.08062044574814,66.4500503540039,340395200,0.0,0 -2009-04-23,66.58370234724768,67.14177539905121,65.7347999599189,67.10247802734375,324903700,0.0,0 -2009-04-24,67.62119834676301,68.62730148016533,67.35395482557388,68.11639404296875,287703000,0.0,0 -2009-04-27,67.34609526601331,68.391501775107,67.23605310682953,67.47185516357422,289581600,0.0,0 -2009-04-28,66.78804094422821,68.06138799214854,66.62297766012186,67.25965118408203,247926300,0.0,0 -2009-04-29,68.0063847684058,69.45266334711187,67.83346556593708,68.69022369384766,311505700,0.0,0 -2009-04-30,69.60195770821964,69.9713814568137,68.32074339983171,68.71375274658203,301419800,0.0,0 -2009-05-01,68.72950004215534,69.33473200503816,68.16356542931234,69.08320617675781,236110300,0.0,0 -2009-05-04,69.60199820996058,71.48058350083727,69.46837039670329,71.43341827392578,287120000,0.0,0 -2009-05-05,71.18975830078125,71.47272569092607,70.615961649418,71.18975830078125,243036300,0.0,0 -2009-05-06,72.06221436735322,72.4709415645415,71.22117436817389,72.42378234863281,291941000,0.0,0 -2009-05-07,73.10765193309834,73.2176941480665,70.9618167475173,71.41770935058594,317728000,0.0,0 -2009-05-08,72.33733135281038,73.27269593019231,71.87358299730633,73.08405303955078,299081700,0.0,0 -2009-05-11,72.07795297364908,72.40022370058513,71.55918345792416,71.71638488769531,247923600,0.0,0 -2009-05-12,72.02288908054071,72.18009641375595,70.62377679758127,71.50411987304688,282431300,0.0,0 -2009-05-13,70.53731762627072,70.74954603701728,69.56265610125723,69.70413970947266,269619100,0.0,0 -2009-05-14,69.73563979843624,70.8360681210541,69.56271457671534,70.30157470703125,260098700,0.0,0 -2009-05-15,70.24654353523806,70.74173351094832,69.28759907703792,69.72776794433594,271502700,0.0,0 -2009-05-18,70.3879843006082,71.79495264263817,69.6176832559224,71.70849609375,241447400,0.0,0 -2009-05-19,71.66922191020059,72.29017771996908,71.37839268379768,71.62206268310547,206102200,0.0,0 -2009-05-20,72.27447235863569,72.94259356224805,71.06400791181531,71.14260864257812,285722200,0.0,0 -2009-05-21,70.31728576957606,70.58453544960126,69.37406500950777,70.12078094482422,258988400,0.0,0 -2009-05-22,70.31727062414994,70.74172167381484,69.70417666247289,69.97142028808594,166811900,0.0,0 -2009-05-26,69.45261469796381,71.96787220753527,69.4211732294883,71.76351165771484,236318500,0.0,0 -2009-05-27,71.87359524902764,72.11725927417714,70.37229574695712,70.48233795166016,246015800,0.0,0 -2009-05-28,71.1032833320062,71.7949779448122,70.03429693240179,71.46485137939453,289095000,0.0,0 -2009-05-29,71.85786499514654,73.64998759144153,71.27621253773584,72.7303466796875,258641500,0.0,0 -2009-06-01,73.62639293550059,74.80542134974331,73.43775006833935,74.49101257324219,276246800,0.0,0 -2009-06-02,74.20017273808362,74.96261190089012,74.06655098705598,74.55387878417969,230874500,0.0,0 -2009-06-03,73.91722655287354,73.9879653834991,72.91112320498357,73.61067962646484,235310500,0.0,0 -2009-06-04,73.88577909250478,74.41241033402686,73.33556824268297,74.3023681640625,210102300,0.0,0 -2009-06-05,75.05695376893142,75.19843743095063,73.72858571664743,74.31809997558594,284257900,0.0,0 -2009-06-08,73.7600190697953,74.75040467532858,73.13120747652974,74.01155090332031,238565100,0.0,0 -2009-06-09,74.42812017122134,74.78182622335896,73.90148303120108,74.3888168334961,225125500,0.0,0 -2009-06-10,75.04908956093422,75.05694543244947,73.24910550394212,74.20018768310547,296100400,0.0,0 -2009-06-11,74.34170677870209,75.54431534732356,74.32598303447688,74.53034973144531,275414200,0.0,0 -2009-06-12,74.2002097960638,74.78186229450455,73.88580093314843,74.73470306396484,184361800,0.0,0 -2009-06-15,73.85434213452226,73.90150135400708,72.6281544531258,73.02116394042969,224190500,0.0,0 -2009-06-16,73.28055024165648,73.32770946024058,71.98361775895496,72.03077697753906,227319000,0.0,0 -2009-06-17,71.99934221437532,72.57313874700685,71.39411019765512,71.96004486083984,223445200,0.0,0 -2009-06-18,72.07007476142485,72.84036992413631,71.7242245269064,72.48666381835938,211725100,0.0,0 -2009-06-19,73.18068611340965,73.27553732136346,72.34279558190681,72.75383758544922,215655600,0.518,0 -2009-06-22,72.04243598967173,72.08196135372346,70.54846889551865,70.57218170166016,251913600,0.0,0 -2009-06-23,70.72237496100152,71.04646004832209,70.23228815958905,70.62751770019531,188309800,0.0,0 -2009-06-24,71.2677793589122,71.99500012035669,70.82511826134873,71.23616027832031,211577700,0.0,0 -2009-06-25,70.8804227462917,72.8565692889945,70.80137809072771,72.78543090820312,279411000,0.0,0 -2009-06-26,72.5404246382822,72.91194135809775,72.14519511179316,72.59575653076172,167579000,0.0,0 -2009-06-29,72.80918290186327,73.37040809846495,72.40604710150402,73.27555084228516,168481300,0.0,0 -2009-06-30,73.29137329182743,73.56012650785556,72.14520390684794,72.6827163696289,228888200,0.0,0 -2009-07-01,72.99098588071364,73.69449998442867,72.88822837513564,72.98308563232422,173041100,0.0,0 -2009-07-02,72.03454048490971,73.00680789720006,70.9516153043159,70.99113464355469,212309900,0.0,0 -2009-07-06,70.30342771647058,71.08598046376598,70.08210015406168,70.98322296142578,174499600,0.0,0 -2009-07-07,70.91206163357624,70.99901258821437,69.56037774427753,69.60780334472656,197088900,0.0,0 -2009-07-08,70.02676989824182,70.19277161894371,68.76994280381636,69.5604019165039,248050500,0.0,0 -2009-07-09,70.04256704648202,70.27180086241084,69.48924820163532,69.69476318359375,163777600,0.0,0 -2009-07-10,69.32325703231719,69.94772041234658,69.04659756793049,69.52877807617188,173520300,0.0,0 -2009-07-13,69.80541493360371,71.27566878902024,69.23628363076865,71.2203369140625,217413500,0.0,0 -2009-07-14,71.44169637919416,71.68674281855324,70.9279027521512,71.62350463867188,181487400,0.0,0 -2009-07-15,72.57205416167824,73.91583836344358,71.67883747440777,73.71822357177734,220877900,0.0,0 -2009-07-16,73.51269653823293,74.70629147170382,73.37041365854286,73.59964752197266,231174500,0.0,0 -2009-07-17,74.35055191494868,74.55607288910944,73.93951599734913,74.4058837890625,138561700,0.0,0 -2009-07-20,74.8406687985227,75.32284933822557,74.45334552310912,75.19637298583984,164179400,0.0,0 -2009-07-21,75.78131433112776,75.8050271386621,74.63514504426624,75.54417419433594,217718300,0.0,0 -2009-07-22,75.06198452215854,75.98682008760755,75.00665263441518,75.52835845947266,196068100,0.0,0 -2009-07-23,75.57579962049111,77.52823468090902,75.51256144127906,77.19624328613281,258795500,0.0,0 -2009-07-24,76.83261019247283,77.57564356107464,76.4294804561119,77.51240539550781,154003100,0.0,0 -2009-07-27,77.37012909719301,77.78117117749906,76.94328048951701,77.74164581298828,159259400,0.0,0 -2009-07-28,77.19620384749713,77.75742883215021,76.72192377643559,77.37800598144531,186685200,0.0,0 -2009-07-29,77.02233591823307,77.53612950388005,76.65872545929821,77.1883316040039,194399300,0.0,0 -2009-07-30,78.12105945659873,78.9115184064037,77.9392512446254,77.99458312988281,225575400,0.0,0 -2009-07-31,77.97876196651733,78.62693794245526,77.76533471292878,78.10523223876953,207358000,0.0,0 -2009-08-03,78.92734847868293,79.46486096613809,78.5004997947575,79.39372253417969,175776900,0.0,0 -2009-08-04,79.03797994857338,79.70986877534816,78.8719843111859,79.59920501708984,176714600,0.0,0 -2009-08-05,79.6545624801267,79.72570693655622,78.71392023281017,79.37000274658203,184726400,0.0,0 -2009-08-06,79.73362949106092,79.85219355810325,78.587459920271,78.95897674560547,193203800,0.0,0 -2009-08-07,79.78893080954835,80.65052819693796,79.35417596131839,79.99444580078125,220640900,0.0,0 -2009-08-10,79.63084592362485,80.01026893503379,79.25932919160806,79.82846069335938,130898700,0.0,0 -2009-08-11,79.4727435746965,79.5280754599801,78.61904646112946,78.83247375488281,157301000,0.0,0 -2009-08-12,78.6981175516295,80.2790359823539,78.65859820929651,79.67829132080078,219052400,0.0,0 -2009-08-13,80.04187067919601,80.31853009073569,79.25141177152672,80.28691101074219,176449500,0.0,0 -2009-08-14,80.24740376490719,80.31064193916708,78.80876846947801,79.67037200927734,199616100,0.0,0 -2009-08-17,78.13687055421454,78.21591524767565,77.55193258573402,77.71002197265625,237667500,0.0,0 -2009-08-18,77.88392872700415,78.60324935259145,77.741645857697,78.32658386230469,173461500,0.0,0 -2009-08-19,77.71003115224903,79.2830490823406,77.63098644945066,79.01428985595703,192812800,0.0,0 -2009-08-20,79.11704631617023,80.01026893503379,78.94315038461214,79.82846069335938,174131300,0.0,0 -2009-08-21,80.48453328172415,81.52003261800019,80.32644389766124,81.39356231689453,224605000,0.0,0 -2009-08-24,81.72556353809965,82.16821869165618,81.09319386382676,81.38566589355469,191279000,0.0,0 -2009-08-25,81.70974260155458,82.41325057399796,81.36984501694641,81.54374694824219,215310600,0.0,0 -2009-08-26,81.2908056968516,81.92317534828237,81.01414623587212,81.5516586303711,194620700,0.0,0 -2009-08-27,81.50424086150754,81.98642141021728,80.57940513262803,81.73347473144531,196230100,0.0,0 -2009-08-28,82.38953097493376,82.4843821800182,81.15641103233263,81.71763610839844,147024400,0.0,0 -2009-08-31,80.91927907482163,81.085274718721,80.4608114693532,80.99041748046875,176051600,0.0,0 -2009-09-01,80.58727480671905,81.60696741478552,79.03797623320851,79.20397186279297,321276800,0.0,0 -2009-09-02,78.87199114857412,79.39369693763771,78.70599549679653,78.90361022949219,171805000,0.0,0 -2009-09-03,79.36208526107424,79.65455123308766,78.72180936651193,79.55970001220703,143572300,0.0,0 -2009-09-04,79.71780056534584,80.6979681796349,79.48066644920989,80.67425537109375,142687900,0.0,0 -2009-09-08,81.4172757681423,81.4568011298337,80.9350953029799,81.3698501586914,132909100,0.0,0 -2009-09-09,81.51213562051541,82.27097554957756,81.25918897749469,81.99431610107422,154612500,0.0,0 -2009-09-10,82.04963882020516,82.88752335080146,81.59117119637122,82.83219146728516,162902400,0.0,0 -2009-09-11,82.99027765414678,83.23532401236041,82.42905256267635,82.81637573242188,152360100,0.0,0 -2009-09-14,82.11287678911569,83.36180342668067,81.53584511009315,83.21952056884766,149593800,0.0,0 -2009-09-15,83.35389448205932,83.87560028766727,82.80848190341484,83.56732177734375,196795900,0.0,0 -2009-09-16,83.86772342645571,84.84789118690469,83.57525736987053,84.83208465576172,206406300,0.0,0 -2009-09-17,84.71350480252106,85.41701295645767,84.23923052345617,84.70560455322266,229170900,0.0,0 -2009-09-18,85.10108374660985,85.10902768147567,84.4736462000415,84.75956726074219,153799100,0.508,0 -2009-09-21,84.10037203325408,84.98196108628821,83.91770392140606,84.54513549804688,151892000,0.0,0 -2009-09-22,85.04552633587763,85.27585207436445,84.66429606472192,85.03758239746094,143126700,0.0,0 -2009-09-23,85.23614173563847,85.80004019602211,84.17982208503467,84.33072662353516,225947400,0.0,0 -2009-09-24,84.51338121395527,84.69604934599305,83.03612404610494,83.4014663696289,228636800,0.0,0 -2009-09-25,83.2188062416357,83.67945770718879,82.67078963401394,82.95671081542969,204059000,0.0,0 -2009-09-28,83.27443696163311,84.62462223674152,83.25855513791626,84.44194793701172,118285800,0.0,0 -2009-09-29,84.59282307625355,84.99787306424861,84.01303673150097,84.1877670288086,133733900,0.0,0 -2009-09-30,84.47370828536611,84.55312951405558,83.09175951592503,83.86215209960938,254383000,0.0,0 -2009-10-01,81.80508338319817,83.97331787106577,81.76536975389271,81.78125762939453,281840600,0.0,0 -2009-10-02,81.02673812625589,81.88450158852015,81.00291237332335,81.4000244140625,224748800,0.0,0 -2009-10-05,81.72564638606268,82.85344295071963,81.4873767751868,82.61517333984375,149875000,0.0,0 -2009-10-06,83.21086138101364,84.2751248910302,83.16320987112239,83.79859161376953,202491100,0.0,0 -2009-10-07,83.60797911747333,84.1162881816848,83.44913670077898,84.02892303466797,159200300,0.0,0 -2009-10-08,84.62462019906047,85.11703549530198,84.06865943112567,84.67227172851562,183305800,0.0,0 -2009-10-09,84.69605545123798,85.1884765625,84.47367367823219,85.1884765625,135008300,0.0,0 -2009-10-12,85.58560360082042,85.84769298810673,85.20437330925411,85.52206420898438,118031000,0.0,0 -2009-10-13,85.2917403611952,85.54589187476006,84.7913812730847,85.34733581542969,157692700,0.0,0 -2009-10-14,86.34803822937882,86.90399263122401,85.31554455801087,86.8166275024414,191421600,0.0,0 -2009-10-15,86.39570204780205,87.13433074951172,86.35599447598072,87.13433074951172,173873600,0.0,0 -2009-10-16,86.41160835213304,86.78488869221586,85.95890073257026,86.48308563232422,192069400,0.0,0 -2009-10-19,86.62603358087702,87.46790929705297,86.35600026038655,87.1978759765625,159530400,0.0,0 -2009-10-20,87.32495263362976,87.35672233031626,86.3162905164962,86.73722839355469,180921100,0.0,0 -2009-10-21,86.6021894631082,87.61085132093002,85.89533055704405,85.95886993408203,225379300,0.0,0 -2009-10-22,85.92711212079361,87.11050439929187,85.37909552213934,86.83252716064453,238444000,0.0,0 -2009-10-23,87.11841491698435,87.17401034338627,85.48230968675455,85.83971405029297,240033200,0.0,0 -2009-10-26,85.93503558546186,86.81662472262306,84.67222231622725,84.91049194335938,242028200,0.0,0 -2009-10-27,85.00582434502303,85.2917455726851,84.31485309438172,84.52134704589844,253266300,0.0,0 -2009-10-28,84.306921293894,84.56901680023073,82.87731494974037,82.92497253417969,248821400,0.0,0 -2009-10-29,83.54445848398947,84.87081164926775,83.34590240321904,84.70402526855469,198110600,0.0,0 -2009-10-30,84.42604151256691,84.68019303414385,82.15455963746348,82.24986267089844,325608100,0.0,0 -2009-11-02,82.70255769329246,83.71916968459941,81.86862598018236,82.85346221923828,254222900,0.0,0 -2009-11-03,82.39281551975878,83.23469727898724,82.23397310602873,83.11556243896484,228362600,0.0,0 -2009-11-04,83.79860493351059,84.44986859648968,83.11557157240442,83.33000946044922,247996700,0.0,0 -2009-11-05,83.91772378807879,84.88667212870216,83.74299351141663,84.86284637451172,180015300,0.0,0 -2009-11-06,84.39426442599512,85.29967952105712,84.2274780726363,85.08523559570312,170954100,0.0,0 -2009-11-09,85.73649464802142,87.07079146363355,85.6729613211442,87.02313995361328,159495700,0.0,0 -2009-11-10,86.81662733393183,87.3090484170736,86.54659407054501,87.03900909423828,171899800,0.0,0 -2009-11-11,87.61087552514394,88.01593159135508,87.0628649102761,87.48380279541016,169466200,0.0,0 -2009-11-12,87.36465959170877,87.81736713085147,86.37187936907573,86.5942611694336,157144500,0.0,0 -2009-11-13,86.81664496025924,87.43613886387362,86.3718813493463,87.06285858154297,150963000,0.0,0 -2009-11-16,87.66645325373422,88.70689093658048,87.61880174715081,88.3256607055664,210922200,0.0,0 -2009-11-17,88.09534423118396,88.46863056376984,87.76177153121556,88.42891693115234,147134100,0.0,0 -2009-11-18,88.36537602552538,88.50039266972884,87.8173594515302,88.3733139038086,156486800,0.0,0 -2009-11-19,87.76971922008418,88.4050949529669,86.673685931283,87.2217025756836,208734600,0.0,0 -2009-11-20,86.76896571750436,87.17402162482185,86.5783536679511,86.91192626953125,134196000,0.0,0 -2009-11-23,87.93650134103358,88.74660733075503,87.84119225894005,88.01592254638672,148010200,0.0,0 -2009-11-24,88.15885335951484,88.31769571656379,87.37257339106176,88.15090942382812,138420100,0.0,0 -2009-11-25,88.29389938168444,88.555994811628,88.01592213452439,88.46068572998047,109564800,0.0,0 -2009-11-27,86.09389915152164,87.61880806666423,86.00653401018488,87.02313995361328,126001800,0.0,0 -2009-11-30,86.9516589761678,87.52349525034458,85.87151369252976,87.31700134277344,160874800,0.0,0 -2009-12-01,88.09536189477954,88.68309226622365,87.94446339136623,88.39717102050781,159613700,0.0,0 -2009-12-02,88.38124762599388,88.96103382445453,88.0953264951706,88.357421875,132315100,0.0,0 -2009-12-03,88.59569726582346,89.09605624758181,87.59497324285799,87.66645050048828,167324900,0.0,0 -2009-12-04,88.82600271897674,89.25488437456949,87.39640325978202,88.16680145263672,274907800,0.0,0 -2009-12-07,88.08740082236008,88.57981590298694,87.75382208388316,88.03179931640625,127973800,0.0,0 -2009-12-08,87.39641771680213,87.97619789677923,86.78486178732355,87.05490112304688,169863700,0.0,0 -2009-12-09,87.03109963012712,87.50763299485243,86.58632990485975,87.38055419921875,155063400,0.0,0 -2009-12-10,87.92062209705549,88.2542008874115,87.72206603445197,87.87297058105469,138014600,0.0,0 -2009-12-11,88.24625396728516,88.4448100231814,87.84914185549266,88.24625396728516,124854000,0.0,0 -2009-12-14,88.8498764038086,88.95312338347647,88.26214604722044,88.8498764038086,107141500,0.0,0 -2009-12-15,88.52423954720348,88.8895819972289,88.15889709717807,88.43687438964844,120408800,0.0,0 -2009-12-16,88.7942873284496,89.05637676636643,88.37334332080519,88.5718994140625,155358200,0.0,0 -2009-12-17,87.9365035561869,88.1032899094648,87.42820055778292,87.50762176513672,183390100,0.0,0 -2009-12-18,87.99470646968112,88.07456135142097,87.26008785742282,88.00269317626953,174591200,0.59,0 -2009-12-21,88.44184325368121,89.19242895447383,88.44184325368121,88.89698791503906,118039600,0.0,0 -2009-12-22,89.08866770695442,89.4080690076515,88.9768781655214,89.2164306640625,91707500,0.0,0 -2009-12-23,89.43198675708813,89.51982223144734,89.03273681620826,89.39205932617188,111783100,0.0,0 -2009-12-24,89.58374943157015,89.91113138239815,89.4320324270963,89.81531524658203,39677500,0.0,0 -2009-12-28,90.1506577443217,90.2225198253294,89.68752624869896,90.00692749023438,87508500,0.0,0 -2009-12-29,90.23844071576353,90.25440802711432,89.87113163401116,89.87911224365234,80572500,0.0,0 -2009-12-30,89.61566172508381,89.95103027812264,89.56774758031268,89.84722137451172,73138400,0.0,0 -2009-12-31,90.0468484649655,90.07080858394082,88.94492058290737,88.98484802246094,90637900,0.0,0 -2010-01-04,89.72743648900011,90.54190371132576,89.04072608355636,90.4939956665039,118944600,0.0,0 -2010-01-05,90.43813274377356,90.77350135969087,90.11074474342124,90.73357391357422,111579900,0.0,0 -2010-01-06,90.64573785015858,91.02103390989214,90.57387575807662,90.79745483398438,116074400,0.0,0 -2010-01-07,90.62975809895723,91.29251462028039,90.37423831980605,91.18072509765625,131091100,0.0,0 -2010-01-08,90.9411506981738,91.52405829013841,90.75749913763154,91.484130859375,126402800,0.0,0 -2010-01-11,91.8914046994265,91.93132605427881,91.22066136193295,91.61193084716797,106375700,0.0,0 -2010-01-12,91.00504800968545,91.19668630819064,90.40617299629407,90.75751495361328,163333500,0.0,0 -2010-01-13,90.9890711182675,91.77959049200558,90.52594575559628,91.5240707397461,161822000,0.0,0 -2010-01-14,91.42024929087752,91.93927542978973,91.36435454312209,91.77159118652344,115718800,0.0,0 -2010-01-15,91.61193027215987,91.69975968911294,90.39021985354404,90.74156188964844,212283100,0.0,0 -2010-01-19,90.72556101282123,91.93129147794473,90.70160089843381,91.87539672851562,139172700,0.0,0 -2010-01-20,91.25259958034046,91.38834314882016,90.21455300175856,90.9411849975586,216490200,0.0,0 -2010-01-21,90.9651303105956,91.24460412835074,89.08066957934327,89.19245910644531,344859600,0.0,0 -2010-01-22,88.79321433906463,89.22440515157903,87.10837853337925,87.2042007446289,345942400,0.0,0 -2010-01-25,88.00267859673902,88.16238224168825,87.36388229315556,87.65133666992188,186937500,0.0,0 -2010-01-26,87.30798112324477,88.21028996065215,87.0684347948197,87.28402709960938,211168800,0.0,0 -2010-01-27,87.17224397016501,87.89888189796254,86.50150689103336,87.69925689697266,271863600,0.0,0 -2010-01-28,87.98674893289432,88.03465700084614,86.16616924583991,86.69317626953125,316104000,0.0,0 -2010-01-29,87.06841852149788,87.67528007247869,85.615149135883,85.75089263916016,310677600,0.0,0 -2010-02-01,86.35777975917824,87.09239832720125,85.83875351948329,87.08441162109375,187865000,0.0,0 -2010-02-02,87.2441116340362,88.30611200318852,86.94067773535994,88.138427734375,216327900,0.0,0 -2010-02-03,87.73917824192769,88.21828311796067,87.44373713938846,87.69925689697266,172730700,0.0,0 -2010-02-04,87.02051515160323,87.0604364883188,84.97635142075909,84.99232482910156,356715700,0.0,0 -2010-02-05,85.088182517931,85.34370234772373,83.5071554748614,85.16803741455078,493585800,0.0,0 -2010-02-08,85.23186999819436,85.7029880649405,84.48926491392042,84.55314636230469,224166900,0.0,0 -2010-02-09,85.54331279297136,86.35778629961106,84.85660222544072,85.61518096923828,337820500,0.0,0 -2010-02-10,85.47942760855416,85.91859895419353,84.72883565758336,85.4474868774414,240511500,0.0,0 -2010-02-11,85.33570641139762,86.43763433728586,84.8406341647725,86.34181213378906,223591600,0.0,0 -2010-02-12,85.43149311037732,86.31782838833956,85.04821661248937,86.2699203491211,304622100,0.0,0 -2010-02-16,86.92471019598945,87.71522348755957,86.09426946772454,87.62738800048828,159317500,0.0,0 -2010-02-17,88.05057552185399,88.16237110523227,87.62737157732114,88.04259490966797,168845100,0.0,0 -2010-02-18,87.89888898896285,88.7452971119787,87.86694825517915,88.5616455078125,193708600,0.0,0 -2010-02-19,88.33007532934323,89.08864791944806,88.12246361619185,88.74529266357422,222684900,0.0,0 -2010-02-22,89.07269080448727,89.09664483335074,88.49776974347407,88.76127624511719,132346900,0.0,0 -2010-02-23,88.52170836151801,88.7931954308039,87.45171521933668,87.68328094482422,207497000,0.0,0 -2010-02-24,87.94679632558237,88.6335068661453,87.72321728299389,88.48977661132812,176350700,0.0,0 -2010-02-25,87.22816997634956,88.43390712006519,86.98862354458686,88.37002563476562,259634700,0.0,0 -2010-02-26,88.44984208672895,88.72932195965072,87.922835255993,88.42588806152344,173589300,0.0,0 -2010-03-01,88.79321021810627,89.43201274597791,88.76925618942374,89.34417724609375,147709700,0.0,0 -2010-03-02,89.72745496399659,90.0228960906575,89.43200774526362,89.59170532226562,160992400,0.0,0 -2010-03-03,89.82324249951535,90.20652509129424,89.4479466116675,89.6715316772461,150785000,0.0,0 -2010-03-04,89.79134484150755,90.07082478450718,89.45597622039564,89.94306182861328,135770400,0.0,0 -2010-03-05,90.52597493193413,91.30051505192708,90.31037645431081,91.22865295410156,176118800,0.0,0 -2010-03-08,91.23663303188702,91.4442386941223,91.08491604696104,91.24461364746094,114631200,0.0,0 -2010-03-09,90.9730820931691,91.81948992831528,90.92517405482346,91.39628601074219,154556700,0.0,0 -2010-03-10,91.43622623453848,92.05106848361551,91.35637746209704,91.80353546142578,186088800,0.0,0 -2010-03-11,91.58796115380936,92.21079636357128,91.30848733075284,92.18683624267578,160791100,0.0,0 -2010-03-12,92.58607991464231,92.60205332747068,91.93929681274967,92.19481658935547,162074800,0.0,0 -2010-03-15,92.0351212806375,92.28265435692667,91.50810830161547,92.2187728881836,146816800,0.0,0 -2010-03-16,92.47426436378295,93.04119851817104,92.21874465910001,92.953369140625,168673000,0.0,0 -2010-03-17,93.23288450088313,93.8078056161807,92.96139126662682,93.5043716430664,177468100,0.0,0 -2010-03-18,93.51236144663837,93.6401183142268,93.08117059589009,93.45646667480469,196509100,0.0,0 -2010-03-19,92.98339080810547,94.04175112714037,92.62258240017763,92.98339080810547,226641100,0.48,0 -2010-03-22,92.45419608377226,93.64886491516208,92.39807115403411,93.48048400878906,184477800,0.0,0 -2010-03-23,93.61680633714941,94.21814757959767,93.31212285932692,94.13796997070312,182941600,0.0,0 -2010-03-24,93.7851903867636,94.15401231772694,92.6707049970465,93.68095397949219,196072600,0.0,0 -2010-03-25,94.31436706339065,94.74733353241038,93.416367972529,93.52861785888672,223396300,0.0,0 -2010-03-26,93.70499246485002,94.1459723202198,93.10365129348864,93.47247314453125,205808500,0.0,0 -2010-03-29,93.94552643922779,94.23417069446756,93.5606715103473,94.0657958984375,134513500,0.0,0 -2010-03-30,94.17804918622545,94.47471304743986,93.73706930930345,94.12994384765625,145772500,0.0,0 -2010-03-31,93.76915038190683,94.2261695225338,93.49654526374617,93.80924224853516,161078700,0.0,0 -2010-04-01,94.4506607055664,94.8114629804041,93.8894052459578,94.4506607055664,161215200,0.0,0 -2010-04-05,94.81146893401954,95.28452110705211,94.5468773200389,95.22038269042969,105847600,0.0,0 -2010-04-06,94.94778186784583,95.61326771502904,94.84355157691694,95.44489288330078,110384200,0.0,0 -2010-04-07,95.25243933450874,95.7014387630204,94.45866462275762,94.89965057373047,184576300,0.0,0 -2010-04-08,94.57093497109376,95.38876252698145,94.29031026746947,95.22840118408203,158704000,0.0,0 -2010-04-09,95.42885255213136,95.89389129164394,95.25246424277557,95.85380554199219,133006500,0.0,0 -2010-04-12,95.97403888503511,96.25466963060926,95.8617890336687,96.00611114501953,110279000,0.0,0 -2010-04-13,95.90990280676016,96.24665236902108,95.41279194069051,96.07827758789062,125043600,0.0,0 -2010-04-14,96.4310817614828,97.16873168945312,96.27874613528559,97.16873168945312,161609000,0.0,0 -2010-04-15,97.00837004647178,97.47340875419981,96.97629777864644,97.24890899658203,144615300,0.0,0 -2010-04-16,96.90413664005942,97.24890586161817,95.2123627990571,95.70145416259766,366786700,0.0,0 -2010-04-19,95.42082130057648,96.15846502211257,94.98785491172036,96.06224822998047,217947800,0.0,0 -2010-04-20,96.66357878985049,97.00033446670994,96.11034911810081,96.92015075683594,157708000,0.0,0 -2010-04-21,96.9762952741566,97.20080114313593,96.20657921770577,96.74378204345703,192910100,0.0,0 -2010-04-22,96.06225418919313,97.15268676569958,95.50902442230094,97.03241729736328,115360300,0.0,0 -2010-04-23,96.96827302679615,97.70591674954754,96.7197145093351,97.66582489013672,177335500,0.0,0 -2010-04-26,97.69786818874432,97.91435437792461,97.20076353552174,97.2969741821289,143457300,0.0,0 -2010-04-27,96.73577480170879,97.28900465587331,94.8114813562472,94.99589538574219,355853300,0.0,0 -2010-04-28,95.45290564308688,95.95803010209059,94.82750559082939,95.71749114990234,300674100,0.0,0 -2010-04-29,96.29478340430394,97.10459138250432,96.27073073160213,96.90414428710938,193775000,0.0,0 -2010-04-30,96.92015356821653,97.02438994721305,95.2363996037112,95.26045227050781,270000900,0.0,0 -2010-05-03,95.71748834253981,96.75981561523818,95.57316619889171,96.49522399902344,182747900,0.0,0 -2010-05-04,95.42084256338372,95.43687564039897,93.74510156733804,94.2261734008789,360353400,0.0,0 -2010-05-05,93.45643507868076,94.45065689831351,92.9833829544216,93.66490173339844,328973200,0.0,0 -2010-05-06,93.21591503656177,93.80923670118335,84.18777652670302,90.5539779663086,647356600,0.0,0 -2010-05-07,90.31342817047542,91.21944669260245,87.72365554342718,89.20696258544922,637558800,0.0,0 -2010-05-10,92.85509614485493,93.5286014620868,92.13349160682222,93.13572692871094,396159600,0.0,0 -2010-05-11,92.26177113102197,94.09786690679799,92.13348819549267,92.87113189697266,317849800,0.0,0 -2010-05-12,93.2399423777963,94.30632205888325,93.07958108149113,94.17001342773438,235607100,0.0,0 -2010-05-13,93.91345830878234,94.35444430623957,92.91924256206678,92.99942016601562,234452500,0.0,0 -2010-05-14,92.30190702800975,92.47028190212812,90.49788265467653,91.31570434570312,345601400,0.0,0 -2010-05-17,91.56421659570395,91.82078859351867,89.61587088452514,91.36376953125,325739800,0.0,0 -2010-05-18,92.10942587085852,92.38203703876589,89.82433073279864,90.1209945678711,360556800,0.0,0 -2010-05-19,89.61584733842291,90.41763538557306,88.48532937286302,89.60783386230469,394742700,0.0,0 -2010-05-20,87.69959931839496,88.10851305145451,86.16818689404896,86.22431182861328,530418300,0.0,0 -2010-05-21,84.91738879983717,87.69958863684383,84.47640285542893,87.48310852050781,500909400,0.0,0 -2010-05-24,87.01005748157242,87.70761545550242,86.28043336100643,86.36061096191406,269823000,0.0,0 -2010-05-25,84.27597626749566,86.48891388694697,83.69066806440478,86.44882202148438,396505200,0.0,0 -2010-05-26,86.97798183668435,87.77175039815812,85.67106322768976,85.9276351928711,349719300,0.0,0 -2010-05-27,87.54726863189546,88.8381483166688,87.21853248440785,88.80607604980469,300870500,0.0,0 -2010-05-28,88.70985781400258,88.77400234669302,87.27465601014012,87.69158935546875,297933500,0.0,0 -2010-06-01,86.87374410903631,88.15660391497201,86.08799515415735,86.21627807617188,277909400,0.0,0 -2010-06-02,86.65726510660264,88.46930192933033,86.2002461037507,88.46128845214844,240243700,0.0,0 -2010-06-03,88.71789349067438,89.046623575269,87.85998009120401,88.76599884033203,226618300,0.0,0 -2010-06-04,87.08221234027506,87.65950079285012,85.35836657693513,85.64701080322266,398475600,0.0,0 -2010-06-07,85.9517154109026,86.28045159640891,84.5165195349979,84.58065795898438,264609100,0.0,0 -2010-06-08,84.6447912790007,85.65504625807267,83.90714750508245,85.4866714477539,357774300,0.0,0 -2010-06-09,85.983763986446,86.81762444007998,84.66883184110428,85.0296401977539,268023300,0.0,0 -2010-06-10,86.48089760969755,87.61943567348031,85.02164296138385,87.51520538330078,317890600,0.0,0 -2010-06-11,86.74549951010997,87.99628760883522,86.68937455996615,87.9401626586914,214128200,0.0,0 -2010-06-14,88.61365783558195,89.09473580491908,87.71565867609498,87.8038558959961,207196100,0.0,0 -2010-06-15,88.42120103781261,89.88045530591313,88.2688593234925,89.80027770996094,238268700,0.0,0 -2010-06-16,89.33528294046108,90.13707152786533,89.15888847248632,89.76824951171875,216374000,0.0,0 -2010-06-17,90.02478649016105,90.06487835075326,89.03859033804699,89.91253662109375,263185800,0.0,0 -2010-06-18,90.09059173060568,90.33226896099696,89.72001506032818,90.0100326538086,174006600,0.531,0 -2010-06-21,91.12982358580625,91.1942671617272,89.25276691445609,89.75224304199219,213140700,0.0,0 -2010-06-22,89.75223306324625,90.14697681177817,88.1410270653459,88.2699203491211,239355400,0.0,0 -2010-06-23,88.32631148647594,88.64049616142475,87.39181521249729,87.99601745605469,254639900,0.0,0 -2010-06-24,87.56100699998908,87.67379094756151,86.3123196780973,86.53788757324219,268523600,0.0,0 -2010-06-25,86.7956659302658,87.34347621883796,86.01423003298136,86.90039825439453,238726500,0.0,0 -2010-06-28,87.0292662286061,87.262891769374,86.31228025526316,86.62646484375,169218600,0.0,0 -2010-06-29,85.41002075927246,86.61037356187646,83.420186665812,83.9518814086914,373649500,0.0,0 -2010-06-30,83.71825461178192,84.49163268334712,82.88042683102063,83.15433502197266,284101700,0.0,0 -2010-07-01,83.09794472659335,83.37184677676629,81.47062334125796,82.78376007080078,382924800,0.0,0 -2010-07-02,83.0657126479247,83.31544757151387,81.86536608924689,82.33261108398438,233385200,0.0,0 -2010-07-06,83.4926947255283,84.08078762197763,82.0748317195271,82.87238311767578,256935300,0.0,0 -2010-07-07,83.08183662959847,85.58726249509384,82.9932198063484,85.48253631591797,253769400,0.0,0 -2010-07-08,86.19951549501782,86.42508333721022,85.32141123130272,86.32841491699219,210842100,0.0,0 -2010-07-09,86.30425598666517,86.98096577179568,86.14313782872463,86.97290802001953,144999900,0.0,0 -2010-07-12,86.6828645191091,87.19844984598576,86.32034569892647,87.0292739868164,131283600,0.0,0 -2010-07-13,87.93156325972059,88.68882585358891,87.75432962724203,88.34242248535156,213025900,0.0,0 -2010-07-14,88.06045003637307,88.68076770426518,87.69793119397752,88.33435821533203,184426800,0.0,0 -2010-07-15,88.30216667699764,88.66468565616522,87.14209610963803,88.35855865478516,232337900,0.0,0 -2010-07-16,87.88324607662688,87.97992066881473,85.75645421860906,85.9256362915039,282693400,0.0,0 -2010-07-19,86.23979301104049,86.70703802246373,85.57114112810376,86.43313598632812,186709000,0.0,0 -2010-07-20,85.28919088691451,87.45625875367986,85.24890827885122,87.39181518554688,258162400,0.0,0 -2010-07-21,87.84294390102042,87.86711100542935,85.90143789666949,86.25590515136719,264527000,0.0,0 -2010-07-22,87.2790273457948,88.56799708164976,87.27097574098653,88.18130493164062,274781300,0.0,0 -2010-07-23,88.00407218072723,89.07552567239244,87.75433721134033,88.9466323852539,222020800,0.0,0 -2010-07-26,89.09968404795792,89.96167894900267,88.84994910304466,89.87306213378906,184445700,0.0,0 -2010-07-27,90.36447535499758,90.46114991515681,89.5105382521759,89.86500549316406,204855600,0.0,0 -2010-07-28,89.67971685458036,89.95362504357746,88.98689785132376,89.28497314453125,163056200,0.0,0 -2010-07-29,89.84085634235623,90.08253973445234,88.14103943066584,88.84996795654297,220149100,0.0,0 -2010-07-30,87.94766224605607,89.30913303844164,87.7946018829932,88.83382415771484,220070600,0.0,0 -2010-08-02,90.21947263095895,90.98479912105891,89.85695376203873,90.83979034423828,188263200,0.0,0 -2010-08-03,90.6142207519322,90.84784019416168,90.10668696972905,90.4047622680664,146657300,0.0,0 -2010-08-04,90.65450488009515,91.12175609660795,90.3564357028043,91.00897216796875,158171700,0.0,0 -2010-08-05,90.42893193545606,90.96063283735398,90.29198090785066,90.91229248046875,140473800,0.0,0 -2010-08-06,90.01805919771566,90.686711026877,89.35746511786981,90.54170227050781,239728300,0.0,0 -2010-08-09,90.9686706084633,91.17812906641386,90.48531013695283,91.02506256103516,120800400,0.0,0 -2010-08-10,90.2516934686404,91.01701992466923,89.71999874147677,90.53365325927734,242916300,0.0,0 -2010-08-11,89.13997680541853,89.17220166428099,87.90740514868028,88.05241394042969,273406900,0.0,0 -2010-08-12,86.72315449679029,87.82682654995916,86.6828718927825,87.51264190673828,239542600,0.0,0 -2010-08-13,87.2387581964807,87.77851078451788,87.15014136605504,87.25486755371094,158698500,0.0,0 -2010-08-16,86.65871630199298,87.49654417731307,86.34453161703085,87.21458435058594,147895300,0.0,0 -2010-08-17,87.96378973192542,88.93051083160458,87.71404863326906,88.28602600097656,172270300,0.0,0 -2010-08-18,88.24575044073899,88.92245398816542,87.73822278016917,88.44715118408203,182922100,0.0,0 -2010-08-19,87.98794300650833,88.20545306855338,86.54591318800689,86.90843200683594,265847600,0.0,0 -2010-08-20,86.65063194343955,86.95676492953746,85.99809566677632,86.62646484375,209714200,0.0,0 -2010-08-23,87.03734927231542,87.46431788094797,86.25591337518951,86.29619598388672,163490300,0.0,0 -2010-08-24,85.35362579470561,85.70809304165506,84.56413838537948,85.01527404785156,280677800,0.0,0 -2010-08-25,84.54804480110582,85.66783264376258,84.01634993912268,85.34559631347656,272234800,0.0,0 -2010-08-26,85.7483842270813,85.86116815398641,84.49163938315388,84.77360534667969,224439500,0.0,0 -2010-08-27,85.30531779955439,86.17537068418238,84.03246333644279,86.08675384521484,272649000,0.0,0 -2010-08-30,85.86119326900167,86.1270438085825,84.83002212352255,84.83807373046875,167238600,0.0,0 -2010-08-31,84.52388896415137,85.37783256284145,84.17747933125464,84.83807373046875,273933100,0.0,0 -2010-09-01,85.98201964377861,87.49655122524072,85.92562767389076,87.3757095336914,256828100,0.0,0 -2010-09-02,87.58515174391611,88.20546329715435,87.39986036521438,88.1893539428711,156112200,0.0,0 -2010-09-03,89.0513455722883,89.41386441987736,88.5760366637975,89.33330535888672,212197300,0.0,0 -2010-09-07,88.91437903641268,89.02716293136872,88.25378501755822,88.32628631591797,141973700,0.0,0 -2010-09-08,88.50354826576431,89.30109353458232,88.46326565626042,88.9466323852539,149924400,0.0,0 -2010-09-09,89.94558348165197,89.96975059021192,89.11581330768763,89.35749053955078,147017900,0.0,0 -2010-09-10,89.51860669870844,89.913350443901,89.31720595067466,89.80862426757812,127819000,0.0,0 -2010-09-13,90.6947798625826,90.99284901481008,90.33225485421421,90.80756378173828,178503500,0.0,0 -2010-09-14,90.63034849163859,91.26677567637597,90.29199666570646,90.75119018554688,209823600,0.0,0 -2010-09-15,90.4853351702058,91.20232139966114,90.21143308086941,91.09759521484375,168608400,0.0,0 -2010-09-16,90.81561735279253,91.12980199116242,90.50948431808993,91.07341003417969,199962900,0.0,0 -2010-09-17,91.5528626801122,91.64195389289245,90.85633475064795,91.10740661621094,195836900,0.602,0 -2010-09-20,91.42330626069426,92.70297488939453,91.13173603696085,92.50049591064453,214555200,0.0,0 -2010-09-21,92.57339710433024,93.01074628697381,91.93356275163315,92.31422424316406,268389100,0.0,0 -2010-09-22,92.16844403428483,92.68678978424022,91.60149912209262,91.86067199707031,191322400,0.0,0 -2010-09-23,91.10744629025925,92.06314738784917,90.85637431536335,91.11554718017578,202354300,0.0,0 -2010-09-24,92.1279049690535,93.05930920017823,92.04691464007875,92.99451446533203,209671800,0.0,0 -2010-09-27,93.02693345160283,93.13222028582139,92.45999483786072,92.54907989501953,128761800,0.0,0 -2010-09-28,92.67058314273477,93.17273326505008,91.66628907727257,92.87306213378906,209207500,0.0,0 -2010-09-29,92.63817918433082,93.06743980538519,92.34660896358386,92.71107482910156,179665800,0.0,0 -2010-09-30,93.18080371453661,93.78013960209903,91.9983213554048,92.43567657470703,287106700,0.0,0 -2010-10-01,93.13220574769176,93.23749874464131,92.27369707256369,92.8244400024414,174638700,0.0,0 -2010-10-04,92.63007974853882,93.01883590358955,91.66627789139747,92.1279296875,166153200,0.0,0 -2010-10-05,92.97832648358145,94.20939565062022,92.87303348604424,93.98262023925781,229634100,0.0,0 -2010-10-06,93.96643219256067,94.21751030253563,93.59387165101265,93.97453308105469,148626600,0.0,0 -2010-10-07,94.35519417003393,94.37949065626071,93.29420641034822,93.86114501953125,164860000,0.0,0 -2010-10-08,93.99073908466241,94.64676896132725,93.63437412490981,94.3875961303711,177760100,0.0,0 -2010-10-11,94.53339370025054,94.73587269423525,94.15273220289231,94.47669982910156,103098300,0.0,0 -2010-10-12,94.16890737056943,95.04361791778693,93.66676352911163,94.76824951171875,182210000,0.0,0 -2010-10-13,95.29466779734976,96.01549215173235,95.06788624995153,95.50524139404297,194347200,0.0,0 -2010-10-14,95.41617497239876,95.57816183404498,94.53336974830292,95.13270568847656,217764300,0.0,0 -2010-10-15,95.79683238340782,95.85352623783098,94.56576318200483,95.32707977294922,243705000,0.0,0 -2010-10-18,95.35948159314283,96.11270351086054,95.01121756281816,95.79683685302734,141204800,0.0,0 -2010-10-19,94.91404923147407,95.44859052882573,93.96644290302244,94.54148864746094,280604700,0.0,0 -2010-10-20,94.71154559469149,95.92641916597623,94.65485174186486,95.46476745605469,200051800,0.0,0 -2010-10-21,95.89401179608313,96.45284937876531,94.93021021936917,95.67533111572266,221585500,0.0,0 -2010-10-22,95.82114876487064,95.99933125267779,95.57007681159766,95.85354614257812,108212400,0.0,0 -2010-10-25,96.49337361737558,96.99552366753697,96.06411920668697,96.13700866699219,151145700,0.0,0 -2010-10-26,95.65106343485192,96.25039945113971,95.46478624426072,96.15321350097656,158982900,0.0,0 -2010-10-27,95.4809582965591,95.9831082388497,94.9707136465296,95.87781524658203,190024000,0.0,0 -2010-10-28,96.42858424497227,96.46908251129014,95.43239115689845,95.89404296875,168576000,0.0,0 -2010-10-29,95.79683737318396,96.15320229335823,95.62675580105541,95.9669189453125,144305500,0.0,0 -2010-11-01,96.43666860325033,96.98741156326057,95.44857039448195,95.99931335449219,174074800,0.0,0 -2010-11-02,96.72012949071951,96.987403149413,96.46095671903178,96.76062774658203,158345900,0.0,0 -2010-11-03,96.93069380526062,97.20606212777858,95.93449495443879,97.14936828613281,226702800,0.0,0 -2010-11-04,98.22658166105705,99.06889478675654,97.1655940006007,99.02030181884766,215039400,0.0,0 -2010-11-05,99.08511129462568,99.55486401410766,98.95552795979816,99.39288330078125,180654100,0.0,0 -2010-11-08,99.08512299437679,99.36859854492238,98.76116152947131,99.20661163330078,156107100,0.0,0 -2010-11-09,99.47384798277743,99.57913480134776,98.09699373737104,98.49385070800781,186621600,0.0,0 -2010-11-10,98.46957825529903,98.93933096817214,97.72445709781148,98.89073181152344,221387400,0.0,0 -2010-11-11,98.04030300796973,98.66393541026775,97.74063195902995,98.51815032958984,158017600,0.0,0 -2010-11-12,97.85404065603683,98.28329510255202,96.90644051797486,97.35189056396484,239068800,0.0,0 -2010-11-15,97.65965142580673,98.0403128513048,97.173703167813,97.21419525146484,163940800,0.0,0 -2010-11-16,96.61486395477681,96.77684465556894,95.23800328137321,95.69966125488281,299566200,0.0,0 -2010-11-17,95.74016723747563,96.14512522740448,95.45669788035916,95.7482681274414,172308900,0.0,0 -2010-11-18,96.67153778109139,97.50574995768416,96.66343689398053,97.15748596191406,197723700,0.0,0 -2010-11-19,97.1089303102453,97.46528915088547,96.58248367075545,97.42479705810547,156852900,0.0,0 -2010-11-22,96.93883022131479,97.38428023203791,96.19370294193696,97.34378814697266,181361000,0.0,0 -2010-11-23,96.19368969630517,96.39616863125326,95.5619564079338,95.93451690673828,222309000,0.0,0 -2010-11-24,96.54197464852697,97.37619323192915,96.52577904905216,97.35189056396484,140046100,0.0,0 -2010-11-26,96.50956485766348,97.03600515794848,96.2179946899414,96.2179946899414,76007800,0.0,0 -2010-11-29,95.9750274673561,96.76874771292405,95.35948969604836,96.50957489013672,223642300,0.0,0 -2010-11-30,95.55386634692906,96.51766192232411,95.41617596830089,95.9669189453125,233930700,0.0,0 -2010-12-01,97.3518908456806,98.19420414167362,97.3437961355038,98.00792694091797,221037200,0.0,0 -2010-12-02,98.16180429050637,99.33618604920474,98.10511042485665,99.26329040527344,191213600,0.0,0 -2010-12-03,98.92313401905096,99.64395872298925,98.89883752912448,99.53057098388672,151288900,0.0,0 -2010-12-06,99.31997706687713,99.65204552671642,99.21469023235534,99.4252700805664,103050500,0.0,0 -2010-12-07,100.3809942830932,100.4376881577709,99.42529312483401,99.48198699951172,206581000,0.0,0 -2010-12-08,99.60344925205104,99.9274106334309,99.14179748650075,99.84642028808594,138019200,0.0,0 -2010-12-09,100.40528822371492,100.44578031650207,99.74115734615198,100.2352066040039,123705100,0.0,0 -2010-12-10,100.54294664361102,100.91550716909545,100.21088437968307,100.81832122802734,117571700,0.0,0 -2010-12-13,101.28000387492253,101.4014863383085,100.85074318067223,100.88314056396484,133812700,0.0,0 -2010-12-14,101.03700850010152,101.42577085083961,100.66444792769349,100.97221374511719,147249600,0.0,0 -2010-12-15,100.78594134362686,101.18279842324345,100.34048510587581,100.51056671142578,160823100,0.0,0 -2010-12-16,100.57537371312027,101.16661513891344,100.22710957007367,101.09371948242188,185035200,0.0,0 -2010-12-17,101.02283820396016,101.33222247607084,100.81115095900945,101.20195770263672,141075300,0.653,0 -2010-12-20,101.4787881486908,101.69047542267943,100.94143579061297,101.44622039794922,119085500,0.0,0 -2010-12-21,101.76375282276412,102.15455963774085,101.66605577776762,102.08942413330078,94965500,0.0,0 -2010-12-22,102.1626954690601,102.4395120246806,102.10570345986393,102.40694427490234,78878100,0.0,0 -2010-12-23,102.2929818801979,102.4069659226853,102.00802177397941,102.26041412353516,70053700,0.0,0 -2010-12-27,101.87775754893164,102.39882926699472,101.80448475029692,102.30113220214844,58126000,0.0,0 -2010-12-28,102.50466200015487,102.54536703437878,102.17899066804344,102.44766998291016,55309100,0.0,0 -2010-12-29,102.5697821592864,102.74889546406247,102.50464666027888,102.52092742919922,58033100,0.0,0 -2010-12-30,102.42325929668596,102.69193243550247,102.20342847841403,102.35812377929688,76616900,0.0,0 -2010-12-31,102.20341829266066,102.48024110814323,102.04058572708094,102.38253784179688,91218900,0.0,0 -2011-01-03,103.16415615938526,103.88877171205556,102.34183733011962,103.44097900390625,138725200,0.0,0 -2011-01-04,103.66890930136293,103.70147704835219,102.74075025298812,103.38394927978516,137409700,0.0,0 -2011-01-05,103.058309495029,103.98646882685885,102.96060622422314,103.92133331298828,133975300,0.0,0 -2011-01-06,103.96203611823842,104.07602015242183,103.40839671863438,103.71778106689453,122519000,0.0,0 -2011-01-07,103.85618855006605,104.02716460000141,102.70820472573888,103.51423645019531,156034600,0.0,0 -2011-01-10,103.05827802155515,103.53050103540552,102.7488875309885,103.38394927978516,122401700,0.0,0 -2011-01-11,103.75846392383075,104.00271269668293,103.35951370167959,103.75032043457031,110287000,0.0,0 -2011-01-12,104.38541988336375,104.80064481079931,103.77478220135505,104.68666076660156,107929200,0.0,0 -2011-01-13,104.72734135351982,104.77618986911266,104.25511833057996,104.5156478881836,129048400,0.0,0 -2011-01-14,104.36913024534532,105.2972895597366,104.29585745236598,105.27286529541016,117677900,0.0,0 -2011-01-18,105.1751363486865,105.54966237125502,105.05301504965678,105.45196533203125,114401300,0.0,0 -2011-01-19,105.36241495771947,105.46824928519786,104.14115216532181,104.41796875,151958400,0.0,0 -2011-01-20,104.18184539649644,104.54007821775494,103.50607857045368,104.27954864501953,175745700,0.0,0 -2011-01-21,104.9308851173736,105.16699041718083,104.40166387735849,104.5156478881836,151462900,0.0,0 -2011-01-24,104.4505387311527,105.23215244770584,104.42611446719748,105.11003112792969,113715500,0.0,0 -2011-01-25,104.83318503274019,105.25655957792797,104.30397616875037,105.16699981689453,167552200,0.0,0 -2011-01-26,105.42754348809922,105.88347957935986,105.21585000049483,105.57408905029297,141281500,0.0,0 -2011-01-27,105.59851512151607,106.01375240150587,105.41125831439287,105.83463287353516,123302700,0.0,0 -2011-01-28,105.9567447754349,106.12772700908107,103.81546654393472,103.98644256591797,295637300,0.0,0 -2011-01-31,104.27140864477339,104.84946599554195,104.0108666555123,104.7680435180664,149249200,0.0,0 -2011-02-01,105.40310838535557,106.63250824949345,105.33797288997187,106.44525146484375,167194300,0.0,0 -2011-02-02,106.16843690011102,106.52667596163596,106.1114510985014,106.2417221069336,118323600,0.0,0 -2011-02-03,106.05447720480325,106.64068445390983,105.49270664579528,106.47785186767578,145886700,0.0,0 -2011-02-04,106.51853840031667,106.81977923610722,106.03002833165301,106.77906799316406,134634800,0.0,0 -2011-02-07,107.01518159328616,107.79678276480915,107.00703189101768,107.44669342041016,112439100,0.0,0 -2011-02-08,107.5444209499403,107.99221988522595,107.25131732169243,107.93523406982422,99072800,0.0,0 -2011-02-09,107.64213046974052,107.98408263223082,107.15362028142287,107.69097900390625,146436700,0.0,0 -2011-02-10,107.14548978872931,107.85381842567128,106.9012346790949,107.73169708251953,162708500,0.0,0 -2011-02-11,107.30829513381762,108.5132709657619,107.2838708713904,108.37486267089844,137710300,0.0,0 -2011-02-14,108.30972612389556,108.72495100450112,108.18760481293147,108.63539123535156,101690700,0.0,0 -2011-02-15,108.30159910557701,108.464431676733,107.73167889486666,108.29344940185547,119575400,0.0,0 -2011-02-16,108.65982051743688,109.10760690934748,108.43998974935182,108.97734832763672,130183500,0.0,0 -2011-02-17,108.65985408202906,109.44959278861528,108.5621445864054,109.30304718017578,109810500,0.0,0 -2011-02-18,109.40070434404082,109.66124633955292,109.14831205046731,109.53097534179688,130002400,0.0,0 -2011-02-22,108.38302154732695,109.55543607076308,107.03963715283237,107.3327407836914,233116400,0.0,0 -2011-02-23,107.26761578051288,107.52815788830223,106.01379105093821,106.67327117919922,227584000,0.0,0 -2011-02-24,106.55926912948443,107.0152053178386,105.59853579831295,106.59996795654297,260431400,0.0,0 -2011-02-25,107.04775323044045,107.80494263656531,106.98261772278138,107.73980712890625,141686900,0.0,0 -2011-02-28,108.13873520682999,108.54582272845187,107.7804962000707,108.40740203857422,141585500,0.0,0 -2011-03-01,108.74940271306303,108.84709977533053,106.56740641023026,106.59996795654297,258565500,0.0,0 -2011-03-02,106.45338539610341,107.32455864322932,106.12772035274938,106.82791137695312,200277400,0.0,0 -2011-03-03,107.79678772401056,108.79008242698457,107.78865044469435,108.66796112060547,176480100,0.0,0 -2011-03-04,108.5865199538924,108.79821341296795,107.14543909322074,107.85376739501953,277202300,0.0,0 -2011-03-07,108.17134207927774,108.41559717928858,106.44529423964059,107.00706481933594,216790400,0.0,0 -2011-03-08,107.17802505399975,108.28530384589844,106.71395164050497,107.94335174560547,174615000,0.0,0 -2011-03-09,107.73166471079152,108.12246531477838,107.14545759314763,107.78865051269531,153806000,0.0,0 -2011-03-10,106.6569461073766,106.80349167318212,105.6880756779055,105.7939224243164,301291800,0.0,0 -2011-03-11,105.45196763833593,106.90933567304538,105.42754337799582,106.52667236328125,225621800,0.0,0 -2011-03-14,105.83465824162465,106.23359621227917,105.0774687058305,105.88350677490234,234974100,0.0,0 -2011-03-15,103.06643820132302,105.29728277832024,102.99316541306264,104.67036437988281,359585400,0.0,0 -2011-03-16,104.33654006015018,104.67850455422584,101.99986136503645,102.73262023925781,468670300,0.0,0 -2011-03-17,104.21442030176837,104.53194811669225,103.48166141668887,104.09229278564453,254303700,0.0,0 -2011-03-18,105.35401813760552,105.38673360708057,104.26646584617933,104.47089385986328,230435400,0.553,0 -2011-03-21,105.77110425878321,106.3107849617073,105.64843991202237,106.09001159667969,153992600,0.0,0 -2011-03-22,106.07361518577797,106.21262474625671,105.6238710328782,105.72199249267578,129538600,0.0,0 -2011-03-23,105.42762017540096,106.3025781539243,104.92882774842232,106.0245590209961,148603100,0.0,0 -2011-03-24,106.6296495169757,107.19387284471152,106.03272319627226,107.03850555419922,159129800,0.0,0 -2011-03-25,107.31656273432199,107.83171297951155,107.0303584490952,107.3656234741211,155642800,0.0,0 -2011-03-28,107.59458285739115,107.8726020368965,107.07124749943436,107.10395050048828,109762400,0.0,0 -2011-03-29,107.0139925278071,107.8562351027581,106.66238226793155,107.82353210449219,129798800,0.0,0 -2011-03-30,108.38775216317836,108.8865570930308,108.23238485231154,108.5676498413086,135835000,0.0,0 -2011-03-31,108.42862578002074,108.72300262514634,108.30596148279571,108.42044067382812,132537100,0.0,0 -2011-04-01,109.09096241258757,109.38533923572176,108.61668794879945,108.87834930419922,153850100,0.0,0 -2011-04-04,109.10731705170463,109.30357244310251,108.65758538869075,108.96830749511719,100768900,0.0,0 -2011-04-05,108.75570231940684,109.43440481611921,108.70664159292329,108.95195770263672,120791500,0.0,0 -2011-04-06,109.47531547134926,109.57343694453431,108.85384620171537,109.29541778564453,120411600,0.0,0 -2011-04-07,109.09915111693066,109.55706791432686,108.47769438864964,109.01738739013672,170731500,0.0,0 -2011-04-08,109.49983559348507,109.56525406191982,108.1914911793843,108.6412353515625,147945400,0.0,0 -2011-04-11,108.75572230479816,109.12369029833977,108.05248931561506,108.31416320800781,121385400,0.0,0 -2011-04-12,107.70904381819645,107.92164448225475,107.11211745108491,107.5046157836914,161187400,0.0,0 -2011-04-13,108.0033992461572,108.08516295734928,107.08756582612081,107.49642181396484,162059000,0.0,0 -2011-04-14,106.87499113124684,107.74176414057378,106.52338084445532,107.5782241821289,161220400,0.0,0 -2011-04-15,107.77447543219779,108.24056491952562,107.45556815856342,107.97071838378906,170006700,0.0,0 -2011-04-18,106.78502841359085,107.96253592514125,105.90189777992805,106.760498046875,210759300,0.0,0 -2011-04-19,106.92407311081125,107.40653292841476,106.66241162078194,107.37381744384766,124258800,0.0,0 -2011-04-20,108.65759622242362,109.07462493376588,108.58399264500065,108.83749389648438,156133800,0.0,0 -2011-04-21,109.40171968902082,109.4426077981958,108.83750870068282,109.39354705810547,135935400,0.0,0 -2011-04-25,109.31173283578221,109.45892748217776,108.91923457421869,109.2790298461914,65757100,0.0,0 -2011-04-26,109.61429958474217,110.44018423920586,109.49982040018982,110.21939849853516,146600000,0.0,0 -2011-04-27,110.43203305825098,111.10255056162586,109.98228886112882,110.93901062011719,143031000,0.0,0 -2011-04-28,110.74270132768606,111.44593396361917,110.72635607559558,111.29875183105469,124791100,0.0,0 -2011-04-29,111.33968203989198,111.67494699396566,111.1924873743465,111.56045532226562,115094100,0.0,0 -2011-05-02,112.08380847549431,112.1737448322531,111.16796239857256,111.38874816894531,126278700,0.0,0 -2011-05-03,111.17614276448013,111.36421305410519,110.42383665138692,110.9880599975586,138375000,0.0,0 -2011-05-04,110.93895773800423,110.98801844934093,109.76145075675657,110.25208282470703,182678500,0.0,0 -2011-05-05,109.63887292019436,110.35027866894053,108.77209982923921,109.25454711914062,226900000,0.0,0 -2011-05-06,110.34210349665264,110.90632699913591,109.31177797827452,109.73699188232422,222787200,0.0,0 -2011-05-09,109.72878401383022,110.48107761645832,109.55705899014637,110.16217041015625,114104500,0.0,0 -2011-05-10,110.53014308781383,111.2987944583766,110.39113352805407,111.1025390625,114806900,0.0,0 -2011-05-11,110.93899462900787,110.9553523639902,109.42623479148462,109.93321228027344,193564200,0.0,0 -2011-05-12,109.63886879992131,110.68553956596305,109.07464530565042,110.45658111572266,171550700,0.0,0 -2011-05-13,110.51380119717795,110.66916851486079,109.2136417659872,109.60614013671875,157444900,0.0,0 -2011-05-16,109.21365185057907,110.07225225364074,108.73120459228802,108.91110229492188,141675400,0.0,0 -2011-05-17,108.50222365924209,109.04191665528174,108.03612175976326,108.89472198486328,192686200,0.0,0 -2011-05-18,108.9519491640659,109.98226177136186,108.71480570158613,109.86778259277344,135217900,0.0,0 -2011-05-19,110.22762768030351,110.41569802785018,109.52439455762867,110.1294937133789,119489500,0.0,0 -2011-05-20,109.84330100682719,110.12949284173303,109.05011903250781,109.25454711914062,182594900,0.0,0 -2011-05-23,107.92163445524126,108.5267458729821,107.60272725013499,107.98705291748047,168700000,0.0,0 -2011-05-24,108.2977934094678,108.53492443040415,107.69268195867325,107.89710998535156,147199600,0.0,0 -2011-05-25,107.46371529203742,108.70664109217657,107.43101230029757,108.25689697265625,151050100,0.0,0 -2011-05-26,107.96254779150732,108.95198510788798,107.75811972820789,108.75572967529297,164850000,0.0,0 -2011-05-27,109.05824268478456,109.4670986744281,108.72299025602075,109.17272186279297,120921900,0.0,0 -2011-05-31,110.203070223645,110.32572205553163,109.4425914340562,110.30936431884766,164731200,0.0,0 -2011-06-01,109.99046288222613,110.32572787680262,107.74175434547313,107.83170318603516,233094300,0.0,0 -2011-06-02,107.90530690989051,108.13426532666247,107.08759471361982,107.71722412109375,200466800,0.0,0 -2011-06-03,106.42523320390612,107.46373114631949,106.36799984059377,106.6460189819336,234690200,0.0,0 -2011-06-06,106.37614767535679,106.59693340192165,105.37853806915349,105.51754760742188,179951200,0.0,0 -2011-06-07,106.05728571756389,106.35984776140934,105.36223772991858,105.45218658447266,161660500,0.0,0 -2011-06-08,105.28860872756974,105.64023142952877,104.81433419777431,105.01058959960938,198696400,0.0,0 -2011-06-09,105.2968080890392,106.24534479974312,105.0433192923296,105.81195831298828,160964400,0.0,0 -2011-06-10,105.36222679679354,105.4276327957733,104.06206109502158,104.34008026123047,238629400,0.0,0 -2011-06-13,104.57718887311954,104.8633930686687,103.89031377655567,104.42182159423828,207599800,0.0,0 -2011-06-14,105.37856342569305,106.11451186556411,105.3376877990037,105.74654388427734,160570400,0.0,0 -2011-06-15,104.86342275498397,105.73019573802156,103.58778741093602,103.86580657958984,300958000,0.0,0 -2011-06-16,103.89850167622994,104.64262271219522,103.29339644431924,104.09475708007812,308032800,0.0,0 -2011-06-17,105.12853980575493,105.13675922242294,104.05202819662854,104.40538787841797,233284900,0.628,0 -2011-06-20,104.05202678773271,105.16140977893184,104.01915539108367,104.93952941894531,159479000,0.0,0 -2011-06-21,105.48189486170781,106.58305840296956,104.98061704976699,106.37761688232422,193157300,0.0,0 -2011-06-22,106.0489160558263,106.67345376797195,105.67089813850434,105.73664093017578,176703000,0.0,0 -2011-06-23,104.49579655977067,105.71200706622203,103.69868231549414,105.43260955810547,334286500,0.0,0 -2011-06-24,105.40794446121768,105.49011355029934,104.05202909981071,104.20816040039062,226129300,0.0,0 -2011-06-27,104.27389241689602,105.53940660251635,104.06845090669336,105.13674926757812,168904700,0.0,0 -2011-06-28,105.55585020782958,106.5255407001987,105.40793833258891,106.50910186767578,165556300,0.0,0 -2011-06-29,106.9939427692399,107.59382850598958,106.52554261672876,107.4212646484375,244295500,0.0,0 -2011-06-30,107.76639613375352,108.62102728345198,107.4130427614146,108.4484634399414,223322700,0.0,0 -2011-07-01,108.54705495656985,110.19881244420296,108.29230953328283,110.05088806152344,202385700,0.0,0 -2011-07-05,109.93590404229123,110.18243646127303,109.61541565936281,109.96055603027344,165936000,0.0,0 -2011-07-06,109.69754345663854,110.23168631956469,109.38526837662745,110.09198760986328,143331600,0.0,0 -2011-07-07,111.06990984578799,111.51365802559745,110.8398163393452,111.23426055908203,170464200,0.0,0 -2011-07-08,109.97692773389934,111.23422851011918,109.61534874533771,110.44532775878906,194100500,0.0,0 -2011-07-11,109.08943993700387,109.44279330934279,108.19371797817998,108.4484634399414,195918600,0.0,0 -2011-07-12,108.21839123778648,109.11411337276088,107.94720689121353,107.98007202148438,214675700,0.0,0 -2011-07-13,108.54707053324621,109.47567014804062,108.07867042237544,108.34162902832031,204062600,0.0,0 -2011-07-14,108.61283614541256,109.11411402434561,107.38840000463324,107.59384155273438,226111800,0.0,0 -2011-07-15,108.19374706358008,108.36631095348048,107.46237560549105,108.21839904785156,220012800,0.0,0 -2011-07-18,107.71711031174561,107.88146103675996,106.52555188144588,107.33087921142578,196872100,0.0,0 -2011-07-19,107.93077400247064,109.20451417109398,107.90612201862018,109.07302856445312,166554900,0.0,0 -2011-07-20,109.35242361787917,109.41815387302842,108.81826811633346,109.00727081298828,137145400,0.0,0 -2011-07-21,109.62359069417786,110.79050956902417,109.02370496325092,110.51932525634766,245246300,0.0,0 -2011-07-22,110.54396539460379,110.70831608612423,109.91941521201053,110.59326934814453,126019400,0.0,0 -2011-07-25,109.54145459314832,110.51935853475906,109.42640780820348,109.97698974609375,136653800,0.0,0 -2011-07-26,109.9030129571861,110.08380251914532,109.31955345465286,109.56608581542969,131278200,0.0,0 -2011-07-27,108.9579766843797,108.99085435407707,107.18295869543184,107.32266998291016,249020100,0.0,0 -2011-07-28,107.32265108792404,108.2841158612082,106.83779958892723,107.0103759765625,207939900,0.0,0 -2011-07-29,105.93388192377606,107.28157796568648,105.161419703567,106.27902221679688,307038400,0.0,0 -2011-08-01,107.5198623511609,107.61848279954724,104.79981884883917,105.8270263671875,325790900,0.0,0 -2011-08-02,105.0299099459369,105.59693048946012,103.12341308593751,103.1234130859375,346653800,0.0,0 -2011-08-03,103.26312428986317,103.79726720379146,101.51275860036888,103.68222045898438,370830800,0.0,0 -2011-08-04,102.24411993907026,102.40847689394245,98.66121982735437,98.82557678222656,520721800,0.0,0 -2011-08-05,100.05824061830045,100.31298609928487,96.03158553367028,98.67767333984375,655619200,0.0,0 -2011-08-08,96.07265465550336,98.71052244976273,92.05421362490263,92.2514419555664,702263900,0.0,0 -2011-08-09,93.73885887616558,96.67256360551052,90.61614518500488,96.54108428955078,717828700,0.0,0 -2011-08-10,94.71676955018332,95.55496827647775,91.99671929172467,92.276123046875,662607400,0.0,0 -2011-08-11,93.07322108551764,97.72441349378184,92.30075902124277,96.41780853271484,487979700,0.0,0 -2011-08-12,97.29714070254174,97.96276946446356,96.37676009935733,97.06704711914062,313731600,0.0,0 -2011-08-15,97.9462885892643,99.22002208906405,97.79015104771344,99.12141418457031,258810600,0.0,0 -2011-08-16,98.17641647500167,99.17897231931353,97.22316460022023,98.2750244140625,294095200,0.0,0 -2011-08-17,98.81737750986811,99.59805282851818,97.56007632929915,98.34075164794922,238201100,0.0,0 -2011-08-18,95.7357538166127,98.37362233251507,93.18006065951285,94.1004409790039,512956300,0.0,0 -2011-08-19,92.82668556940071,95.22624075786362,92.44867396597795,92.563720703125,428281300,0.0,0 -2011-08-22,94.64281592443005,94.69212616191876,92.37474562647162,92.63771057128906,275090600,0.0,0 -2011-08-23,92.98284332322443,95.79328211792497,92.514436857441,95.68645477294922,331136600,0.0,0 -2011-08-24,95.48100412993472,97.16562085492123,95.25912377437707,97.03414154052734,246869700,0.0,0 -2011-08-25,97.56827730685366,98.11885900730404,95.21802610868205,95.55494689941406,312365400,0.0,0 -2011-08-26,95.07013772049736,97.38751825209931,93.55808458812182,96.94376373291016,314495900,0.0,0 -2011-08-29,98.25034139066918,99.78704607455086,97.0176923851874,99.72952270507812,190977200,0.0,0 -2011-08-30,99.29400794316038,100.60883256279878,98.00383530551858,99.99250793457031,241315700,0.0,0 -2011-08-31,100.63347852243993,101.49633545815392,99.68023308134042,100.4362564086914,301828400,0.0,0 -2011-09-01,100.49379016857397,101.40595115956711,99.25292144098877,99.38440704345703,254585900,0.0,0 -2011-09-02,97.313552666107,99.32688363371865,96.50000587717845,96.84514617919922,255517200,0.0,0 -2011-09-06,94.00180699000512,96.27810219387524,93.99358757498247,96.13839721679688,285130500,0.0,0 -2011-09-07,97.5929415142168,98.89132715704075,97.26423382797142,98.8502426147461,209803200,0.0,0 -2011-09-08,98.25857888216926,99.3844007713337,97.60116345047444,97.82304382324219,250568200,0.0,0 -2011-09-09,96.70542710132924,97.83946197084288,94.7331873664373,95.25911712646484,380195100,0.0,0 -2011-09-12,94.06757469345901,95.94941997931805,93.72243440598574,95.87545776367188,305793500,0.0,0 -2011-09-13,96.18773109888737,97.11632459842096,95.50566368448696,96.75474548339844,272514700,0.0,0 -2011-09-14,97.24777597017423,99.26932565074223,95.91651919221044,98.09420013427734,319389500,0.0,0 -2011-09-15,99.14608700634966,99.81993499690094,98.11887932138868,99.78706359863281,326777200,0.0,0 -2011-09-16,100.18766689726777,100.74935906934088,99.3864288854268,100.37764739990234,284528300,0.625,0 -2011-09-19,98.73390385868723,99.89033000668185,98.06483147608282,99.3781967163086,241517000,0.0,0 -2011-09-20,99.79944013369496,100.76587915466106,99.1303679348744,99.26252746582031,218932200,0.0,0 -2011-09-21,99.31210863693623,99.61773114585503,96.18150086726396,96.33843994140625,316251300,0.0,0 -2011-09-22,93.54650400201828,94.33948023334327,91.93577201682922,93.22435760498047,513911300,0.0,0 -2011-09-23,92.60482827867801,94.29816678144553,92.53048342193496,93.7860336303711,307242500,0.0,0 -2011-09-26,94.66986722735248,96.14843932496494,93.3234609561698,96.01627349853516,260673700,0.0,0 -2011-09-27,97.90787414300468,98.75867134109308,96.51190225370541,97.09011840820312,311753900,0.0,0 -2011-09-28,97.28835197674296,97.87482371684526,94.96724453602603,95.107666015625,286696800,0.0,0 -2011-09-29,96.68536977309181,97.16445522710043,94.10819240118728,95.8593521118164,298108900,0.0,0 -2011-09-30,94.53769371022003,95.36371115216869,93.39779190905553,93.46387481689453,288392300,0.0,0 -2011-10-03,92.9187261482416,94.1247111929839,90.70499853545057,90.80412292480469,365136800,0.0,0 -2011-10-04,89.4989918550771,92.99304853547078,88.7390572931141,92.7947998046875,459177500,0.0,0 -2011-10-05,93.02611144148204,94.76074727273948,92.16705231603707,94.512939453125,284108000,0.0,0 -2011-10-06,94.46337826621455,96.36322136810396,93.76126452926046,96.22279357910156,257800800,0.0,0 -2011-10-07,96.7844760935523,96.85055901090448,95.04157853597535,95.5784912109375,312657900,0.0,0 -2011-10-10,97.20575746277706,98.8164893621009,97.1974955216995,98.77519226074219,230666300,0.0,0 -2011-10-11,98.18869316656989,99.15513203728257,98.0895688072611,98.87428283691406,209088000,0.0,0 -2011-10-12,99.61771902722822,100.88978685845292,99.39469705320178,99.74162292480469,281544900,0.0,0 -2011-10-13,99.15515146479532,99.84074757148146,98.39521680057202,99.54338073730469,212538800,0.0,0 -2011-10-14,100.69981909225915,101.26976701004249,100.13812681388245,101.24498748779297,211397600,0.0,0 -2011-10-17,100.76586655195082,101.2284406074422,99.06427262850137,99.31208038330078,202311600,0.0,0 -2011-10-18,99.23774998339691,102.01316951234739,98.46129145386494,101.25323486328125,318857900,0.0,0 -2011-10-19,101.08803349375547,101.66624960568586,99.7085855886597,100.05551147460938,226601300,0.0,0 -2011-10-20,100.30332219107301,100.85675249691388,98.97343328765486,100.4933090209961,262075600,0.0,0 -2011-10-21,101.67452094623681,102.5253245150969,101.36889841466065,102.40142059326172,278999400,0.0,0 -2011-10-24,102.56660132216902,103.91301400988725,102.4757388842734,103.65694427490234,203215600,0.0,0 -2011-10-25,103.16130255919123,103.21086158173227,101.41840551036157,101.64143371582031,268596800,0.0,0 -2011-10-26,102.71528544032913,103.06221131356597,100.9476083124873,102.67398834228516,289053800,0.0,0 -2011-10-27,105.42463973219604,106.90321221281025,104.58210442750735,106.25066375732422,393220200,0.0,0 -2011-10-28,105.73025262430988,106.43237262475452,105.56505162539007,106.22586822509766,225906500,0.0,0 -2011-10-31,105.03639912513638,106.24237774088385,103.51652349181106,103.66520690917969,228146700,0.0,0 -2011-11-01,100.79891892205772,102.0214276483729,100.37764821408248,100.77413940429688,416565800,0.0,0 -2011-11-02,102.28575581188626,102.7565855682904,101.42669679454973,102.41791534423828,244717600,0.0,0 -2011-11-03,103.47520621813658,104.49121048426863,102.09575854873258,104.28470611572266,291174800,0.0,0 -2011-11-04,103.44217725971224,103.83040020213684,102.43443487253573,103.648681640625,249401600,0.0,0 -2011-11-07,103.57435400441754,104.40037166538396,102.59139097122282,104.2929916381836,196617200,0.0,0 -2011-11-08,104.83817299554175,105.74679757669732,103.83869225828604,105.63114929199219,224426300,0.0,0 -2011-11-09,103.16134497322358,103.91302406820756,101.4845301330465,101.73233795166016,337982000,0.0,0 -2011-11-10,103.07876588792045,103.20266982297507,101.61671079790469,102.69053649902344,231866500,0.0,0 -2011-11-11,103.93779409065966,104.89597121089984,103.90475263106323,104.6233901977539,189924400,0.0,0 -2011-11-14,104.23515960292683,105.27593720795016,103.18611375559172,103.63216400146484,159258300,0.0,0 -2011-11-15,103.39262331386132,104.69773265749937,103.02091790807236,104.14430236816406,184709400,0.0,0 -2011-11-16,103.09526077811664,104.35906677304713,102.34358799440598,102.49227142333984,235782500,0.0,0 -2011-11-17,102.30228976972586,102.5583595393054,100.13812745260005,100.86502075195312,331219600,0.0,0 -2011-11-18,101.18716343459845,101.3936678497711,100.33636625240948,100.75763702392578,215580400,0.0,0 -2011-11-21,99.28729908370106,99.4112029667383,98.00697576435175,98.84125518798828,229611600,0.0,0 -2011-11-22,98.62650401873714,99.20471382566036,97.89960448773165,98.45304107666016,216494900,0.0,0 -2011-11-23,97.52790519565806,98.45304724672827,96.2806167602539,96.2806167602539,224329100,0.0,0 -2011-11-25,96.13191841075157,97.22226130437397,95.9832350024388,96.098876953125,99557000,0.0,0 -2011-11-28,98.74213925814621,99.27078998906305,98.14740561036129,98.88256072998047,210686000,0.0,0 -2011-11-29,99.16341400146484,99.94812818958572,98.79996424594911,99.16341400146484,199241500,0.0,0 -2011-11-30,102.00490827248801,103.4339214459256,99.1221087087718,103.24393463134766,324439500,0.0,0 -2011-12-01,103.12830785894866,103.78086259359884,102.78138193987334,103.22743225097656,176954800,0.0,0 -2011-12-02,104.17733477186414,104.49121916941887,103.07046798740971,103.13655090332031,221109700,0.0,0 -2011-12-05,104.77205263926973,105.05290185549853,103.61563322542511,104.25992584228516,225263900,0.0,0 -2011-12-06,104.25168823432942,104.99510538960212,103.87998280770039,104.2929916381836,178842100,0.0,0 -2011-12-07,103.94604434012912,105.11899403794335,103.22741311270879,104.68120574951172,237802500,0.0,0 -2011-12-08,103.99561818390836,104.22690210599579,102.13707856454468,102.38488006591797,240862800,0.0,0 -2011-12-09,102.84743161257008,104.3838245311339,102.75656919142824,104.11949920654297,209111400,0.0,0 -2011-12-12,103.21092949380025,103.22745338019455,101.73236306433522,102.59967803955078,215826100,0.0,0 -2011-12-13,103.1365230479207,103.72299458870049,101.14581828236179,101.64143371582031,245159800,0.0,0 -2011-12-14,101.23671374892237,101.624943024296,100.33635760136573,100.55937957763672,238618800,0.0,0 -2011-12-15,101.62495004284877,101.76537153027343,100.76589093422778,100.92283630371094,199109200,0.0,0 -2011-12-16,101.60446625747416,102.20296550106893,100.8313975997671,101.07245635986328,220481400,0.77,0 -2011-12-19,101.46315763586144,101.67928608303225,99.77570810068075,99.99183654785156,183903000,0.0,0 -2011-12-20,101.5628948606091,103.19215644553279,100.05832298892588,103.01759338378906,225418100,0.0,0 -2011-12-21,103.0176022975239,103.37504279068399,102.03671952619965,103.21710205078125,194230900,0.0,0 -2011-12-22,103.59945863288054,104.23952946277674,103.26696122418706,104.13146209716797,119465400,0.0,0 -2011-12-23,104.46397918199679,105.09573575472086,104.24785710715575,105.06248474121094,92187200,0.0,0 -2011-12-27,104.87958240358803,105.419900146199,104.78814372367013,105.14558410644531,86075700,0.0,0 -2011-12-28,105.16225819895007,105.17888053794108,103.68262269139026,103.7657470703125,119107100,0.0,0 -2011-12-29,104.1065412114843,104.94611188229779,103.79066608853643,104.83805084228516,123507200,0.0,0 -2011-12-30,104.75493580840326,105.01262962234586,104.32268524169922,104.32268524169922,95599000,0.0,0 -2012-01-03,106.2013274306267,106.71670872051925,105.92701127591049,105.98519897460938,193697900,0.0,0 -2012-01-04,105.73579246824193,106.24285928812462,105.32847868147746,106.15142059326172,127186500,0.0,0 -2012-01-05,105.57788001385367,106.59200752219506,105.09574976665293,106.43406677246094,173895000,0.0,0 -2012-01-06,106.56706574392865,106.58369442309598,105.81062573337087,106.15975189208984,148050000,0.0,0 -2012-01-09,106.40080601493293,106.55042606008847,105.91036784385933,106.41743469238281,99530200,0.0,0 -2012-01-10,107.55627868025881,107.77240080534185,107.19052378860472,107.34015655517578,115282000,0.0,0 -2012-01-11,107.00761633775517,107.53961984445027,106.8330596236637,107.39830780029297,111540700,0.0,0 -2012-01-12,107.70587662929499,107.81393131492239,106.84967103663088,107.65599060058594,118983700,0.0,0 -2012-01-13,106.93281133319678,107.27362946483764,106.16805704919892,107.09906005859375,179836200,0.0,0 -2012-01-17,108.1298284845244,108.32933457651292,107.14893938720425,107.51469421386719,132209200,0.0,0 -2012-01-18,107.48974468191003,108.76156574180708,107.29855929409884,108.70338439941406,163395200,0.0,0 -2012-01-19,109.07746381111946,109.3684086193403,108.72833765163394,109.27696990966797,126328900,0.0,0 -2012-01-20,109.09407268437697,109.68425750732422,108.82806460127253,109.68425750732422,138230200,0.0,0 -2012-01-23,109.31850351875161,109.93363770236795,108.87793872641952,109.4016342163086,129295800,0.0,0 -2012-01-24,108.72833765163394,109.3102145841098,108.56208891149309,109.27696990966797,103083300,0.0,0 -2012-01-25,109.11071692380148,110.4490403139801,108.6867807010617,110.19135284423828,198613200,0.0,0 -2012-01-26,110.68178513357577,110.88959923460312,109.19384175116511,109.6260986328125,184880500,0.0,0 -2012-01-27,109.09410264011576,109.76741834490726,109.01927991872014,109.57623291015625,135259100,0.0,0 -2012-01-30,108.48724469284438,109.26031957301176,108.11318193068232,109.2021255493164,147311800,0.0,0 -2012-01-31,109.74243735960182,109.87542870001572,108.62854451040702,109.16056060791016,157212000,0.0,0 -2012-02-01,109.96691386918971,110.67348694891929,109.83392247255443,110.11654663085938,166234500,0.0,0 -2012-02-02,110.3326496430373,110.57372108287998,109.9004054818798,110.29108428955078,113090400,0.0,0 -2012-02-03,111.38836160587252,111.90373653353787,111.19717617850739,111.83723449707031,160598500,0.0,0 -2012-02-06,111.37171392539327,111.81227874335829,111.24703055576707,111.76240539550781,107694500,0.0,0 -2012-02-07,111.5296386618722,112.23621147903891,111.0890739070618,112.04501342773438,135528100,0.0,0 -2012-02-08,112.10322448886068,112.40247726252016,111.64603098966361,112.3775405883789,139361400,0.0,0 -2012-02-09,112.560409953082,112.71002998724909,111.85383707894573,112.51884460449219,148602900,0.0,0 -2012-02-10,111.52137330975117,111.77906079121632,111.25536514567915,111.6876220703125,167907500,0.0,0 -2012-02-13,112.48559993599847,112.65184864639419,112.00346979707638,112.51884460449219,115841900,0.0,0 -2012-02-14,112.21959986284135,112.44404261407708,111.59615764138111,112.3775405883789,165329500,0.0,0 -2012-02-15,112.74329400228768,112.90954272250791,111.62940094048719,111.85384368896484,195195100,0.0,0 -2012-02-16,111.86213652363499,113.1921386382827,111.6626304986553,113.09239196777344,186567800,0.0,0 -2012-02-17,113.48312419471293,113.574562903586,113.01762265280117,113.39168548583984,129869400,0.0,0 -2012-02-21,113.65766564192663,113.92367373521654,113.09241746963156,113.44154357910156,134042300,0.0,0 -2012-02-22,113.26697579757437,113.50804722105156,112.87628433246104,113.07579040527344,124455300,0.0,0 -2012-02-23,113.01759145811545,113.65764955959484,112.63520804910867,113.57453155517578,137704300,0.0,0 -2012-02-24,113.82389068603516,114.04833338257517,113.57452400539223,113.82389068603516,105539100,0.0,0 -2012-02-27,113.0674973154985,114.32268989368795,112.88461989563436,114.01512908935547,145728900,0.0,0 -2012-02-28,114.04838053735357,114.48063743579247,113.82393774801479,114.3476333618164,129355900,0.0,0 -2012-02-29,114.51386422489514,114.87131103237573,113.49973051617994,113.89874267578125,185934700,0.0,0 -2012-03-01,114.13982643354214,114.70508744151911,113.82394490896772,114.48895263671875,145023500,0.0,0 -2012-03-02,114.41411712767243,114.56374985799187,113.88211360069201,114.13980102539062,120638300,0.0,0 -2012-03-05,113.96526887824409,114.04838691615302,113.28363247396736,113.67432403564453,140765000,0.0,0 -2012-03-06,112.51056926264141,112.57705861892626,111.68762078398495,112.01181030273438,202129900,0.0,0 -2012-03-07,112.26949437880678,112.97606743660057,112.1614269811763,112.7931900024414,143692200,0.0,0 -2012-03-08,113.48311534697554,114.14812293384446,113.25036459416613,113.91535949707031,116968900,0.0,0 -2012-03-09,114.13147616394527,114.65515893276982,113.9901641352807,114.35591888427734,122836800,0.0,0 -2012-03-12,114.33930587958561,114.51386259846291,113.95692240305648,114.36424255371094,104003500,0.0,0 -2012-03-13,114.97938801473278,116.48396002583353,114.78818991580061,116.42576599121094,184090500,0.0,0 -2012-03-14,116.4590118923263,116.74994398492093,115.94362436482064,116.30107116699219,145163600,0.0,0 -2012-03-15,116.47565205712684,117.02428436931032,116.17639922175103,116.97441101074219,165118500,0.0,0 -2012-03-16,117.18645971472641,117.28664354847612,116.88589547392569,117.13636779785156,152893500,0.614,0 -2012-03-19,117.06120040049153,117.95453575175367,116.97770540038925,117.59553527832031,125291100,0.0,0 -2012-03-20,116.92763232312653,117.39517382406389,116.58532060295796,117.25324249267578,121729700,0.0,0 -2012-03-21,117.32006555120942,117.42859380873664,116.81912082266322,117.06124877929688,122388400,0.0,0 -2012-03-22,116.20125499326683,116.51017633477863,115.83391007667261,116.21795654296875,135216700,0.0,0 -2012-03-23,116.31816055644482,116.72725300373766,115.67528461699108,116.59366607666016,120521000,0.0,0 -2012-03-26,117.42857079022858,118.2300796508789,117.38683602065868,118.2300796508789,120164000,0.0,0 -2012-03-27,118.33863830687712,118.41377619079019,117.78760167907522,117.86273956298828,119868500,0.0,0 -2012-03-28,117.80431101373759,117.98798990180298,116.58535227835402,117.2783203125,148562100,0.0,0 -2012-03-29,116.5853011140216,117.29497039188091,116.1261040953802,117.07788848876953,164963700,0.0,0 -2012-03-30,117.65401137138376,117.76255236031011,116.92765303516016,117.56217193603516,135486800,0.0,0 -2012-04-02,117.4202349172735,118.73103290953497,117.18646413666862,118.42211151123047,151741100,0.0,0 -2012-04-03,118.25513200997075,118.45551242086836,117.24489828857911,117.9378662109375,155806700,0.0,0 -2012-04-04,117.06958434708798,117.16976818941095,116.3348688645791,116.7690200805664,146896000,0.0,0 -2012-04-05,116.36822660502114,117.05283715991722,116.26803006220757,116.71052551269531,137439400,0.0,0 -2012-04-09,115.24113213303329,116.75229760180858,115.08249925141813,115.39976501464844,127555900,0.0,0 -2012-04-10,115.17432953477906,115.49993967769618,113.34589844780245,113.46278381347656,235360300,0.0,0 -2012-04-11,114.62330259529476,114.83202738989142,114.1724626443682,114.38118743896484,154133000,0.0,0 -2012-04-12,114.4897708075925,115.96753372811763,114.4062757630131,115.87569427490234,154321500,0.0,0 -2012-04-13,115.60850257636397,115.9007224157755,114.38954404055379,114.49808502197266,169246700,0.0,0 -2012-04-16,115.08250790784845,115.24948520753735,114.03053945421223,114.42294311523438,147825300,0.0,0 -2012-04-17,115.08252567972832,116.35157628453233,114.96564027794068,116.11780548095703,147877600,0.0,0 -2012-04-18,115.60017302165274,116.11780655728853,115.53337954293305,115.72540283203125,123884200,0.0,0 -2012-04-19,115.74209940741433,116.17623789108566,114.43965847729454,114.98233795166016,198666700,0.0,0 -2012-04-20,115.49162036020505,115.90907000537044,115.10756108124993,115.17435455322266,143199600,0.0,0 -2012-04-23,113.99714675348487,114.30606816262922,113.49621480870508,114.20587158203125,171844900,0.0,0 -2012-04-24,114.30606004230849,114.93223448346409,114.21422061469028,114.6400146484375,137484200,0.0,0 -2012-04-25,115.75878772777942,116.25973242471242,115.65860388421395,116.20964050292969,150252200,0.0,0 -2012-04-26,115.95915226675324,117.15306477705788,115.89235880034344,117.01947784423828,136291600,0.0,0 -2012-04-27,117.37012732707721,117.54544901934564,116.71890699097949,117.21149444580078,130725000,0.0,0 -2012-04-30,116.97773942358653,117.06123444797349,116.46010594313319,116.77735900878906,115092200,0.0,0 -2012-05-01,116.71055867812551,118.27182891345191,116.57698448232944,117.50372314453125,138832200,0.0,0 -2012-05-02,116.81910119969741,117.26995392756666,116.43505467993629,117.15306854248047,121081000,0.0,0 -2012-05-03,117.16975696805255,117.2615963945707,116.04265063120424,116.25971984863281,143759700,0.0,0 -2012-05-04,115.65023775718662,116.30145809716413,114.31439397594787,114.38118743896484,193927300,0.0,0 -2012-05-07,113.97207573419888,114.84872236925598,113.93034096930784,114.46467590332031,127765900,0.0,0 -2012-05-08,113.78005157476865,114.18915673167739,112.64458825679402,114.00547790527344,213377700,0.0,0 -2012-05-09,112.79490383351437,114.05559722724517,112.28561473599744,113.32923889160156,220752500,0.0,0 -2012-05-10,114.11402738233006,114.25597147062004,113.30418680177851,113.56300354003906,150600000,0.0,0 -2012-05-11,112.85334536695476,114.27267173613141,112.80325344350372,113.220703125,153032400,0.0,0 -2012-05-14,112.13533059496574,113.22070230692434,111.80137594800303,111.96835327148438,163910000,0.0,0 -2012-05-15,111.89322345774377,112.55278839191337,111.15016348603437,111.32548522949219,207629300,0.0,0 -2012-05-16,111.8264121770658,112.33570125006904,110.87462750254933,110.89967346191406,207265500,0.0,0 -2012-05-17,110.92469629170336,111.05828320682836,109.19644901859084,109.25489807128906,247992900,0.0,0 -2012-05-18,109.68069349425181,109.87272946463654,108.16118371797225,108.31981658935547,319615900,0.0,0 -2012-05-21,108.67048274331168,110.22339576223317,108.49514830620973,110.18164825439453,177861100,0.0,0 -2012-05-22,110.46551954333643,111.23362533720477,109.65566623837216,110.3736801147461,197531200,0.0,0 -2012-05-23,109.58055080396754,110.59078472535471,108.52858210248903,110.4321517944336,204958400,0.0,0 -2012-05-24,110.73271073348677,110.90803247212514,109.72247686106387,110.64921569824219,167357600,0.0,0 -2012-05-25,110.60746764394604,110.91638908120908,110.0230406187309,110.29021453857422,135465600,0.0,0 -2012-05-29,111.17516717164946,111.81803030593206,109.51371337703705,111.62600708007812,152883500,0.0,0 -2012-05-30,110.67426976847479,111.61771022972559,109.78093397577345,110.00634765625,162370400,0.0,0 -2012-05-31,109.96459398312004,110.58241132065383,108.8207732628447,109.76421356201172,196186000,0.0,0 -2012-06-01,108.04430296233892,109.78923914293614,107.00067901611328,107.00067901611328,253240900,0.0,0 -2012-06-04,107.192722495644,107.48494235158519,106.14909835235767,106.95060729980469,202545800,0.0,0 -2012-06-05,106.7418677969647,107.91907242672274,106.6834251042785,107.76045227050781,164149400,0.0,0 -2012-06-06,108.51184985725533,110.23174016798059,108.47844675516413,110.18164825439453,184202800,0.0,0 -2012-06-07,111.43403751418889,111.48412944596343,110.02305531794745,110.24848175048828,184772700,0.0,0 -2012-06-08,109.96457459392671,111.15012987911817,109.61390573392973,111.12508392333984,143915400,0.0,0 -2012-06-11,112.01845199517328,112.08524547653147,109.6055932166573,109.7141342163086,169756100,0.0,0 -2012-06-12,110.03136750195695,111.04994561491408,109.50538963281144,110.97480773925781,181931800,0.0,0 -2012-06-13,110.64917553715853,111.34214331159784,109.88941430667758,110.26512908935547,172223900,0.0,0 -2012-06-14,110.49054279832997,111.87647834879942,110.18997861557212,111.4339828491211,230615500,0.0,0 -2012-06-15,111.93587805476706,112.6743876337005,111.7008959879843,112.57368469238281,169444500,0.688,0 -2012-06-18,112.10368931253721,113.06879304599761,111.85191922385577,112.7918472290039,131360900,0.0,0 -2012-06-19,113.36253515013851,114.34442704201564,112.76667965734491,113.88285064697266,137382600,0.0,0 -2012-06-20,113.89125794542448,114.21855526240611,112.68277160408911,113.69822692871094,206451800,0.0,0 -2012-06-21,113.83249037559399,113.94998137564158,111.05465738438699,111.14697265625,205272200,0.0,0 -2012-06-22,111.7260525055019,112.2128046474157,111.29803946739906,112.00299835205078,130029200,0.0,0 -2012-06-25,110.81968491931745,110.86164873842189,109.81261728860927,110.2070541381836,146375700,0.0,0 -2012-06-26,110.52596612865622,111.09664597440499,109.87975908151115,110.76094818115234,141634000,0.0,0 -2012-06-27,111.13020175344258,111.97781461303003,110.75255296671789,111.7596206665039,108088000,0.0,0 -2012-06-28,111.02111456400068,111.60858254629109,110.17350158083337,111.44072723388672,169242100,0.0,0 -2012-06-29,113.46324129361,114.36121837906984,113.16952016519187,114.21855163574219,212250900,0.0,0 -2012-07-02,114.53750736168124,114.68017417833265,113.7318579493478,114.56268310546875,129524500,0.0,0 -2012-07-03,114.53745365019151,115.40185459638575,114.41996263242416,115.31793975830078,80450000,0.0,0 -2012-07-05,114.88996088209635,115.64527148292136,114.37803283691076,114.79764556884766,126177500,0.0,0 -2012-07-06,113.68986931561508,113.94163950415346,113.16955365004915,113.70665740966797,151192100,0.0,0 -2012-07-09,113.61431630891455,113.7737711523095,113.04363649074111,113.56396484375,103780500,0.0,0 -2012-07-10,114.1430319538739,114.32766254999783,112.18763540806128,112.57368469238281,167884800,0.0,0 -2012-07-11,112.63243318647847,112.95973054136941,111.93587465056966,112.59046936035156,141733400,0.0,0 -2012-07-12,111.93586944578936,112.64920323453096,111.28127476644474,112.04496002197266,143583200,0.0,0 -2012-07-13,112.33866979744334,114.0422956865576,112.32188171027555,113.9248046875,129642600,0.0,0 -2012-07-16,113.66465807657914,113.99195537778557,113.21146931764117,113.65625762939453,97525200,0.0,0 -2012-07-17,114.10943217072594,114.67171142296834,112.91773412492826,114.43672943115234,138860300,0.0,0 -2012-07-18,114.16821439558778,115.51098011798982,114.10108763447437,115.28438568115234,113349700,0.0,0 -2012-07-19,115.51934726164446,115.96413560707573,115.15009891879562,115.58648681640625,129847300,0.0,0 -2012-07-20,114.9318925174113,115.10813544989739,114.40318933107454,114.52906799316406,142904500,0.0,0 -2012-07-23,112.85059520344633,114.45351814650509,112.32187931617733,113.37091064453125,145210900,0.0,0 -2012-07-24,113.4548932241988,113.5052447034579,111.64216313748464,112.3974609375,173301200,0.0,0 -2012-07-25,112.63242899793455,112.92615015877641,111.82676710516888,112.42262268066406,129122300,0.0,0 -2012-07-26,114.04230832009195,114.52067281567835,113.51359236298275,114.27729034423828,156526500,0.0,0 -2012-07-27,114.8815659530768,116.71108400720945,114.25214689508152,116.38377380371094,236768900,0.0,0 -2012-07-30,116.24950747023354,116.93766564808203,116.03970111756846,116.38377380371094,106782000,0.0,0 -2012-07-31,116.22427372944183,116.54317051856087,115.5696792602539,115.5696792602539,120575900,0.0,0 -2012-08-01,116.40051925865774,116.42569498731032,115.3095240633304,115.46897888183594,138293800,0.0,0 -2012-08-02,114.59617234987027,115.45218540583653,113.7821231035649,114.67169952392578,199556600,0.0,0 -2012-08-03,116.28304979638884,117.18941461245068,114.70530221225587,116.946044921875,157825000,0.0,0 -2012-08-06,117.25652742142935,117.63417614058282,117.12224833733444,117.17259979248047,86326200,0.0,0 -2012-08-07,117.64258223838318,118.26361349558805,117.51670358076882,117.76008605957031,109545100,0.0,0 -2012-08-08,117.365659703505,118.03702967832669,117.33208352142707,117.90276336669922,89754700,0.0,0 -2012-08-09,117.73486745640217,118.2384075693906,117.61737647077915,118.00342559814453,90291700,0.0,0 -2012-08-10,117.52510462991646,118.23845125260323,117.33208639770166,118.19648742675781,99792700,0.0,0 -2012-08-13,117.9950743341687,118.19648019700846,117.52509744123371,118.13774108886719,79426900,0.0,0 -2012-08-14,118.5741077858652,118.64964777647911,117.80202223677468,118.15449523925781,102379400,0.0,0 -2012-08-15,118.02866053252659,118.49023706672384,117.95313331935706,118.288818359375,71085900,0.0,0 -2012-08-16,118.45663167702175,119.30425732328695,118.16291054080612,119.16159057617188,112014200,0.0,0 -2012-08-17,119.36301637933163,119.42176829973106,119.05250710168441,119.32105255126953,90813700,0.0,0 -2012-08-20,119.15319432347704,119.35461298826245,118.8258969966762,119.32943725585938,78255700,0.0,0 -2012-08-21,119.62313087994801,120.08470721040793,118.70837866493693,118.96853637695312,105581100,0.0,0 -2012-08-22,118.6664883023571,119.21199259620556,118.38955513822725,119.01897430419922,133243500,0.0,0 -2012-08-23,118.7252034843578,118.73359112730391,117.86080245512558,118.0454330444336,111466400,0.0,0 -2012-08-24,117.75169082276142,119.02731676713044,117.67616362485057,118.75875854492188,99481200,0.0,0 -2012-08-27,119.07765420833769,119.23710903329953,118.61607782175321,118.78392028808594,68785900,0.0,0 -2012-08-28,118.48179706026733,119.03568871637938,118.30556695504205,118.66642761230469,75689600,0.0,0 -2012-08-29,118.76715899284142,119.07766823240433,118.4314612150807,118.75875854492188,65421300,0.0,0 -2012-08-30,118.24683599684882,118.28041217892675,117.65099322336036,117.90276336669922,96589900,0.0,0 -2012-08-31,118.5740792365682,119.01888020999044,117.79360623446254,118.4649887084961,151970400,0.0,0 -2012-09-04,118.36429889562838,118.71678469587705,117.60061380991198,118.35591125488281,120226200,0.0,0 -2012-09-05,118.40631872045095,118.72522849745505,118.02028217461232,118.25526428222656,100660300,0.0,0 -2012-09-06,118.96855991656776,120.66379840861217,118.96017227455717,120.65541076660156,158272500,0.0,0 -2012-09-07,120.8567927940281,121.17570240540655,120.74770224715478,121.12535095214844,107272100,0.0,0 -2012-09-10,121.0079052385629,121.21771157601638,120.39527431875625,120.43722534179688,86458500,0.0,0 -2012-09-11,120.51276851419524,121.15896283048393,120.47919232820759,120.7729263305664,88760000,0.0,0 -2012-09-12,121.17575073242188,121.31002986503492,120.76452569088052,121.17575073242188,87640900,0.0,0 -2012-09-13,121.15891493112585,123.3996442513348,120.84001812369439,123.0219955444336,225470200,0.0,0 -2012-09-14,123.26543661821336,124.29768032296136,123.1647208577171,123.56755828857422,169777000,0.0,0 -2012-09-17,123.31573827191602,123.5255445469654,122.8373738181352,123.14789581298828,119427800,0.0,0 -2012-09-18,122.93810486572332,123.2066502723779,122.73668620656208,123.04719543457031,98326600,0.0,0 -2012-09-19,123.18986893508001,123.50877862817545,122.87097204754565,123.11434173583984,128318300,0.0,0 -2012-09-20,122.55208465410402,123.18989135078952,122.21639961491447,123.12276458740234,154009800,0.0,0 -2012-09-21,123.72090740551309,123.74621752697459,123.02063067260434,123.07125091552734,108737500,0.779,0 -2012-09-24,122.46382086701884,123.16409782073383,122.3710127677573,122.88567352294922,95682000,0.0,0 -2012-09-25,123.14720339491429,123.38343979556063,121.5441559631932,121.57791137695312,133165200,0.0,0 -2012-09-26,121.55260256867763,121.58634510888433,120.6076440819504,120.89450073242188,146502200,0.0,0 -2012-09-27,121.4007066899368,122.31190959543835,121.08009468413549,122.03348541259766,111830300,0.0,0 -2012-09-28,121.56948697079609,121.96602947012782,121.03796141499097,121.46824645996094,150696100,0.0,0 -2012-10-01,121.93227721385388,122.91941073764333,121.50197932923217,121.78884887695312,135911200,0.0,0 -2012-10-02,122.26972931754617,122.46377786644008,121.3500939402697,121.91537475585938,113422200,0.0,0 -2012-10-03,122.24444665339091,122.70004179962547,121.60323533211863,122.4131851196289,121283100,0.0,0 -2012-10-04,122.87720640520098,123.46779738194249,122.70846796526308,123.2906265258789,124311600,0.0,0 -2012-10-05,123.94872884720102,124.1596551383954,122.92783993329584,123.299072265625,124842100,0.0,0 -2012-10-08,122.84351574811005,123.28223330245157,122.59883396403191,122.87725830078125,78415400,0.0,0 -2012-10-09,122.78442968920386,122.88567020423815,121.62011227062531,121.66230010986328,148872900,0.0,0 -2012-10-10,121.64539204318147,121.76352311313698,120.72575659732249,120.88606262207031,124247500,0.0,0 -2012-10-11,121.72977467674481,121.90695841791438,120.92825738098982,120.95356750488281,123601500,0.0,0 -2012-10-12,121.03794784450976,121.45135513335012,120.29548318450722,120.5570297241211,124181900,0.0,0 -2012-10-15,120.8438730707595,121.68757813726411,120.45577594956124,121.56102752685547,107689100,0.0,0 -2012-10-16,122.1347349012874,122.87719944365148,122.05037212305686,122.7928237915039,108815500,0.0,0 -2012-10-17,122.87723566323619,123.45096194433508,122.69161947293252,123.3497085571289,128834100,0.0,0 -2012-10-18,123.02909088134764,123.61968191026232,122.61567072414793,123.02909088134766,148108500,0.0,0 -2012-10-19,122.80124159718596,122.80967401094667,120.69197950473658,120.97883605957031,185645200,0.0,0 -2012-10-22,120.7764093260967,121.21513968963046,120.04238983000698,120.99578094482422,125578600,0.0,0 -2012-10-23,119.6880277203142,119.85676619615094,118.81901233953054,119.3167953491211,192056300,0.0,0 -2012-10-24,119.74703262493362,119.8904737897908,118.79365482350673,118.9792709350586,120179400,0.0,0 -2012-10-25,119.82302936673113,120.04238810839139,118.5996592661531,119.32523345947266,134457400,0.0,0 -2012-10-26,119.21551786412167,119.67111289497169,118.44774323217861,119.25770568847656,146023500,0.0,0 -2012-10-31,119.67955818419256,119.8314189031704,118.69241201517063,119.25770568847656,103438500,0.0,0 -2012-11-01,119.51080721615247,120.65824652261904,119.40113432122726,120.50638580322266,100995600,0.0,0 -2012-11-02,121.22355690951149,121.25731232689341,119.30835537547631,119.43490600585938,137702200,0.0,0 -2012-11-05,119.25771290843223,119.94954434885388,118.90334546153059,119.6795654296875,98378500,0.0,0 -2012-11-06,120.04237028783378,121.08856933089285,119.91581966218594,120.61609649658203,107068100,0.0,0 -2012-11-07,119.51929769073777,119.53616252776892,117.32565872807737,117.88250732421875,264304500,0.0,0 -2012-11-08,117.86562650375578,118.46466292451413,116.37226453492748,116.46507263183594,181517300,0.0,0 -2012-11-09,116.11070667527598,117.64625633424284,116.05165400511869,116.56631469726562,201055300,0.0,0 -2012-11-12,116.92908996801286,117.11470612508346,116.39756449450931,116.65911102294922,97677500,0.0,0 -2012-11-13,116.0431935983942,117.4859349815425,115.89133286012496,116.25411987304688,123018300,0.0,0 -2012-11-14,116.60847369683651,116.79407695280506,114.42326796299132,114.684814453125,191505000,0.0,0 -2012-11-15,114.72702774328783,115.15732562804028,114.0520610187879,114.49079132080078,178128400,0.0,0 -2012-11-16,114.65954877504082,115.28389535155262,113.64710495755486,115.05609130859375,239483900,0.0,0 -2012-11-19,116.34694552198098,117.40157705453672,115.08983297448339,117.38471221923828,151495800,0.0,0 -2012-11-20,117.1990739748662,117.62935892452921,116.49879722421785,117.43531036376953,119807400,0.0,0 -2012-11-21,117.53654489747001,117.75591644313607,117.30030852053503,117.6546630859375,81710800,0.0,0 -2012-11-23,118.22838456901624,119.29988063891497,118.15244133561082,119.25770568847656,65409200,0.0,0 -2012-11-26,118.66714120974746,119.2661776166481,118.27904399450543,119.00463104248047,100124400,0.0,0 -2012-11-27,118.88652165891416,119.29149661438359,118.32124063021763,118.39717102050781,128646200,0.0,0 -2012-11-28,117.91621598378153,119.41800997891632,117.27500476500053,119.35052490234375,177086500,0.0,0 -2012-11-29,119.7976909835983,120.23640836344747,119.27458507082727,119.90736389160156,151085900,0.0,0 -2012-11-30,119.92424580602722,120.16048221082512,119.51927095121918,119.93267822265625,136568300,0.0,0 -2012-12-03,120.48108615271235,120.58232664110739,119.24927109026298,119.34207916259766,124656300,0.0,0 -2012-12-04,119.33366114445097,119.6964481875828,118.85274301871526,119.17335510253906,127512200,0.0,0 -2012-12-05,119.27461442301978,119.94114882098971,118.43090912102731,119.3843002319336,147300500,0.0,0 -2012-12-06,119.27460017655794,119.83988111650375,119.09742929369715,119.78926086425781,103220600,0.0,0 -2012-12-07,120.25327905998714,120.38827495695654,119.52769220617326,120.15203857421875,108726400,0.0,0 -2012-12-10,119.9833618521277,120.48957741525355,119.93272870928357,120.20272064208984,98840700,0.0,0 -2012-12-11,120.70042986474242,121.58632265007223,120.64137721180899,121.02104187011719,152570400,0.0,0 -2012-12-12,121.49354406787572,121.95758448458547,120.91138544272341,121.08012390136719,145880100,0.0,0 -2012-12-13,121.00417543161537,121.35009758815482,120.0339197840622,120.33765411376953,135715000,0.0,0 -2012-12-14,120.07612672756062,120.29548543852654,119.70489439060344,119.89051055908203,137701700,0.0,0 -2012-12-17,120.20268018323708,121.36699747220128,120.16892476603601,121.29949951171875,143238200,0.0,0 -2012-12-18,121.4935270067035,122.75908457969,121.31634328196175,122.64939880371094,177762800,0.0,0 -2012-12-19,122.78439623467172,122.82658406241495,121.69602237283445,121.73819732666016,150895400,0.0,0 -2012-12-20,121.81415063578797,122.4553618991705,121.47666085986143,122.43848419189453,168487000,0.0,0 -2012-12-21,120.8002767714874,122.43167800379047,120.60485194275552,121.32707977294922,245883800,1.022,0 -2012-12-24,121.06369783558785,121.1316745185716,120.81729370434498,120.9532470703125,53874600,0.0,0 -2012-12-26,121.19969687188484,121.25918135387047,120.10360323815611,120.44347381591797,106947700,0.0,0 -2012-12-27,120.47742256088112,120.72383968244985,118.88850795062692,120.28199768066406,167920600,0.0,0 -2012-12-28,119.50026732037898,120.16302374131229,118.84600312245344,118.9819564819336,148806700,0.0,0 -2012-12-31,118.66756671779832,121.13165958739943,118.5655952232788,121.00421142578125,243935200,0.0,0 -2013-01-02,123.29836600986344,124.18203682718861,122.97548005486739,124.1055679321289,192059000,0.0,0 -2013-01-03,124.04609985864309,124.36897285729549,123.49379423805142,123.8251724243164,144761800,0.0,0 -2013-01-04,124.02907193570266,124.57287223489902,123.77416270931208,124.36894226074219,116817700,0.0,0 -2013-01-07,123.9271781000424,124.14809263007554,123.57029721773166,124.02913665771484,110002500,0.0,0 -2013-01-08,123.80822511884921,123.97816037415171,123.18794263741312,123.67227172851562,121265100,0.0,0 -2013-01-09,123.94412337192104,124.32649377278616,123.74869854307796,123.98661041259766,90745600,0.0,0 -2013-01-10,124.67487079700045,124.98075937390578,124.0291117858563,124.9722671508789,130735400,0.0,0 -2013-01-11,124.93830354643886,125.0317698839927,124.57294338660151,124.96380615234375,113917300,0.0,0 -2013-01-14,124.81083038458623,124.96378116328381,124.41996769700496,124.8788070678711,89567200,0.0,0 -2013-01-15,124.30103659908877,125.08276213057326,124.22456767706178,124.96380615234375,93172600,0.0,0 -2013-01-16,124.70887306193406,125.1422098362331,124.57291969403471,124.94678497314453,104849500,0.0,0 -2013-01-17,125.49904277380965,126.11081979385847,125.03171130499135,125.75395202636719,133833500,0.0,0 -2013-01-18,125.728489475854,126.17033141109862,125.2696501293853,126.03437805175781,169906000,0.0,0 -2013-01-22,126.03435760691417,126.71411132812499,125.73696130225198,126.714111328125,111797300,0.0,0 -2013-01-23,126.7141051250376,127.02848585755275,126.48468550024975,126.91802215576172,104596100,0.0,0 -2013-01-24,126.73109894725383,127.57229565692032,126.61214301545267,126.9520263671875,146426400,0.0,0 -2013-01-25,127.35145920059473,127.6658401489258,126.91810928237395,127.66584014892578,147211600,0.0,0 -2013-01-28,127.6997140880467,127.73370889791988,127.0369579129526,127.5127944946289,113357700,0.0,0 -2013-01-29,127.25789188622086,128.17555732210647,127.17291782234888,128.0141143798828,105694400,0.0,0 -2013-01-30,127.99711033094175,128.2520195441059,127.39382562529396,127.5127944946289,137447700,0.0,0 -2013-01-31,127.35992173138648,127.77627413322413,127.11351755248933,127.19847869873047,108975800,0.0,0 -2013-02-01,128.00567728501704,128.65994162223598,127.78476275274838,128.5070037841797,131173000,0.0,0 -2013-02-04,127.72523873720253,128.53244058061475,126.96900318696004,127.06246948242188,159073600,0.0,0 -2013-02-05,127.75078590472053,128.71092595575442,127.69979365813737,128.34556579589844,113912400,0.0,0 -2013-02-06,127.89521010137898,128.52397175306646,127.80174377947583,128.4390106201172,138762800,0.0,0 -2013-02-07,128.4814804793323,128.60043642172752,127.3343951335586,128.26905822753906,162490000,0.0,0 -2013-02-08,128.48998212858336,129.0592722493282,128.48998212858336,128.98280334472656,103133700,0.0,0 -2013-02-11,128.93181627487797,129.06775666420356,128.6344199324507,128.95730590820312,73775000,0.0,0 -2013-02-12,128.96580872095888,129.40765067691905,128.82136313184674,129.16973876953125,65392700,0.0,0 -2013-02-13,129.4331479302927,129.67105985168314,128.914837037572,129.2801971435547,82322600,0.0,0 -2013-02-14,128.88936415202073,129.55212072849162,128.7449185356339,129.399169921875,80834300,0.0,0 -2013-02-15,129.5180790218717,129.65403236405254,128.7703615703258,129.24618530273438,215226500,0.0,0 -2013-02-19,129.46712842645644,130.24034864543884,129.28870096990798,130.21485900878906,95105400,0.0,0 -2013-02-20,130.12134616483766,130.16383319913965,128.52392702468472,128.59190368652344,160574800,0.0,0 -2013-02-21,128.2690581351041,128.65990781759587,127.4023717181491,127.81021881103516,183257000,0.0,0 -2013-02-22,128.4304754080036,129.0592498779297,127.8696905729063,129.0592498779297,106356600,0.0,0 -2013-02-25,129.6880592380169,129.883484112441,126.60368347167967,126.60368347167969,245824800,0.0,0 -2013-02-26,127.21541241373204,127.62325942106473,126.37421580621216,127.47032165527344,186596200,0.0,0 -2013-02-27,127.3598879599458,129.433131263868,127.24942423737146,129.07626342773438,150781900,0.0,0 -2013-02-28,129.0677083395837,129.89190741577372,128.65136917433887,128.82130432128906,126866000,0.0,0 -2013-03-01,128.379498952862,129.4416101288541,127.80171669642999,129.24618530273438,170634800,0.0,0 -2013-03-04,128.94882097351046,129.93446350097656,128.74490387488132,129.93446350097656,99010200,0.0,0 -2013-03-05,130.56324587891032,131.44691694420823,130.54624846460797,131.09854125976562,121431900,0.0,0 -2013-03-06,131.56586874691124,131.6338454367394,130.98808633121374,131.2769775390625,94469900,0.0,0 -2013-03-07,131.44691588669076,131.68482782409646,131.2939780548849,131.514892578125,86101400,0.0,0 -2013-03-08,132.09268100701928,132.2541110547811,131.41292709375085,132.07568359375,123477800,0.0,0 -2013-03-11,131.9736934403287,132.58545755401846,131.81225046600076,132.57696533203125,83746800,0.0,0 -2013-03-12,132.48351683411178,132.63646760700803,131.8802448613338,132.2795867919922,105755800,0.0,0 -2013-03-13,132.3475662643578,132.65345485137635,131.89723208975084,132.46652221679688,92550900,0.0,0 -2013-03-14,132.81486988871413,133.23122211720766,132.47499951479298,133.17173767089844,126329900,0.0,0 -2013-03-15,133.01299891048646,133.17514689845436,132.55211887722143,132.9959259033203,138601100,0.694,0 -2013-03-18,131.7242585812972,132.8337696750472,131.60477357260962,132.26194763183594,126704300,0.0,0 -2013-03-19,132.5435457168981,132.72276665366158,131.08411011740156,131.95465087890625,167567300,0.0,0 -2013-03-20,132.7313920560421,133.09837716961218,132.50948196607638,132.87648010253906,113759300,0.0,0 -2013-03-21,132.08277622308773,132.83383264682402,131.51949692818096,131.74139404296875,128605000,0.0,0 -2013-03-22,132.15953578861115,132.7996368408203,132.057110764693,132.7996368408203,111163600,0.0,0 -2013-03-25,133.1495624683059,133.3714725237475,131.7328152252639,132.24488830566406,151322300,0.0,0 -2013-03-26,132.79113644098754,133.33735565991722,132.64604838533833,133.30322265625,86856600,0.0,0 -2013-03-27,132.50949032488256,133.34589867800412,132.28759324381198,133.30322265625,99950600,0.0,0 -2013-03-28,133.21786219550572,133.86650643024004,132.92768610254177,133.71287536621094,102932800,0.0,0 -2013-04-01,133.64461354351718,133.91772968232866,132.85942417877555,133.18374633789062,99194100,0.0,0 -2013-04-02,133.6616625446891,134.17374870151374,133.45682547738087,133.8408966064453,101504300,0.0,0 -2013-04-03,133.91767402948938,134.02008602753668,132.13392894142493,132.4838409423828,154167400,0.0,0 -2013-04-04,132.65456255311975,133.28613374020298,132.36438647644306,133.0215606689453,131885000,0.0,0 -2013-04-05,131.39141587566786,132.58627907019016,131.23779786341095,132.4241180419922,159666000,0.0,0 -2013-04-08,132.51806523912927,133.32885775603563,132.07425794727342,133.32032775878906,86571200,0.0,0 -2013-04-09,133.5677608994966,134.26761100950992,133.12395383029033,133.7811279296875,101922200,0.0,0 -2013-04-10,134.13961259962494,135.59050612074486,134.10547959732844,135.41981506347656,135711100,0.0,0 -2013-04-11,135.44536716440595,136.30737816740128,135.30880916075884,135.8635711669922,110142500,0.0,0 -2013-04-12,135.42827568338703,135.73552463823475,134.77964478888015,135.53070068359375,116359900,0.0,0 -2013-04-15,134.8479611927825,134.9589162142532,132.37290888637472,132.3899688720703,217259000,0.0,0 -2013-04-16,133.38849792569928,134.41266986673554,133.0641889657325,134.34439086914062,147507800,0.0,0 -2013-04-17,133.38861757812555,133.4142336202281,131.67315017698735,132.38153076171875,226834800,0.0,0 -2013-04-18,132.60332035397752,132.63746636714544,131.0500153499332,131.55355834960938,167583200,0.0,0 -2013-04-19,131.86080957358513,132.75695360244933,131.5364875574714,132.69720458984375,149687600,0.0,0 -2013-04-22,132.95329594216142,133.6019271873377,132.074224600545,133.28614807128906,106553500,0.0,0 -2013-04-23,133.95179155070085,134.78818649156332,133.2860875944999,134.66017150878906,166141300,0.0,0 -2013-04-24,134.7029141869496,135.10404536204715,134.45540106722027,134.74559020996094,96781200,0.0,0 -2013-04-25,135.13814752125762,135.9318796948375,134.93332349418475,135.29177856445312,131060600,0.0,0 -2013-04-26,135.12960441285395,135.36004444383656,134.61751834909023,135.05279541015625,95918800,0.0,0 -2013-04-29,135.41978467340425,136.25617978234536,135.20641764397817,135.9574737548828,88572800,0.0,0 -2013-04-30,135.9318720234848,136.31593007546283,135.36857993504228,136.2817840576172,116010700,0.0,0 -2013-05-01,135.98308878753105,136.05136780573508,134.93332655628737,135.08694458007812,138874200,0.0,0 -2013-05-02,135.4283506138329,136.46105304044264,135.3003355713535,136.34156799316406,96407600,0.0,0 -2013-05-03,137.5278575826486,138.1594287037838,136.367140374251,137.72415161132812,144202300,0.0,0 -2013-05-06,137.82658137822852,138.2703754563188,137.76683235451006,138.07408142089844,66882100,0.0,0 -2013-05-07,138.37277949602188,138.81657350676764,137.98017846186633,138.77391052246094,90359200,0.0,0 -2013-05-08,138.62031308369163,139.44817833687043,138.54350406586485,139.40550231933594,97419200,0.0,0 -2013-05-09,139.34576102305218,139.71274610955396,138.66298383709753,139.01290893554688,106738600,0.0,0 -2013-05-10,139.10677018079915,139.58471023270238,138.69709611669091,139.46522521972656,103203000,0.0,0 -2013-05-13,139.28595015587447,139.806566063946,138.96164122927405,139.5761260986328,81843200,0.0,0 -2013-05-14,139.68714630695584,141.1209797326209,139.68714630695584,141.0185546875,119000900,0.0,0 -2013-05-15,140.78809366008565,142.05975270550303,140.74541765349224,141.77810668945312,120718500,0.0,0 -2013-05-16,141.48795484334184,141.98296795400407,140.89905971129727,141.1124267578125,109913600,0.0,0 -2013-05-17,141.63305854026027,142.56333584048392,141.44529447672434,142.47799682617188,129801000,0.0,0 -2013-05-20,142.34140638293707,143.02418345651492,142.1963183710213,142.46942138671875,85071200,0.0,0 -2013-05-21,142.59746162103826,143.21195973757605,142.1024485258889,142.6742706298828,95804200,0.0,0 -2013-05-22,142.81937542711958,144.29588489261843,140.9673508666494,141.61598205566406,244031800,0.0,0 -2013-05-23,140.1053306757658,141.59889989611773,139.91756664623318,141.206298828125,211064400,0.0,0 -2013-05-24,140.36994272779896,141.14660206375268,139.95173854161763,141.08685302734375,151573900,0.0,0 -2013-05-28,142.5633208216793,143.1948919709372,141.5135585936955,141.9317626953125,143679800,0.0,0 -2013-05-29,141.18073134675348,141.50505348352445,140.25898397610962,141.01004028320312,160363400,0.0,0 -2013-05-30,141.120993754714,142.1792861506126,141.01003870434658,141.53065490722656,107793800,0.0,0 -2013-05-31,141.13801632939766,141.9402784316058,139.22625610921455,139.49935913085938,176850100,0.0,0 -2013-06-03,139.82369472712534,140.36138385259952,138.8251385104526,140.2675018310547,168390700,0.0,0 -2013-06-04,140.3443025881466,140.90759468428584,138.8848663432204,139.59324645996094,157631500,0.0,0 -2013-06-05,139.192068138453,139.47371409090502,137.51927844998679,137.63876342773438,211737800,0.0,0 -2013-06-06,137.57909740158178,138.89344597237675,136.7683050619555,138.88490295410156,200225500,0.0,0 -2013-06-07,139.8407581748285,140.77956530318926,139.23479007304107,140.65155029296875,188337800,0.0,0 -2013-06-10,141.08681435060862,141.1636233567409,140.2845522255197,140.65155029296875,105667100,0.0,0 -2013-06-11,139.37132881502248,140.42962081412134,138.8933888124761,139.2006378173828,159505400,0.0,0 -2013-06-12,140.15652911309758,140.3016171239236,137.92044691124232,138.0484619140625,177361500,0.0,0 -2013-06-13,137.97161880733825,140.39546442944203,137.6643698536289,140.14796447753906,163587800,0.0,0 -2013-06-14,139.9943586678199,140.54057768122235,139.0384786500878,139.26890563964844,141197500,0.0,0 -2013-06-17,140.21627128505543,141.01000340618256,139.3030671712915,140.34429931640625,136295600,0.0,0 -2013-06-18,140.42109433738167,141.6671633948316,140.41256434529708,141.45379638671875,114695600,0.0,0 -2013-06-19,141.33432336999056,141.5818233903215,139.43962313542355,139.49935913085938,206149500,0.0,0 -2013-06-20,138.14233802007078,139.51642209080495,135.68434588785342,136.0428009033203,321255900,0.0,0 -2013-06-21,136.96859740979673,137.07155132460528,135.10677326347604,136.47955322265625,271956800,0.839,0 -2013-06-24,135.0553351941176,135.93046990557767,133.61391451275344,134.75503540039062,222329000,0.0,0 -2013-06-25,135.97333909535422,137.36328247072734,135.0638778929277,136.05056762695312,162262200,0.0,0 -2013-06-26,137.1659388517193,137.706473122511,136.63399280224223,137.39759826660156,134848000,0.0,0 -2013-06-27,138.22123439146375,138.83898394899634,138.0925289300959,138.20407104492188,129483700,0.0,0 -2013-06-28,137.8180150955773,138.47865354595322,137.1573635534006,137.63783264160156,160402900,0.0,0 -2013-07-01,138.35856277640627,139.40530481554723,138.20413186496086,138.44436645507812,131954800,0.0,0 -2013-07-02,138.2384147801725,139.2508429780779,137.70646874759527,138.31564331054688,154863700,0.0,0 -2013-07-03,137.68926632120096,138.79607299385276,137.4661951980277,138.3756561279297,75216400,0.0,0 -2013-07-05,139.39672778351817,139.92009879595173,138.39288759740202,139.86862182617188,122416900,0.0,0 -2013-07-08,140.58928847196466,141.04401904071122,139.92006185789236,140.66650390625,108092500,0.0,0 -2013-07-09,141.5501885952184,141.85048821483977,140.9410273213069,141.67889404296875,119298000,0.0,0 -2013-07-10,141.5416501493302,142.21087675731476,141.2499386723727,141.73040771484375,121410100,0.0,0 -2013-07-11,143.377752290954,143.8067444271735,141.72183583741017,143.660888671875,135592200,0.0,0 -2013-07-12,143.6179628419337,144.08126851124186,143.39489168142217,143.72091674804688,104212700,0.0,0 -2013-07-15,144.11561916398747,144.47597098708334,143.8667963937873,144.27005004882812,69450600,0.0,0 -2013-07-16,144.36439200780708,144.45019564980421,143.3434019821083,143.7294921875,88702100,0.0,0 -2013-07-17,144.2786321568449,144.55318030441754,143.90969212791236,144.09844970703125,92873900,0.0,0 -2013-07-18,144.40730260238456,145.2309731034876,144.31292382717274,144.8877716064453,103620100,0.0,0 -2013-07-19,144.5874876774384,145.19664907169175,144.4073052517107,145.14517211914062,103831700,0.0,0 -2013-07-22,145.3511140277873,145.63425039953708,145.00791247484787,145.42832946777344,79428600,0.0,0 -2013-07-23,145.68574914654394,145.71148763038846,145.04226086682584,145.11947631835938,80829700,0.0,0 -2013-07-24,145.67710897669951,145.73717414545297,144.29575410514659,144.5874786376953,112914000,0.0,0 -2013-07-25,144.3301085462538,145.06797550940425,144.08987400865138,144.93927001953125,111088600,0.0,0 -2013-07-26,144.3300532968082,145.1365602608005,143.72946718270603,145.09365844726562,107814600,0.0,0 -2013-07-29,144.72475265892322,145.0507908084501,144.23570852643135,144.6475372314453,79695000,0.0,0 -2013-07-30,145.0851175040837,145.23954835903953,144.3043488259001,144.6475372314453,85209600,0.0,0 -2013-07-31,144.9479126156556,145.72868170165762,144.56182218480134,144.75057983398438,142388700,0.0,0 -2013-08-01,145.84873615210742,146.55227637525593,145.77150762577918,146.423583984375,110438400,0.0,0 -2013-08-02,146.09753076694182,146.68954188765642,145.9001980906364,146.67237854003906,91116700,0.0,0 -2013-08-05,146.3464024512219,146.68101583682568,146.15764483967075,146.4579315185547,54072700,0.0,0 -2013-08-06,146.17473486536744,146.4921978585935,145.29960058167788,145.62562561035156,87495000,0.0,0 -2013-08-07,145.1623968173373,145.36830471456483,144.6132872717235,145.15380859375,84854700,0.0,0 -2013-08-08,145.8401303132917,146.01172451100337,144.93924441055776,145.68569946289062,102181300,0.0,0 -2013-08-09,145.49697925106017,145.9431347530284,144.75911222895175,145.26531982421875,91757700,0.0,0 -2013-08-12,144.53597414669835,145.26525260960975,144.46733386340162,145.09365844726562,68593300,0.0,0 -2013-08-13,145.3510803697125,145.77148417348707,144.49309632374306,145.52267456054688,80806000,0.0,0 -2013-08-14,145.4540161511214,145.6856754803858,144.74188791063898,144.77621459960938,79829200,0.0,0 -2013-08-15,143.6351417688328,143.65229202717921,142.50259631155694,142.7514190673828,152931800,0.0,0 -2013-08-16,142.47688902299961,142.9659464207414,141.99641984811143,142.27955627441406,130868200,0.0,0 -2013-08-19,142.11651353442582,142.6055708509288,141.36148318970587,141.3700714111328,96437600,0.0,0 -2013-08-20,141.6016989259217,142.59696368596204,141.44726806236332,142.0650177001953,89294400,0.0,0 -2013-08-21,141.67033412624545,142.45110281979856,140.8724151763364,141.1898651123047,159530500,0.0,0 -2013-08-22,141.48161791951625,142.68280389720988,141.47304278883223,142.4768829345703,101471400,0.0,0 -2013-08-23,142.8972843339676,143.1375188848245,142.22805764346617,142.95733642578125,90888900,0.0,0 -2013-08-26,143.10315565112418,143.54073590060966,142.33097523360524,142.42535400390625,89702100,0.0,0 -2013-08-27,141.018289979151,142.42538360677483,140.03161334148695,140.1345672607422,158619400,0.0,0 -2013-08-28,140.07453492507787,141.1298652121032,139.89436552413454,140.63223266601562,108113000,0.0,0 -2013-08-29,140.32330914788915,141.60169714167827,140.19460367141303,140.85525512695312,119200500,0.0,0 -2013-08-30,141.14697029927393,141.1641336482812,139.9972746599763,140.4091033935547,134928900,0.0,0 -2013-09-03,141.76470985306008,142.0650095262109,140.4519952211465,141.04400634765625,142375100,0.0,0 -2013-09-04,141.0783159368212,142.4510957010197,140.82093118635734,142.2108612060547,97389400,0.0,0 -2013-09-05,142.29667346794224,142.7685542669009,142.1937064697231,142.39105224609375,63090500,0.0,0 -2013-09-06,142.8629398878228,143.26619349634873,141.12123306452978,142.45968627929688,159756500,0.0,0 -2013-09-09,142.81148528420482,143.90970414983926,142.81148528420482,143.82391357421875,87559300,0.0,0 -2013-09-10,144.69043892802003,144.91351008224868,144.36440077877947,144.8877716064453,105847200,0.0,0 -2013-09-11,144.6904811586644,145.34254455566406,144.4416714560126,145.34254455566406,94545900,0.0,0 -2013-09-12,145.29106478446195,145.47982238633446,144.7591186838042,144.95645141601562,83209000,0.0,0 -2013-09-13,145.11081551304838,145.39395175997467,144.77620232882546,145.28240966796875,72727800,0.0,0 -2013-09-16,146.85256750740552,146.9212078091367,145.89161637496812,146.12327575683594,106299200,0.0,0 -2013-09-17,146.2519892334123,146.80967371426527,146.2519892334123,146.77536010742188,82523300,0.0,0 -2013-09-18,146.72387178907866,148.87742048722902,146.3549448710145,148.4741668701172,203460600,0.0,0 -2013-09-19,148.87743347646472,148.94607378874903,148.0795013014852,148.22535705566406,146616900,0.0,0 -2013-09-20,148.5771448977787,148.5771448977787,147.06835362052905,147.18905639648438,132867100,0.838,0 -2013-09-23,146.99072820181772,147.12866480308577,146.04234006777727,146.50790405273438,104616500,0.0,0 -2013-09-24,146.48203745696424,147.0252063925584,145.88715380799522,146.1630401611328,106333100,0.0,0 -2013-09-25,146.25789036855488,146.55102375273214,145.61126564460366,145.74058532714844,117306500,0.0,0 -2013-09-26,145.98201279192446,146.71484629653384,145.74922419370057,146.30101013183594,77146900,0.0,0 -2013-09-27,145.56813631472124,145.82678880275918,145.24913903432125,145.6284942626953,99141800,0.0,0 -2013-09-30,144.39562244856486,145.30951671159139,144.11110596289555,144.85256958007812,143937000,0.0,0 -2013-10-01,144.9646552895872,146.1372020981331,144.81808858297083,145.99925231933594,127160000,0.0,0 -2013-10-02,145.14575666158618,145.99929320121413,144.69742633276402,145.86134338378906,113350000,0.0,0 -2013-10-03,145.52504464236634,145.65437748131566,143.84382298093544,144.5163116455078,176698000,0.0,0 -2013-10-04,144.6284131817001,145.75784905753508,144.4387355217995,145.6112823486328,96878000,0.0,0 -2013-10-07,144.3438611015148,145.23189121953888,144.19729442875095,144.35247802734375,96295000,0.0,0 -2013-10-08,144.3266222382282,144.51629986206373,142.56780891020455,142.6712646484375,178015000,0.0,0 -2013-10-09,142.94718039103319,143.29204166138078,141.85222546647756,142.77474975585938,168973000,0.0,0 -2013-10-10,144.23178439303123,145.93025293700728,144.18005652356806,145.8526611328125,195955000,0.0,0 -2013-10-11,145.62848776399198,146.84414519459295,145.50778502904228,146.7924041748047,105040000,0.0,0 -2013-10-14,145.88717899027398,147.49942591154138,145.77509315104493,147.37872314453125,112106000,0.0,0 -2013-10-15,147.0079533439402,147.5597391831557,146.11130628856952,146.30960083007812,155485000,0.0,0 -2013-10-16,147.18905164313205,148.43057338750208,147.12007675115422,148.3529815673828,161676000,0.0,0 -2013-10-17,147.74943894042372,149.4306737990629,147.72357500311674,149.34445190429688,129389000,0.0,0 -2013-10-18,149.89624805932576,150.45665094672037,149.5944845626579,150.3531951904297,138316000,0.0,0 -2013-10-21,150.4048968314776,150.6635493326992,150.02554158376762,150.36178588867188,104104000,0.0,0 -2013-10-22,150.80155222930307,151.68095262549593,150.38770281926455,151.23263549804688,126663000,0.0,0 -2013-10-23,150.71528856728565,150.78426344985368,149.9824551067762,150.5083770751953,105484000,0.0,0 -2013-10-24,150.81015876276052,151.19813104676211,150.45666734940988,151.00845336914062,70350000,0.0,0 -2013-10-25,151.31879537592044,151.74126157883677,151.02566200521755,151.69815063476562,93625000,0.0,0 -2013-10-28,151.6464874758886,152.14654569815386,151.4826737118822,151.9396209716797,84979000,0.0,0 -2013-10-29,152.28446641649697,152.81038848462325,152.06892480096352,152.75003051757812,87401000,0.0,0 -2013-10-30,152.93110453134088,153.04317723532267,151.44817703536316,151.9913330078125,140002000,0.0,0 -2013-10-31,151.87059158219958,152.50859939324127,151.33605267508685,151.56021118164062,133795000,0.0,0 -2013-11-01,151.75853430060283,152.2672093222351,151.0687985454392,151.92234802246094,142805000,0.0,0 -2013-11-04,152.3361911449237,152.51723873107784,151.72404718101313,152.45689392089844,85677000,0.0,0 -2013-11-05,151.86195898028998,152.38788090596364,151.3705310709036,151.9740447998047,85825000,0.0,0 -2013-11-06,152.629327739104,153.03454702875624,152.20686143663661,152.75003051757812,87348000,0.0,0 -2013-11-07,153.03454546199947,153.15524823923784,150.67220464391642,150.8187713623047,157000000,0.0,0 -2013-11-08,150.7670589142892,152.87074738061517,150.74982505550236,152.85350036621094,136713000,0.0,0 -2013-11-11,152.706874471305,153.0603657737471,152.52582693486258,152.8793182373047,62614000,0.0,0 -2013-11-12,152.55167694404716,152.91378513949184,152.06023593590794,152.5689239501953,83990000,0.0,0 -2013-11-13,151.81884490077158,153.83631067667463,151.81884490077158,153.793212890625,103844000,0.0,0 -2013-11-14,153.9311712389284,154.68988182143758,153.68114879093653,154.56056213378906,103435000,0.0,0 -2013-11-15,154.81056603815782,155.2933770216988,154.6122714889776,155.2330322265625,102818000,0.0,0 -2013-11-18,155.49168655595776,155.62100622963754,154.34500387875005,154.6898651123047,104796000,0.0,0 -2013-11-19,154.61227494222956,155.07783892801027,154.08635300435185,154.35362243652344,93891000,0.0,0 -2013-11-20,154.66401050127925,155.12957451020517,153.4483528729538,153.87081909179688,124909000,0.0,0 -2013-11-21,154.3018664565485,155.23300741409213,154.20702766025394,155.1123046875,92841000,0.0,0 -2013-11-22,155.1726907801231,155.9055374152665,154.99164321984517,155.88829040527344,81296000,0.0,0 -2013-11-25,156.16422228790125,156.19870315941512,155.50896732858723,155.73313903808594,79486000,0.0,0 -2013-11-26,155.8107238839834,156.24180711448236,155.54345438597267,155.77622985839844,86994000,0.0,0 -2013-11-27,155.9400370071319,156.25904753005153,155.7503593412712,156.15557861328125,58800000,0.0,0 -2013-11-29,156.32800831030846,156.69873352472294,155.8796781264181,156.05210876464844,55870900,0.0,0 -2013-12-02,156.1297380450339,156.42287151593024,155.40552129730727,155.6469268798828,99726000,0.0,0 -2013-12-03,155.13820945736802,155.52618166957416,154.47433770854434,154.97439575195312,116563000,0.0,0 -2013-12-04,154.41398226411766,155.60376275583613,153.76735756980494,154.95713806152344,123033000,0.0,0 -2013-12-05,154.6812200879679,154.9657364739936,154.12943432114508,154.2760009765625,106934000,0.0,0 -2013-12-06,155.76762334369957,156.14697871679914,155.31929307043492,156.0004119873047,127728000,0.0,0 -2013-12-09,156.45731535154994,156.6297459758404,156.19004591055773,156.39695739746094,70124000,0.0,0 -2013-12-10,156.03481184674447,156.3624391635213,155.74167853994953,155.83651733398438,80976000,0.0,0 -2013-12-11,155.89691926839222,155.92278320537244,153.89668710449624,154.08636474609375,130591000,0.0,0 -2013-12-12,154.0173978610192,154.20707551246744,153.25868725522625,153.57769775390625,115565000,0.0,0 -2013-12-13,153.89668439391096,154.03463415911835,153.26730667912116,153.56044006347656,107808000,0.0,0 -2013-12-16,154.28460651076747,155.02606981353293,154.24149557868392,154.51739501953125,96195000,0.0,0 -2013-12-17,154.6553918342987,154.6812557703028,153.68113972609854,154.0260009765625,89886000,0.0,0 -2013-12-18,154.25878794501284,156.68147306659336,152.87932980195168,156.65560913085938,234906000,0.0,0 -2013-12-19,156.2072962326373,156.6556264275496,155.8020901428608,156.47457885742188,136531200,0.0,0 -2013-12-20,156.6306280267186,157.757532070563,156.52661059182307,157.38478088378906,197087000,0.98,0 -2013-12-23,158.15625184056626,158.32095490702832,157.82685893467928,158.22560119628906,85598000,0.0,0 -2013-12-24,158.2342720614063,158.6416912778043,158.2256083516881,158.5723419189453,45368800,0.0,0 -2013-12-26,158.9277301069253,159.4651842558558,158.91040268992194,159.3784942626953,63365000,0.0,0 -2013-12-27,159.58652374237,159.65585985638813,159.20510898009834,159.36981201171875,61814000,0.0,0 -2013-12-30,159.38720385233032,159.51723887950288,159.1358239630602,159.3438720703125,56857000,0.0,0 -2013-12-31,159.56055097760975,160.09799194335938,159.43917968646687,160.09799194335938,86119900,0.0,0 -2014-01-02,159.48254611251372,159.56057241402198,158.18227529653302,158.56369018554688,119636900,0.0,0 -2014-01-03,158.83236823093742,159.1531106074955,158.3122679798491,158.5376434326172,81390600,0.0,0 -2014-01-06,159.05775787743835,159.1184302882682,157.83550045534432,158.07821655273438,108028200,0.0,0 -2014-01-07,158.71101771569892,159.3178079842856,158.58965966198159,159.04908752441406,86144200,0.0,0 -2014-01-08,159.02306985786834,159.35247593053714,158.53763768364152,159.08375549316406,96582300,0.0,0 -2014-01-09,159.59523967969113,159.61258032738783,158.45967195577347,159.1878204345703,90683400,0.0,0 -2014-01-10,159.4565280069509,159.69058043721964,158.64168958286072,159.62123107910156,102026400,0.0,0 -2014-01-13,159.2138207624594,159.6559080647445,157.19406523567753,157.49746704101562,149892000,0.0,0 -2014-01-14,158.01755291506058,159.30049615363913,157.72282807391568,159.21380615234375,105016100,0.0,0 -2014-01-15,159.58654348761326,160.3146918182051,159.2484736750502,160.0719757080078,98525800,0.0,0 -2014-01-16,159.74257931545316,160.07198543947663,159.35250077370983,159.8639373779297,72290600,0.0,0 -2014-01-17,159.58657596936214,159.8899645553415,158.91043620661668,159.1878204345703,107848700,0.0,0 -2014-01-21,160.10664795995692,160.16733360261262,158.67635561406948,159.6558837890625,88621200,0.0,0 -2014-01-22,159.92465182214045,159.99400118847797,159.42187883647287,159.75994873046875,61270900,0.0,0 -2014-01-23,158.9537464093919,158.97975076388784,157.61014400364525,158.4509735107422,132496900,0.0,0 -2014-01-24,157.41939704608595,157.47140574201453,155.0182275101261,155.0702362060547,208677100,0.0,0 -2014-01-27,155.21764145203127,155.6163969426606,153.53595594174456,154.3074493408203,180843100,0.0,0 -2014-01-28,154.42009813027215,155.42564365597184,154.40275748961298,155.2262725830078,110463200,0.0,0 -2014-01-29,153.9346921517463,154.77553480157243,153.3279018959531,153.73532104492188,216597300,0.0,0 -2014-01-30,155.01825671151326,155.86776310144975,154.52414755304744,155.364990234375,118938100,0.0,0 -2014-01-31,153.4405939894748,155.4170042366209,153.36258092822766,154.45480346679688,194677900,0.0,0 -2014-02-03,154.27279702518896,154.61953061388587,150.68405015131782,150.97877502441406,254837100,0.0,0 -2014-02-04,151.65490106866653,152.4263944767415,150.92675266201906,152.03631591796875,165012400,0.0,0 -2014-02-05,151.50754171753593,152.18368142699532,150.5800221579596,151.84561157226562,164230500,0.0,0 -2014-02-06,152.2010031357346,153.84800720214844,151.88893767580993,153.84800720214844,132877600,0.0,0 -2014-02-07,154.56744430806694,155.919723143018,154.06467159791274,155.75502014160156,170787200,0.0,0 -2014-02-10,155.7724324500626,156.09317489456154,155.3476858057577,156.04115295410156,92218800,0.0,0 -2014-02-11,156.17123071886044,158.14764173219558,156.06720003649852,157.74888610839844,117814100,0.0,0 -2014-02-12,157.98288465019687,158.4856575575901,157.5147930340926,157.8268585205078,94717700,0.0,0 -2014-02-13,156.76065145351123,158.80641146568325,156.75198774285934,158.64170837402344,100542200,0.0,0 -2014-02-14,158.4943102658408,159.81192147558738,158.34694785568382,159.51719665527344,96498400,0.0,0 -2014-02-18,159.65586381483254,159.92459747821178,159.19643599262383,159.7078857421875,80460900,0.0,0 -2014-02-19,159.29183381725628,160.32338408284775,158.52034035234945,158.65037536621094,126524300,0.0,0 -2014-02-20,158.86710877984945,159.95066790761365,158.28632267461265,159.5865936279297,104998100,0.0,0 -2014-02-21,159.8899121405332,160.27132690259367,159.32646693196574,159.40447998046875,118116400,0.0,0 -2014-02-24,159.74254798393585,161.36354747772688,159.6731986436889,160.28866577148438,114063900,0.0,0 -2014-02-25,160.4186736710535,160.87810143687935,159.6991892085068,160.22796630859375,117085000,0.0,0 -2014-02-26,160.46206982387537,160.8868296715277,159.78593013302458,160.2366943359375,98677200,0.0,0 -2014-02-27,160.00261961498305,161.1208464164754,159.82057592648943,161.0775146484375,93880800,0.0,0 -2014-02-28,161.05151602751403,162.2304286062886,160.4100576422494,161.4849395751953,150842000,0.0,0 -2014-03-03,160.06331934929221,160.7567997077357,159.28316221294187,160.34938049316406,167748500,0.0,0 -2014-03-04,161.91837851286223,162.94992877071618,161.8837104456489,162.6031951904297,167545900,0.0,0 -2014-03-05,162.7418703488279,163.02793146331067,162.49047729653864,162.7505340576172,88376900,0.0,0 -2014-03-06,163.14930859910788,163.49604216973304,162.77655744499984,163.123291015625,82516500,0.0,0 -2014-03-07,163.79939986131592,163.79939986131592,162.47311190453487,163.19259643554688,114513500,0.0,0 -2014-03-10,162.9412692057497,163.16664471596545,162.16977572700367,163.10597229003906,74939200,0.0,0 -2014-03-11,163.3486649507053,163.5827173645562,161.9270362766007,162.29977416992188,99009100,0.0,0 -2014-03-12,161.51091303620066,162.4037642423566,161.14682571581537,162.34307861328125,104824400,0.0,0 -2014-03-13,162.8285519982557,162.95858699621067,160.07198463849542,160.52273559570312,155014300,0.0,0 -2014-03-14,160.23667876000653,161.06018079296413,159.88126830327624,160.0719757080078,153919600,0.0,0 -2014-03-17,160.8781207863634,161.9010070559501,160.8087714437614,161.51959228515625,98359500,0.0,0 -2014-03-18,161.8489986593391,162.88921234625144,161.67561868899148,162.67250061035156,101804600,0.0,0 -2014-03-19,162.6898538204827,162.91524252685645,160.77412917852638,161.80567932128906,176267300,0.0,0 -2014-03-20,161.4502634792607,162.871892115849,161.16420236477794,162.7505340576172,117241000,0.0,0 -2014-03-21,163.4339562797549,164.5745352369767,161.97121943298285,162.11923217773438,163128000,0.825,0 -2014-03-24,162.67651976263596,162.87678409305997,160.74362488182211,161.44886779785156,121411000,0.0,0 -2014-03-25,162.26729561864326,162.76358552263576,161.30956345007817,162.21505737304688,103852000,0.0,0 -2014-03-26,162.85068724842247,163.11189182984398,161.0048645677665,161.04840087890625,119843000,0.0,0 -2014-03-27,160.85681406440716,161.3705078734613,160.1167368046138,160.70880126953125,142383000,0.0,0 -2014-03-28,161.17025395283937,162.31083327594453,161.0744794066405,161.50111389160156,101642000,0.0,0 -2014-03-31,162.52849834704392,163.07702649060855,161.52722988967398,162.82452392578125,99745000,0.0,0 -2014-04-01,163.35566182946104,163.9999646236155,162.8158488279953,163.90419006347656,89193000,0.0,0 -2014-04-02,164.11316631683655,164.67039653178213,163.8084254382532,164.45272827148438,78774000,0.0,0 -2014-04-03,164.70523454931694,164.74877086293787,163.730084894213,164.23507690429688,77435000,0.0,0 -2014-04-04,165.13181320183423,165.16663426967926,162.03222003251207,162.2934112548828,169381000,0.0,0 -2014-04-07,161.90166216838574,162.17156870685392,160.16903118192843,160.4998779296875,140803000,0.0,0 -2014-04-08,160.43018472134767,161.42275130180928,159.8468354691427,161.16156005859375,112660000,0.0,0 -2014-04-09,161.59690139144422,162.94643380686136,161.12673056862857,162.89419555664062,100254000,0.0,0 -2014-04-10,162.8854941950368,162.9638515706493,159.27219354529078,159.4724578857422,172959000,0.0,0 -2014-04-11,158.58438641890945,159.69884684337393,157.86172620398983,158.03585815429688,167251000,0.0,0 -2014-04-14,159.2721685584186,159.65526671519808,157.97487459208483,159.2808837890625,132382000,0.0,0 -2014-04-15,159.61174664523307,160.49112140465616,158.0358176920895,160.3779296875,157093000,0.0,0 -2014-04-16,161.48373272162672,162.06708207476117,160.7697744388727,162.05838012695312,105197000,0.0,0 -2014-04-17,161.84067536953657,162.73746735195715,161.5620536775078,162.2847137451172,105255000,0.0,0 -2014-04-21,162.328236014586,162.90288324066643,162.12798499413216,162.8506317138672,68329000,0.0,0 -2014-04-22,163.0160662587153,164.03475185068058,162.92900694908988,163.59071350097656,85790000,0.0,0 -2014-04-23,163.52975375998676,163.61681305920277,163.07700023366576,163.2075958251953,73869000,0.0,0 -2014-04-24,164.00862485578892,164.02604203104298,162.75485394573985,163.53846740722656,88170000,0.0,0 -2014-04-25,163.00741046208063,163.10318502957205,161.83199652336012,162.1976776123047,100380000,0.0,0 -2014-04-28,162.85936228030954,163.41659238326275,161.03965917844502,162.7113494873047,135121000,0.0,0 -2014-04-29,163.23374090638984,163.72131557286545,162.88547708331106,163.4688262939453,84098000,0.0,0 -2014-04-30,163.1989396841499,164.12185088441177,162.97255621474727,163.9564208984375,101508000,0.0,0 -2014-05-01,163.87801087535303,164.41782367897733,163.45137648465635,163.97378540039062,93019000,0.0,0 -2014-05-02,163.95639195370308,164.67905196803582,163.49493643503712,163.7387237548828,98122000,0.0,0 -2014-05-05,162.93770966221106,164.16536151680512,162.48495607962218,164.0521697998047,75883000,0.0,0 -2014-05-06,163.68647411846956,163.79966582530872,162.58943125553014,162.62425231933594,85454000,0.0,0 -2014-05-07,163.17281391779613,163.66038862372048,161.95386386757087,163.58203125,106500000,0.0,0 -2014-05-08,163.43404562234056,164.60074433198588,162.8855173442673,163.4079132080078,93618000,0.0,0 -2014-05-09,163.43403463091886,163.72134502967455,162.66783813979524,163.65170288085938,83679000,0.0,0 -2014-05-12,164.38300713599,165.32333523891103,163.68646632433615,165.24496459960938,86940000,0.0,0 -2014-05-13,165.46269329723074,165.7935532930085,165.22762114957206,165.39305114746094,66454000,0.0,0 -2014-05-14,165.24502360825477,165.3233942755424,164.37435060412474,164.60943603515625,72367000,0.0,0 -2014-05-15,164.27855324537805,164.31338760054211,162.3630755591853,163.16409301757812,154956000,0.0,0 -2014-05-16,163.2598554830975,163.79968166487612,162.57202980177385,163.7300262451172,97458000,0.0,0 -2014-05-19,163.41658615632596,164.4613908988746,163.2685733689611,164.33079528808594,63839000,0.0,0 -2014-05-20,164.25242514118938,164.2698423178191,162.87677375194232,163.29469299316406,111644000,0.0,0 -2014-05-21,163.76485715401142,164.7487217497908,163.73873803070876,164.6703643798828,89093000,0.0,0 -2014-05-22,164.71388276076212,165.41042369520076,164.43527435823464,165.07086181640625,61549000,0.0,0 -2014-05-23,165.21888262029736,165.84576816315888,165.0708698234292,165.7325897216797,61092800,0.0,0 -2014-05-27,166.35076634858626,166.80351998793395,166.25499179575147,166.75128173828125,72010000,0.0,0 -2014-05-28,166.7512882136446,167.0124927574659,166.35077280839664,166.62939453125,66723000,0.0,0 -2014-05-29,167.01248878064902,167.51746739182025,166.5858542597192,167.49134826660156,64377000,0.0,0 -2014-05-30,167.33460929498474,167.8657202399154,167.19529845703934,167.76123046875,76316000,0.0,0 -2014-06-02,167.99632560670435,168.03115996092072,167.143069924192,167.95278930664062,64656000,0.0,0 -2014-06-03,167.5435646781874,167.9527819671595,167.38684994730258,167.86572265625,65047000,0.0,0 -2014-06-04,167.578391024842,168.3010510264717,167.40425912592926,168.2052764892578,55529000,0.0,0 -2014-06-05,168.396843703351,169.4764695641546,167.77866011739596,169.30233764648438,92103000,0.0,0 -2014-06-06,169.66799368516268,170.15556829703687,169.58963632655684,170.11204528808594,78696000,0.0,0 -2014-06-09,170.08597329817184,170.69544173189396,169.92924525212015,170.28622436523438,65119000,0.0,0 -2014-06-10,170.07726641198357,170.33847097794435,169.7115853338049,170.30364990234375,57129000,0.0,0 -2014-06-11,169.69416118934703,169.8857103108297,169.32848012617526,169.71157836914062,68772000,0.0,0 -2014-06-12,169.5112914681576,169.60706600865353,168.13562683440355,168.510009765625,106350000,0.0,0 -2014-06-13,168.8408650276042,169.18914211317065,168.30105215174171,169.02371215820312,82017000,0.0,0 -2014-06-16,168.81474584353128,169.5199886740967,168.61449482278846,169.1630096435547,87424000,0.0,0 -2014-06-17,168.92799666874762,169.75513344729657,168.74514947423486,169.63323974609375,84834000,0.0,0 -2014-06-18,169.63320946124188,170.97403993509263,169.2588131909066,170.87826538085938,105267000,0.0,0 -2014-06-19,171.02625740264455,171.17428347472,170.47774255452222,171.06979370117188,85929000,0.0,0 -2014-06-20,171.49587762773947,171.55712319006173,171.207177153384,171.41714477539062,100587000,0.937,0 -2014-06-23,171.4608727641738,171.51336132722233,171.0496945548605,171.36463928222656,70611000,0.0,0 -2014-06-24,171.05841348116908,171.90701405869765,170.13982371333088,170.33229064941406,96237000,0.0,0 -2014-06-25,169.97361541743444,171.27713916758432,169.9386274938598,171.1021728515625,82782000,0.0,0 -2014-06-26,171.12842785593938,171.1459284933606,169.83366101734728,170.97970581054688,84312000,0.0,0 -2014-06-27,170.5772539317837,171.36462234692377,170.49852109499182,171.3121337890625,71445100,0.0,0 -2014-06-30,171.20715451457832,171.6183327101316,171.05843247455954,171.2246551513672,70201200,0.0,0 -2014-07-01,171.64461970477512,172.8956552395457,171.58338748438828,172.37074279785156,90470000,0.0,0 -2014-07-02,172.38820386874747,172.764380797987,172.30947102528918,172.54566955566406,52475000,0.0,0 -2014-07-03,173.03556697885034,173.4729894290562,172.9043455834181,173.39425659179688,52938800,0.0,0 -2014-07-07,173.061816757744,173.20178179016563,172.53690450167497,172.7906036376953,61696000,0.0,0 -2014-07-08,172.47564880201168,172.53689434621322,171.25961505113116,171.67955017089844,108143000,0.0,0 -2014-07-09,172.10824337631053,172.60691140565763,171.74081009898478,172.44943237304688,72992000,0.0,0 -2014-07-10,170.78722205333875,172.22196715207775,170.6472436658828,171.7670440673828,99040000,0.0,0 -2014-07-11,171.6621220714192,172.12578894830924,171.27718805685132,172.00331115722656,64243000,0.0,0 -2014-07-14,172.87809789121178,173.09680911199672,172.72937586296686,172.86935424804688,58658000,0.0,0 -2014-07-15,172.97434839628394,173.30679375631874,171.78455870408422,172.54566955566406,111307000,0.0,0 -2014-07-16,173.31554758535015,173.44676899882526,172.71190238521325,173.184326171875,79986400,0.0,0 -2014-07-17,172.65061089624126,173.30674443648684,170.97089728603012,171.2158660888672,145398000,0.0,0 -2014-07-18,171.77580183010045,173.14055774123176,171.67956835692715,172.96559143066406,124330000,0.0,0 -2014-07-21,172.4231954912684,172.7818851401475,171.84579459537645,172.64190673828125,67592000,0.0,0 -2014-07-22,173.22803392486685,173.70920128990807,173.10555617277214,173.39425659179688,67678000,0.0,0 -2014-07-23,173.65671231167815,173.9629133657111,173.3067796919894,173.77919006347656,65612000,0.0,0 -2014-07-24,173.945458190345,174.14666883179837,173.61301277040502,173.78797912597656,56888000,0.0,0 -2014-07-25,173.29805363281824,173.44677569018612,172.63317619710136,172.974365234375,76837000,0.0,0 -2014-07-28,173.0093102544575,173.29801065271477,172.01198767369274,173.0443115234375,69259000,0.0,0 -2014-07-29,173.3680168302947,173.6129723408671,172.27446067628435,172.3007049560547,80466000,0.0,0 -2014-07-30,172.91307926206161,173.1405474664673,171.60956897897444,172.32693481445312,104222000,0.0,0 -2014-07-31,171.12842593895826,171.27714798268477,168.81883574100985,168.92381286621094,183479000,0.0,0 -2014-08-01,168.46014237003283,169.5099536460377,167.59405440813924,168.40765380859375,189261000,0.0,0 -2014-08-04,168.73129661699642,169.98233150620268,168.01393088920898,169.62364196777344,91340000,0.0,0 -2014-08-05,168.93253383492748,169.3699562287527,167.36655418955286,167.97894287109375,152690000,0.0,0 -2014-08-06,167.19162184160945,168.74884481181655,167.16537756057815,168.03147888183594,94818000,0.0,0 -2014-08-07,168.79260025802176,168.9588229476378,166.70172119463857,167.12164306640625,135733000,0.0,0 -2014-08-08,167.49777019574162,169.1687134080961,167.05159086050372,169.05499267578125,117014000,0.0,0 -2014-08-11,169.69364388644925,170.2972889234957,169.46618904818664,169.544921875,74544000,0.0,0 -2014-08-12,169.37876606772267,169.85117656409008,168.79262143280795,169.30877685546875,73632000,0.0,0 -2014-08-13,169.9736055961555,170.64723989044404,169.68491853339103,170.45477294921875,69047000,0.0,0 -2014-08-14,170.73479022729137,171.2596893310547,170.57731115180763,171.2596893310547,57371000,0.0,0 -2014-08-15,171.8807888656661,172.03825454954202,169.99112056470733,171.2246551513672,139951000,0.0,0 -2014-08-18,172.1695127239857,172.7381566807739,172.07327923216715,172.659423828125,75424000,0.0,0 -2014-08-19,173.0793336730441,173.69172251057722,172.7294010084753,173.5605010986328,59135000,0.0,0 -2014-08-20,173.32427603805294,174.23412225531817,173.28928811388482,174.02415466308594,72763000,0.0,0 -2014-08-21,174.17289602274266,174.75904059837012,174.03291761239333,174.53158569335938,67791000,0.0,0 -2014-08-22,174.39158211536602,174.69778317518075,173.86668317592168,174.26036071777344,76107000,0.0,0 -2014-08-25,175.09146285633727,175.48514040299906,174.22536157442195,175.14395141601562,63855000,0.0,0 -2014-08-26,175.25772094726562,175.68639985306427,175.21397602233486,175.25772094726562,47298000,0.0,0 -2014-08-27,175.34519459012796,175.46768571756843,174.91652904039296,175.18772888183594,47874000,0.0,0 -2014-08-28,174.61027859054448,175.2051800238713,174.43531229218,175.09144592285156,58330000,0.0,0 -2014-08-29,175.36266543933226,175.60762095444727,174.81152220486067,175.5901336669922,65907000,0.0,0 -2014-09-02,175.81756918920388,175.84381346657156,174.84649087938078,175.50262451171875,72426000,0.0,0 -2014-09-03,176.17627037219944,176.20251465129417,175.16144708362395,175.40640258789062,57462000,0.0,0 -2014-09-04,175.7038378847157,176.35122788459378,174.6715273609602,175.15269470214844,85236000,0.0,0 -2014-09-05,175.11770711085612,176.01005267248158,174.45282977323618,175.9400634765625,102177000,0.0,0 -2014-09-08,175.77385364659747,176.02756616897415,174.96899785833813,175.4851531982422,64146000,0.0,0 -2014-09-09,175.3277081960939,175.4501859750839,174.01544055731105,174.37413024902344,88591000,0.0,0 -2014-09-10,174.47026847333962,175.1439026160249,173.89288112867987,175.03018188476562,67251000,0.0,0 -2014-09-11,174.3303409059333,175.25767433187352,174.19910616604705,175.23143005371094,66774400,0.0,0 -2014-09-12,175.0564711105336,175.07395839732845,173.7092024791942,174.20787048339844,117409300,0.0,0 -2014-09-15,174.23410865782478,174.37408704172213,173.55173072266692,174.07662963867188,76401000,0.0,0 -2014-09-16,173.75294507540275,175.70384545290008,173.65671160302,175.38890075683594,116201000,0.0,0 -2014-09-17,175.6426379671993,176.43873678812594,174.75029231127291,175.62513732910156,151266000,0.0,0 -2014-09-18,176.15878370190583,176.58746254289406,175.9313288153615,176.56121826171875,94990000,0.0,0 -2014-09-19,177.1228321250041,177.45681801701582,176.04173335156048,176.402099609375,121649000,0.939,0 -2014-09-22,176.0944963171194,176.12086327379262,174.67061359939837,175.03976440429688,125553000,0.0,0 -2014-09-23,174.40696215093143,175.13647937754587,173.98507735641704,174.03781127929688,111393000,0.0,0 -2014-09-24,174.06417758550907,175.5144275166241,173.6071413146205,175.40016174316406,107276000,0.0,0 -2014-09-25,174.9430815347523,174.95187946131455,172.50844311928304,172.56996154785156,150300000,0.0,0 -2014-09-26,172.88639771142653,174.37179902688828,172.64029714677338,173.9411163330078,103547000,0.0,0 -2014-09-29,172.44689564082222,173.93229665600572,172.31506086907845,173.62466430664062,95112000,0.0,0 -2014-09-30,173.7565633382491,174.29271391936075,172.80731246948704,173.1676788330078,131302000,0.0,0 -2014-10-01,172.886333631927,172.94786545602125,170.43411341036736,170.8208465576172,177798000,0.0,0 -2014-10-02,170.67146192613635,171.44492842895224,169.0630239027852,170.84725952148438,157285000,0.0,0 -2014-10-03,171.98986489469002,173.09733074437906,171.46251233855236,172.72817993164062,121569000,0.0,0 -2014-10-06,173.44888463711106,173.6774161293545,171.90196515883437,172.5260009765625,104778000,0.0,0 -2014-10-07,171.63827437594577,172.02500758076067,169.82767201837765,169.86282348632812,147913000,0.0,0 -2014-10-08,169.9594996145528,173.0797186637452,169.0717809129453,172.8336181640625,186461000,0.0,0 -2014-10-09,172.56119406225375,172.79851010780578,169.26519002976616,169.40582275390625,210705000,0.0,0 -2014-10-10,169.3618851256389,170.20565470619084,167.42823197444207,167.47216796875,221909000,0.0,0 -2014-10-13,167.40186797482144,168.00832150405148,164.6244317824606,164.7211151123047,230939000,0.0,0 -2014-10-14,165.60884713569914,166.83936355878265,164.39591315891766,164.97601318359375,215847000,0.0,0 -2014-10-15,162.74347381871698,164.96717646484166,159.89572193537032,163.85971069335938,380715000,0.0,0 -2014-10-16,160.89773085542532,164.87051814153358,160.74831361518895,163.7191162109375,270391000,0.0,0 -2014-10-17,165.60880633811485,166.7777906169013,164.90565618549854,165.6527557373047,214625000,0.0,0 -2014-10-20,165.353868875412,167.392988919118,165.30113497768664,167.2611541748047,130011000,0.0,0 -2014-10-21,168.47414764834363,170.68906620059525,168.29836344198483,170.57481384277344,154949000,0.0,0 -2014-10-22,170.87367652372166,171.3131438178551,169.29159158254575,169.36190795898438,151822000,0.0,0 -2014-10-23,171.05820570427966,172.4469236418531,170.74178878924425,171.33067321777344,154944000,0.0,0 -2014-10-24,171.6119573780827,172.70184096241798,170.94397200079868,172.6490936279297,117927000,0.0,0 -2014-10-27,172.0338096934931,172.66664347311442,171.41855835538163,172.41175842285156,82954000,0.0,0 -2014-10-28,172.99188646855953,174.39817355453513,172.91277217461473,174.38938903808594,106736000,0.0,0 -2014-10-29,174.51240461717464,175.0133901846486,172.974269621526,174.12567138671875,142557000,0.0,0 -2014-10-30,173.65985877156368,175.7429289888218,173.50164360704528,175.241943359375,113330000,0.0,0 -2014-10-31,177.3513632108021,177.38652809347087,176.46364438977716,177.2458953857422,146903000,0.0,0 -2014-11-03,177.47440985187404,177.94024395167048,176.93825939964967,177.3425750732422,93600000,0.0,0 -2014-11-04,176.86799054696812,177.19320544072139,175.83963876304634,176.7273712158203,93343000,0.0,0 -2014-11-05,178.0193968976568,178.0633463072156,177.06136146206845,177.84361267089844,91709000,0.0,0 -2014-11-06,177.88751098142973,178.6521795244862,177.22831026183678,178.5554962158203,107089000,0.0,0 -2014-11-07,178.57308643520338,178.95103517153206,178.08088535563695,178.72250366210938,89540000,0.0,0 -2014-11-10,178.75765116163322,179.33773757100977,178.53791760023344,179.28500366210938,66319000,0.0,0 -2014-11-11,179.35534759566596,179.5750811908604,178.99498128079327,179.4608154296875,54499400,0.0,0 -2014-11-12,178.73132077750012,179.51357187968134,178.6961558900566,179.26747131347656,90120300,0.0,0 -2014-11-13,179.44322227843716,180.0321066250263,178.60823741122783,179.46958923339844,85357900,0.0,0 -2014-11-14,179.39049953671676,179.7332833840262,179.05650020445043,179.5135498046875,80417500,0.0,0 -2014-11-17,179.17077141450352,179.81238973050222,178.99497381649948,179.6278076171875,80441000,0.0,0 -2014-11-18,179.6893147268201,180.9901336218714,179.6893147268201,180.66493225097656,76068100,0.0,0 -2014-11-19,180.45402458552203,180.6649736755766,179.5663056447247,180.3749237060547,82373000,0.0,0 -2014-11-20,179.53109982491003,180.805565179305,179.46078347759038,180.69129943847656,72840300,0.0,0 -2014-11-21,182.50190962361515,182.6776937937191,181.04287552995459,181.6581268310547,142327300,0.0,0 -2014-11-24,182.08880685114576,182.2821734589446,181.86028877441632,182.16790771484375,65880800,0.0,0 -2014-11-25,182.41396119328053,182.63369469898342,181.76355859973998,182.03602600097656,79108300,0.0,0 -2014-11-26,182.19429022924956,182.6073904346931,181.96577213300412,182.50192260742188,62167800,0.0,0 -2014-11-28,182.37010234225167,182.70408829235774,181.86031878406664,182.11520385742188,57890100,0.0,0 -2014-12-01,181.41206585367394,181.53511614071567,180.51556236728783,180.84954833984375,103968400,0.0,0 -2014-12-02,180.89345886648033,182.23822721851195,180.86709191145795,182.01849365234375,74507200,0.0,0 -2014-12-03,182.20308115712615,182.95016725738955,182.02729698126848,182.72164916992188,68952000,0.0,0 -2014-12-04,182.41403474614265,183.05566649777103,181.6757330880359,182.51951599121094,91316600,0.0,0 -2014-12-05,182.70404786096276,183.23141374554743,182.42279589093008,182.8183135986328,91025500,0.0,0 -2014-12-08,182.39643676864097,182.92378926439483,180.99892113793376,181.5966033935547,108588200,0.0,0 -2014-12-09,179.62781942752324,181.58785280005353,179.2235171130685,181.4735870361328,125180100,0.0,0 -2014-12-10,180.9813853941813,181.0429038281708,178.36215122778034,178.56431579589844,159856400,0.0,0 -2014-12-11,179.197121757817,181.22745775866963,179.04770454254563,179.46958923339844,159012800,0.0,0 -2014-12-12,178.10724204638643,179.14439147123935,176.53395558549556,176.56910705566406,202330200,0.0,0 -2014-12-15,177.52717026053162,178.01058687345667,174.71458280097897,175.356201171875,189965800,0.0,0 -2014-12-16,174.53877450700466,177.89629655141383,173.90594073952394,173.94989013671875,259543800,0.0,0 -2014-12-17,174.41574623433104,177.84358506418343,174.28389802612148,177.36016845703125,253910100,0.0,0 -2014-12-18,179.95305797621052,187.1866853014342,179.23232523421115,181.74607849121094,257633900,0.0,0 -2014-12-19,182.43982772099722,183.23524273364654,181.71513064955693,182.51937866210938,245084600,1.135,0 -2014-12-22,182.72265163435333,183.35897827148438,182.46635977365997,183.35897827148438,148318900,0.0,0 -2014-12-23,183.97763361978187,184.03065859432255,183.2971149803499,183.6064453125,122167900,0.0,0 -2014-12-24,183.84503080838414,184.12783510565887,183.57989250841186,183.62408447265625,42963400,0.0,0 -2014-12-26,184.10130538305003,184.57855697540413,184.0482804251202,184.21620178222656,57326700,0.0,0 -2014-12-29,184.02179139564953,184.68463042522214,183.9510869475691,184.46368408203125,79643900,0.0,0 -2014-12-30,184.01295604546385,184.15435145432343,183.39429550403872,183.47384643554688,73540800,0.0,0 -2014-12-31,183.81854446375002,183.99529886036586,181.52069685125588,181.65325927734375,130333800,0.0,0 -2015-01-02,182.39560654248885,182.83749917313892,180.45126817923415,181.55599975585938,121465900,0.0,0 -2015-01-05,180.4424472411213,180.619201608096,177.95017965014245,178.2771759033203,169632600,0.0,0 -2015-01-06,178.6042058065925,179.16099497868427,175.74958245991652,176.5980224609375,209151400,0.0,0 -2015-01-07,178.01204606886992,179.16096973704055,177.53480790681152,178.79861450195312,125346700,0.0,0 -2015-01-08,180.3010663129865,182.20121313773186,180.28340031339516,181.97142028808594,147217800,0.0,0 -2015-01-09,182.41330155481515,182.43098103879146,179.85916228278802,180.51316833496094,158567300,0.0,0 -2015-01-12,180.65459216028688,180.82251355819676,178.45396147301386,179.09912109375,144396100,0.0,0 -2015-01-13,180.39823759851498,181.60018605584017,177.20777236524324,178.59532165527344,214553300,0.0,0 -2015-01-14,176.44773418781983,177.72923369343965,175.4932579070525,177.51712036132812,192991100,0.0,0 -2015-01-15,178.19770278675892,178.5335321595903,175.76729227842014,175.89102172851562,176613900,0.0,0 -2015-01-16,175.67005050129694,178.365599017747,175.47561660925814,178.1976776123047,211879600,0.0,0 -2015-01-20,178.8781663059206,179.16098411761473,176.90732856559814,178.5776824951172,130991100,0.0,0 -2015-01-21,178.08277382061274,179.99175368965058,177.5878561106021,179.47915649414062,122942700,0.0,0 -2015-01-22,180.28342055422902,182.2896040582488,178.81633329368356,182.14820861816406,174356000,0.0,0 -2015-01-23,181.87418735534405,182.14817215086734,181.00808145917418,181.1494903564453,117516800,0.0,0 -2015-01-26,180.91970741391694,181.67091688042524,180.15965146307096,181.57369995117188,92009700,0.0,0 -2015-01-27,179.3819014844234,180.39824917426026,178.29484935309014,179.1786346435547,134044600,0.0,0 -2015-01-28,180.44242106788712,180.54847097559062,176.67750100400335,176.88076782226562,168514300,0.0,0 -2015-01-29,177.0929131493273,178.78977940691001,175.59046726253013,178.51580810546875,173585400,0.0,0 -2015-01-30,177.26084491615913,178.67489347096566,175.9881917769867,176.27099609375,197729700,0.0,0 -2015-02-02,176.80125945018233,178.5511506423575,174.86576740352925,178.4539337158203,163107000,0.0,0 -2015-02-03,179.4084449547592,181.04345341874222,179.01074420245124,181.03460693359375,124212900,0.0,0 -2015-02-04,180.22148544893372,181.51181783958313,179.8591302621529,180.34521484375,134306700,0.0,0 -2015-02-05,181.05229816132285,182.32495143964832,180.97276070280165,182.16586303710938,97953200,0.0,0 -2015-02-06,182.5546971937018,183.15567823578175,181.10528977932475,181.66207885742188,125672000,0.0,0 -2015-02-09,180.9727131627887,181.74160203083946,180.415924128411,180.84898376464844,87219000,0.0,0 -2015-02-10,181.95373610419506,183.04962133115373,180.89318287288802,182.77565002441406,96164200,0.0,0 -2015-02-11,182.59889430482568,183.34127077288542,181.90954280084244,182.88169860839844,91087800,0.0,0 -2015-02-12,183.7301440224893,184.70231334481315,182.9170630826797,184.64044189453125,97545900,0.0,0 -2015-02-13,184.77303257067362,185.4535376652261,184.49904775029347,185.4005126953125,93670400,0.0,0 -2015-02-17,185.06469076737062,185.87778534935833,184.79956588791532,185.6921844482422,76968200,0.0,0 -2015-02-18,185.29442818212908,185.7893457896392,185.01161041469848,185.70980834960938,80652900,0.0,0 -2015-02-19,185.0735045814912,185.9661229842385,184.92326268115718,185.57725524902344,91462500,0.0,0 -2015-02-20,185.13534040242294,186.77034859750808,184.47250142909007,186.69081115722656,140896400,0.0,0 -2015-02-23,186.42565034554133,186.66427612304688,186.0191032240686,186.66427612304688,74411100,0.0,0 -2015-02-24,186.58479642348306,187.40672397727874,186.2666330938681,187.19461059570312,72472300,0.0,0 -2015-02-25,187.06201968512238,187.57461683177726,186.67315195417765,187.03550720214844,73061700,0.0,0 -2015-02-26,186.938274082731,187.10619545068937,186.16937168657924,186.81454467773438,72697900,0.0,0 -2015-02-27,186.70850107033414,186.99131887488767,186.12521294805904,186.17823791503906,108076000,0.0,0 -2015-03-02,186.28428196575194,187.4155261772486,186.2312570004466,187.35366821289062,87491400,0.0,0 -2015-03-03,186.8940928462341,187.40668997792363,185.6656317241573,186.5847625732422,110325800,0.0,0 -2015-03-04,185.94842914459434,186.02798007374324,184.76416003186395,185.79818725585938,114497200,0.0,0 -2015-03-05,186.1428449759381,186.30193333333983,185.46234004322574,186.00144958496094,76873000,0.0,0 -2015-03-06,185.08230305159216,185.54187515160763,183.03192831047147,183.38543701171875,188128000,0.0,0 -2015-03-09,183.59758044880058,184.52554431320985,183.4296590682329,184.14552307128906,89818900,0.0,0 -2015-03-10,182.6872528521385,182.77562328482273,181.11410271864597,181.15829467773438,157121300,0.0,0 -2015-03-11,181.43228482025785,181.6178856735416,180.6457164144248,180.73410034179688,110145700,0.0,0 -2015-03-12,181.4057614834359,183.10262760058242,181.35273652438337,183.0319366455078,93993500,0.0,0 -2015-03-13,182.74032163957494,183.7655025146578,180.80482934250708,181.90956115722656,162410900,0.0,0 -2015-03-16,182.6872913886299,184.43718275661706,181.9360683821403,184.3399658203125,136099200,0.0,0 -2015-03-17,183.55336638670838,184.19852586315218,182.92587290625423,183.7919921875,94510400,0.0,0 -2015-03-18,183.288222395353,186.7173134795371,182.60770397714793,186.00144958496094,228808500,0.0,0 -2015-03-19,185.55960817376888,186.01033392073563,184.7376806522455,185.15306091308594,117917300,0.0,0 -2015-03-20,186.16599057948412,187.32891550125507,185.970688763311,186.7873992919922,177715100,0.931,0 -2015-03-23,186.7962613444875,187.4087975933937,186.4234161376953,186.4234161376953,71784500,0.0,0 -2015-03-24,186.29027698700864,186.7785179939738,185.3048954518938,185.37591552734375,77805300,0.0,0 -2015-03-25,185.59782317798872,185.84638663572758,182.61504813943003,182.659423828125,159521700,0.0,0 -2015-03-26,181.94923200790535,183.20092159963303,181.20352816380384,182.22442626953125,153067200,0.0,0 -2015-03-27,182.10016170988445,182.82809367576567,181.89597394208653,182.6416778564453,118939000,0.0,0 -2015-03-30,183.7423908779664,185.18939542184984,183.72464602706688,184.86981201171875,96180400,0.0,0 -2015-03-31,183.99101408959874,184.7367179862329,183.19206207725972,183.2541961669922,126768700,0.0,0 -2015-04-01,183.218676278573,183.24530710685443,181.54973879591978,182.60614013671875,137303600,0.0,0 -2015-04-02,182.53513130924128,183.74244526647433,182.3398295260351,183.26307678222656,86900900,0.0,0 -2015-04-06,182.31320162775236,185.0474130909143,182.17117504779364,184.4970245361328,114368200,0.0,0 -2015-04-07,184.52362850740138,185.32258039293092,183.9732400327339,184.0087432861328,81236300,0.0,0 -2015-04-08,184.24842468854428,185.1006381826992,183.83119036793263,184.63014221191406,89351900,0.0,0 -2015-04-09,184.45263039356934,185.69544759569945,183.9288726830782,185.44688415527344,85548900,0.0,0 -2015-04-10,185.7131721194387,186.50325152788568,185.50012552118997,186.4588623046875,72722900,0.0,0 -2015-04-13,186.30798347046144,186.98266727541596,185.56229315037737,185.6155548095703,74436600,0.0,0 -2015-04-14,185.4024951887549,186.16594385700154,184.73669740408715,185.97064208984375,75099900,0.0,0 -2015-04-15,186.46777115013552,187.34661556709474,186.37899269284898,186.8050994873047,99529300,0.0,0 -2015-04-16,186.44997551571444,187.29331650875937,186.23691538818903,186.75180053710938,68934900,0.0,0 -2015-04-17,185.4823888415409,185.73982469313188,183.7690621544331,184.60353088378906,191113200,0.0,0 -2015-04-20,185.58893799802362,186.64533947078144,185.50017307456127,186.29025268554688,92189500,0.0,0 -2015-04-21,187.01817816628983,187.1868491244129,185.74873008473963,186.0683135986328,72559800,0.0,0 -2015-04-22,186.43221829277292,187.17792197096406,185.44683720850534,186.9826202392578,78264600,0.0,0 -2015-04-23,186.5565391395403,188.1455841496264,186.4322574247032,187.45315551757812,102585900,0.0,0 -2015-04-24,187.8970695693499,188.17226389905613,187.40881501066403,187.88818359375,61327400,0.0,0 -2015-04-27,188.4918061732637,188.62496032114433,186.90276109820005,187.10694885253906,79358100,0.0,0 -2015-04-28,187.08031260979124,187.75498284901738,185.82860947316524,187.70172119140625,86863500,0.0,0 -2015-04-29,186.7518559100351,187.56856632250938,186.06831319638215,186.92941284179688,125684900,0.0,0 -2015-04-30,186.31684988348817,186.7340842309511,184.31057062657524,185.0562744140625,161304900,0.0,0 -2015-05-01,185.89076550538798,187.10696552909238,185.78424217758922,187.0625762939453,103399700,0.0,0 -2015-05-04,187.51530880441484,188.21662348157002,187.3999130510505,187.59521484375,70927200,0.0,0 -2015-05-05,187.3377543337993,187.71948546811242,185.2959716054213,185.44688415527344,113326200,0.0,0 -2015-05-06,186.03279527035096,186.36125120988459,183.54714724328235,184.68344116210938,135060200,0.0,0 -2015-05-07,184.57691633721032,185.87300877396697,184.2218295701029,185.42025756835938,88244900,0.0,0 -2015-05-08,187.20458416919553,188.0745561362556,187.11580571419964,187.8614959716797,155877300,0.0,0 -2015-05-11,187.81710129399687,188.10116793901042,186.88498179357643,186.96487426757812,75708100,0.0,0 -2015-05-12,186.0771532464985,186.98264196729488,185.1982953516941,186.40560913085938,119727600,0.0,0 -2015-05-13,186.84062283098206,187.50642064687264,186.19258341630874,186.44114685058594,94667900,0.0,0 -2015-05-14,187.52419999422665,188.4829505816829,187.2312472970295,188.3852996826172,95934000,0.0,0 -2015-05-15,188.58949279785156,188.74040537594195,188.07460741899925,188.58949279785156,76510100,0.0,0 -2015-05-18,188.41187492226445,189.44163172730137,188.34085487610864,189.17532348632812,74549700,0.0,0 -2015-05-19,189.29964957293294,189.59260225239194,188.8113951071679,189.11322021484375,72114600,0.0,0 -2015-05-20,189.2197495021233,189.77902404833225,188.64273009892122,188.98007202148438,76857500,0.0,0 -2015-05-21,188.82912502268363,189.75235860855855,188.65156811959739,189.53042602539062,64764600,0.0,0 -2015-05-22,189.12204291143522,189.56590802801318,189.00664719219304,189.07766723632812,57433500,0.0,0 -2015-05-26,188.5539234520122,189.00667460582957,186.600919364942,187.04478454589844,124308600,0.0,0 -2015-05-27,187.53304510697544,189.0688148906794,187.09805233891768,188.82025146484375,93214000,0.0,0 -2015-05-28,188.49179896440938,188.72260399380588,187.87039038857964,188.60720825195312,74974600,0.0,0 -2015-05-29,188.53616950042544,188.5805451798276,187.15131236997397,187.4353790283203,124919600,0.0,0 -2015-06-01,188.14559460526365,188.5006813686194,186.97378390394454,187.817138671875,93338800,0.0,0 -2015-06-02,187.32885121926932,188.36749404212787,186.66305349597363,187.63067626953125,91531000,0.0,0 -2015-06-03,188.19884293275484,188.79362066937074,187.60406519613895,188.12782287597656,87820900,0.0,0 -2015-06-04,187.37324123370215,188.07454221176198,186.20143073382772,186.5387725830078,151882800,0.0,0 -2015-06-05,186.37896218822863,186.9382365770778,185.51786276711013,186.21917724609375,121704700,0.0,0 -2015-06-08,186.1037908472177,186.26358935467644,184.99412790485792,185.0740203857422,89063300,0.0,0 -2015-06-09,185.04737854003906,185.62441136312054,184.37270838770635,185.04737854003906,105034700,0.0,0 -2015-06-10,185.8640928423478,187.67507028149953,185.80195876368015,187.26670837402344,134551300,0.0,0 -2015-06-11,187.7372241561911,188.27874025054797,187.48866072393133,187.87039184570312,73876400,0.0,0 -2015-06-12,186.99152544683128,187.73721571006263,186.13929832764507,186.4322509765625,135382400,0.0,0 -2015-06-15,185.21609686690726,185.93515642745814,184.4615204996394,185.63333129882812,124384200,0.0,0 -2015-06-16,185.47351402620146,186.73410316916377,185.2870982196913,186.64532470703125,85308200,0.0,0 -2015-06-17,186.9471435546875,187.59519650606612,185.85523894456085,186.9471435546875,126708600,0.0,0 -2015-06-18,187.58628599633553,189.3883774069883,186.9826358991879,188.89125061035156,165867900,0.0,0 -2015-06-19,188.6326046547824,188.71288576273048,187.6513457412561,188.05276489257812,130478700,1.03,0 -2015-06-22,189.03401909936647,189.6406056042019,188.79316216993772,189.01617431640625,70696000,0.0,0 -2015-06-23,189.23918894208396,189.50680624366848,188.73072831949662,189.1499786376953,68476800,0.0,0 -2015-06-24,188.86453023676555,189.26594938350522,187.74946948938788,187.77622985839844,92307300,0.0,0 -2015-06-25,188.31142139786755,188.4452232123219,187.1249954005852,187.2052764892578,97107400,0.0,0 -2015-06-26,187.58885166492388,187.84755332288097,186.58084623084974,187.1696014404297,104174800,0.0,0 -2015-06-29,185.5906902629151,187.17853547931085,183.16431729169875,183.24459838867188,202621300,0.0,0 -2015-06-30,184.88595176324122,184.93948610249572,183.1196996920479,183.628173828125,182925100,0.0,0 -2015-07-01,185.30521921048344,185.57283646563764,184.26152416580322,185.1000518798828,135979900,0.0,0 -2015-07-02,185.60852276700766,185.7869297301184,184.48453303741036,184.93055725097656,104373700,0.0,0 -2015-07-06,183.55682300773188,185.23386492593252,183.34272646831954,184.40426635742188,117975400,0.0,0 -2015-07-07,184.6183954482234,185.69776669723686,182.07605133931472,185.56396484375,173820200,0.0,0 -2015-07-08,184.13667016007486,184.43996341693537,182.200926333762,182.45069885253906,164020100,0.0,0 -2015-07-09,184.6896990180671,184.96624546218837,182.66475890357447,182.7807159423828,144113100,0.0,0 -2015-07-10,184.9126924772094,185.52820800322976,182.82530265020074,185.08218383789062,129456900,0.0,0 -2015-07-13,186.429188122527,187.2409417699399,186.384582983057,187.12498474121094,106069400,0.0,0 -2015-07-14,187.08042384749658,188.26685005779308,187.01797391515328,187.93678283691406,81709600,0.0,0 -2015-07-15,187.98135480638032,188.4719841468315,187.3658392348669,187.8743133544922,97914100,0.0,0 -2015-07-16,188.9982938164098,189.3818817138672,188.7396057644891,189.3818817138672,106683300,0.0,0 -2015-07-17,189.37298905890717,189.6049304035684,188.9358939615033,189.54248046875,89030000,0.0,0 -2015-07-20,189.7833560551174,190.16693045271498,189.30165575857444,189.640625,70446800,0.0,0 -2015-07-21,189.49786761050785,189.77441409570983,188.57014310433513,188.8912811279297,77965000,0.0,0 -2015-07-22,188.1598035693376,188.90913473377833,188.12412761464108,188.55230712890625,88667900,0.0,0 -2015-07-23,188.69502413185342,188.80206559956042,187.10717884015776,187.49075317382812,90509100,0.0,0 -2015-07-24,187.59778031636847,187.66021662603956,185.18925237057218,185.5460662841797,117755000,0.0,0 -2015-07-27,184.60049022594563,185.14464027127536,183.99389026171323,184.4666748046875,132361100,0.0,0 -2015-07-28,185.3587662670103,186.88417530994846,184.47564689461854,186.73252868652344,123544800,0.0,0 -2015-07-29,186.86632434588861,188.25791789042032,186.71467772747994,188.01707458496094,105791300,0.0,0 -2015-07-30,187.47292073382906,188.24008300755406,186.81279992708605,188.06167602539062,91304400,0.0,0 -2015-07-31,188.59691293507862,188.62367330408918,187.47293660189123,187.77622985839844,103266900,0.0,0 -2015-08-03,187.740537269032,187.8029735873307,186.12591801616236,187.14285278320312,113965700,0.0,0 -2015-08-04,187.06262443182655,187.55325397786666,186.25978598309473,186.7771759033203,81820800,0.0,0 -2015-08-05,187.73160834193635,188.4987706137232,187.08933231850645,187.39263916015625,85786800,0.0,0 -2015-08-06,187.58890030985788,187.70487098739994,185.23389247242358,185.85833740234375,116030800,0.0,0 -2015-08-07,185.6888162738569,185.84937846791814,184.53806610343256,185.50148010253906,117858000,0.0,0 -2015-08-10,186.6879337419811,187.92788077690892,186.6879337419811,187.83868408203125,80270700,0.0,0 -2015-08-11,186.41138559644753,186.85740986908837,185.3320008675612,186.14376831054688,126081400,0.0,0 -2015-08-12,184.75218499292907,186.56304255124505,183.19109995220282,186.36679077148438,172123700,0.0,0 -2015-08-13,186.19729349937572,186.92877985756306,185.55501744248275,186.13485717773438,89383300,0.0,0 -2015-08-14,185.92970258693666,186.8931168089661,185.7780559424852,186.81283569335938,72786500,0.0,0 -2015-08-17,186.1794491581296,187.8564910888672,185.68881975887925,187.8564910888672,79072600,0.0,0 -2015-08-18,187.56210463363902,187.9367633541171,187.0625596730016,187.3123321533203,71692700,0.0,0 -2015-08-19,186.51842580241407,187.33910882512302,184.96627005555212,185.83155822753906,172946000,0.0,0 -2015-08-20,184.21693865450573,185.80478396298048,181.88869142621266,181.95114135742188,194327900,0.0,0 -2015-08-21,179.9529524501096,181.92438575957192,176.19743562972423,176.47396850585938,346588500,0.0,0 -2015-08-24,167.25013968318524,176.16169343634675,162.70960351810018,169.04315185546875,507244300,0.0,0 -2015-08-25,174.33301397165675,174.350858751072,166.74168691409398,167.0539093017578,369833100,0.0,0 -2015-08-26,171.34469345427576,173.76213749169557,168.03518722228392,173.4677734375,339257000,0.0,0 -2015-08-27,175.7514202980704,177.89233150945438,174.13681449784428,177.75852966308594,274143900,0.0,0 -2015-08-28,177.07161359091958,178.26695522193327,176.55422386744078,177.7674102783203,160414400,0.0,0 -2015-08-31,176.72374133849303,177.63363468388292,175.7424824746823,176.33123779296875,163298800,0.0,0 -2015-09-01,172.27238770151322,173.74427577160054,170.14039250748863,171.06813049316406,256000400,0.0,0 -2015-09-02,173.61049006465763,174.359821215713,171.64798591345212,174.31521606445312,160269300,0.0,0 -2015-09-03,175.07344083242262,176.67021533486965,173.91378862450787,174.44009399414062,152087800,0.0,0 -2015-09-04,172.03154762976882,172.93251165678208,170.92540266058523,171.7996063232422,207081000,0.0,0 -2015-09-08,174.78796778540791,176.27768699801533,174.101086697868,176.1171112060547,116025700,0.0,0 -2015-09-09,177.80312318382866,177.93692502144376,173.36964080977356,173.7621307373047,149347700,0.0,0 -2015-09-10,173.5569221427634,175.92977398423787,173.2803893363467,174.70767211914062,158611100,0.0,0 -2015-09-11,174.28844614517988,175.57299820621853,173.5301994500561,175.5016326904297,119691200,0.0,0 -2015-09-14,175.68900716977862,175.74252791953887,174.3330891923203,174.85047912597656,79452000,0.0,0 -2015-09-15,175.3856545522402,177.50873431885316,174.80582847708646,177.03594970703125,113806200,0.0,0 -2015-09-16,177.3570937999926,178.77544768417215,176.99135063894096,178.5702667236328,99581600,0.0,0 -2015-09-17,178.42752490084771,180.9876994548875,177.7674041842296,178.1688232421875,276046600,0.0,0 -2015-09-18,175.4904255623797,178.15357043229227,174.8179110528676,175.2572784423828,223657500,1.033,0 -2015-09-21,176.1450110562196,177.25689300912651,175.04209103823044,176.16294860839844,105726200,0.0,0 -2015-09-22,173.84951957678396,174.36959919893715,172.66588726105354,173.8764190673828,153890900,0.0,0 -2015-09-23,174.0557700316083,174.5579121467511,172.97974925882417,173.5984649658203,92790600,0.0,0 -2015-09-24,172.29823430426646,173.46392900904328,170.8725066421756,172.9707489013672,159378800,0.0,0 -2015-09-25,174.53099606641823,174.85380363580893,171.99337255638636,172.92593383789062,155054800,0.0,0 -2015-09-28,171.96646326752386,172.08303684165608,168.25418327222124,168.58595275878906,178515900,0.0,0 -2015-09-29,168.8191272382607,170.1372571447069,167.617557242473,168.6846160888672,159045600,0.0,0 -2015-09-30,170.70213691629692,172.01130470723925,169.8682253696026,171.83197021484375,163452000,0.0,0 -2015-10-01,172.2354821686396,172.60312678422238,170.20897633839846,172.2803192138672,131079000,0.0,0 -2015-10-02,170.1641406397944,174.88070503287256,169.5812864119139,174.8538055419922,211003300,0.0,0 -2015-10-05,176.16298237975752,178.20742588508696,176.0464087917624,177.96531677246094,126320800,0.0,0 -2015-10-06,177.82182566631266,178.42260373631257,176.64716901583932,177.3555450439453,110274500,0.0,0 -2015-10-07,178.3508783063748,179.18480358064522,177.07758555425613,178.80819702148438,124307300,0.0,0 -2015-10-08,178.395706499925,180.72709595886258,178.07289893918514,180.42222595214844,153055200,0.0,0 -2015-10-09,180.57465271567418,181.04091964030957,179.8573010931697,180.52981567382812,107069200,0.0,0 -2015-10-12,180.6105059740731,180.91537595309202,180.15320100554473,180.70018005371094,56395600,0.0,0 -2015-10-13,179.92007035390938,181.2740751958258,179.38206687382657,179.5614013671875,88038700,0.0,0 -2015-10-14,179.49862690829417,180.11734254086184,178.386744839188,178.70057678222656,99106200,0.0,0 -2015-10-15,179.40897650314977,181.45341994416637,179.01443238605088,181.4444580078125,134142200,0.0,0 -2015-10-16,181.87484983356063,182.28731779225413,181.0588621695069,182.26939392089844,114580100,0.0,0 -2015-10-19,181.57892681423306,182.35903930664062,181.24715735099645,182.35903930664062,76523900,0.0,0 -2015-10-20,181.89279730469673,182.7805078672634,181.62378871390413,182.1259307861328,78448500,0.0,0 -2015-10-21,182.5742563515676,182.73565328114367,180.8167455851235,180.99609375,102038000,0.0,0 -2015-10-22,182.00934398169804,184.27795876042939,180.99609797468412,184.0537872314453,174911700,0.0,0 -2015-10-23,185.8381861298773,186.4658636360668,184.9863371084527,186.07131958007812,144442300,0.0,0 -2015-10-26,185.8830375061629,185.94579842045076,185.21948484424502,185.61402893066406,69033000,0.0,0 -2015-10-27,184.89664272299322,185.61399422943043,184.52899819462215,185.2553253173828,77905800,0.0,0 -2015-10-28,185.61401375386885,187.389448315241,184.90563778924218,187.362548828125,135906700,0.0,0 -2015-10-29,186.82453838762012,187.6494878869989,186.69900289167862,187.25494384765625,90525500,0.0,0 -2015-10-30,187.46122738174677,187.8019725389982,186.27760863301765,186.44796752929688,131076900,0.0,0 -2015-11-02,186.7976752792624,188.86004258817184,186.6631641401951,188.65380859375,86270800,0.0,0 -2015-11-03,188.27718951879288,189.79259128141618,188.03508043043993,189.20077514648438,95246100,0.0,0 -2015-11-04,189.5146162711785,189.64911371576972,188.05301352234747,188.62689208984375,96224500,0.0,0 -2015-11-05,188.68965439400714,189.18283449838384,187.48809827232165,188.43858337402344,78408700,0.0,0 -2015-11-06,188.07095566577598,188.59103526812876,186.92319850277144,188.33995056152344,110471500,0.0,0 -2015-11-09,187.6853786458651,187.84678927007397,185.56919875324286,186.58245849609375,131008700,0.0,0 -2015-11-10,186.07132477365505,187.0487230059419,185.78439234096396,187.01284790039062,75874600,0.0,0 -2015-11-11,187.29984025125347,187.35363924051708,186.2058818617359,186.27761840820312,67846000,0.0,0 -2015-11-12,185.1657180949844,185.6678602260665,183.65929170173817,183.67721557617188,121315200,0.0,0 -2015-11-13,183.23777437105744,183.52470675243467,181.52510096938306,181.61476135253906,153577100,0.0,0 -2015-11-16,181.41754881749716,184.43937677100922,181.2919996211818,184.37660217285156,117645200,0.0,0 -2015-11-17,184.70837655509422,185.64988602385512,183.71305442661355,184.24209594726562,121123700,0.0,0 -2015-11-18,184.75325568726714,187.3177792809766,184.70843231415253,187.16534423828125,121342500,0.0,0 -2015-11-19,187.03976767709744,187.4522493416172,186.69006061292984,187.00390625,88220500,0.0,0 -2015-11-20,187.8108992751457,188.41167731503947,187.28185776450934,187.68536376953125,94011500,0.0,0 -2015-11-23,187.74809372433256,188.2860970423309,186.97694332109498,187.47012329101562,64931200,0.0,0 -2015-11-24,186.394131926838,188.1516426719366,185.9816639902572,187.7212371826172,98874400,0.0,0 -2015-11-25,187.85573286360486,188.0709424474217,187.4163517608577,187.6943359375,51980100,0.0,0 -2015-11-27,187.7929723215217,188.12475549835642,187.28186833493828,187.9095458984375,37317800,0.0,0 -2015-11-30,188.07994080154376,188.20547632915918,187.0128819756397,187.12945556640625,112822700,0.0,0 -2015-12-01,187.80190602953996,189.0393370088237,187.50599802656598,188.91378784179688,97858400,0.0,0 -2015-12-02,188.86001727357402,189.20076236139002,186.71693809554208,186.98594665527344,108441300,0.0,0 -2015-12-03,187.25497584606038,187.54190830766828,183.59649460472937,184.36764526367188,166224200,0.0,0 -2015-12-04,184.36761188069732,188.27716344892212,184.36761188069732,187.96331787109375,192913900,0.0,0 -2015-12-07,187.61362890751502,188.0619719576,185.79335721875742,186.82455444335938,102027100,0.0,0 -2015-12-08,185.15671541085413,186.7707394248966,184.52006226754423,185.56918334960938,103372400,0.0,0 -2015-12-09,184.88770744976412,187.1204470615536,183.08535964862062,184.12551879882812,162401500,0.0,0 -2015-12-10,184.1972630212913,185.99959721536771,183.94619199969887,184.60076904296875,116128900,0.0,0 -2015-12-11,182.34109392236323,183.04946980464106,180.69118137110607,181.02296447753906,211173300,0.0,0 -2015-12-14,181.1933845747444,182.07213320791828,179.2924005522099,181.9376220703125,182385200,0.0,0 -2015-12-15,183.55164138448043,184.81597206546107,181.9107041845076,183.84754943847656,154069600,0.0,0 -2015-12-16,185.0490955313282,186.86040518114456,183.6413055493875,186.53759765625,197017000,0.0,0 -2015-12-17,186.86940793961597,186.94114448108007,183.6772070973677,183.6951446533203,173092500,0.0,0 -2015-12-18,182.90315469608456,183.04746787389934,180.25120564042027,180.42259216308594,251393500,1.212,0 -2015-12-21,181.6763829995144,182.10033474088843,180.4857065095857,181.91090393066406,99094300,0.0,0 -2015-12-22,182.8580536027336,183.8773437181067,181.80268863329886,183.56163024902344,111026200,0.0,0 -2015-12-23,184.6350552987451,185.87985120871417,184.53583223688125,185.83474731445312,110987200,0.0,0 -2015-12-24,185.56407322751878,186.11430751322962,185.2934637197678,185.52798461914062,48539600,0.0,0 -2015-12-28,184.78842768777233,185.14923137319573,183.95856820027586,185.10414123535156,65899900,0.0,0 -2015-12-29,186.27668346320857,187.43127129811595,186.24060861501826,187.07948303222656,92640700,0.0,0 -2015-12-30,186.81793405118543,186.90814183253948,185.6001978217806,185.7535400390625,63317700,0.0,0 -2015-12-31,185.03192793771692,185.71746026099777,183.89537048339844,183.89537048339844,114877900,0.0,0 -2016-01-04,180.84654452628428,181.3336307509781,179.1326930579565,181.32461547851562,222353500,0.0,0 -2016-01-05,181.6673614720795,182.11837281015693,180.44963911753467,181.63128662109375,110845800,0.0,0 -2016-01-06,178.90716814616727,180.4586481970175,178.23968019753227,179.34014892578125,152112600,0.0,0 -2016-01-07,176.19212476684282,178.09539352900015,174.622600054445,175.03753662109375,213436100,0.0,0 -2016-01-08,176.0658292930585,176.66116763340523,172.8095264944518,173.1162109375,209817200,0.0,0 -2016-01-11,174.0994279869478,174.4602453907335,171.2219866130003,173.28761291503906,187941300,0.0,0 -2016-01-12,174.83007219592437,175.48854501052335,172.41264384497606,174.6857452392578,172330500,0.0,0 -2016-01-13,175.39828074460243,175.76811329056085,169.92301106541012,170.32891845703125,221168900,0.0,0 -2016-01-14,170.97839384444538,174.32489012486312,169.27357160859012,173.1251983642578,240795600,0.0,0 -2016-01-15,168.4707921704715,170.26580862668783,167.34326373766234,169.4088897705078,324846400,0.0,0 -2016-01-19,171.34823551722386,171.4835334146369,167.9566214084824,169.63438415527344,195244400,0.0,0 -2016-01-20,166.90129099495172,169.12928859109388,163.28418423124316,167.46054077148438,286547800,0.0,0 -2016-01-21,167.96566878149386,170.36503892813295,166.54948640301694,168.3986358642578,195772900,0.0,0 -2016-01-22,171.18581570741685,172.0697938351839,170.37400102572036,171.8533172607422,168319600,0.0,0 -2016-01-25,171.31213415189563,171.51959550041295,169.0480623331233,169.25552368164062,130371700,0.0,0 -2016-01-26,169.95908300871542,171.86235109261398,169.59827950316281,171.56468200683594,141036800,0.0,0 -2016-01-27,171.00545511011688,172.79145609774028,168.73235418528594,169.69752502441406,185681700,0.0,0 -2016-01-28,171.34825257502632,171.56472923243751,168.8225860496186,170.58152770996094,143798800,0.0,0 -2016-01-29,171.40235642640252,174.88416458104794,171.2760737996029,174.73983764648438,210529300,0.0,0 -2016-02-01,173.66643572057532,175.5155850763762,173.0440378324681,174.67669677734375,136061600,0.0,0 -2016-02-02,173.15226896428445,173.16128423556646,170.9693621020189,171.52862548828125,182564900,0.0,0 -2016-02-03,172.6561841162047,172.98992814134976,168.76846812550562,172.5569610595703,205054900,0.0,0 -2016-02-04,172.02473037052522,173.864850357156,171.34821344306548,172.82752990722656,139531800,0.0,0 -2016-02-05,172.27735936179477,172.89072832980156,168.85868484847762,169.5352020263672,180788300,0.0,0 -2016-02-08,167.56876521658145,167.88446491157592,164.88975662639464,167.2530517578125,191526700,0.0,0 -2016-02-09,165.39488979163542,168.6241328453558,165.25056285024826,167.26206970214844,184513100,0.0,0 -2016-02-10,168.14605741859546,169.88695464998878,166.9824404098319,167.1177520751953,148214100,0.0,0 -2016-02-11,164.47479206612036,166.0623605977062,163.34726385392455,164.94384765625,219058900,0.0,0 -2016-02-12,166.83813657442326,168.36254348482467,165.9361138099425,168.34451293945312,127632400,0.0,0 -2016-02-16,170.27482933537536,171.21292688953235,169.24652400549547,171.1858673095703,120250700,0.0,0 -2016-02-17,172.4306821548529,174.37905471071892,172.29537047627085,173.98216247558594,136009500,0.0,0 -2016-02-18,174.27079231047975,174.3339405095059,172.93580249615044,173.26954650878906,102343000,0.0,0 -2016-02-19,172.43968920925423,173.3507272410061,171.79023172158605,173.18836975097656,114793000,0.0,0 -2016-02-22,174.87513991014606,175.8493260971047,174.80297644106307,175.69598388671875,103640300,0.0,0 -2016-02-23,174.9923964708022,175.28105032932407,173.35070861894934,173.4770050048828,111455300,0.0,0 -2016-02-24,171.9525912944066,174.56845161264454,170.77094376243485,174.27078247070312,150812200,0.0,0 -2016-02-25,174.74885659220644,176.3905445388885,173.9370416548242,176.3815155029297,110728300,0.0,0 -2016-02-26,177.31062004607872,177.40982933617843,175.80422992895134,175.97561645507812,129833700,0.0,0 -2016-02-29,175.99365802463012,177.0039190928836,174.3880586423952,174.59552001953125,125918100,0.0,0 -2016-03-01,175.9034313218632,178.78991480140053,175.39830084207617,178.69970703125,141799700,0.0,0 -2016-03-02,178.36598921279614,179.55665212350164,177.92399309627973,179.50253295898438,102415000,0.0,0 -2016-03-03,179.3130778202312,180.22412951206374,178.69970902045443,180.20608520507812,95172200,0.0,0 -2016-03-04,180.41354106350482,181.62226184677988,179.52956274097963,180.79238891601562,129293600,0.0,0 -2016-03-07,179.80922380580932,181.36973317844874,179.7280450561416,180.93675231933594,100219000,0.0,0 -2016-03-08,179.7911767327321,180.33238211121068,178.78993095420606,178.9613037109375,123974900,0.0,0 -2016-03-09,179.82724682975754,180.215109985887,178.98835855782943,179.8452911376953,94801200,0.0,0 -2016-03-10,180.36845513093976,181.36970082288457,178.04123504253369,179.98959350585938,156838700,0.0,0 -2016-03-11,181.54107005520683,182.9392078882842,179.97155948353026,182.89410400390625,137964500,0.0,0 -2016-03-14,182.3529072686317,183.14667786321039,182.0011189759571,182.6595916748047,73612000,0.0,0 -2016-03-15,181.63130224821865,182.68666721846807,181.3516773967562,182.3619384765625,93169100,0.0,0 -2016-03-16,181.84777150438822,183.8502628858349,181.80266761919336,183.4172821044922,129303200,0.0,0 -2016-03-17,183.32709114746606,185.12210743963055,182.90313939437402,184.58090209960938,134278500,0.0,0 -2016-03-18,185.1158512992479,185.66892365704285,184.78038594337298,185.30625915527344,138372400,1.05,0 -2016-03-21,185.02518661306155,185.8139894901758,184.78038047249512,185.56918334960938,72926700,0.0,0 -2016-03-22,184.74407867608133,186.07689192938363,184.5718220606558,185.46942138671875,97471900,0.0,0 -2016-03-23,185.06143960935648,185.26090922131763,184.06409154955077,184.2454376220703,81052500,0.0,0 -2016-03-24,183.1484075028291,184.20015415338742,182.91267690933162,184.16387939453125,84360900,0.0,0 -2016-03-28,184.6080941012368,184.83476284730506,183.79209214929594,184.2726287841797,62408200,0.0,0 -2016-03-29,183.83738911700087,186.0950144925768,183.51098561492677,185.97714233398438,92922900,0.0,0 -2016-03-30,187.04706553899658,187.56386312330096,186.40332016634855,186.79319763183594,86365300,0.0,0 -2016-03-31,186.69349229822242,187.14682989469145,186.16761902614647,186.3398895263672,94584100,0.0,0 -2016-04-01,185.2790292376063,187.80864622901598,184.94355010268492,187.6091766357422,114423500,0.0,0 -2016-04-04,187.52759741878307,187.74520440568978,186.67532068018548,187.00172424316406,63497000,0.0,0 -2016-04-05,185.56915700358346,187.01076682769454,184.86195166214173,185.1339569091797,99662200,0.0,0 -2016-04-06,185.13398697369678,187.21934242662002,184.9435791194208,187.15586853027344,91839800,0.0,0 -2016-04-07,185.99529671094314,186.37609852572066,184.13661031626398,184.91635131835938,113859000,0.0,0 -2016-04-08,186.176673391506,186.6390865757597,184.84385980412475,185.41506958007812,95040600,0.0,0 -2016-04-11,186.09504955067646,186.83852971453715,184.88010833314914,184.97984313964844,83757500,0.0,0 -2016-04-12,185.16118504566057,187.00173434234597,184.68971013261512,186.70252990722656,115350600,0.0,0 -2016-04-13,187.68171919309174,188.67906719613865,187.53664787723727,188.58839416503906,96336400,0.0,0 -2016-04-14,188.65187000582225,189.13240663914567,188.22573165781662,188.5974578857422,65212900,0.0,0 -2016-04-15,188.59749320301455,188.7425645475366,188.04442080744354,188.3889617919922,75761600,0.0,0 -2016-04-18,188.38894060171467,189.7489531754116,187.68173517017334,189.7126922607422,82531000,0.0,0 -2016-04-19,190.16600819685476,190.58307092464096,189.44066547294108,190.31106567382812,88316100,0.0,0 -2016-04-20,190.3564068357279,191.23588266179726,189.84867106702023,190.49241638183594,81100300,0.0,0 -2016-04-21,190.51055098928958,190.62842316914612,189.1777376016113,189.46788024902344,85695000,0.0,0 -2016-04-22,189.0870784003672,189.75800906167265,188.50680694030584,189.46788024902344,99251700,0.0,0 -2016-04-25,188.8241376962211,189.18681601086314,188.17133056462853,189.1414794921875,66166500,0.0,0 -2016-04-26,189.53135823119524,189.96657224347345,188.91482579928078,189.4225616455078,75864200,0.0,0 -2016-04-27,189.01454524983333,190.22948647379724,188.63374339611764,189.8124237060547,77329400,0.0,0 -2016-04-28,189.00547226298383,190.1841386682067,187.64545979409996,188.0897216796875,97216200,0.0,0 -2016-04-29,187.4278519544672,187.79959201459124,185.89556903302702,187.07424926757812,142424100,0.0,0 -2016-05-02,187.60920665689184,188.7516122818258,187.1468073447251,188.56121826171875,62188000,0.0,0 -2016-05-03,187.24653907619475,187.50040698866937,186.12225701040458,186.92013549804688,106422100,0.0,0 -2016-05-04,185.85930260952566,186.63904361835762,185.34249124837297,185.87742614746094,92243800,0.0,0 -2016-05-05,186.37615208921946,186.7569540134374,185.38787944055156,185.84121704101562,67619200,0.0,0 -2016-05-06,185.01611053799982,186.56653097796246,184.85291566787927,186.5211944580078,89315000,0.0,0 -2016-05-09,186.3852099025949,187.1377380729329,186.19480204128,186.6753387451172,74374900,0.0,0 -2016-05-10,187.4278550665887,189.01453629931734,187.35531940720676,188.99639892578125,77472200,0.0,0 -2016-05-11,188.50682402935024,189.0780199367348,187.22840881347656,187.22840881347656,81727000,0.0,0 -2016-05-12,187.94467534558802,188.1260214333548,186.20386081418684,187.28280639648438,89586300,0.0,0 -2016-05-13,186.96546194139555,187.55479517042704,185.30624499480237,185.65077209472656,96474600,0.0,0 -2016-05-16,185.83212785889765,187.99000511117453,185.7686539635077,187.48226928710938,77486800,0.0,0 -2016-05-17,187.1921387557031,187.5004049553989,185.17024341324094,185.73239135742188,114924900,0.0,0 -2016-05-18,185.36062010998907,187.04703598957477,184.62621564924004,185.78675842285156,120062100,0.0,0 -2016-05-19,185.0160714429008,185.45127150602517,183.85552871806217,185.14300537109375,115430500,0.0,0 -2016-05-20,185.79582597558962,186.86570959270975,185.74142769306448,186.31263732910156,104990400,0.0,0 -2016-05-23,186.3307988411046,186.63000329073247,185.85933773996163,186.05880737304688,58682600,0.0,0 -2016-05-24,186.92917535030088,188.80599916327978,186.90197620820803,188.47052001953125,93537800,0.0,0 -2016-05-25,189.19585961346212,190.1932075895051,188.470516888591,189.74893188476562,76621400,0.0,0 -2016-05-26,189.89403302824044,190.13883917622934,189.4678946292377,189.80335998535156,55280700,0.0,0 -2016-05-27,189.97562412723744,190.6284312769169,189.92122583722474,190.61936950683594,64211200,0.0,0 -2016-05-31,190.90949047241386,191.02736265243112,189.65827451457807,190.25668334960938,109879400,0.0,0 -2016-06-01,189.60390644390043,190.83698522407275,189.39537502928187,190.64659118652344,69936200,0.0,0 -2016-06-02,190.22044248283598,191.24497595831798,189.71270663042642,191.2268524169922,63044700,0.0,0 -2016-06-03,190.62842524550265,191.02736447265818,189.36814750595025,190.65562438964844,101757100,0.0,0 -2016-06-06,191.03643111227976,192.00658006075346,190.86416063845633,191.6257781982422,64887000,0.0,0 -2016-06-07,191.78897680733198,192.5233814018369,191.76177766196244,191.9249725341797,60974800,0.0,0 -2016-06-08,192.07004619869264,192.68659244900542,191.93405047019328,192.5505828857422,66170900,0.0,0 -2016-06-09,191.77084723881916,192.41459265321924,191.48071839814554,192.28765869140625,73786900,0.0,0 -2016-06-10,190.81882791880346,191.18149238742905,189.88493993430535,190.46522521972656,113829200,0.0,0 -2016-06-13,189.82147648714314,190.73721324666062,188.90573972762564,188.99639892578125,117751200,0.0,0 -2016-06-14,188.58838813742798,189.2593325757388,187.6091775388507,188.62464904785156,125059300,0.0,0 -2016-06-15,188.62465450729138,189.82147210733527,188.1622552535083,188.36172485351562,109124500,0.0,0 -2016-06-16,188.36172458957907,189.10520470397583,186.4033033384853,188.92385864257812,149533100,0.0,0 -2016-06-17,188.81271976557395,188.84006036102093,187.5185472564732,188.22032165527344,117055700,1.078,0 -2016-06-20,190.31649890399362,191.03649100772446,189.34130476260674,189.4324493408203,82789600,0.0,0 -2016-06-21,189.8426054970614,190.40766304251466,189.3686786391292,189.97019958496094,72461700,0.0,0 -2016-06-22,190.16156232953944,190.93624957306923,189.50536026381587,189.66030883789062,95560500,0.0,0 -2016-06-23,191.2187369375745,192.18480812898474,190.72659244812874,192.130126953125,102731400,0.0,0 -2016-06-24,185.5863833798353,192.1666214705794,184.75701499372502,185.23094177246094,333444400,0.0,0 -2016-06-27,183.72712478484172,183.73624758602958,181.0476356969278,181.91346740722656,230775800,0.0,0 -2016-06-28,183.626896246281,185.22182911924747,183.29879521328806,185.19448852539062,159382400,0.0,0 -2016-06-29,186.68913331737346,188.59393517215221,186.57977096221555,188.34786987304688,137328600,0.0,0 -2016-06-30,188.84913860564131,190.9726651867812,188.25672672840665,190.91798400878906,165021900,0.0,0 -2016-07-01,190.917986391582,191.83849925496665,190.74482005464,191.31900024414062,106055300,0.0,0 -2016-07-05,190.43495458322576,190.55343974386506,189.30483978343784,189.94281005859375,109803700,0.0,0 -2016-07-06,189.4142161279304,191.2096558320299,188.71244182009053,191.08206176757812,96021500,0.0,0 -2016-07-07,191.27341601721096,191.98429910901294,190.14330131060677,190.9635467529297,85593800,0.0,0 -2016-07-08,192.3489280107625,194.07145514311568,192.1028487327942,193.80714416503906,133971000,0.0,0 -2016-07-11,194.29926222455012,195.10128998160437,194.08052358897817,194.4906463623047,73633900,0.0,0 -2016-07-12,195.5205076401306,196.22228187726893,194.51797301564724,195.90328979492188,101275600,0.0,0 -2016-07-13,196.34987276036705,196.35898165436677,195.3564609527697,195.87594604492188,87324100,0.0,0 -2016-07-14,197.22480786098433,197.47088707660217,196.5503881016962,196.96961975097656,91230900,0.0,0 -2016-07-15,197.57114005865645,197.7807558827841,196.23139553103692,196.705322265625,107155400,0.0,0 -2016-07-18,196.83288817535967,197.40706829272625,196.55946840962764,197.23390197753906,58725900,0.0,0 -2016-07-19,196.78733754115123,197.0698662310236,196.52304054612145,197.03341674804688,54345700,0.0,0 -2016-07-20,197.03345309843544,198.1088868785107,197.03345309843544,197.85369873046875,58159500,0.0,0 -2016-07-21,197.7351998876485,197.9721563044442,196.632411760676,197.10633850097656,67777300,0.0,0 -2016-07-22,197.23391632346141,198.04505287988385,196.9513876441143,197.99037170410156,62787500,0.0,0 -2016-07-25,197.77165934634488,197.8263405293855,196.83292861958796,197.45266723632812,55873100,0.0,0 -2016-07-26,197.34333153159898,197.92662074068517,196.64155713877736,197.54383850097656,70080500,0.0,0 -2016-07-27,197.94481242010363,198.01772529483716,196.51392332853732,197.3341827392578,84083900,0.0,0 -2016-07-28,197.12456496140192,197.87191154270187,196.6324204104971,197.56204223632812,65035700,0.0,0 -2016-07-29,197.27953549718262,198.26382470863678,196.9787750521839,197.88104248046875,79519400,0.0,0 -2016-08-01,197.94481223999884,198.36404388594906,197.23392909537986,197.7169647216797,73311400,0.0,0 -2016-08-02,197.4526550200528,197.61671246573434,195.55697589394978,196.45013427734375,92295500,0.0,0 -2016-08-03,196.38635216487268,197.08812649761018,196.06737394578147,197.02432250976562,53993600,0.0,0 -2016-08-04,197.14275742005938,197.5711118081413,195.26529635231677,197.23390197753906,46585500,0.0,0 -2016-08-05,197.23397142927044,198.89269448716996,197.23397142927044,198.8471221923828,71892200,0.0,0 -2016-08-08,199.04757007433898,199.1569463307008,198.44606324453378,198.7285919189453,39906500,0.0,0 -2016-08-09,198.80156380430753,199.37573021714758,198.50080334676662,198.8471221923828,51251700,0.0,0 -2016-08-10,198.96556437175178,199.0475861406128,197.98126142529307,198.3549346923828,57941100,0.0,0 -2016-08-11,198.91999482470172,199.5397473136135,198.637466123597,199.2754364013672,72504300,0.0,0 -2016-08-12,198.9473158672615,199.33011190302128,198.67390999415835,199.10226440429688,61313500,0.0,0 -2016-08-15,199.4941773990051,200.05012591339272,199.48506850446768,199.67645263671875,49813500,0.0,0 -2016-08-16,199.229910898129,199.30280987901,198.64662170410156,198.64662170410156,53213600,0.0,0 -2016-08-17,198.68306899765048,199.16610470423632,197.78991047126496,199.02027893066406,75134300,0.0,0 -2016-08-18,198.99291589406232,199.5032921372939,198.8744446347683,199.4668426513672,52989300,0.0,0 -2016-08-19,198.96560081375313,199.36661474391187,198.44611560911036,199.1752166748047,75443000,0.0,0 -2016-08-22,198.91999744024176,199.41215588007074,198.5281063739976,199.16607666015625,61368800,0.0,0 -2016-08-23,199.82226573469845,200.14125781052724,199.50327365886963,199.56707763671875,53399200,0.0,0 -2016-08-24,199.4121587651755,199.51241223350158,198.09975478225593,198.5463409423828,71728900,0.0,0 -2016-08-25,198.13618714299866,198.85619305512273,197.9721436126665,198.40960693359375,69224800,0.0,0 -2016-08-26,198.61014522609884,199.70381065453046,197.08812530296902,198.0359649658203,122506300,0.0,0 -2016-08-29,198.1726920981532,199.29369817734198,198.13622870151468,199.01116943359375,70502200,0.0,0 -2016-08-30,198.92000085631932,199.2207612621111,198.09064642342508,198.68304443359375,58114500,0.0,0 -2016-08-31,198.3276120574558,198.45520612280484,197.28862783769668,198.1179962158203,85269500,0.0,0 -2016-09-01,198.10887401586817,198.43697502872106,196.88761454285867,198.12710571289062,97844200,0.0,0 -2016-09-02,199.0385106290384,199.475974043044,198.4096491488803,199.02027893066406,79293900,0.0,0 -2016-09-06,199.32100474599315,199.70378690508696,198.55544042780554,199.62176513671875,56702100,0.0,0 -2016-09-07,199.44861149023205,199.79494418765836,198.9564669419981,199.60354614257812,76554900,0.0,0 -2016-09-08,199.24808060634433,199.5397320863308,198.81972618680672,199.1478271484375,74102900,0.0,0 -2016-09-09,197.744333962618,197.79901514986395,194.35396128625985,194.3813018798828,221589100,0.0,0 -2016-09-12,193.5701323201806,197.5984746756418,193.49721944731644,197.1701202392578,168110900,0.0,0 -2016-09-13,195.8030318726744,196.08556055858222,193.6703825273945,194.335693359375,182828800,0.0,0 -2016-09-14,194.3903809181141,195.6754442478582,193.67038888544477,194.26278686523438,134185500,0.0,0 -2016-09-15,194.0896229325381,196.61416325110227,193.8982249112066,196.20404052734375,134427900,0.0,0 -2016-09-16,195.54637756576983,195.73874243827822,194.7128337234547,195.44561767578125,155236400,1.082,0 -2016-09-19,196.14175541881957,196.8287507637486,195.13415665547464,195.48223876953125,80250500,0.0,0 -2016-09-20,196.39827892039568,196.56315113315597,195.45480620882012,195.49143981933594,69665300,0.0,0 -2016-09-21,196.24254722986987,197.88217023672362,195.50974928063889,197.6898193359375,110284400,0.0,0 -2016-09-22,198.7706594371377,199.2561350447954,198.5050273785342,198.93553161621094,76678700,0.0,0 -2016-09-23,198.5141763173653,198.6607386789955,197.74474488424093,197.8455047607422,73630900,0.0,0 -2016-09-26,196.9569972626846,197.1493481399109,196.03183454902648,196.24252319335938,89827300,0.0,0 -2016-09-27,196.06850076206618,197.56156134269472,195.6746161096721,197.4608154296875,78494800,0.0,0 -2016-09-28,197.69894994420642,198.60578886732677,196.6730413275539,198.44090270996094,87411000,0.0,0 -2016-09-29,198.2210641336691,198.65158236259504,196.05931808221698,196.6455535888672,128070600,0.0,0 -2016-09-30,197.53408165464003,198.88059382427252,197.26844956985659,198.12948608398438,117202900,0.0,0 -2016-10-03,197.68981530865145,197.89132111305057,196.97532718941181,197.65316772460938,83512100,0.0,0 -2016-10-04,197.7722360910982,198.01038946109588,196.0135295711475,196.6455535888672,119948100,0.0,0 -2016-10-05,197.31425780310428,197.97377455750353,197.24097661073122,197.51577758789062,72816000,0.0,0 -2016-10-06,197.27760686144757,197.89132111305057,196.70054019388667,197.65316772460938,62927400,0.0,0 -2016-10-07,197.9463071685825,198.12950317150424,196.19675529021785,196.975341796875,89788300,0.0,0 -2016-10-10,198.00125122070312,198.49588179293522,197.84553392987158,198.00125122070312,51855000,0.0,0 -2016-10-11,197.54325638284965,197.61653757525792,194.72199337144323,195.50057983398438,130367400,0.0,0 -2016-10-12,195.64712079549247,196.31580636163778,195.11584269142597,195.75704956054688,73866100,0.0,0 -2016-10-13,194.33730393485746,195.64716873718143,193.467112369619,195.1158905029297,101357000,0.0,0 -2016-10-14,196.16011702510184,196.65476163115133,195.13420817842103,195.21664428710938,93346200,0.0,0 -2016-10-17,195.18913567998035,195.4639366437999,194.34642297403587,194.53878784179688,58275700,0.0,0 -2016-10-18,196.24252517725375,196.30663747799179,195.35401003491322,195.75704956054688,76869700,0.0,0 -2016-10-19,196.04102141871482,196.60893317285775,195.65630565200914,196.2791748046875,66519200,0.0,0 -2016-10-20,195.90364239357092,196.50820181916717,195.20749194943457,195.91281127929688,73639800,0.0,0 -2016-10-21,195.91280351633918,196.0959995231202,194.88688071983847,196.00439453125,89089100,0.0,0 -2016-10-24,196.93869629343288,197.23182106197237,196.46237553303533,196.8379364013672,60146600,0.0,0 -2016-10-25,196.64555760443105,196.9203585612442,196.00436468983852,196.17840576171875,66542300,0.0,0 -2016-10-26,195.29905501703485,196.4073997490557,195.04256388009176,195.78453063964844,75705500,0.0,0 -2016-10-27,196.55399078513526,196.59062439463725,195.1799998089872,195.26243591308594,77220200,0.0,0 -2016-10-28,195.23493517115,195.9585641870337,193.9250706307031,194.68533325195312,140623200,0.0,0 -2016-10-31,195.04258724352553,195.2807546184397,194.52047795421106,194.69451904296875,61272500,0.0,0 -2016-11-01,195.04255038822777,195.09752175609958,191.9923033767502,193.28384399414062,122781800,0.0,0 -2016-11-02,192.95408816819548,193.3662965593096,191.65337865085272,192.12054443359375,103330800,0.0,0 -2016-11-03,192.34953904444993,192.57853748962916,190.9480696781095,191.24118041992188,88939300,0.0,0 -2016-11-04,191.3602759186551,192.25794596572615,190.87480030300753,191.030517578125,109122100,0.0,0 -2016-11-07,191.03051635119542,195.28072717019882,191.03051635119542,195.24407958984375,109794900,0.0,0 -2016-11-08,194.8227491725293,196.7280182042583,194.53879329350937,196.1234588623047,106772100,0.0,0 -2016-11-09,194.52962938766777,198.86229080559676,194.50215068750825,198.20277404785156,258429000,0.0,0 -2016-11-10,199.04550040798787,199.97064932284817,197.14023119723134,198.69741821289062,172113300,0.0,0 -2016-11-11,197.9279301051796,198.49584175447785,197.23177989065417,198.23936462402344,100552700,0.0,0 -2016-11-14,198.79815062743512,199.0179941903057,197.59820088113426,198.39511108398438,94580000,0.0,0 -2016-11-15,198.80732346556889,199.9431610107422,198.58749385982858,199.9431610107422,91652600,0.0,0 -2016-11-16,199.28362531167426,199.8149034366837,199.15538672818627,199.5675811767578,65617700,0.0,0 -2016-11-17,199.73246937136992,200.65761816329163,199.6133856937223,200.593505859375,69797200,0.0,0 -2016-11-18,200.6667918147694,200.84998780068594,199.95230370886662,200.14466857910156,86265800,0.0,0 -2016-11-21,200.75838152666032,201.68353033460485,200.60266424078597,201.6560516357422,72402600,0.0,0 -2016-11-22,201.98583098674277,202.24230818741586,201.27135678815927,202.04995727539062,67429000,0.0,0 -2016-11-23,201.5003495566162,202.21482373488064,201.28967485711738,202.1598663330078,56620200,0.0,0 -2016-11-25,202.52623398974964,202.94758330902928,202.4437839255809,202.91094970703125,37872300,0.0,0 -2016-11-28,202.58122666395943,202.87433746186176,201.84842870376582,201.95834350585938,76572500,0.0,0 -2016-11-29,201.9949815610216,202.83769428354938,201.6743781007635,202.3522186279297,69886700,0.0,0 -2016-11-30,203.0117527429098,203.18579383755178,201.8026339655817,201.86676025390625,113291800,0.0,0 -2016-12-01,202.18734401282134,202.18734401282134,200.7400718706578,201.1248016357422,79040500,0.0,0 -2016-12-02,201.21635473733312,201.74763281426033,200.84079392790863,201.2255096435547,74840300,0.0,0 -2016-12-05,202.11405839366898,202.80105385248766,201.90338369984627,202.43466186523438,67837800,0.0,0 -2016-12-06,202.63616304192306,203.1124837631754,202.12320871609302,203.07583618164062,59877400,0.0,0 -2016-12-07,202.91094573680033,205.7963205484342,202.7827071668823,205.73220825195312,110738100,0.0,0 -2016-12-08,205.70477400138785,206.7398376904497,205.4208041280414,206.2360382080078,99714400,0.0,0 -2016-12-09,206.4741505103396,207.5000590176819,206.43750293396016,207.4817352294922,88005800,0.0,0 -2016-12-12,207.38100005277735,207.89396834448286,206.79476455349925,207.2436065673828,102016100,0.0,0 -2016-12-13,207.94894346453006,209.15804816993847,207.93061967259658,208.62677001953125,110477500,0.0,0 -2016-12-14,208.30616306429593,209.05727074708116,206.43752779861762,206.90469360351562,142501800,0.0,0 -2016-12-15,207.16120130229385,208.67258577435922,206.91387901482463,207.756591796875,124972600,0.0,0 -2016-12-16,208.24397182507101,208.308476066505,207.00930890566215,207.3502197265625,156420200,1.329,0 -2016-12-19,207.54372318311616,208.25319955858097,207.38708809802304,207.8017120361328,90341100,0.0,0 -2016-12-20,208.3729843104508,208.75998167392422,208.12421836736792,208.60333251953125,89838800,0.0,0 -2016-12-21,208.46512227610816,208.64939802536853,208.02285766601562,208.02285766601562,67909000,0.0,0 -2016-12-22,207.86622072377529,207.99521515304184,207.23966631066745,207.66351318359375,56219100,0.0,0 -2016-12-23,207.7095873945111,207.97679919934507,207.50689389823143,207.96759033203125,36697800,0.0,0 -2016-12-27,208.25320282734322,208.9073838365685,208.2347710348847,208.48355102539062,42672500,0.0,0 -2016-12-28,208.7599632146933,208.77838094706715,206.64075706667234,206.76052856445312,64095000,0.0,0 -2016-12-29,206.83421850585037,207.21199286726767,206.2445277711676,206.71444702148438,48696100,0.0,0 -2016-12-30,207.06457650368367,207.15672139695974,205.22179111285647,205.9589080810547,108998300,0.0,0 -2017-01-03,207.35022557689848,208.07813374826495,206.2814206343511,207.53451538085938,91366500,0.0,0 -2017-01-04,207.88466742054965,208.92584592569528,207.87545855265415,208.7692108154297,78744400,0.0,0 -2017-01-05,208.48356101115988,208.76919054092542,207.75565279723583,208.60333251953125,78379000,0.0,0 -2017-01-06,208.72311597693596,209.84721635063045,208.1426339969337,209.34967041015625,71559900,0.0,0 -2017-01-09,209.07326962959166,209.22069587017174,208.62178204006773,208.6586456298828,46939700,0.0,0 -2017-01-10,208.67706336545024,209.57081561737425,208.24400757083384,208.6586456298828,63771900,0.0,0 -2017-01-11,208.56650097297006,209.2483367919922,207.85702449122246,209.2483367919922,74650000,0.0,0 -2017-01-12,208.69545809710038,208.92580628484552,207.27651944669887,208.7230987548828,72113200,0.0,0 -2017-01-13,208.9074027803031,209.5247343199293,208.87055325138283,209.20225524902344,62717900,0.0,0 -2017-01-17,208.5204149888571,208.953470755918,208.05050969366602,208.4651336669922,61240800,0.0,0 -2017-01-18,208.7322978540288,208.9718689560498,208.14260708336752,208.92579650878906,54793300,0.0,0 -2017-01-19,209.0087593649998,209.1561856013392,207.69117428348324,208.15187072753906,66608800,0.0,0 -2017-01-20,208.8797471321585,209.44179730840878,208.20713431774047,208.91661071777344,129168600,0.0,0 -2017-01-23,208.91661830236131,208.98110849052094,207.56216969827983,208.37298583984375,75061600,0.0,0 -2017-01-24,208.60333224298657,210.15127951681143,208.483560734774,209.70901489257812,95555300,0.0,0 -2017-01-25,210.72251815509182,211.52413940429688,210.54745128389374,211.52413940429688,84437700,0.0,0 -2017-01-26,211.36752974417786,211.65317335857483,211.00818706856765,211.30303955078125,59970700,0.0,0 -2017-01-27,211.3859527192419,211.54258782162984,210.77783004455492,210.97132873535156,59711100,0.0,0 -2017-01-30,210.23420768398182,210.26184834510104,208.61256130784938,209.66294860839844,79737300,0.0,0 -2017-01-31,209.13773188521188,209.70900497631143,208.52962332789812,209.64450073242188,75880800,0.0,0 -2017-02-01,209.64454077571943,210.62121507179907,209.1009222991228,209.7274627685547,79117700,0.0,0 -2017-02-02,209.72742900382377,210.16970767975624,208.990325995947,209.8656463623047,69657600,0.0,0 -2017-02-03,210.8331264237251,211.50573929229716,210.50142442317704,211.31224060058594,80563200,0.0,0 -2017-02-06,210.87916692334446,211.30301380003874,210.57510561036912,210.9344482421875,57790100,0.0,0 -2017-02-07,211.34909491014534,211.60708378154052,210.7409722592828,210.9436798095703,57931200,0.0,0 -2017-02-08,210.9436873574584,211.35831133994088,210.36320534637915,211.22010803222656,51566200,0.0,0 -2017-02-09,211.22009550773245,212.79566935960875,211.22009550773245,212.4731903076172,65955200,0.0,0 -2017-02-10,212.8417250084183,213.55120136172758,212.4915912648277,213.31163024902344,66015900,0.0,0 -2017-02-13,213.83686239241283,214.749046409731,213.8092217306159,214.47262573242188,55182100,0.0,0 -2017-02-14,214.27912622748715,215.3387364765951,213.91057469869983,215.3295135498047,71109000,0.0,0 -2017-02-15,215.0991494621056,216.65630556614258,215.04386814279943,216.45359802246094,86785800,0.0,0 -2017-02-16,216.48123403285507,216.67473270560956,215.46771039555233,216.26931762695312,84722400,0.0,0 -2017-02-17,215.55985744971176,216.6102447509766,215.54142565583993,216.61024475097656,77204100,0.0,0 -2017-02-21,217.00645530008907,218.0844832838891,216.99723237330045,217.90020751953125,88946100,0.0,0 -2017-02-22,217.46713848351314,217.94625262976808,217.29207159727667,217.70669555664062,62115200,0.0,0 -2017-02-23,218.2595105024733,218.2779282340231,217.04326537200654,217.85409545898438,74615900,0.0,0 -2017-02-24,216.9511572681623,218.17659733346724,216.9050848157862,218.1305389404297,82381600,0.0,0 -2017-02-27,218.0383950581075,218.65572655669396,217.77119732801492,218.47145080566406,56515400,0.0,0 -2017-02-28,218.06606593769996,218.324054836762,217.4671661490217,217.8817901611328,96961900,0.0,0 -2017-03-01,219.6508440725056,221.42913960914888,219.63241227862855,220.93157958984375,149158200,0.0,0 -2017-03-02,220.7288891614283,220.7381120887521,219.485017135333,219.54029846191406,70246000,0.0,0 -2017-03-03,219.44814908548577,219.8535642179627,219.04273395300885,219.67849731445312,81974300,0.0,0 -2017-03-06,218.8308085604558,219.40206764591971,218.3793209888004,219.02430725097656,55391500,0.0,0 -2017-03-07,218.7018191937027,219.07959365674967,218.14897783025154,218.3701171875,65103700,0.0,0 -2017-03-08,218.6833917721527,218.9598124594059,217.81728017978472,217.96470642089844,78168800,0.0,0 -2017-03-09,218.09367790038775,218.59123789691535,217.20914866553224,218.24110412597656,90683900,0.0,0 -2017-03-10,219.2638635139542,219.30993596955645,217.99233684789783,219.00587463378906,81991700,0.0,0 -2017-03-13,218.94138816821987,219.1625275374696,218.59126840775028,219.116455078125,57256800,0.0,0 -2017-03-14,218.5359429672041,218.59123834641764,217.62377307059225,218.2779541015625,59880800,0.0,0 -2017-03-15,218.88611914890907,220.61834249041812,218.6373391019316,220.16685485839844,96081800,0.0,0 -2017-03-16,220.31423134836308,220.39715332551137,219.3836296885762,219.73374938964844,78344000,0.0,0 -2017-03-17,220.01415994131068,220.21774935775255,219.34786987304688,219.34786987304688,89002100,1.033,0 -2017-03-20,219.34786854121472,219.65325266402334,218.6908415270988,219.10726928710938,52537000,0.0,0 -2017-03-21,219.75502722717718,219.88458283220447,216.15521707266674,216.2940216064453,131809300,0.0,0 -2017-03-22,216.33107469309152,217.10840842792925,215.66478460022955,216.8030242919922,97569200,0.0,0 -2017-03-23,216.80299031284127,217.7839133178987,216.1737242795975,216.57164001464844,100410300,0.0,0 -2017-03-24,216.89553446982254,217.50628852093547,215.58146648030458,216.41432189941406,112504900,0.0,0 -2017-03-27,214.62833018785219,216.46988397369446,214.33220909594777,216.1922607421875,87454500,0.0,0 -2017-03-28,215.86838152083203,218.21889478747067,215.7480748241778,217.7654571533203,93483900,0.0,0 -2017-03-29,217.4600499962033,218.21887169660118,217.2194366283554,217.96900939941406,61950400,0.0,0 -2017-03-30,217.90426414831828,218.87593842173166,217.71918669635966,218.6630859375,56737900,0.0,0 -2017-03-31,218.30216725017291,218.86666262409867,218.09857782872405,218.15411376953125,73733100,0.0,0 -2017-04-03,218.2096437488043,218.42248210809402,216.46063574132722,217.7747039794922,85546500,0.0,0 -2017-04-04,217.46930924689244,218.0060437046005,217.0621304085964,217.9134979248047,56466200,0.0,0 -2017-04-05,218.63529117096923,219.68099908734345,217.04359991368375,217.2657012939453,108800600,0.0,0 -2017-04-06,217.41377946151954,218.43171239946065,216.94181577055778,217.87648010253906,69135800,0.0,0 -2017-04-07,217.60814604855634,218.39474293189463,217.1361963908567,217.6544189453125,74412300,0.0,0 -2017-04-10,217.80246278644645,218.63531835510184,217.21945541608528,217.78395080566406,67615300,0.0,0 -2017-04-11,217.37674320534515,217.6358544200174,215.9331195463133,217.52481079101562,88045300,0.0,0 -2017-04-12,217.2286810745368,217.43227046658666,216.33104078790845,216.57164001464844,81864400,0.0,0 -2017-04-13,216.2107776570659,216.9973744775353,215.16506958007815,215.16506958007812,92880400,0.0,0 -2017-04-17,215.720303724691,217.0713958740234,215.50746537339677,217.07139587402344,68405400,0.0,0 -2017-04-18,216.28479469525533,216.99735765569454,215.69253842333922,216.42359924316406,83225800,0.0,0 -2017-04-19,217.0251309643337,217.42304677140794,215.78508240998832,216.02569580078125,68699900,0.0,0 -2017-04-20,216.68272093742806,218.25591453233895,216.3403269557259,217.78395080566406,92572200,0.0,0 -2017-04-21,217.70064247705065,217.75616429236592,216.66419760315958,217.08987426757812,110389800,0.0,0 -2017-04-24,219.4866811809167,219.69953365407332,217.06213420925127,219.47743225097656,119209900,0.0,0 -2017-04-25,220.16222980836716,221.12464096105631,220.06968402884746,220.75448608398438,76698300,0.0,0 -2017-04-26,220.71747159352046,221.66138492720557,220.5694181086417,220.6156768798828,84702500,0.0,0 -2017-04-27,220.95803671600947,221.12460214530228,220.2269618994441,220.80072021484375,57410300,0.0,0 -2017-04-28,221.07838661714058,221.10614752922461,220.18074613841114,220.31956481933594,63532800,0.0,0 -2017-05-01,220.87477111816403,221.32822282953674,220.4305824567294,220.87477111816406,66882500,0.0,0 -2017-05-02,221.02283959496654,221.15239521009008,220.52312911391945,220.95806884765625,57375700,0.0,0 -2017-05-03,220.95807154912833,221.05986625657732,219.967885383897,220.689697265625,73137700,0.0,0 -2017-05-04,221.01357636752843,221.096859088898,220.04190225671059,220.94879150390625,61462700,0.0,0 -2017-05-05,221.34676070169766,221.83722230868707,220.87479695574226,221.81871032714844,62001300,0.0,0 -2017-05-08,221.8649294444963,222.02224594818242,221.32819507400777,221.78164672851562,48385700,0.0,0 -2017-05-09,222.05929183098806,222.27213016634607,221.20791024855086,221.5780792236328,51363200,0.0,0 -2017-05-10,221.53180926932876,221.97599792480472,221.3097078813394,221.9759979248047,54293800,0.0,0 -2017-05-11,221.49479158278226,221.6983809844325,220.36580094472265,221.52255249023438,62358300,0.0,0 -2017-05-12,221.254199495768,221.56883255747576,220.86553263356956,221.15240478515625,53912700,0.0,0 -2017-05-15,221.60586232888966,222.50350276768467,221.58735034815567,222.3739471435547,61918900,0.0,0 -2017-05-16,222.68855630318257,222.71631721105084,221.75390612377802,222.1703338623047,51241800,0.0,0 -2017-05-17,222.17033848003365,222.17033848003365,218.16334928856594,218.22813415527344,172174100,0.0,0 -2017-05-18,218.14484402968165,220.01415860543295,217.86722081617353,219.10726928710938,107047700,0.0,0 -2017-05-19,219.62548983997357,221.24494209739845,219.56996802185662,220.53237915039062,115011400,0.0,0 -2017-05-22,221.07834126283424,221.827928096839,221.0043215927984,221.652099609375,61010600,0.0,0 -2017-05-23,222.05007810691316,222.31845243852638,221.64289920412466,222.1426239013672,48341700,0.0,0 -2017-05-24,222.39243696750214,222.77184075147343,222.03151692141535,222.66079711914062,46927700,0.0,0 -2017-05-25,223.20678365124468,224.02114128795776,222.9846963834159,223.72500610351562,64071700,0.0,0 -2017-05-26,223.52144131327853,223.85458637221754,223.43815857866986,223.67877197265625,46629900,0.0,0 -2017-05-30,223.33632267756465,223.7527503943192,223.16975723906356,223.48439025878906,35201900,0.0,0 -2017-05-31,223.79904891793456,223.83607287773313,222.6885701725338,223.42889404296875,91796000,0.0,0 -2017-06-01,223.91935073379014,225.22416993848083,223.61396661436237,225.20565795898438,68962000,0.0,0 -2017-06-02,225.26117974714742,226.12181028733056,224.9465466982646,225.95523071289062,88666100,0.0,0 -2017-06-05,225.77016904948638,226.0755531902048,225.5758285524823,225.78868103027344,44698800,0.0,0 -2017-06-06,225.18714131786197,225.77939756496073,224.98355190912463,225.0668487548828,50375400,0.0,0 -2017-06-07,225.4277698054155,225.72389088857585,224.7152068270396,225.48329162597656,54144300,0.0,0 -2017-06-08,225.58506564611804,226.10328808449418,225.02981925042795,225.5943145751953,65950700,0.0,0 -2017-06-09,225.88121928508372,226.73258685958172,223.90086089819604,225.251953125,132256400,0.0,0 -2017-06-12,224.9928196165358,225.2611797769707,224.29876865070074,225.20565795898438,86108100,0.0,0 -2017-06-13,225.77939926070667,226.36240658287895,225.40924439867837,226.306884765625,60067000,0.0,0 -2017-06-14,226.59376382106464,226.60301275072177,225.14087699620723,226.02001953125,78602300,0.0,0 -2017-06-15,224.57635445954017,225.71460809227287,224.28023342081002,225.58505249023438,66464900,0.0,0 -2017-06-16,225.75526227663872,225.81105485536722,224.6951607127056,225.63436889648438,84553100,1.183,0 -2017-06-19,226.51775677636132,227.57785821054088,226.41546566475796,227.5127716064453,65123800,0.0,0 -2017-06-20,227.13152268351755,227.14081671650064,225.9598360062995,225.97842407226562,56906400,0.0,0 -2017-06-21,226.39688794219975,226.5177671237167,225.42047532126705,225.92262268066406,55977600,0.0,0 -2017-06-22,225.93194236149753,226.4619860350015,225.63436303019716,225.82034301757812,44148100,0.0,0 -2017-06-23,225.88549034676652,226.44343042383784,225.4763257766277,226.09007263183594,66986800,0.0,0 -2017-06-26,226.8060482296963,227.25241722371163,226.01562974118386,226.23880004882812,56700500,0.0,0 -2017-06-27,226.006344088686,226.32252570502956,224.39759647318624,224.41619873046875,82247700,0.0,0 -2017-06-28,225.50418455783512,226.63868097199685,225.2531037607694,226.4248046875,70042600,0.0,0 -2017-06-29,226.58288333411193,226.6386759123556,223.14220384523404,224.43478393554688,106949700,0.0,0 -2017-06-30,225.29958049006345,225.69945091995535,224.64864347678173,224.8532257080078,86820700,0.0,0 -2017-07-03,225.8575378053664,226.32249484848396,225.23449707031247,225.2344970703125,39153800,0.0,0 -2017-07-05,225.62507686758218,225.97843459912318,224.76024932151574,225.75526428222656,54427600,0.0,0 -2017-07-06,224.93693851874397,225.0671259352617,223.49556871413506,223.69085693359375,65400800,0.0,0 -2017-07-07,224.3046081727054,225.29960897824336,223.70015543515694,225.1415252685547,57972300,0.0,0 -2017-07-10,225.14151295428414,225.7831559810436,224.81603732960906,225.38328552246094,36663300,0.0,0 -2017-07-11,225.3832743324044,225.5506662477265,223.9698151264288,225.2158966064453,50354600,0.0,0 -2017-07-12,226.24812458601576,227.08504167875878,226.24812458601576,226.90835571289062,59610400,0.0,0 -2017-07-13,226.91763660328232,227.41048992798923,226.67584986253823,227.2895965576172,39471600,0.0,0 -2017-07-14,227.28961462410624,228.73098439310814,227.18732350012897,228.34971618652344,60262700,0.0,0 -2017-07-17,228.26601528562048,228.67517975996066,228.13582787918162,228.32180786132812,33531900,0.0,0 -2017-07-18,227.88474910635324,228.4984958232694,227.5220831716961,228.4427032470703,42742500,0.0,0 -2017-07-19,228.77745612288953,229.6887679091839,228.76814790129654,229.67947387695312,51034300,0.0,0 -2017-07-20,229.94914651793073,230.07933391813134,229.1959184032441,229.78176879882812,47135200,0.0,0 -2017-07-21,229.16802974551246,229.60509050131296,228.92624300183215,229.5771942138672,82340800,0.0,0 -2017-07-24,229.49351286039624,229.67019882383323,229.01926173961604,229.52142333984375,46622300,0.0,0 -2017-07-25,230.32110298695463,230.4327023207005,229.83755790171725,230.07933044433594,54915600,0.0,0 -2017-07-26,230.3862329062459,230.423423229288,229.80969066822735,230.08865356445312,47575400,0.0,0 -2017-07-27,230.58148432988924,230.618674646997,228.46126733134113,229.87474060058594,70766600,0.0,0 -2017-07-28,229.36331578270577,229.74458398360395,228.8797706487196,229.6051025390625,50088400,0.0,0 -2017-07-31,230.03286981279695,230.13516094179317,229.25174529466094,229.4749298095703,65838700,0.0,0 -2017-08-01,230.11656131451667,230.15375163711772,229.42841973680441,229.9863739013672,55050400,0.0,0 -2017-08-02,230.125872975999,230.24676636509986,229.10296165906445,230.0979766845703,47211200,0.0,0 -2017-08-03,229.97707277636133,230.00496906651404,229.35403198067712,229.651611328125,40856000,0.0,0 -2017-08-04,230.17234422014488,230.42341081321965,229.66088862235014,230.07005310058594,60191800,0.0,0 -2017-08-07,230.14442979080576,230.49778747558594,230.0328304577617,230.49778747558594,31995000,0.0,0 -2017-08-08,230.16305105220871,231.46493940350865,229.53071622765825,229.93057250976562,61719400,0.0,0 -2017-08-09,229.19591756413442,229.97704196247835,228.8146493973133,229.92124938964844,62632600,0.0,0 -2017-08-10,229.02856993309942,229.16806558150455,226.62009547790743,226.67588806152344,120479500,0.0,0 -2017-08-11,226.9176372230312,227.64296906851905,226.66655644901994,227.0106201171875,74869900,0.0,0 -2017-08-14,228.3776164851961,229.49351064585244,228.34042616189868,229.2610321044922,73291900,0.0,0 -2017-08-15,229.6701998371381,229.68880209373046,228.9076775892235,229.23313903808594,55242700,0.0,0 -2017-08-16,229.7910487649315,230.21881544761274,229.17730212039987,229.63296508789062,56715500,0.0,0 -2017-08-17,228.98206399583665,229.31683365535224,226.05282592773438,226.05282592773438,128490400,0.0,0 -2017-08-18,225.87616519628193,227.07576252242086,225.22522806046038,225.69949340820312,136748000,0.0,0 -2017-08-21,225.6343870775425,226.1551367734544,224.88115882528675,225.87615966796875,65469700,0.0,0 -2017-08-22,226.49917861936152,228.4054911263406,226.4805763647939,228.2381134033203,63140100,0.0,0 -2017-08-23,227.20590828107356,227.8754475520897,227.04782459060624,227.41978454589844,50203800,0.0,0 -2017-08-24,227.82897874057178,227.99635648548616,226.6665859918954,226.8897705078125,50741700,0.0,0 -2017-08-25,227.73595192683305,228.39619716524385,227.26170085543112,227.41978454589844,64445900,0.0,0 -2017-08-28,227.98703233928012,228.01492862641467,226.9827234343485,227.42909240722656,40565600,0.0,0 -2017-08-29,226.02489908569956,227.96841597908443,225.9040057226884,227.689453125,51135700,0.0,0 -2017-08-30,227.6708813398968,229.0564585211772,227.47559312654118,228.76817321777344,62030800,0.0,0 -2017-08-31,229.42841709728853,230.4048297793581,228.80537632800085,230.1444549560547,103803900,0.0,0 -2017-09-01,230.5443044995088,230.92557269014037,230.31182597195735,230.46990966796875,62007000,0.0,0 -2017-09-05,229.93056085734972,230.17234761043036,227.78246150433495,228.81466674804688,91398800,0.0,0 -2017-09-06,229.5399868447489,229.9491513080063,228.97273869148074,229.5957794189453,57916900,0.0,0 -2017-09-07,229.92124296428082,229.93984521782508,229.13081036631303,229.56787109375,58034700,0.0,0 -2017-09-08,229.26101326383346,229.79107110546943,229.03784296366078,229.2982177734375,63832800,0.0,0 -2017-09-11,230.65586932588508,231.82757008268229,230.63728126166055,231.74388122558594,71364800,0.0,0 -2017-09-12,232.1344774264823,232.56222999611163,231.93918920861563,232.52503967285156,56896000,0.0,0 -2017-09-13,232.21815342551363,232.67381644903875,232.09726005023157,232.63661193847656,59228000,0.0,0 -2017-09-14,232.29255648280696,232.77611581169498,232.10657649150042,232.56222534179688,95446300,0.0,0 -2017-09-15,232.40801017652922,232.96871899866971,232.29587126405718,232.87527465820312,95432400,1.235,0 -2017-09-18,233.2678372026058,233.74444196725437,232.95944085143879,233.37063598632812,46235200,0.0,0 -2017-09-19,233.63226751940573,233.6976913990065,233.25846159528746,233.60423278808594,47108100,0.0,0 -2017-09-20,233.69766313165005,233.80980204336515,232.62294627518608,233.6883087158203,59574100,0.0,0 -2017-09-21,233.52011918362464,233.61356353099757,232.87529186969152,233.06219482421875,48211400,0.0,0 -2017-09-22,232.74445149485138,233.28648002880314,232.71641676549015,233.10891723632812,51214000,0.0,0 -2017-09-25,232.83792176347734,233.2117419628827,231.83798303210585,232.63232421875,57064400,0.0,0 -2017-09-26,233.0902584607343,233.35192548147893,232.52019510987282,232.77252197265625,54082000,0.0,0 -2017-09-27,233.52013262101323,234.0901959339822,232.57624911769778,233.6790008544922,81001400,0.0,0 -2017-09-28,233.3799176641849,234.04343951281425,233.28647332226083,233.95933532714844,44778800,0.0,0 -2017-09-29,233.94999276037387,234.86584147216777,233.7537496505475,234.78172302246094,85578000,0.0,0 -2017-10-02,235.02470846462023,235.8003692626953,234.8377912527227,235.8003692626953,59023000,0.0,0 -2017-10-03,235.80038376562914,236.33305792491203,235.71626531118903,236.30502319335938,66810200,0.0,0 -2017-10-04,236.14617360034632,236.84707046404924,236.0246802475072,236.5854034423828,55953600,0.0,0 -2017-10-05,236.94048514306184,238.0058476720466,236.62274869366564,237.98716735839844,63522800,0.0,0 -2017-10-06,237.51057371437525,238.0245675900582,237.2302263819872,237.71617126464844,80646000,0.0,0 -2017-10-09,237.95914135668872,238.02455097641948,237.04329260220243,237.3236541748047,35803100,0.0,0 -2017-10-10,237.9310877535545,238.35162294921162,237.35167008019192,237.94976806640625,43057400,0.0,0 -2017-10-11,237.8469894445286,238.3236083984375,237.66944089871959,238.3236083984375,47674300,0.0,0 -2017-10-12,237.9871851754151,238.36099111330384,237.71616374963065,237.96849060058594,47065100,0.0,0 -2017-10-13,238.43572624203958,238.55721957402423,237.96846174644418,238.25816345214844,54800400,0.0,0 -2017-10-16,238.50120846297813,238.78155582109488,238.13674263764213,238.57595825195312,38221700,0.0,0 -2017-10-17,238.51984851658435,238.7908699300593,238.28621625106962,238.744140625,31561000,0.0,0 -2017-10-18,239.14599159685903,239.19272090393488,238.77218565981732,238.977783203125,40888300,0.0,0 -2017-10-19,238.1460424594612,239.0805715209857,237.69747250266835,239.04318237304688,61903800,0.0,0 -2017-10-20,239.89364731556768,240.3048424284513,239.0245277797394,240.2767791748047,89176400,0.0,0 -2017-10-23,240.6225528910853,240.6505876221325,239.25811992795218,239.34222412109375,63915300,0.0,0 -2017-10-24,239.8001302317138,240.0150536340724,239.37958080347872,239.7627410888672,66935900,0.0,0 -2017-10-25,239.407688687196,239.52918204890275,237.3704218326984,238.57595825195312,103715300,0.0,0 -2017-10-26,239.2300780207738,239.5197654623771,238.7534591161147,238.88429260253906,69798000,0.0,0 -2017-10-27,239.67868690255747,241.0057308146074,238.89368585639093,240.83749389648438,85562500,0.0,0 -2017-10-30,239.6787016208863,240.73472416484339,239.62263215125736,239.94036865234375,54285700,0.0,0 -2017-10-31,240.34218268092147,240.58516936872127,239.99641148339975,240.31414794921875,60304800,0.0,0 -2017-11-01,241.14587452401665,241.5103260089506,240.23938024053385,240.63186645507812,54202700,0.0,0 -2017-11-02,240.55716390377216,240.8749004082477,239.41703714321034,240.72537231445312,56449500,0.0,0 -2017-11-03,240.8935665021668,241.5757830424058,240.45433666494344,241.52906799316406,59589700,0.0,0 -2017-11-06,241.3888239808228,242.04300567425335,241.3140742110747,241.90283203125,49652600,0.0,0 -2017-11-07,242.0149969743612,242.3701225878709,241.19260682087858,241.73464965820312,57502200,0.0,0 -2017-11-08,241.54771399415912,242.24861075061065,241.24865786671157,242.1457977294922,50469600,0.0,0 -2017-11-09,240.85618469313172,241.47297729454743,239.57585592560244,241.2673797607422,95085500,0.0,0 -2017-11-10,240.8561796706427,241.3795136513134,240.51973438617554,241.19259643554688,59984700,0.0,0 -2017-11-13,240.46367597870244,241.65987206372978,240.4262868299179,241.41688537597656,50228600,0.0,0 -2017-11-14,240.55712976793382,240.96832483762705,239.72538521164773,240.85618591308594,61315200,0.0,0 -2017-11-15,239.81887369096484,240.3795969030712,238.89369892870812,239.65066528320312,80811500,0.0,0 -2017-11-16,240.6599394642663,242.08044204263393,240.61322441400597,241.68792724609375,67777000,0.0,0 -2017-11-17,241.31410644051672,241.65987764595926,240.89355693577772,240.9776611328125,75756800,0.0,0 -2017-11-20,241.23934017243474,241.59443725134525,240.97764466234855,241.3888397216797,48075500,0.0,0 -2017-11-21,242.211188794364,243.16442650653028,241.35143819386843,242.96815490722656,69176800,0.0,0 -2017-11-22,242.9775737633426,243.11774742890833,242.575733082199,242.7532958984375,45033400,0.0,0 -2017-11-24,243.2765889601457,243.42611701808946,243.12706090220192,243.31394958496094,27856500,0.0,0 -2017-11-27,243.360743805758,243.6784803001964,242.9775834249322,243.19253540039062,52274900,0.0,0 -2017-11-28,243.68779492018598,245.6876721808213,243.58498189843007,245.65963745117188,98971700,0.0,0 -2017-11-29,245.79977246814792,246.3698499075053,245.03348047164513,245.51007080078125,77512100,0.0,0 -2017-11-30,246.49139980467874,248.63145086846012,246.407295609643,247.65956115722656,127894400,0.0,0 -2017-12-01,247.42591414972864,247.93989370641074,243.68779804422226,247.14553833007812,164390900,0.0,0 -2017-12-04,248.87437771390643,249.3322877277396,246.79036809502054,246.84646606445312,94040600,0.0,0 -2017-12-05,245.95867919921878,247.79034797485966,245.8185055591678,245.95867919921875,77994500,0.0,0 -2017-12-06,246.06150159356244,246.46337078301818,245.51013284473353,246.00543212890625,75898600,0.0,0 -2017-12-07,246.78109741210938,247.11751418662706,245.72507500393363,246.78109741210938,77218600,0.0,0 -2017-12-08,247.79975540367448,248.13617221176807,246.74373289010293,248.12684631347656,76563900,0.0,0 -2017-12-11,248.87438964843753,248.9398135162817,248.09874320826376,248.8743896484375,83077500,0.0,0 -2017-12-12,249.7154850327602,249.81829805249106,248.9118037855992,249.3136444091797,85195800,0.0,0 -2017-12-13,249.57536155546492,250.04262614738627,249.19220116774133,249.28565979003906,102905400,0.0,0 -2017-12-14,249.60335268697494,249.7248460227816,248.21091357255617,248.26698303222656,100666700,0.0,0 -2017-12-15,249.33876490997034,250.83225786483908,249.2824088486803,250.3344268798828,144610300,1.351,0 -2017-12-18,251.82792341594453,252.29757637693461,251.71521129176162,251.92185974121094,83653600,0.0,0 -2017-12-19,252.184818686571,252.23177250804937,250.87916993156654,250.95433044433594,82382900,0.0,0 -2017-12-20,251.98760622481396,252.0439622906749,250.50351538156917,250.8228759765625,76751500,0.0,0 -2017-12-21,251.48976993332587,252.10034174294054,251.0764730154374,251.3394775390625,67032300,0.0,0 -2017-12-22,251.35823097927522,251.39581123654818,250.70070547101642,251.27369689941406,78720900,0.0,0 -2017-12-26,250.84159744492004,251.20794045901084,250.6913337454002,250.97311401367188,45244400,0.0,0 -2017-12-27,251.15160141880014,251.4803641976131,250.80406284260965,251.09524536132812,57751000,0.0,0 -2017-12-28,251.63065138615755,251.65882941431278,251.21735452965527,251.61184692382812,45116100,0.0,0 -2017-12-29,252.2318157192037,252.2505915179443,250.456542449274,250.6631622314453,96007400,0.0,0 -2018-01-02,251.5836972364917,252.49482513660018,251.17040033343164,252.45724487304688,86655700,0.0,0 -2018-01-03,252.63564014700154,254.21369542808614,252.63564014700154,254.0540008544922,90070400,0.0,0 -2018-01-04,254.73972676872154,255.6414522479233,254.11978154385278,255.12481689453125,80636400,0.0,0 -2018-01-05,255.97024046336935,256.9565001170275,255.44423149270648,256.82501220703125,83524000,0.0,0 -2018-01-08,256.7217166946166,257.46377644972046,256.4117583320432,257.2947082519531,57319200,0.0,0 -2018-01-09,257.74552809498925,258.5439438271603,257.44494333329226,257.8770446777344,57254000,0.0,0 -2018-01-10,257.0691860944629,257.7642918292214,256.35533322990386,257.48248291015625,69574300,0.0,0 -2018-01-11,258.074330866831,259.3611755371094,257.89586042850897,259.3611755371094,62361500,0.0,0 -2018-01-12,259.6429211864067,261.2303216122462,259.3235319897239,261.0518798828125,90816100,0.0,0 -2018-01-16,262.39512921758836,263.090206464505,259.417516671256,260.1595764160156,106555100,0.0,0 -2018-01-17,261.15522201339274,263.0526096393548,260.1595600381972,262.6393127441406,113258800,0.0,0 -2018-01-18,262.5172671136594,262.9681156751701,261.67186873013486,262.1979064941406,100728000,0.0,0 -2018-01-19,262.8178165194634,263.39080810546875,262.1978997633,263.39080810546875,140920100,0.0,0 -2018-01-22,263.1653084278166,265.5323486328125,263.1089237098848,265.5323486328125,91322400,0.0,0 -2018-01-23,265.5793727947124,266.4059666721469,265.2318341565512,266.09600830078125,97084700,0.0,0 -2018-01-24,266.78159758552147,267.42034725433757,264.7339180162442,265.9925842285156,134816100,0.0,0 -2018-01-25,266.91313403935317,267.016443915851,265.25994669268687,266.1053161621094,84587300,0.0,0 -2018-01-26,266.9977091050005,269.2332617923168,266.72530236053257,269.186279296875,107743100,0.0,0 -2018-01-29,268.57571311563606,269.0453660376717,267.2325126382955,267.4015808105469,90118300,0.0,0 -2018-01-30,265.447796306411,267.45789559656896,264.1515498551619,264.6587829589844,131796400,0.0,0 -2018-01-31,265.5699536297908,266.10533617931765,263.6443594356234,264.7903137207031,108364800,0.0,0 -2018-02-01,264.0106891087455,265.8798984850807,263.6443460859636,264.4897155761719,90102500,0.0,0 -2018-02-02,263.08080462236194,263.2217234507566,258.6942617757541,258.7318420410156,173174800,0.0,0 -2018-02-05,256.85317424093245,259.10750235558675,247.32859997494617,247.9109649658203,294681800,0.0,0 -2018-02-06,244.1632158203398,253.3308519995773,242.99848549654493,252.79544067382812,355026800,0.0,0 -2018-02-07,252.2036377847434,255.8293448516331,251.33946373153887,251.4240264892578,167376100,0.0,0 -2018-02-08,251.74339314913797,251.89368553878015,241.95581268058982,241.99339294433594,246449500,0.0,0 -2018-02-09,244.97095344483455,247.61040058182144,237.569233116286,245.62847900390625,283565300,0.0,0 -2018-02-12,247.8170515810126,250.8040659912252,245.77877392439447,249.23541259765625,143736000,0.0,0 -2018-02-13,247.94860244971437,250.43775758133938,247.32865705866635,249.8553924560547,81223600,0.0,0 -2018-02-14,248.2679140259629,253.61256632810446,248.25851179504255,253.22744750976562,120735700,0.0,0 -2018-02-15,255.0873006624809,256.4680814307785,252.45722704102167,256.45867919921875,111200300,0.0,0 -2018-02-16,255.79181290448813,258.6097308615769,255.74483040599705,256.5338439941406,160420100,0.0,0 -2018-02-20,255.51931842382416,257.0597934708936,254.08218190568448,254.92755126953125,86369700,0.0,0 -2018-02-21,255.39728290345278,258.04613257075914,253.55625126175474,253.65956115722656,98883700,0.0,0 -2018-02-22,254.6458526675474,256.4774820988182,253.2744739858968,253.9883270263672,110511300,0.0,0 -2018-02-23,255.29392531100206,258.03668212890625,254.78669216482183,258.03668212890625,92766400,0.0,0 -2018-02-26,259.18264744685814,261.13641960063,258.55332860147087,261.0330810546875,86491400,0.0,0 -2018-02-27,261.2303200757955,261.99118413949054,257.70792335549834,257.773681640625,99099200,0.0,0 -2018-02-28,258.947846744237,259.4269019319032,254.82430869965955,255.16244506835938,121907800,0.0,0 -2018-03-01,254.93702645422067,256.5902140675167,249.8553779220551,251.45220947265625,176855100,0.0,0 -2018-03-02,249.66752109772355,253.3496131974965,248.74701957178831,252.74844360351562,139083200,0.0,0 -2018-03-05,251.48036639661152,256.3271880389615,251.36762561534218,255.66966247558594,97307400,0.0,0 -2018-03-06,256.71230250167145,256.79686526195917,254.72097849093726,256.31781005859375,79213200,0.0,0 -2018-03-07,254.00712866132972,256.59959360160894,253.8004802048621,256.223876953125,87063500,0.0,0 -2018-03-08,256.9471096886463,257.59523303322356,255.88571813271258,257.4637451171875,66901200,0.0,0 -2018-03-09,258.9666907613724,261.94427490234375,258.62852567568166,261.94427490234375,113625300,0.0,0 -2018-03-12,262.25422833664305,262.92112752373566,261.2021816112836,261.615478515625,71924800,0.0,0 -2018-03-13,262.8553736301339,263.3907849013609,259.27662025356216,259.92474365234375,91968900,0.0,0 -2018-03-14,260.9485481339414,261.14579433027967,257.99914275864154,258.59088134765625,105895100,0.0,0 -2018-03-15,259.13567568020386,259.82135053396223,257.7736708724498,258.30908203125,83433000,0.0,0 -2018-03-16,258.8721422604331,259.7114865179347,258.5326516260384,258.5892333984375,100343700,1.097,0 -2018-03-19,257.7875818666391,258.7777915176182,253.32686093324932,255.09039306640625,109208400,0.0,0 -2018-03-20,255.51482158587115,256.2032715203458,254.7980807653303,255.52426147460938,59757300,0.0,0 -2018-03-21,255.4770870560948,257.71215336291647,254.80751690893788,255.03384399414062,78709600,0.0,0 -2018-03-22,252.65732054694445,253.56265765818537,248.3663444017155,248.65872192382812,148785900,0.0,0 -2018-03-23,249.13025750697088,249.47918802192677,243.15118174962296,243.35865783691406,183534800,0.0,0 -2018-03-26,247.206384550016,250.3184969986603,244.64123880089716,250.01670837402344,141956100,0.0,0 -2018-03-27,251.01638362912723,251.58220131801085,244.10368013508082,245.76348876953125,129941400,0.0,0 -2018-03-28,245.90489688938678,247.6873086141939,243.85842736610547,245.03726196289062,146452300,0.0,0 -2018-03-29,246.25389295793318,250.1582079975496,245.0467671603021,248.16831970214844,111601600,0.0,0 -2018-04-02,247.60246351187467,248.14945900607196,240.17109830878528,242.8116912841797,186286300,0.0,0 -2018-04-03,244.13195926642123,246.43304702425775,242.21753276413833,245.9237823486328,119956900,0.0,0 -2018-04-04,242.13268721716878,249.3094202370602,241.99123278592464,248.5549774169922,123715300,0.0,0 -2018-04-05,250.4316848609161,251.4596542621857,249.2717296912882,250.51658630371094,82652600,0.0,0 -2018-04-06,248.42292550568595,250.01668356482836,243.3114855111418,244.93356323242188,179521200,0.0,0 -2018-04-09,246.48966234375035,249.76210923973022,245.1410820996817,246.14073181152344,105442900,0.0,0 -2018-04-10,249.22449339327704,250.89374165948544,248.00795676892136,250.0543975830078,103529000,0.0,0 -2018-04-11,248.47010880908607,250.51657888161122,248.394676037909,248.7436065673828,91140200,0.0,0 -2018-04-12,250.1581692473971,251.79909797964058,249.96954417880016,250.79000854492188,68890500,0.0,0 -2018-04-13,252.18573981753076,252.3083432246695,248.97931535914205,250.0543975830078,85079200,0.0,0 -2018-04-16,251.7991213110607,252.93081426721432,250.9220750991227,252.11032104492188,63405300,0.0,0 -2018-04-17,253.99642662077366,255.4487590266592,253.44945998434986,254.80747985839844,64682000,0.0,0 -2018-04-18,255.27903310440803,255.85429066601094,254.50571057687802,254.99612426757812,57303900,0.0,0 -2018-04-19,254.29825500655448,254.5151709857109,252.47814085585657,253.58154296875,77655900,0.0,0 -2018-04-20,253.50612724637944,253.7418942654159,250.48829789065093,251.43136596679688,99953100,0.0,0 -2018-04-23,252.044304276164,252.63844158282023,250.2430413614337,251.39358520507812,65558000,0.0,0 -2018-04-24,252.48756793002545,252.7233348944758,246.4047687351475,248.00799560546875,112885500,0.0,0 -2018-04-25,247.94199213862666,249.09253616076074,245.99927451143864,248.62100219726562,103840900,0.0,0 -2018-04-26,249.71492380993885,252.03486247436817,249.2433899231767,251.14837646484375,67731900,0.0,0 -2018-04-27,251.79913798373786,252.1197776271779,250.38453608495283,251.38418579101562,57053600,0.0,0 -2018-04-30,252.04431850126892,252.6384558414576,249.37542041441284,249.4508819580078,82182300,0.0,0 -2018-05-01,248.84731422024163,250.0072980610463,247.1875055596068,249.89413452148438,74203400,0.0,0 -2018-05-02,249.6866529023294,250.55425920649748,247.80051720439405,248.21546936035156,86368900,0.0,0 -2018-05-03,247.3289969189489,248.36634858590102,244.30172823511725,247.66848754882812,136311500,0.0,0 -2018-05-04,246.63108796341086,251.60107383517024,246.28215747195105,250.87489318847656,91222100,0.0,0 -2018-05-07,251.69540296216377,252.76104550247842,250.95978237906377,251.72369384765625,55304900,0.0,0 -2018-05-08,251.32759267061377,252.11032635600384,250.05444526315705,251.72369384765625,67499200,0.0,0 -2018-05-09,252.440378517887,254.50569927547275,251.88397197673143,254.15676879882812,59666100,0.0,0 -2018-05-10,254.9489779972091,256.8822845009802,254.83581445165157,256.5333251953125,72063900,0.0,0 -2018-05-11,256.66532099244984,257.5989488505708,256.11832558334237,257.3160400390625,59871500,0.0,0 -2018-05-14,257.7781502631647,258.4760112289423,256.8539334537778,257.43865966796875,54790600,0.0,0 -2018-05-15,256.1277433596827,256.1465943521081,254.65656010655533,255.6656494140625,87036100,0.0,0 -2018-05-16,255.7034624690711,257.23122797127826,255.67514280110765,256.7408142089844,53942600,0.0,0 -2018-05-17,256.45784309716765,257.6744085382115,255.69396053143265,256.52386474609375,56536400,0.0,0 -2018-05-18,256.1560966245063,256.5427579144543,255.5053774755874,255.88259887695312,64368000,0.0,0 -2018-05-21,257.46693642538276,258.3817132968891,257.05198431170083,257.8064270019531,58025900,0.0,0 -2018-05-22,258.36286907731903,258.63636682173416,256.74079116792393,257.0897216796875,52966400,0.0,0 -2018-05-23,255.73173536255726,257.82534725386137,255.5619612674744,257.7970275878906,64694200,0.0,0 -2018-05-24,257.3727038667467,257.6650526585709,255.36396432410407,257.2689514160156,76043800,0.0,0 -2018-05-25,256.65594482421875,257.32551503111546,256.1183891687528,256.65594482421875,56374800,0.0,0 -2018-05-29,254.92065181028653,255.73170507471858,252.515840459752,253.70408630371094,115908600,0.0,0 -2018-05-30,255.0998622617287,257.5612556210216,255.02442949438026,257.0897216796875,69678400,0.0,0 -2018-05-31,256.65595102590277,256.9765906930116,254.87356746754014,255.5148468017578,93519900,0.0,0 -2018-06-01,256.90115377555287,258.34404664436283,256.82569221971323,258.0234069824219,71258400,0.0,0 -2018-06-04,258.9004590902947,259.5228874292055,258.64584108898407,259.2493896484375,45385200,0.0,0 -2018-06-05,259.3907871055433,259.8434700107928,258.57032272364665,259.4379577636719,51135000,0.0,0 -2018-06-06,260.0887603493244,261.72024974924744,259.42860116474503,261.6070861816406,62732200,0.0,0 -2018-06-07,262.125700261802,262.43689996510585,260.6073461743888,261.5787048339844,72969400,0.0,0 -2018-06-08,261.08834330003305,262.4086325505472,260.90915810387605,262.35205078125,72139700,0.0,0 -2018-06-11,262.5878557321449,263.46490206327104,262.46525228754956,262.7010192871094,58892500,0.0,0 -2018-06-12,263.14422047498095,263.4271293173209,262.3520469362823,263.0404968261719,72329000,0.0,0 -2018-06-13,263.2950728227908,263.5685705135631,261.984194908522,262.20111083984375,79070600,0.0,0 -2018-06-14,263.1253554395657,263.42711526191204,262.22942951971424,262.8612976074219,77097600,0.0,0 -2018-06-15,262.0238707852297,262.8859195079813,260.8397426895891,262.52593994140625,120041600,1.246,0 -2018-06-18,260.9724325580346,262.1186897319672,260.4609098736572,261.9860534667969,52917600,0.0,0 -2018-06-19,259.5608882730972,261.218667669002,259.11565493610766,260.9818420410156,97531500,0.0,0 -2018-06-20,261.7113032661489,262.13760103959976,261.06714437641386,261.4271240234375,53785500,0.0,0 -2018-06-21,261.4176307545717,261.4365953095443,259.257781872622,259.78826904296875,71061400,0.0,0 -2018-06-22,261.1334635698961,261.25661754536884,260.0251067000251,260.2619323730469,54898500,0.0,0 -2018-06-25,259.03038391085323,259.2008914133857,254.91909475221448,256.7189636230469,137854200,0.0,0 -2018-06-26,257.32528423066486,258.1967864066226,256.5200712635398,257.2873840332031,68547400,0.0,0 -2018-06-27,257.91259868359197,259.4377418958524,254.9948906723592,255.15594482421875,105110700,0.0,0 -2018-06-28,255.0991172346457,257.42947346281045,254.3412578328253,256.61480712890625,76650500,0.0,0 -2018-06-29,257.7799836592947,259.2388377849321,256.86109896390633,256.9842529296875,97592500,0.0,0 -2018-07-02,255.3075532470118,257.7042278589193,255.05176302269956,257.53369140625,63554800,0.0,0 -2018-07-03,258.4904241098698,258.5946424159564,256.16955037035814,256.6242370605469,42187100,0.0,0 -2018-07-05,257.82733567883093,258.7840915511452,256.68107883226014,258.7177734375,56925900,0.0,0 -2018-07-06,258.74618808907,261.30388719059295,258.3388260911773,260.9060363769531,66493700,0.0,0 -2018-07-09,261.9765372472968,263.3122374577844,261.92918367837746,263.2554016113281,50550400,0.0,0 -2018-07-10,263.73852871615793,264.3069160760963,263.42590265896996,264.20269775390625,51966800,0.0,0 -2018-07-11,262.54489795536466,263.38801110780474,261.94809271880683,262.2701721191406,77054700,0.0,0 -2018-07-12,263.6153623520419,264.7047545435547,262.97120353211545,264.6479187011719,60124700,0.0,0 -2018-07-13,264.45847235029044,265.1784026482786,263.9753387864636,264.8563232421875,48216000,0.0,0 -2018-07-16,264.9037760644464,265.0553190763022,264.1459164582273,264.61956787109375,48201000,0.0,0 -2018-07-17,263.79530604870826,266.1067262662139,263.7384702162594,265.6899108886719,52315500,0.0,0 -2018-07-18,265.7752500050585,266.3625730685969,265.30159864292955,266.2489013671875,44593500,0.0,0 -2018-07-19,265.53838194388493,265.9457151120528,264.7331689749013,265.2447204589844,61412100,0.0,0 -2018-07-20,265.0268125945942,265.69941819088643,264.77105132448344,264.9415588378906,82337700,0.0,0 -2018-07-23,264.72369670491526,265.6520346582302,264.35423485129775,265.4341735839844,47047600,0.0,0 -2018-07-24,266.9404033796979,267.66981596238264,265.8415289125571,266.7698669433594,68026900,0.0,0 -2018-07-25,266.50463351946524,269.384441580567,266.4572799521904,269.0434265136719,78882900,0.0,0 -2018-07-26,268.2760840868909,269.13810393617183,268.17186577725715,268.40869140625,57919500,0.0,0 -2018-07-27,268.7591761127074,268.86339441745554,265.6046716025263,266.5898742675781,76768700,0.0,0 -2018-07-30,266.6751161371915,266.8456236362242,264.63839278658924,265.19732666015625,63742500,0.0,0 -2018-07-31,266.01202124587087,267.1582492130158,265.6046880960544,266.5046081542969,68570500,0.0,0 -2018-08-01,266.7225411665967,267.26251063426787,265.3679052678852,266.0594177246094,53853300,0.0,0 -2018-08-02,264.6668511331677,267.688719417706,264.44896115755745,267.5087585449219,63426400,0.0,0 -2018-08-03,267.6413477485271,268.71180409335796,267.4518757034795,268.65496826171875,53935400,0.0,0 -2018-08-06,268.69289525293163,269.9717305017449,268.2760798397526,269.64019775390625,39400900,0.0,0 -2018-08-07,270.3507092644034,270.93803226474944,270.2085907435479,270.5306701660156,43196600,0.0,0 -2018-08-08,270.35067246651136,270.84325935570075,269.9243747807325,270.4169616699219,42114600,0.0,0 -2018-08-09,270.4833280343667,270.90014351856667,269.9054872868158,270.0475769042969,35717000,0.0,0 -2018-08-10,268.5128849786356,269.0907255836419,267.48029989110233,268.2381591796875,77076000,0.0,0 -2018-08-13,268.53193109511426,269.1855723525781,266.92150474003785,267.234130859375,65732900,0.0,0 -2018-08-14,268.0109013277421,269.1950297412848,267.5940858134242,268.9392395019531,43842000,0.0,0 -2018-08-15,267.49929550823066,267.6508673835508,265.39628271590516,266.930908203125,102925400,0.0,0 -2018-08-16,268.4655056803192,270.0190955582242,268.42760548809866,269.0907287597656,69967900,0.0,0 -2018-08-17,268.8728932928818,270.5117372534515,268.43714217683345,270.0380859375,65618500,0.0,0 -2018-08-20,270.5212917616694,270.90020713372695,270.0381580393969,270.61602783203125,39807500,0.0,0 -2018-08-21,271.16532608268176,272.16946436608066,270.6537746654899,271.2505798339844,67272000,0.0,0 -2018-08-22,270.8148737588763,271.64850467805775,270.53066563131097,271.089599609375,44993300,0.0,0 -2018-08-23,270.90012178511057,271.81900645027997,270.3885702938357,270.7296142578125,49204900,0.0,0 -2018-08-24,271.3453575568359,272.5105501557723,271.2885217139006,272.3589782714844,57487400,0.0,0 -2018-08-27,273.63777687114805,274.62297953192177,273.46726936525755,274.5093078613281,57072400,0.0,0 -2018-08-28,275.00194901581557,275.1156496182281,274.14938240870964,274.6419982910156,46943500,0.0,0 -2018-08-29,274.86930470267504,276.3660299752042,274.6135434277622,276.1197509765625,61485500,0.0,0 -2018-08-30,275.6082407093951,276.0060916409441,274.367276526306,275.001953125,61229500,0.0,0 -2018-08-31,274.56618019895035,275.4850648709136,274.0451753363384,275.01141357421875,66140800,0.0,0 -2018-09-04,274.56619868505857,274.9166960427102,273.4673241336153,274.53778076171875,57594400,0.0,0 -2018-09-05,274.1588993574415,274.37678940289226,272.71900954799935,273.7989196777344,72452400,0.0,0 -2018-09-06,273.9125211828548,274.2346005744175,271.8758265221431,272.9747009277344,65909900,0.0,0 -2018-09-07,271.8568604713126,273.4862217995113,271.6010703144328,272.4441833496094,73524800,0.0,0 -2018-09-10,273.524105226036,273.80831331192377,272.70943898045397,272.9178466796875,50210900,0.0,0 -2018-09-11,272.22637893945426,274.2914919377701,271.8569459102878,273.8178405761719,50530500,0.0,0 -2018-09-12,273.82728891226344,274.52828358953417,273.04104046959884,273.8841247558594,59810800,0.0,0 -2018-09-13,275.0208626791768,275.7029216205252,274.7177189476047,275.50396728515625,51034200,0.0,0 -2018-09-14,275.7218685989875,275.92079403315785,274.71773024257527,275.5513610839844,55079900,0.0,0 -2018-09-17,275.494516870808,275.53238815562725,273.7988373203701,274.0924987792969,68244000,0.0,0 -2018-09-18,274.3199051947097,276.2145106088601,274.29148726987285,275.579833984375,61930400,0.0,0 -2018-09-19,275.6366484626871,276.3187075152735,275.504012217476,275.87347412109375,49080600,0.0,0 -2018-09-20,277.2186624439872,278.45014432999403,275.892415601355,278.1091003417969,100360600,0.0,0 -2018-09-21,278.9017361269234,279.025447573832,277.68370109929776,277.85498046875,105479700,1.323,0 -2018-09-24,277.23649237937843,277.38875040988796,276.3134480345863,276.9319763183594,53409600,0.0,0 -2018-09-25,277.41728855417085,277.53147481352426,276.41812974457997,276.675048828125,44370000,0.0,0 -2018-09-26,276.8273360360989,278.0929392643458,275.39994956321414,275.8471984863281,79739700,0.0,0 -2018-09-27,276.35150615927785,277.7788924545558,276.0565153148069,276.6179504394531,59249500,0.0,0 -2018-09-28,275.95181262185326,277.1793729110245,275.9137698980281,276.646484375,70091400,0.0,0 -2018-10-01,277.9692462189158,278.74955784548604,276.89397273186654,277.607666015625,62078900,0.0,0 -2018-10-02,277.44580078125,278.20706177622185,277.0461489229757,277.44580078125,47258200,0.0,0 -2018-10-03,278.5686957071096,279.01594456753077,277.21745296472955,277.59808349609375,64694600,0.0,0 -2018-10-04,277.0841642341223,277.141257351085,273.73457553125917,275.42840576171875,111545900,0.0,0 -2018-10-05,275.66637220533363,276.21828215375035,272.36435059603497,273.88690185546875,105951700,0.0,0 -2018-10-08,273.15415827123036,274.2675324102647,271.67920398130224,273.88690185546875,87742200,0.0,0 -2018-10-09,273.47768645681543,274.8764970158451,272.8876757831772,273.4871826171875,74339000,0.0,0 -2018-10-10,272.9447972544705,273.0209407868302,264.4280763674668,264.8277282714844,214731000,0.0,0 -2018-10-11,263.666792577964,265.3986949776344,257.27210059785347,258.9945068359375,274840500,0.0,0 -2018-10-12,263.3718046893944,263.67632074907874,259.1848105096094,262.5915222167969,183186500,0.0,0 -2018-10-15,262.21083975205954,263.6287298261871,261.02135122289894,261.11651611328125,102263700,0.0,0 -2018-10-16,263.2100164445791,267.22573071134497,262.7056744910864,266.8260498046875,118255800,0.0,0 -2018-10-17,266.86413202547834,267.53975337676724,264.12354581598606,266.8736572265625,110626000,0.0,0 -2018-10-18,265.8744561567684,266.5120347523592,261.65891600221784,263.0196838378906,134557500,0.0,0 -2018-10-19,263.7143882731102,265.77932424407066,262.1347439091973,262.8769836425781,139901600,0.0,0 -2018-10-22,263.59064733527987,263.9332060784192,261.12603068798535,261.6969909667969,82415800,0.0,0 -2018-10-23,257.8335401090627,261.56375980036256,255.60679207099736,260.36474609375,146352700,0.0,0 -2018-10-24,260.0983123839023,260.5075185170506,251.88610780121797,252.47608947753906,177806700,0.0,0 -2018-10-25,254.43636786349072,258.6519083882269,253.34204418653923,257.0056457519531,138061500,0.0,0 -2018-10-26,253.04705987839,257.88112877664105,249.5927803335767,252.485595703125,201574600,0.0,0 -2018-10-29,255.78762285393796,257.1674412780049,247.27090170477362,251.08676147460938,160749100,0.0,0 -2018-10-30,250.90595042654493,255.1405119174707,250.3825580803099,254.8074493408203,157116000,0.0,0 -2018-10-31,257.5480435782613,260.00316409875865,257.0437016171121,257.5290222167969,128296300,0.0,0 -2018-11-01,258.4520807935222,260.47897395144594,257.2911387943487,260.2696228027344,99495000,0.0,0 -2018-11-02,261.44959383416773,261.9063679102785,256.53938141691094,258.7280578613281,122634100,0.0,0 -2018-11-05,259.25143354944635,260.74543826916215,258.2142029275498,260.15545654296875,65622500,0.0,0 -2018-11-06,260.08881437037195,261.97294564065544,260.02219604216555,261.8016662597656,60085900,0.0,0 -2018-11-07,264.12355511337756,267.4921948678116,263.66678104896755,267.40655517578125,102752100,0.0,0 -2018-11-08,266.55006928391316,267.60635011036896,265.70316862293026,266.92120361328125,65584900,0.0,0 -2018-11-09,265.5224138251396,265.72223978750543,262.8103738891742,264.31390380859375,98812600,0.0,0 -2018-11-12,263.77143606714867,264.02835510907425,258.82315266827226,259.3750915527344,99673600,0.0,0 -2018-11-13,259.8699690598935,262.0015234950888,258.1190451966615,258.88983154296875,98176600,0.0,0 -2018-11-14,260.8881958481174,261.3163943802081,255.45461929017623,257.1199035644531,125335900,0.0,0 -2018-11-15,255.76860848443548,260.298190594918,254.08430299624575,259.8033447265625,135101400,0.0,0 -2018-11-16,258.6329151208357,261.4496162308513,258.0809761015564,260.47900390625,126668000,0.0,0 -2018-11-19,259.83185582829185,260.14589705423094,255.09295223908876,256.0730895996094,103061700,0.0,0 -2018-11-20,252.51413082668293,254.07475374028675,250.4111232060196,251.33416748046875,136021300,0.0,0 -2018-11-21,252.9899150591185,254.21747531710076,252.18108611479917,252.19058227539062,75563700,0.0,0 -2018-11-23,250.4396682931685,252.0002911975722,250.33500724092676,250.50628662109375,42807900,0.0,0 -2018-11-26,252.91379978392172,254.7884348076081,252.49509751181182,254.550537109375,79981400,0.0,0 -2018-11-27,253.44670756270426,255.406982421875,252.79963274400197,255.406982421875,75502400,0.0,0 -2018-11-28,256.5488473503677,261.2877502441406,255.3403086282671,261.2877502441406,127629600,0.0,0 -2018-11-29,260.4599098083278,262.21083339597953,259.24187474560284,260.71685791015625,82346400,0.0,0 -2018-11-30,260.5550761583832,262.90550660982746,260.2125174076853,262.3059997558594,98204200,0.0,0 -2018-12-03,266.7118356819919,266.8260219176039,264.0759399424706,265.7792663574219,103176300,0.0,0 -2018-12-04,264.89433225542723,265.35110630409986,256.83435683811877,257.16741943359375,177986000,0.0,0 -2018-12-06,253.04703260791402,256.9009636449156,249.73548624409517,256.7772521972656,204185400,0.0,0 -2018-12-07,256.41561445764427,258.0904233339721,249.91626294275747,250.81076049804688,161018900,0.0,0 -2018-12-10,250.62046539728848,252.32382106767847,246.10040907839223,251.28659057617188,151445900,0.0,0 -2018-12-11,254.7028188743406,254.90264482822292,249.77358507691653,251.3437042236328,121504400,0.0,0 -2018-12-12,254.52199023156635,255.97792298133731,252.5236437608375,252.60928344726562,97976700,0.0,0 -2018-12-13,253.61800540724468,254.54104977531532,251.33419297250566,252.523681640625,96662700,0.0,0 -2018-12-14,250.2303222897306,251.24853147094504,247.27088867957713,247.86087036132812,116961100,0.0,0 -2018-12-17,246.84269696709998,248.0321857044513,241.25686250293845,242.99827575683594,165492300,0.0,0 -2018-12-18,244.7491787445236,245.46287188350615,241.01892982706548,242.73179626464844,134515100,0.0,0 -2018-12-19,242.81743388946367,246.84265909342508,237.2791827285689,239.09671020507812,214992800,0.0,0 -2018-12-20,237.76449365928315,239.43928835126567,232.80669887317052,235.2047119140625,252053400,0.0,0 -2018-12-21,236.16666393602424,239.00939419688098,229.69633517303475,230.38548278808594,255345600,1.435,0 -2018-12-24,228.79661129786385,230.5194803161667,224.23102665550738,224.2980194091797,147311600,0.0,0 -2018-12-26,225.85817458752993,235.63064575195312,223.7428714573097,235.63064575195312,218485400,0.0,0 -2018-12-27,232.1753537373754,237.6502258319504,228.72004952253798,237.43966674804688,186267300,0.0,0 -2018-12-28,238.88492862988585,240.62692987785215,235.88905160626118,237.1333465576172,153100200,0.0,0 -2018-12-31,238.86579913764763,239.4688069164015,236.86536377008522,239.2103729248047,144299400,0.0,0 -2019-01-02,235.4392106947059,240.4451041817098,235.41049742922849,239.459228515625,126925200,0.0,0 -2019-01-03,237.59277955392207,237.91822088545382,233.2281881936798,233.74505615234375,144140700,0.0,0 -2019-01-04,236.98018179367654,242.26364088062783,236.57818153558114,241.57449340820312,142628800,0.0,0 -2019-01-07,241.86168117845273,244.981977764934,240.9045333734677,243.47926330566406,103139100,0.0,0 -2019-01-08,245.81472062206598,246.2837137267129,243.11555664423815,245.766845703125,102512600,0.0,0 -2019-01-09,246.52298642682496,247.81514180610665,245.21169860697478,246.91542053222656,95006600,0.0,0 -2019-01-10,245.27868510731494,248.05440766503858,244.5512434899057,247.78640747070312,96823900,0.0,0 -2019-01-11,246.63781629855066,247.9108391175615,246.015676125495,247.8821258544922,73858100,0.0,0 -2019-01-14,245.85297452878564,247.23126972359336,245.42227553655405,246.36984252929688,70908200,0.0,0 -2019-01-15,246.77186801290523,249.52845852034474,246.76228718716834,249.19345092773438,85208300,0.0,0 -2019-01-16,249.6528369634964,250.7439994287581,249.43271167336331,249.7964324951172,77636700,0.0,0 -2019-01-17,248.86803582383982,252.6104876330233,248.8201609027464,251.6916046142578,96118400,0.0,0 -2019-01-18,253.6250505785959,255.53934629950356,251.72988729935685,255.04161071777344,127900300,0.0,0 -2019-01-22,253.47188642470468,253.70159254866857,249.8730013634961,251.59585571289062,115531200,0.0,0 -2019-01-23,252.69660899547807,253.44318313758697,249.49015790968755,252.122314453125,86030300,0.0,0 -2019-01-24,251.93084464082634,252.8784407517212,250.8492630374783,252.2562713623047,59204100,0.0,0 -2019-01-25,254.22803433720534,255.27135123085978,252.3616134974653,254.39076232910156,96883400,0.0,0 -2019-01-28,252.1031963805989,252.52431457850338,250.57175391698402,252.45733642578125,85613700,0.0,0 -2019-01-29,252.6104691956002,253.21344779474546,251.23217397788625,252.122314453125,66136300,0.0,0 -2019-01-30,253.73987865991322,257.0133076627899,252.92629721668223,256.11358642578125,92473700,0.0,0 -2019-01-31,256.0466335735802,258.8797830626155,255.81689822431517,258.3629150390625,104012100,0.0,0 -2019-02-01,258.5734750027893,259.57849772908514,257.645040458792,258.4873352050781,85782500,0.0,0 -2019-02-04,258.53514861645584,260.37288503422957,257.8172878487024,260.3058776855469,60744800,0.0,0 -2019-02-05,260.7653431698527,261.72249094856755,260.229342750559,261.3970642089844,79552800,0.0,0 -2019-02-06,261.10033462867875,261.62675419056745,260.26762078613507,261.0524597167969,58347800,0.0,0 -2019-02-07,259.3296715305057,259.9135177674354,256.7932352695599,258.56396484375,95482000,0.0,0 -2019-02-08,257.23346539526455,258.98503297707174,256.35287658698064,258.8797607421875,75788900,0.0,0 -2019-02-11,259.5784774736161,259.8560292857496,258.4586017710917,259.0233154296875,68021400,0.0,0 -2019-02-12,260.74624656798267,262.75623381168,260.66965837765287,262.354248046875,72270200,0.0,0 -2019-02-13,263.24434877687287,264.1057759238559,262.79448815869495,263.2060546875,65277200,0.0,0 -2019-02-14,262.047897916947,263.828207840147,261.1768899988532,262.6221923828125,83234400,0.0,0 -2019-02-15,264.51731083190424,265.5223333914358,264.29718556644576,265.4840393066406,97088700,0.0,0 -2019-02-19,264.6322242003087,266.64221113603867,264.6226433755264,265.9435119628906,59120800,0.0,0 -2019-02-20,265.90522818267647,266.96767743059445,265.369227751057,266.4795227050781,76610800,0.0,0 -2019-02-21,265.79998266462525,266.1828359814348,264.5078271617869,265.531982421875,64214700,0.0,0 -2019-02-22,266.19236289004516,267.3887976501705,265.5127961250472,267.1782531738281,78114600,0.0,0 -2019-02-25,268.7001316218115,269.2552645331776,267.45582186694276,267.5419616699219,69030700,0.0,0 -2019-02-26,267.1686949841882,268.2885416570369,266.9485404541329,267.3505554199219,56844100,0.0,0 -2019-02-27,266.5847131987411,267.6088680418371,265.5893008222929,267.235595703125,56921600,0.0,0 -2019-02-28,267.0058541312073,267.4748762613514,266.39329493015765,266.73785400390625,69268300,0.0,0 -2019-03-01,268.4225443066167,268.84369169570243,266.87196946945306,268.4034118652344,78880500,0.0,0 -2019-03-04,269.53283038150784,269.7912497758602,264.9767974377411,267.4270935058594,106494600,0.0,0 -2019-03-05,267.5610900161118,267.7716636893495,266.47950838583773,267.0633544921875,59114600,0.0,0 -2019-03-06,267.1877861633369,267.19736698789654,265.10121109749514,265.4457702636719,75039800,0.0,0 -2019-03-07,264.96720648273003,265.1203536323618,262.3254984786213,263.2252197265625,94885100,0.0,0 -2019-03-08,261.2438765860361,262.8805908553177,260.746170333751,262.69873046875,85795800,0.0,0 -2019-03-11,263.4644865379852,266.6804888049993,263.4357732752379,266.5082092285156,65098900,0.0,0 -2019-03-12,267.10167806164407,268.0684067422764,266.90068519086117,267.51324462890625,79667500,0.0,0 -2019-03-13,268.4608633784869,270.27943861338633,268.28855455067617,269.28399658203125,80639200,0.0,0 -2019-03-14,269.31262612593144,269.7624866840099,268.6426403054882,269.11163330078125,67518400,0.0,0 -2019-03-15,269.7010445171483,271.30650584699924,269.4991369685932,270.4412841796875,81309000,1.233,0 -2019-03-18,270.6719818484837,271.73911098437446,270.4316408845485,271.4218444824219,62199800,0.0,0 -2019-03-19,272.556264833853,273.3734006065709,270.53739495276596,271.4891357421875,90268100,0.0,0 -2019-03-20,271.2583831439158,272.54660697194726,269.48947746937296,270.67193603515625,84609200,0.0,0 -2019-03-21,269.79718162518776,274.1617526502856,269.74909582661724,273.7291564941406,79550400,0.0,0 -2019-03-22,272.27746147500653,272.8350395800324,268.3935434388242,268.4608459472656,122659300,0.0,0 -2019-03-25,268.09549690844057,269.36450406484147,266.9130383050378,268.2589416503906,85575200,0.0,0 -2019-03-26,270.1336239599952,271.2776493103295,268.75888066959243,270.25860595703125,68125900,0.0,0 -2019-03-27,270.2489809719605,270.87389095261307,267.191850934216,268.84539794921875,72224700,0.0,0 -2019-03-28,269.51833353241517,270.34509227601876,268.28778910434676,269.8644104003906,56238500,0.0,0 -2019-03-29,271.47949031516185,271.9120863467743,270.2777857743111,271.5660095214844,82186800,0.0,0 -2019-04-01,273.7003045687803,275.1038875993006,273.4118778056892,274.78662109375,77617900,0.0,0 -2019-04-02,274.98850611967634,275.1711675864662,274.0751987857271,274.92120361328125,40070400,0.0,0 -2019-04-03,276.21907292977625,276.6420753777573,274.709724619412,275.3538513183594,68243200,0.0,0 -2019-04-04,275.6999024959871,276.3536228224006,274.9596629503565,276.0844421386719,48997500,0.0,0 -2019-04-05,276.7958348276566,277.4783948039126,276.4881914186293,277.42071533203125,58621700,0.0,0 -2019-04-08,276.9688893622849,277.74759161649195,276.2670832955647,277.6322326660156,53566300,0.0,0 -2019-04-09,276.6036048331425,276.94968173258246,275.62302427956666,276.2094421386719,66142300,0.0,0 -2019-04-10,276.65168331558147,277.24775358734485,276.2094641293685,277.151611328125,52601500,0.0,0 -2019-04-11,277.6706562605371,277.68027928556677,276.4689516714645,277.0746154785156,55093100,0.0,0 -2019-04-12,278.79551908226824,279.2473612694931,277.12275535609353,278.9493408203125,69727800,0.0,0 -2019-04-15,279.0261897161201,279.1319549786872,277.91100430823144,278.7666320800781,49596700,0.0,0 -2019-04-16,279.70882648362607,279.7665059680806,278.31483715281604,278.9493408203125,52153200,0.0,0 -2019-04-17,280.14136517015675,280.17020490647,277.82447522468806,278.2667236328125,58268300,0.0,0 -2019-04-18,278.8916838452604,279.10318508482953,277.5073174296259,278.81475830078125,68708500,0.0,0 -2019-04-22,277.99754662236097,279.2184679269359,277.9014043872272,279.0550231933594,40160100,0.0,0 -2019-04-23,279.449197080177,281.8141729380963,279.19926246494794,281.564208984375,52246600,0.0,0 -2019-04-24,281.47769239195253,281.8333922749499,280.7855093385414,280.9393310546875,50392900,0.0,0 -2019-04-25,280.8335683715407,281.46807195454295,279.49728804162885,280.7662658691406,57770900,0.0,0 -2019-04-26,280.81437673349615,282.1506571827283,279.98758859509377,282.0737609863281,50916400,0.0,0 -2019-04-29,282.16985334542716,283.0735375204498,282.0737111130543,282.51593017578125,57197700,0.0,0 -2019-04-30,282.1506346413811,282.9677996880134,280.6413158669583,282.66015625,81111700,0.0,0 -2019-05-01,283.3330941841242,283.5542183839843,280.52589943618574,280.5355224609375,71671900,0.0,0 -2019-05-02,280.4105524477085,281.3911621825119,278.33400336861405,279.92987060546875,65030200,0.0,0 -2019-05-03,281.50655780967924,282.9678202386277,280.0452660422356,282.6697998046875,56543700,0.0,0 -2019-05-06,278.0744552494673,281.97758959491284,277.7379720806891,281.50653076171875,107198100,0.0,0 -2019-05-07,278.9396483307083,279.5741518401981,274.7673337426898,276.805419921875,144729900,0.0,0 -2019-05-08,276.4209289550781,278.24751428566935,275.78642533400006,276.4209289550781,91568300,0.0,0 -2019-05-09,274.2098209474803,276.2286615576348,272.3543664234438,275.5845642089844,103471100,0.0,0 -2019-05-10,274.58470992306155,277.77644461827794,271.3929752278452,276.9689025878906,112429300,0.0,0 -2019-05-13,271.5083603829732,272.5369972876065,269.11454471999303,270.00860595703125,127290500,0.0,0 -2019-05-14,271.09494361687257,274.08480001564584,270.9603679532788,272.4504699707031,77003200,0.0,0 -2019-05-15,270.7104227180747,274.72891626875247,270.4892984872836,274.0463562011719,73956400,0.0,0 -2019-05-16,274.7961988326606,278.03598983515224,274.7193026449407,276.5843505859375,76749600,0.0,0 -2019-05-17,274.12326660892603,277.4495768824048,274.1040205577922,274.79620361328125,100353000,0.0,0 -2019-05-20,273.08501450610294,274.9115999642539,272.1813301346551,272.9792785644531,62877600,0.0,0 -2019-05-21,274.7865580406231,275.8440639189726,274.5173773932696,275.4403076171875,46847100,0.0,0 -2019-05-22,274.42129140197,275.61337305161527,274.0848082251689,274.5943298339844,49482500,0.0,0 -2019-05-23,272.2197466641695,272.2678031133935,269.72981822143987,271.2391662597656,98733800,0.0,0 -2019-05-24,272.77736272853485,273.21961121241867,271.1911182825919,271.8544616699219,55268100,0.0,0 -2019-05-28,272.15246158841455,273.17150482053455,269.30683309146593,269.3260498046875,70029400,0.0,0 -2019-05-29,268.1339942202538,268.5665903485203,266.01898202040724,267.5187072753906,104972900,0.0,0 -2019-05-30,268.3262553314227,269.22034602664155,267.0764940374135,268.2493591308594,62523800,0.0,0 -2019-05-31,265.52870370341145,266.41314200452194,264.60577329551876,264.6346130371094,86862800,0.0,0 -2019-06-03,264.6730697571849,265.865151500352,262.5388409127597,263.961669921875,96428000,0.0,0 -2019-06-04,266.4131217742404,269.83557442942526,265.9324398918999,269.6913757324219,77231900,0.0,0 -2019-06-05,271.42180199185174,272.05630555793005,269.4894808944912,272.0274658203125,71169700,0.0,0 -2019-06-06,272.34474739341385,274.5174095377128,271.6525643136698,273.79638671875,69430400,0.0,0 -2019-06-07,274.88273852554335,277.6899336715843,274.7000770602961,276.5362854003906,74272200,0.0,0 -2019-06-10,278.1898375030219,279.58382674536915,277.70915560407394,277.8052978515625,60799100,0.0,0 -2019-06-11,279.7472227517949,280.1413854022035,277.04579301421944,277.73797607421875,58641300,0.0,0 -2019-06-12,277.48811321174674,278.08415418506223,276.6997877070712,277.2477722167969,47096300,0.0,0 -2019-06-13,278.2186851854904,278.77629263374473,277.46882257526556,278.3917236328125,48945200,0.0,0 -2019-06-14,278.08404541015625,278.7281425951175,277.2668804792677,278.08404541015625,52324700,0.0,0 -2019-06-17,278.3340180285061,279.0069843784834,278.0071578791863,278.1898193359375,39205700,0.0,0 -2019-06-18,280.1318256671139,282.22759181388574,279.7472566572323,281.102783203125,85434800,0.0,0 -2019-06-19,281.2469387768916,282.3044447148806,280.20867888954274,281.73724365234375,78674400,0.0,0 -2019-06-20,284.6021143919417,284.86167202582806,281.80454253942315,284.4290466308594,116570000,0.0,0 -2019-06-21,284.1411843262233,285.4839638134585,283.78375445151715,284.0155944824219,83309500,1.432,0 -2019-06-24,284.2378064343848,284.5758966669855,283.5036069965851,283.6678466796875,47582700,0.0,0 -2019-06-25,283.72574743233315,283.7547274313945,280.76966960336415,280.8855895996094,82028700,0.0,0 -2019-06-26,281.8420593203217,282.3830391493823,280.4896097476704,280.60552978515625,51584900,0.0,0 -2019-06-27,281.4170055295921,282.1415352605181,281.01128538974,281.6005554199219,40355200,0.0,0 -2019-06-28,282.64381100372145,283.5808704550865,282.0931909196206,283.049560546875,59350900,0.0,0 -2019-07-01,286.6045818202502,286.8364513393953,284.3343831779401,285.6192321777344,78705600,0.0,0 -2019-07-02,285.57096906729413,286.42108868307724,284.6725592611014,286.3631286621094,61504500,0.0,0 -2019-07-03,287.0876389855511,288.67195806801135,286.933069113029,288.6526184082031,40898900,0.0,0 -2019-07-05,287.338807980658,288.4980672406781,285.9573784906519,288.32415771484375,51677300,0.0,0 -2019-07-08,286.92341803824655,288.1309674835694,286.16023853407,286.7398681640625,45841800,0.0,0 -2019-07-09,285.503270015843,287.41600900904666,285.44531001490833,287.09722900390625,41101300,0.0,0 -2019-07-10,288.2372151183228,289.4834143895366,287.6672553229459,288.46905517578125,58448500,0.0,0 -2019-07-11,289.15490298169675,289.40605316346466,288.0729436354258,289.1452331542969,50826100,0.0,0 -2019-07-12,289.666968960172,290.5170884928908,289.338519046383,290.4397888183594,40326000,0.0,0 -2019-07-15,290.90341556446316,290.90341556446316,289.99533627508634,290.53631591796875,33900000,0.0,0 -2019-07-16,290.43978440713744,290.66198411655574,289.27088480799637,289.5993347167969,36650100,0.0,0 -2019-07-17,289.57034996920976,289.74423000963634,287.62860107421875,287.62860107421875,36036300,0.0,0 -2019-07-18,287.0972900918945,289.08732916390125,286.6239401564831,288.68157958984375,51392600,0.0,0 -2019-07-19,289.85043944733525,289.87941944705017,286.894361551699,287.0779113769531,58678600,0.0,0 -2019-07-22,287.50295191080164,288.36274106863976,286.95233189636804,287.7831115722656,43638100,0.0,0 -2019-07-23,288.98106051646994,289.8408203125,288.0922912344716,289.8408203125,44564500,0.0,0 -2019-07-24,289.0293833641376,291.2029724121094,288.93277351021226,291.2029724121094,47213200,0.0,0 -2019-07-25,290.7199386479644,290.7778986612956,288.9520697978015,289.8118591308594,55394100,0.0,0 -2019-07-26,290.54605168992583,291.9661309451017,290.4107920079157,291.75360107421875,45084100,0.0,0 -2019-07-29,291.62800908335413,291.7535989353897,290.6329895772387,291.2222595214844,38126500,0.0,0 -2019-07-30,289.72489565609453,290.9421147998836,289.3191461144367,290.50738525390625,45849000,0.0,0 -2019-07-31,290.76826135215026,290.97115090268795,285.1749130718072,287.32916259765625,104245200,0.0,0 -2019-08-01,287.4933659008826,290.65230450544846,283.97696791114663,284.82708740234375,142646600,0.0,0 -2019-08-02,283.87076505099037,284.1315851506143,281.02093621067814,282.6825256347656,116749700,0.0,0 -2019-08-05,278.3062824864292,278.4222024954732,272.15261632982345,274.1813049316406,178745400,0.0,0 -2019-08-06,276.2003845748526,278.2580536324012,274.62573531555716,278.02618408203125,120711700,0.0,0 -2019-08-07,274.74163104006794,279.01153865053277,272.4617919450118,278.1903991699219,140572300,0.0,0 -2019-08-08,279.7843708377664,283.6485290527344,279.1951008609538,283.6485290527344,87713900,0.0,0 -2019-08-09,282.64382031745004,283.28140991702446,279.8133316941948,281.7164306640625,93730000,0.0,0 -2019-08-12,280.1128786612584,281.7068383582442,277.27271942756283,278.2870788574219,65527600,0.0,0 -2019-08-13,277.968190113332,284.16050670834215,277.6010903945074,282.6148376464844,94299800,0.0,0 -2019-08-14,278.28700361148674,278.93423356183854,274.12337575833106,274.25860595703125,135622100,0.0,0 -2019-08-15,275.20532346621155,275.93952288281275,272.79989466765204,274.9831237792969,99556600,0.0,0 -2019-08-16,276.75101834832657,279.5042074555195,275.041109492615,279.04052734375,83018300,0.0,0 -2019-08-19,282.26711353600103,283.1268734511641,281.54258383483693,282.40234375,53571800,0.0,0 -2019-08-20,281.86131195859923,282.43127168067616,280.1031426136708,280.2383728027344,51596400,0.0,0 -2019-08-21,282.54719899532097,282.91426918321156,281.8129996571772,282.5182189941406,49524700,0.0,0 -2019-08-22,283.271814701557,283.9480247619198,280.53790600653656,282.43133544921875,51666400,0.0,0 -2019-08-23,281.04022800145475,282.8177371670491,273.84322183949206,275.1763610839844,149161500,0.0,0 -2019-08-26,277.51420182344737,278.21942138671875,275.8815924436203,278.21942138671875,72423800,0.0,0 -2019-08-27,279.70708501813897,280.10316475078696,276.31627693996677,277.12774658203125,66668900,0.0,0 -2019-08-28,276.4225539984372,279.2530426304842,275.5627647008117,279.07916259765625,59696700,0.0,0 -2019-08-29,281.8130799386555,283.20417935396387,280.7407606271434,282.64385986328125,57899400,0.0,0 -2019-08-30,284.2280980261434,284.24740819986994,281.5231996453738,282.5182189941406,62901200,0.0,0 -2019-09-03,280.7020922918931,281.67777209693855,279.44622330820584,280.8663024902344,69101400,0.0,0 -2019-09-04,283.1848914563834,284.07363146980936,282.38306199691425,284.0543212890625,46887300,0.0,0 -2019-09-05,286.7108825553499,288.6815819851615,284.01562399131217,287.7059020996094,83258100,0.0,0 -2019-09-06,288.0440195761339,288.61397936098126,287.319489928774,287.9280700683594,49584300,0.0,0 -2019-09-09,288.98107755855284,289.0776579260698,287.0683086864936,288.072998046875,51260300,0.0,0 -2019-09-10,287.2614713455819,288.0729704118953,285.91869186533137,288.0053405761719,57947100,0.0,0 -2019-09-11,288.33382602227385,290.140315266005,287.6382763661711,290.0533752441406,68821100,0.0,0 -2019-09-12,291.0193945994959,292.1882941205827,290.2079249705541,291.05804443359375,72908700,0.0,0 -2019-09-13,291.53143786612355,291.9082074721536,290.4687883786936,290.8648681640625,62104800,0.0,0 -2019-09-16,289.6572299669717,290.9130987881379,289.2804899574484,289.96636962890625,58191200,0.0,0 -2019-09-17,289.7538932247927,290.79720292472376,289.5703433592477,290.70062255859375,41475500,0.0,0 -2019-09-18,290.28521226846715,290.990431746691,288.1116233010123,290.87451171875,73375800,0.0,0 -2019-09-19,291.2898931475013,292.3525425079359,290.4977336714331,290.85516357421875,76560500,0.0,0 -2019-09-20,291.4995547909268,291.80043723394266,288.63659570498044,289.4809265136719,89565000,1.384,0 -2019-09-23,288.7724603931848,290.1796982012936,288.5007213922715,289.4129943847656,43476800,0.0,0 -2019-09-24,290.5776403597218,290.99494858447133,286.113330874898,287.1420593261719,94869400,0.0,0 -2019-09-25,287.22935846482795,289.3159288980625,285.64743769748725,288.84039306640625,71854000,0.0,0 -2019-09-26,288.8501286771311,289.0733248835009,286.7344442549152,288.23870849609375,56179700,0.0,0 -2019-09-27,289.0441920107594,289.16067696588664,285.02633477007737,286.6858825683594,84746600,0.0,0 -2019-09-30,287.2390532897808,288.7724311502273,287.19054010848146,288.01544189453125,51662400,0.0,0 -2019-10-01,288.956883496958,289.65564522085214,284.3567194247659,284.5896301269531,88242400,0.0,0 -2019-10-02,282.9009638579745,282.9106783428572,278.1843445087715,279.56243896484375,122539500,0.0,0 -2019-10-03,279.319791605972,281.8819275557079,276.4180041202906,281.8528137207031,85278800,0.0,0 -2019-10-04,282.55160153158243,285.93863965907235,282.49334423885097,285.6669006347656,65091200,0.0,0 -2019-10-07,284.8128356532726,286.5500401627699,284.1334733305576,284.434326171875,59610500,0.0,0 -2019-10-08,282.4545516085538,283.2406548606821,279.9797568815328,280.0185852050781,95708100,0.0,0 -2019-10-09,282.173084662263,283.6773489330484,281.5034367953117,282.677734375,62359400,0.0,0 -2019-10-10,282.59040095362633,285.5310170380697,282.4157179269859,284.5896301269531,55296300,0.0,0 -2019-10-11,287.53023302517585,289.92737094969397,287.4040928121642,287.5399475097656,98720400,0.0,0 -2019-10-14,287.2002670756926,287.9184577385611,286.85090103753856,287.2196960449219,40394800,0.0,0 -2019-10-15,288.33571215298,290.8590194436506,288.20954234584764,290.0632019042969,46754500,0.0,0 -2019-10-16,289.56829827214807,290.3350021422327,289.13159071374434,289.597412109375,48928200,0.0,0 -2019-10-17,290.83967144572597,291.38314952211533,289.7138869682526,290.45147705078125,45736600,0.0,0 -2019-10-18,289.8788458917521,290.56789307079663,288.26781123436433,289.1800842285156,64304000,0.0,0 -2019-10-21,290.5872791065818,291.35395319390096,290.12142819414095,291.14044189453125,39048600,0.0,0 -2019-10-22,291.71305551325656,292.0236228114956,290.09233610697805,290.18939208984375,48594700,0.0,0 -2019-10-23,289.91768256836036,291.09198011357694,289.6944567468189,291.03375244140625,34352200,0.0,0 -2019-10-24,292.0333865633568,292.1886702386739,290.6261486177117,291.5093078613281,35453100,0.0,0 -2019-10-25,290.89785631371734,293.2853092450756,290.8396286439115,292.7030029296875,45205400,0.0,0 -2019-10-28,294.00347820998826,294.8866373823915,293.9743643742972,294.35284423828125,42147000,0.0,0 -2019-10-29,294.0617060797125,295.2554325785126,293.9258217681756,294.2655029296875,44284900,0.0,0 -2019-10-30,294.4790140135277,295.5659700355771,293.08149066594126,295.1680908203125,49643900,0.0,0 -2019-10-31,295.1584069196841,295.1584069196841,292.8292109714703,294.3819885253906,69053800,0.0,0 -2019-11-01,295.9251186917832,297.15764405272404,295.7504060375914,297.109130859375,71141500,0.0,0 -2019-11-04,298.7686158431431,298.9141850097797,297.9048560922195,298.3027648925781,60606900,0.0,0 -2019-11-05,298.5163173974508,298.8365992255703,297.6622720122413,297.97283935546875,42933200,0.0,0 -2019-11-06,297.9727988164596,298.33187930063093,297.0314120472923,298.0407409667969,46487100,0.0,0 -2019-11-07,299.4674071932418,300.5155349144175,298.58424800485733,299.0888977050781,54272300,0.0,0 -2019-11-08,298.7201528891124,299.88476576815606,297.9728778890831,299.8265380859375,49032100,0.0,0 -2019-11-11,298.35128682749047,299.43824268546336,298.20568805370857,299.25384521484375,35797300,0.0,0 -2019-11-12,299.64204893143045,300.8454601524283,299.0597426699607,299.8846740722656,46484600,0.0,0 -2019-11-13,298.8268827699311,300.40880369564786,298.5842575878845,299.9817810058594,53917700,0.0,0 -2019-11-14,299.6808662523742,300.5057976244147,299.00150403602885,300.4184265136719,51219900,0.0,0 -2019-11-15,301.84510276783465,302.64092041233437,301.10754241052257,302.5924072265625,62023600,0.0,0 -2019-11-18,302.34007693530185,303.0679524483824,301.8548265932481,302.81561279296875,49228000,0.0,0 -2019-11-19,303.4561164069796,303.46583089039353,302.03919384294215,302.7282409667969,67804700,0.0,0 -2019-11-20,302.0974734068222,302.65066594455396,299.9429605490591,301.6025085449219,79406200,0.0,0 -2019-11-21,301.71895328315674,301.83540861929174,300.26320234681185,301.1172180175781,54664700,0.0,0 -2019-11-22,301.91306558439044,302.0586347689982,300.70965416852397,301.7868957519531,44850200,0.0,0 -2019-11-25,302.77681291238076,304.12579345703125,302.77681291238076,304.12579345703125,48647200,0.0,0 -2019-11-26,304.1646614162385,305.0089923793893,303.8249802103884,304.81488037109375,37569000,0.0,0 -2019-11-27,305.32922346238297,306.173583984375,305.0963127624305,306.173583984375,44444600,0.0,0 -2019-11-29,305.57181892784405,305.8338730571358,304.79543025862466,305.0380554199219,36592700,0.0,0 -2019-12-02,305.3097975411219,305.3777396951396,301.9907018863052,302.44683837890625,75767800,0.0,0 -2019-12-03,299.54498196217486,300.5057976244147,298.0698318222537,300.4184265136719,73941700,0.0,0 -2019-12-04,301.53459533038347,302.9126898117725,301.16580030604956,302.27215576171875,49080000,0.0,0 -2019-12-05,303.01943926110926,303.0388386125524,301.4180894384676,302.81561279296875,40709000,0.0,0 -2019-12-06,304.85363701720723,306.0085350751507,304.8439225338763,305.5815124511719,48927000,0.0,0 -2019-12-09,305.16423606783917,305.8823970932093,304.5431014165664,304.6207580566406,34838500,0.0,0 -2019-12-10,304.5625509210281,305.2709975098249,303.5823356909772,304.2810974121094,52649800,0.0,0 -2019-12-11,304.766326944773,305.4165754311216,304.1937350984247,305.14483642578125,53429100,0.0,0 -2019-12-12,305.1545082586967,308.60948815787896,304.90219823279847,307.7748718261719,96389600,0.0,0 -2019-12-13,307.52252191409787,309.2694407731909,306.69759047652576,307.9592590332031,81503900,0.0,0 -2019-12-16,309.8032121802673,310.7057706576791,307.89132475517164,310.074951171875,82749700,0.0,0 -2019-12-17,310.48262553564956,310.8028777644826,310.055602818983,310.1429443359375,61097700,0.0,0 -2019-12-18,310.5602318491834,310.8028570303156,310.10409532396164,310.1623229980469,48133000,0.0,0 -2019-12-19,310.3661285523784,311.511341948578,310.09438952659076,311.4336853027344,85310500,0.0,0 -2019-12-20,312.53569922400766,314.0083696681147,311.4921806621476,312.7990417480469,147142100,1.57,0 -2019-12-23,313.63779298464004,313.69630693742494,313.12089989307583,313.2769470214844,52990000,0.0,0 -2019-12-24,313.5207073793926,313.569459076759,312.9647951672985,313.2866516113281,20270000,0.0,0 -2019-12-26,313.6962668706267,314.9641384659025,313.6865343883699,314.9543762207031,30911200,0.0,0 -2019-12-27,315.73461760294754,315.79313155485687,314.3107285015766,314.8763732910156,42528800,0.0,0 -2019-12-30,314.96419554614846,315.1104804359374,312.62351825773356,313.1404113769531,49729100,0.0,0 -2019-12-31,312.6039632218848,314.1644045254851,312.23335506394864,313.90106201171875,57077300,0.0,0 -2020-01-02,315.5395710117542,316.8561944138564,314.55453658093904,316.836669921875,59151200,0.0,0 -2020-01-03,313.21840980262533,315.63709546887657,313.1598958541869,314.4375,77709700,0.0,0 -2020-01-06,312.56498417602006,315.7248864067375,312.4381940253842,315.6371154785156,55653900,0.0,0 -2020-01-07,315.0323802310774,315.539540766859,314.27166919034727,314.74957275390625,40496400,0.0,0 -2020-01-08,314.9543925082585,317.72416186034826,314.69107974074103,316.42706298828125,68296000,0.0,0 -2020-01-09,318.0947580215935,318.6506702727343,317.4705695789913,318.5726318359375,48473300,0.0,0 -2020-01-10,319.1968304540203,319.362610052348,317.15851523113554,317.6558837890625,53029300,0.0,0 -2020-01-13,318.3190929559576,319.85024761946664,317.8607138525909,319.84051513671875,47086800,0.0,0 -2020-01-14,319.3723694840367,320.4939264945821,318.75794327259655,319.3528747558594,62832800,0.0,0 -2020-01-15,319.25535988638006,320.8840477893748,319.16758896013596,320.0745849609375,72056600,0.0,0 -2020-01-16,321.5472273791711,322.73706054687494,321.3034093510592,322.737060546875,54050300,0.0,0 -2020-01-17,323.49782011891654,323.9659317548105,322.6688327464245,323.74163818359375,95846000,0.0,0 -2020-01-21,322.71759357128826,323.9659409071848,322.6395848840845,323.1076965332031,77742400,0.0,0 -2020-01-22,324.02440645438094,324.71687110349563,322.9808878838227,323.14666748046875,48914900,0.0,0 -2020-01-23,322.4542298964593,323.95615731397476,321.2643967044174,323.51727294921875,51963000,0.0,0 -2020-01-24,324.2194594582929,324.3072303757813,319.2650605207031,320.64019775390625,87578400,0.0,0 -2020-01-27,315.042200675856,317.0805161517614,314.6813546974684,315.5005798339844,84062500,0.0,0 -2020-01-28,317.0219674492371,319.7429851221418,315.59807842252127,318.8067321777344,63834000,0.0,0 -2020-01-29,320.2599152462082,320.50373331558217,318.32886542210485,318.5434265136719,53888900,0.0,0 -2020-01-30,316.33929840143503,319.8015328088434,315.5395977619218,319.57720947265625,75491800,0.0,0 -2020-01-31,318.9140270918076,319.07983647070193,312.79908077324035,313.77435302734375,113845600,0.0,0 -2020-02-03,315.35427572075275,318.0947882555932,315.2274855711142,316.105224609375,69083000,0.0,0 -2020-02-04,319.9575552394076,321.84958567331864,319.61620401954724,320.9230651855469,62573200,0.0,0 -2020-02-05,324.053712794015,324.8534432142078,322.4933009417682,324.6291198730469,65951100,0.0,0 -2020-02-06,325.653159346524,325.92623438498094,324.57059167635555,325.721435546875,50359700,0.0,0 -2020-02-07,324.5900765545177,325.7311282762224,323.4002433686814,323.98541259765625,64139400,0.0,0 -2020-02-10,323.039412117659,326.4723594470727,323.00039289717,326.4040832519531,42070000,0.0,0 -2020-02-11,327.8474960800644,328.68621585964496,326.40408255450296,326.9697570800781,54864500,0.0,0 -2020-02-12,328.5008877335763,329.30061799718834,328.1107848468936,329.0763244628906,43992700,0.0,0 -2020-02-13,327.5548812726131,329.75900579694235,327.26231154059735,328.7252197265625,54501900,0.0,0 -2020-02-14,329.164151675128,329.3787127639399,327.8865473890494,329.2519226074219,64582200,0.0,0 -2020-02-18,328.1888507951302,329.3201700954118,326.92097910344364,328.4034118652344,57226200,0.0,0 -2020-02-19,329.4371840063319,330.695263635711,329.13485202442433,329.97357177734375,48814700,0.0,0 -2020-02-20,329.38845515779536,330.2662240330376,325.42885202391244,328.6180114746094,74163400,0.0,0 -2020-02-21,327.17457738667963,327.50616637454027,324.3560263454442,325.2337951660156,113788200,0.0,0 -2020-02-24,315.1494933624793,325.3118136760255,313.2964522523599,314.4472961425781,161088400,0.0,0 -2020-02-25,315.9296538422726,316.5830694973033,303.98257033791947,304.9188232421875,218913200,0.0,0 -2020-02-26,306.41102470176514,310.2438374553743,303.0170963605923,303.79730224609375,194773800,0.0,0 -2020-02-27,297.9066245449798,303.85579065130236,290.1532287597656,290.1532287597656,284353500,0.0,0 -2020-02-28,281.56111756937986,290.52387215358164,278.47925361023044,288.9341735839844,384975800,0.0,0 -2020-03-02,290.83590301482917,301.5151450909119,287.1786324083549,301.4468688964844,238703600,0.0,0 -2020-03-03,301.8467655472551,306.0794435992073,290.2117745870386,292.81573486328125,300139100,0.0,0 -2020-03-04,298.5503020251495,305.3577122608297,295.82928442739245,305.1236267089844,176613400,0.0,0 -2020-03-05,297.43850929537945,300.8421995549829,292.5914055474934,294.9808044433594,186366800,0.0,0 -2020-03-06,285.90104084879493,291.39182812320394,283.0532626783845,290.1044616699219,228667200,0.0,0 -2020-03-09,268.492432237462,277.16261662330606,266.6882024275362,267.44891357421875,309417300,0.0,0 -2020-03-10,277.6014670083577,281.38549778517665,266.7369214428988,281.2879943847656,276444100,0.0,0 -2020-03-11,273.758935928018,274.9682640091057,264.18175516929153,267.57568359375,255316300,0.0,0 -2020-03-12,249.66967400090172,260.06607884139885,241.55540245276575,241.9747772216797,392220700,0.0,0 -2020-03-13,256.58438229563063,264.76693106596025,242.37467281903318,262.66033935546875,329566100,0.0,0 -2020-03-16,235.21613576084084,250.54741552524558,231.490603794865,233.91903686523438,297240000,0.0,0 -2020-03-17,238.98067634934978,249.83547480715055,231.20777115893475,246.54879760742188,262070500,0.0,0 -2020-03-18,230.40805220603943,242.22834624920506,222.38156634256302,234.06532287597656,327597100,0.0,0 -2020-03-19,233.33387599706967,241.26284381810098,226.4777135584991,234.56271362304688,289322000,0.0,0 -2020-03-20,237.92364496010447,239.826801082704,224.16011688045532,224.4544219970703,347158800,1.406,0 -2020-03-23,223.85601299878326,225.3177040006051,214.11460469212452,218.7155303955078,326025200,0.0,0 -2020-03-24,229.9676729198424,239.46382903257478,229.3594533334805,238.5318603515625,235494500,0.0,0 -2020-03-25,240.21920557699968,251.48117794658793,235.19645397764472,242.1027374267578,299430300,0.0,0 -2020-03-26,244.78090362795456,257.8086621669641,244.3198290786598,256.23907470703125,257632800,0.0,0 -2020-03-27,248.45965119980093,255.85643751605994,246.28181442618262,248.60679626464844,224341200,0.0,0 -2020-03-30,250.8434921781517,257.44566523559473,248.7147087396888,256.68048095703125,171369500,0.0,0 -2020-03-31,255.6112113367011,258.32859026596213,251.35364405269925,252.85458374023438,194881100,0.0,0 -2020-04-01,243.27012876564996,252.76628497690646,239.26761812807703,241.47488403320312,189554600,0.0,0 -2020-04-02,240.53311112410248,247.88084404724194,239.94450093064017,247.0469970703125,177660400,0.0,0 -2020-04-03,245.9973309340812,248.50872164244254,240.5625582764185,243.4761505126953,135561200,0.0,0 -2020-04-06,252.94283996469383,261.92886763025683,243.45650412057958,259.8294982910156,188061200,0.0,0 -2020-04-07,269.00195282495207,269.80638584497115,259.85898925908833,260.09442138671875,201427200,0.0,0 -2020-04-08,262.8706580471995,270.7579636312611,260.21213714924636,268.82537841796875,153774500,0.0,0 -2020-04-09,272.3079491548729,275.85922015486074,270.2380384566057,272.91619873046875,189999200,0.0,0 -2020-04-13,271.87630917582237,272.239276995542,266.25512798163066,270.4244079589844,114839100,0.0,0 -2020-04-14,275.6433665325658,279.48889733140317,270.27725687188524,278.3999938964844,134143400,0.0,0 -2020-04-15,272.29813385349087,278.5471439673248,270.2281934117733,272.4845275878906,121775000,0.0,0 -2020-04-16,273.8481411657386,274.7114322516927,270.52254248003186,273.7991027832031,131798300,0.0,0 -2020-04-17,279.9597834120126,281.843300093228,277.036371764303,281.19586181640625,146684800,0.0,0 -2020-04-20,277.24240725420157,281.3430397603875,276.00635864330656,276.2417907714844,100109300,0.0,0 -2020-04-21,271.4740746763567,272.7591914361182,266.8535102056844,267.8541564941406,126385700,0.0,0 -2020-04-22,273.06334741739624,275.66301038898814,271.65069472000994,273.7991027832031,92951600,0.0,0 -2020-04-23,275.16264240058206,278.5471285079392,273.45569980971896,273.7794189453125,104709700,0.0,0 -2020-04-24,275.3981347247383,278.31172701734033,273.2104781080029,277.5955810546875,85063200,0.0,0 -2020-04-27,279.7047166159488,282.79488273985044,279.21421310618797,281.5980529785156,77896600,0.0,0 -2020-04-28,285.49263639704327,285.86542383410415,279.97938203955994,280.3031311035156,105270000,0.0,0 -2020-04-29,285.9929373390306,289.2793164069132,284.8942144127073,287.6410217285156,118745600,0.0,0 -2020-04-30,286.16957122640184,287.7490082166862,283.1088338808608,284.96295166015625,122901700,0.0,0 -2020-05-01,279.8911334633807,285.1395274389247,276.17310816966057,277.41900634765625,125180000,0.0,0 -2020-05-04,275.407876681854,278.5078621814683,273.8284698905645,278.18414306640625,80873200,0.0,0 -2020-05-05,281.1958902201207,283.756304387327,278.3215166570548,280.7544250488281,79569900,0.0,0 -2020-05-06,282.56928247117037,282.9812886718801,278.39018280764185,278.85125732421875,73632600,0.0,0 -2020-05-07,282.28480317286073,284.27624645993274,281.67658353906955,282.21612548828125,75250400,0.0,0 -2020-05-08,285.5613461298709,287.3860348587758,284.3546966488538,286.8857116699219,76452400,0.0,0 -2020-05-11,284.8256011249927,288.41609074519226,284.37434623638785,286.944580078125,79514200,0.0,0 -2020-05-12,288.2100768611455,288.6515120819882,281.07813626772264,281.2253112792969,95870800,0.0,0 -2020-05-13,280.6268699054825,281.7354126445861,273.66171397265657,276.2515869140625,144721100,0.0,0 -2020-05-14,273.651934870671,279.69491209234354,267.8051111627781,279.5575866699219,121977900,0.0,0 -2020-05-15,277.00697103496844,280.8917507823361,275.9965349158463,280.84271240234375,111146300,0.0,0 -2020-05-18,287.4840885890301,291.11382645429194,287.1407600903347,289.3970642089844,119703800,0.0,0 -2020-05-19,288.75942308585996,290.58408177765034,286.4050122192446,286.42462158203125,95189300,0.0,0 -2020-05-20,290.2015018588968,292.21255426097423,289.9562501055723,291.2904052734375,85861700,0.0,0 -2020-05-21,291.15308493074764,292.0163759075603,288.1119571489608,289.27935791015625,78293900,0.0,0 -2020-05-22,288.9752639783807,290.01512909259765,287.6508984271165,289.8287353515625,63958200,0.0,0 -2020-05-26,296.1954426476647,296.4505140532561,289.84832602465684,293.3995666503906,88951400,0.0,0 -2020-05-27,296.3818521180462,297.80432434914434,291.23156498456405,297.76507568359375,104817400,0.0,0 -2020-05-28,298.8637828517603,301.01219062200846,296.49955233945195,297.2156982421875,90405200,0.0,0 -2020-05-29,296.7154112491019,299.16792909965847,293.78220947998415,298.54010009765625,119090800,0.0,0 -2020-06-01,297.85336760469585,300.3941723729286,297.3040060298326,299.7467041015625,55758300,0.0,0 -2020-06-02,300.7276981117738,302.27770601041016,299.30525585720767,302.2286376953125,74267200,0.0,0 -2020-06-03,304.34760693418633,307.2710186182873,304.0533168046949,306.2507629394531,92567600,0.0,0 -2020-06-04,305.2011288206996,307.0552467576052,303.2096854465953,305.4463806152344,75794400,0.0,0 -2020-06-05,311.20483950164913,315.1680859475974,311.1361618313691,313.2747497558594,150524700,0.0,0 -2020-06-08,314.13808111126843,317.2674960193427,313.5592905399703,317.0614929199219,73641200,0.0,0 -2020-06-09,314.2165518040222,317.1399636433862,313.29440276536235,314.697265625,77479200,0.0,0 -2020-06-10,315.3153346806508,316.26691282379403,312.17609979206446,312.9412841796875,95000800,0.0,0 -2020-06-11,305.54444509473706,306.22134234914375,294.31193242014064,294.9005126953125,209243600,0.0,0 -2020-06-12,302.3856168116949,303.2096591773836,292.9287240014907,298.4321594238281,194678900,0.0,0 -2020-06-15,292.3596786596257,302.4248194847437,291.1039909688823,301.2181701660156,135782700,0.0,0 -2020-06-16,309.4881176414586,309.6450823633982,301.8264549084168,307.0159606933594,137627500,0.0,0 -2020-06-17,308.104922964097,308.41885243738983,304.9558684554398,305.7406921386719,83398900,0.0,0 -2020-06-18,304.1219962697921,306.3684807933604,303.63149275911553,305.8583679199219,80828700,0.0,0 -2020-06-19,309.55925309344263,309.7661627131124,302.0313633295862,304.11041259765625,135549600,1.366,0 -2020-06-22,303.46996362396993,306.485053001028,302.24817134743034,306.0613708496094,74649400,0.0,0 -2020-06-23,308.8892058553746,309.88439270066056,307.0367919559004,307.4703369140625,68471200,0.0,0 -2020-06-24,305.29277965721644,305.95295995730146,297.6663816417867,299.6271667480469,132813500,0.0,0 -2020-06-25,299.0162933096727,303.1251078653027,296.8584312154481,302.83935546875,89468000,0.0,0 -2020-06-26,301.66679912725874,301.89343447211024,295.02572499663245,295.6464538574219,127961000,0.0,0 -2020-06-29,296.9865036331724,300.1395223189962,294.54288934415524,299.9917297363281,79773300,0.0,0 -2020-06-30,299.5286720629897,305.6475565483558,299.3611838002569,303.83453369140625,113394800,0.0,0 -2020-07-01,305.02678973396564,307.3127488692916,304.53412768254395,305.96282958984375,72396500,0.0,0 -2020-07-02,309.62818575313406,311.0667803579012,306.9382706374605,307.647705078125,69344200,0.0,0 -2020-07-06,311.72698998261825,313.0177621864543,310.9288798434435,312.3970031738281,61713800,0.0,0 -2020-07-07,310.7514816575032,312.8600593386887,308.7709708351823,309.1749572753906,82910000,0.0,0 -2020-07-08,309.9927983620726,311.6579984842647,308.1108558064095,311.5397644042969,54638600,0.0,0 -2020-07-09,312.1900630181532,312.44625688904705,306.12046336629885,309.76617431640625,83354200,0.0,0 -2020-07-10,309.6972153049008,313.2148295568068,308.1699749785745,312.9290771484375,57550400,0.0,0 -2020-07-13,315.43176301876105,317.97388559596953,309.51981927951243,310.2193908691406,102997500,0.0,0 -2020-07-14,308.7020165029715,315.0672315917454,307.4211072506421,314.23956298828125,93657000,0.0,0 -2020-07-15,317.67830489673975,318.29906380922773,314.58437319630787,317.12652587890625,87196500,0.0,0 -2020-07-16,315.096768291685,316.56489141965255,314.4070294683744,316.08209228515625,54622500,0.0,0 -2020-07-17,317.15609905442665,317.8359750309854,315.0474912269076,316.9984436035156,62774900,0.0,0 -2020-07-20,316.7127017997887,320.3584128083537,315.91459172580994,319.560302734375,56308800,0.0,0 -2020-07-21,321.65907300463266,322.1320093405656,319.18589982572803,320.2402038574219,57292200,0.0,0 -2020-07-22,319.8558721430427,322.39802490266555,319.7376380741676,322.06298828125,57792900,0.0,0 -2020-07-23,321.67874238384,322.42759828083376,316.76198501838684,318.2202453613281,75738000,0.0,0 -2020-07-24,316.23978678955643,317.2645022191382,314.5647237658965,316.1708068847656,73766600,0.0,0 -2020-07-27,316.9097787996052,318.66365440463795,316.0623844809289,318.4764404296875,48293000,0.0,0 -2020-07-28,317.69803084239607,318.89029461041184,316.1412320514382,316.45654296875,57495000,0.0,0 -2020-07-29,317.39256919341244,320.9496045495029,317.35314781301093,320.3485412597656,48454200,0.0,0 -2020-07-30,317.17583162040575,319.6490048104725,314.94901953269056,319.2055969238281,61861700,0.0,0 -2020-07-31,321.1170702688856,321.83636757966815,316.6141325869457,321.72796630859375,84986800,0.0,0 -2020-08-03,323.50161814643826,324.78252745812915,322.9202805314582,323.9647216796875,53077900,0.0,0 -2020-08-04,323.04833944248503,325.216064453125,323.04833944248503,325.216064453125,41917900,0.0,0 -2020-08-05,326.60533968777963,327.5118509768131,326.319587315083,327.2359313964844,42697700,0.0,0 -2020-08-06,326.61522092611705,329.5514672966303,326.2703515010042,329.4233703613281,43679400,0.0,0 -2020-08-07,328.38883552082956,329.9653601940298,327.42320701693893,329.659912109375,57308300,0.0,0 -2020-08-10,330.1426777428928,330.8422494072574,328.07349119916097,330.64520263671875,44282100,0.0,0 -2020-08-11,331.90641297246236,332.58628897400536,327.1374481685387,327.91583251953125,69601100,0.0,0 -2020-08-12,330.5170839397103,333.31540048266055,330.4875254225901,332.48773193359375,53774400,0.0,0 -2020-08-13,331.66991573752233,333.2858616212651,330.9013641773701,331.8866882324219,41816100,0.0,0 -2020-08-14,331.47286329047023,332.46805019133103,330.69444888079585,331.89654541015625,47260400,0.0,0 -2020-08-17,332.9804252191162,333.37454884098463,331.9064255699003,332.95086669921875,35481000,0.0,0 -2020-08-18,333.3745507452565,334.12340667987735,331.6699292355502,333.670166015625,38733900,0.0,0 -2020-08-19,334.0740895777421,334.6258686111842,331.67975947873055,332.28082275390625,68054200,0.0,0 -2020-08-20,330.4382701336667,333.8277873857093,330.30034039825466,333.3154296875,42207800,0.0,0 -2020-08-21,332.9607300755044,334.7343014114976,332.5961349032668,334.4978332519531,55106600,0.0,0 -2020-08-24,337.0990822832813,337.96617231787366,334.4682837284718,337.8873596191406,48588700,0.0,0 -2020-08-25,338.4883645760912,339.15837770323236,337.2468466695566,339.0697021484375,38463400,0.0,0 -2020-08-26,339.70032753122456,342.75480801635297,339.11898995277426,342.4690856933594,50790200,0.0,0 -2020-08-27,343.3953072140425,344.7648920588511,341.4443546965106,343.2179260253906,58034100,0.0,0 -2020-08-28,344.31165218027223,345.5728658118236,343.0405756855221,345.4349060058594,48588900,0.0,0 -2020-08-31,345.20827812020474,346.1443179019907,343.93720170863116,344.18353271484375,66099200,0.0,0 -2020-09-01,345.07032356256684,347.5336336620934,344.11455804116235,347.4252624511719,54908700,0.0,0 -2020-09-02,349.4649086595517,353.48501772101184,348.243086339054,352.450439453125,69540000,0.0,0 -2020-09-03,350.647283299371,351.1498082135989,337.5621804301448,340.32110595703125,148011100,0.0,0 -2020-09-04,341.0502009861614,342.7252337446103,329.95544312206727,337.5424499511719,139156300,0.0,0 -2020-09-08,331.7684276179883,337.6114216500247,327.9946500196835,328.3197937011719,114465300,0.0,0 -2020-09-09,332.59613726440455,337.43408219412936,331.66993020667365,334.80328369140625,91462300,0.0,0 -2020-09-10,336.8034808223932,337.5030524925724,327.9651227117506,328.9898681640625,90569500,0.0,0 -2020-09-11,330.891528577298,332.0246452170547,326.1422594555071,329.1573486328125,84680200,0.0,0 -2020-09-14,332.5370322391455,335.384633418818,329.31503314724387,333.4927978515625,65605700,0.0,0 -2020-09-15,336.11374368694413,337.00052934059323,333.50264090187017,335.1777038574219,52920900,0.0,0 -2020-09-16,336.49799701680286,338.02523713515967,333.55185791311624,333.84747314453125,82096000,0.0,0 -2020-09-17,328.6646867406648,332.7439427290615,328.10304481709653,330.9112243652344,91523300,0.0,0 -2020-09-18,331.77087920380495,331.88958656018474,324.45030038970583,327.1015319824219,105877900,1.339,0 -2020-09-21,322.20466928971535,323.61931558974044,318.2772732735822,323.4610290527344,99450800,0.0,0 -2020-09-22,325.04389520738874,327.34887708141235,322.36295635583804,326.75531005859375,63612100,0.0,0 -2020-09-23,327.3488872174343,327.64568583307016,318.64333791344586,319.17755126953125,93112200,0.0,0 -2020-09-24,317.7727593155621,323.2928630552864,316.3679850689975,320.0282897949219,76681300,0.0,0 -2020-09-25,319.1181248146024,326.043002261089,318.1882404752242,325.2021484375,71069400,0.0,0 -2020-09-28,329.64398519845355,331.36530238519066,328.58546086841676,330.60357666015625,64584600,0.0,0 -2020-09-29,330.38593590657734,331.1773384718609,328.0611493597069,328.8031005859375,51304000,0.0,0 -2020-09-30,329.5153501027799,334.6595569591169,329.3076122283333,331.2960510253906,104081100,0.0,0 -2020-10-01,334.065991946112,335.10471151451344,331.41476032785135,333.4229736328125,88698700,0.0,0 -2020-10-02,328.1403057647572,333.3933179997991,327.63576927311925,330.25732421875,89431100,0.0,0 -2020-10-05,332.4534651561859,336.3116050549942,332.4040138227672,336.11376953125,45713100,0.0,0 -2020-10-06,336.2621994433775,338.4979555151759,330.79154682235594,331.33563232421875,90128900,0.0,0 -2020-10-07,334.49140547642617,337.9637470022001,334.4617286339013,337.10308837890625,56999600,0.0,0 -2020-10-08,339.1706249816913,340.15989323003214,338.19122888658546,340.09063720703125,45242500,0.0,0 -2020-10-09,341.8515210995184,343.62231965312964,341.1887283035763,343.127685546875,59528600,0.0,0 -2020-10-12,345.8383087394127,350.2207601561271,345.3139977368495,348.6478271484375,80388500,0.0,0 -2020-10-13,348.4994182602636,348.6873816431623,345.3436501243173,346.37249755859375,73255500,0.0,0 -2020-10-14,346.9858497566436,348.1531790832653,343.414605751452,344.19610595703125,57727900,0.0,0 -2020-10-15,340.02135608034916,344.2850995007018,339.4475938223034,343.77069091796875,60357700,0.0,0 -2020-10-16,345.2150493969607,346.98584806554027,343.3750248934642,343.56298828125,89501900,0.0,0 -2020-10-19,344.90835534181844,345.58105047893014,337.38003875575237,338.3396301269531,68425600,0.0,0 -2020-10-20,339.7740744677079,343.1573852636833,338.9628974238229,339.6949462890625,60051900,0.0,0 -2020-10-21,339.6454777556973,341.96039218313126,338.7254654671449,339.05194091796875,63575000,0.0,0 -2020-10-22,339.27942609351965,341.5349564661785,336.99421888135487,340.9117126464844,55399300,0.0,0 -2020-10-23,342.2175675530305,342.27692123439897,339.4476284555958,342.0691833496094,49143900,0.0,0 -2020-10-26,338.45838837625956,339.29927251912926,332.0182417006067,335.747802734375,91473000,0.0,0 -2020-10-27,336.1138136956006,336.46993579917506,334.36278944947304,334.59033203125,65994100,0.0,0 -2020-10-28,328.53597940123024,334.61997286994244,322.63004696514685,323.15435791015625,127094300,0.0,0 -2020-10-29,323.40169041765375,329.8220317626079,321.60121493929176,326.4387512207031,90597700,0.0,0 -2020-10-30,324.75699220823026,326.1518641163939,319.13795558092835,323.0356750488281,120287300,0.0,0 -2020-11-02,326.6564025878906,328.79319553457486,323.7281467022949,326.6564025878906,86068300,0.0,0 -2020-11-03,330.1089136034495,334.6199742558167,326.74540770511527,332.4237976074219,93294200,0.0,0 -2020-11-04,337.2019789726345,344.20601545815225,335.9456190973562,339.8532409667969,126959700,0.0,0 -2020-11-05,345.49205493216294,348.4104085227646,345.1161281439419,346.4813232421875,82039700,0.0,0 -2020-11-06,346.1746180874066,347.73767876838974,343.9190877722497,346.40216064453125,74973000,0.0,0 -2020-11-09,360.0639615846726,360.469565184827,350.2603097289417,350.75494384765625,172304200,0.0,0 -2020-11-10,349.6964543696119,351.36832027236045,346.7484540505035,350.2405700683594,85552000,0.0,0 -2020-11-11,352.5752244224408,353.7227793003958,351.24960849189097,352.84234619140625,58649000,0.0,0 -2020-11-12,351.7639945390848,352.8917748465008,347.49037860116624,349.41943359375,67546200,0.0,0 -2020-11-13,351.4573422963045,355.04839109887246,350.9033544568526,354.2569885253906,62892200,0.0,0 -2020-11-16,357.1060527494804,358.886723468582,355.7309554331188,358.6789855957031,74541100,0.0,0 -2020-11-17,356.10689012825446,358.0359752753589,354.4943780640718,356.7499084472656,66111000,0.0,0 -2020-11-18,357.03679864495183,357.62046327479106,352.416902751381,352.45648193359375,70591300,0.0,0 -2020-11-19,351.7838015946351,354.3361004384954,350.34935053222546,353.9403991699219,59940900,0.0,0 -2020-11-20,353.66341861817114,353.881058852616,351.43756493456027,351.5166931152344,70417300,0.0,0 -2020-11-23,353.4457487802955,354.9692302938078,351.0616087449511,353.6238098144531,63230600,0.0,0 -2020-11-24,356.3443143370891,359.9056861396439,355.43420443703553,359.322021484375,62415900,0.0,0 -2020-11-25,359.2330237422052,359.2627005853481,357.6007369891963,358.76806640625,45330900,0.0,0 -2020-11-27,359.93540114858024,360.2717487725343,358.6889133379873,359.7672424316406,28514100,0.0,0 -2020-11-30,358.9362252794399,359.2231215566645,355.31552965410594,358.17449951171875,83872700,0.0,0 -2020-12-01,361.64679687000694,363.7341383601376,361.0136507067003,362.0919494628906,74231400,0.0,0 -2020-12-02,360.9048391301993,363.0218574213661,360.29149766444135,362.85369873046875,45927000,0.0,0 -2020-12-03,362.7448889160538,364.2386936930658,361.5775595808084,362.7547912597656,62882000,0.0,0 -2020-12-04,363.3780422799781,365.88088989257807,363.2791094111255,365.8808898925781,50749900,0.0,0 -2020-12-07,365.05974178283554,365.65330874326764,363.77370519362404,365.1289978027344,48944300,0.0,0 -2020-12-08,363.77372939333094,366.800887883837,363.7242780558676,366.19744873046875,42458900,0.0,0 -2020-12-09,366.8998360233274,367.0679947297608,362.02275049559216,362.9130859375,74098300,0.0,0 -2020-12-10,361.44895197905737,363.91222037186634,360.5190373668981,362.79437255859375,57735400,0.0,0 -2020-12-11,360.98398797077584,362.8042379762932,359.36160369654,362.36895751953125,57698600,0.0,0 -2020-12-14,364.68388073509976,365.8314053962508,360.5586186389762,360.74658203125,69216200,0.0,0 -2020-12-15,363.4571572944864,365.6236572265625,361.9930595727679,365.6236572265625,63865300,0.0,0 -2020-12-16,365.8511987980102,367.1768146567878,364.91138186563313,366.19744873046875,58420500,0.0,0 -2020-12-17,367.9484403372163,368.4628489658047,367.06797709147696,368.2452087402344,64119500,0.0,0 -2020-12-18,368.5532188862956,368.7320389521145,364.6289400800548,366.7748718261719,136542300,1.58,0 -2020-12-21,362.59228356697605,375.9943888030728,359.67143474280834,365.46343994140625,96386700,0.0,0 -2020-12-22,365.8111549431686,365.93036830897773,363.6453646142756,364.84747314453125,47949000,0.0,0 -2020-12-23,365.88071999074316,367.2119864904647,364.82762812799683,365.17535400390625,46201400,0.0,0 -2020-12-24,365.68201909405826,366.62584216161036,365.05614888578714,366.5960388183594,26457900,0.0,0 -2020-12-28,369.31817017712484,370.16263864174135,368.65255208671476,369.7453918457031,39000400,0.0,0 -2020-12-29,371.37470485804255,371.563469473918,368.4141080100467,369.0400085449219,53680500,0.0,0 -2020-12-30,369.91428473010353,370.6693432024787,369.14931202224545,369.5665588378906,49455300,0.0,0 -2020-12-31,369.35791944056797,372.2191616133234,368.8115147184322,371.4442443847656,78520700,0.0,0 -2021-01-04,372.86490227937304,373.0040047507885,362.4432529518963,366.38739013671875,110210800,0.0,0 -2021-01-05,365.70189000424693,370.07321860319024,365.6521975554599,368.91082763671875,66426200,0.0,0 -2021-01-06,367.3014144133991,374.52407141039185,366.7152617683135,371.11639404296875,107997700,0.0,0 -2021-01-07,373.64979339463497,377.42502506361325,373.4610287793098,376.6302490234375,68766800,0.0,0 -2021-01-08,378.1105356454251,379.00466627826285,374.6432819350956,378.77618408203125,71677200,0.0,0 -2021-01-11,375.3884069383176,378.10060226075467,375.2592490051037,376.2229309082031,51034700,0.0,0 -2021-01-12,376.42161185261426,377.38526336467356,373.90806525823467,376.3023681640625,52547700,0.0,0 -2021-01-13,376.2228951308927,378.37874093506036,375.38837124036706,377.31573486328125,45303600,0.0,0 -2021-01-14,378.1105130051827,378.6470034802669,375.6367446614096,375.994384765625,49989100,0.0,0 -2021-01-15,374.2657243022502,375.1201069722675,371.2654100849953,373.25238037109375,107160000,0.0,0 -2021-01-19,375.8751885161074,376.7594049008451,374.2955506796921,376.18316650390625,51233300,0.0,0 -2021-01-20,378.62712019558325,382.283168678987,378.20987340091546,381.3890380859375,61836100,0.0,0 -2021-01-21,381.98512667878754,382.44215171445364,380.7532146946304,381.73675537109375,47840100,0.0,0 -2021-01-22,379.7597195870754,381.62747662335846,379.35238701479983,380.3856201171875,52860500,0.0,0 -2021-01-25,381.1704926422267,382.2633021433925,375.994412749373,381.88580322265625,70402000,0.0,0 -2021-01-26,382.89914458423044,383.3362805091639,381.041332062645,381.2897033691406,42665300,0.0,0 -2021-01-27,377.74294122245163,377.84229580548487,369.586436278746,371.9707946777344,123351100,0.0,0 -2021-01-28,373.9080846826603,379.4418046617425,373.44117573297933,375.1698303222656,94198100,0.0,0 -2021-01-29,373.1828636149903,374.2160967484805,365.87079652079063,367.6590881347656,126765100,0.0,0 -2021-02-01,371.285303537766,374.88171524037773,367.9670664884292,373.7789611816406,75817600,0.0,0 -2021-02-02,377.1766541829316,380.7234036616752,373.86836177151724,379.06427001953125,64450700,0.0,0 -2021-02-03,379.94848784335767,381.2002889155806,378.0012653122708,379.3623352050781,52427100,0.0,0 -2021-02-04,380.4650737214778,383.72370387923917,379.4815331012843,383.6740417480469,47142600,0.0,0 -2021-02-05,385.6709714370589,385.93920152955207,383.62439432578066,385.18414306640625,48669800,0.0,0 -2021-02-08,386.73396961091925,388.01557399730854,385.8199802131739,387.9659118652344,38365200,0.0,0 -2021-02-09,387.07173551612374,388.3434256166888,386.6346299425054,387.70758056640625,35551100,0.0,0 -2021-02-10,389.56541460102875,389.72437587243417,384.9755177947106,387.5386962890625,59154400,0.0,0 -2021-02-11,388.6911272248447,389.13820767771745,385.5715995646975,388.1645812988281,42913300,0.0,0 -2021-02-12,387.31019913965724,390.3403167771432,387.230703347643,390.08203125,50593300,0.0,0 -2021-02-16,391.39339060273454,391.6020443080903,388.9792290301316,389.74420166015625,50972400,0.0,0 -2021-02-17,387.8765121072332,390.1019092932934,386.79358653922645,389.83367919921875,52290600,0.0,0 -2021-02-18,387.05188692695725,388.96930604433226,385.2139332835811,388.1745300292969,59712800,0.0,0 -2021-02-19,389.5157625538972,389.82374055060643,387.0121603628889,387.4890441894531,83241000,0.0,0 -2021-02-22,384.53834826273555,387.08166774536755,384.2204257477166,384.508544921875,67414200,0.0,0 -2021-02-23,382.15400020610656,386.4160599751289,377.72306494063423,384.9754943847656,107284100,0.0,0 -2021-02-24,383.8131200268697,389.67470690157234,382.76002815120546,389.2176818847656,72433900,0.0,0 -2021-02-25,387.8665806918066,389.32700522432026,378.2993128684785,379.8392028808594,146670500,0.0,0 -2021-02-26,381.8460456383999,383.0680130398475,375.76592101835513,377.88201904296875,152701600,0.0,0 -2021-03-01,383.0779351083503,388.3732279330125,378.0906505732534,387.04193115234375,105348800,0.0,0 -2021-03-02,387.2804198946143,387.52879120228073,383.4852990369681,384.02178955078125,79595300,0.0,0 -2021-03-03,383.2766757549318,384.3098785656574,378.8258510053181,378.9351501464844,119940200,0.0,0 -2021-03-04,378.7364222341196,381.49830982688667,369.4572742739774,374.2458801269531,183433000,0.0,0 -2021-03-05,377.9813758376478,382.25338044694064,370.21234451036435,381.1307373046875,152039600,0.0,0 -2021-03-08,382.15403382852435,385.1543483210763,378.9351513716961,379.2331848144531,123149200,0.0,0 -2021-03-09,383.33626683253493,387.369814280615,382.7997763403915,384.6476745605469,113633600,0.0,0 -2021-03-10,387.1512302845303,388.8500814007046,385.64114377223774,387.04193115234375,109899400,0.0,0 -2021-03-11,389.6746984498204,393.0724007466626,389.1878701006298,390.9662170410156,86245000,0.0,0 -2021-03-12,389.51574152915816,391.64178404712874,388.65141427415904,391.4927673339844,64653600,0.0,0 -2021-03-15,391.7609875140465,394.10562824370584,389.4759837868989,393.82745361328125,73427200,0.0,0 -2021-03-16,394.48319604157007,395.23822421585874,392.5061397745664,393.33074951171875,73722500,0.0,0 -2021-03-17,391.9597105533942,395.5263187450174,390.73771285570234,394.67193603515625,97959300,0.0,0 -2021-03-18,391.91005153911584,394.13544867902687,388.2043408384944,388.9295959472656,115349100,0.0,0 -2021-03-19,388.6086504993499,390.29314203487473,385.88754176856423,388.2099609375,113624500,1.278,0 -2021-03-22,388.7581343752593,392.7849686949258,388.6983324651012,391.3097839355469,73778600,0.0,0 -2021-03-23,390.63203385575355,392.17696733119755,387.3926317017688,388.2298889160156,90686600,0.0,0 -2021-03-24,389.7249800858464,391.46927347497746,386.2064923519218,386.2563171386719,97588600,0.0,0 -2021-03-25,384.7213591602085,389.2764336157188,382.6481248498714,388.4292297363281,116128600,0.0,0 -2021-03-26,389.6552006238771,395.1173417240859,389.017303431085,394.6887512207031,114409100,0.0,0 -2021-03-29,393.1139055384738,395.4562485701391,391.52909397698045,394.4894104003906,108107600,0.0,0 -2021-03-30,393.13385388493947,394.1604939534358,391.73839479388033,393.4428405761719,76262200,0.0,0 -2021-03-31,394.0508356721947,396.7021653521025,394.0209347156495,395.03759765625,112734200,0.0,0 -2021-04-01,397.10083458386333,399.3634517128567,396.8815507744028,399.3036193847656,99682900,0.0,0 -2021-04-05,402.1443443174063,405.61300729751275,402.0646185742367,405.0348815917969,91684800,0.0,0 -2021-04-06,404.43687333345997,405.91202775718347,404.07803143440304,404.7956848144531,62021000,0.0,0 -2021-04-07,404.61625533506924,405.6329182229658,404.1278629307947,405.2641296386719,55836300,0.0,0 -2021-04-08,406.59976328967423,407.24763760437395,405.6030242153478,407.1878356933594,57863100,0.0,0 -2021-04-09,407.0582959638626,410.32759899766353,406.9287150138724,410.1481628417969,61104600,0.0,0 -2021-04-12,409.5102665661528,410.58673141348424,408.86239223279176,410.2976989746094,56704900,0.0,0 -2021-04-13,410.18802231506163,412.18150042616793,409.77935565211743,411.513671875,56551000,0.0,0 -2021-04-14,411.4837812648366,412.61010129281743,409.5301811838959,410.1083068847656,61659900,0.0,0 -2021-04-15,412.3908263438138,414.8029483546959,412.34100155593717,414.5138854980469,60229800,0.0,0 -2021-04-16,415.8893759028891,416.5472273375884,414.3743434708334,415.89935302734375,82037300,0.0,0 -2021-04-19,414.9026123339885,415.38102761694057,412.44066563025666,413.85601806640625,78498500,0.0,0 -2021-04-20,412.56027451004616,413.7364193191423,409.2510934780912,410.8259582519531,81851800,0.0,0 -2021-04-21,410.16809865657467,414.9325101273956,410.0185634637294,414.7132263183594,66793000,0.0,0 -2021-04-22,414.5338498506027,415.42093185564414,409.78936187548504,410.9256286621094,97582800,0.0,0 -2021-04-23,411.5236670333282,416.88612825409047,411.4439412893375,415.38104248046875,73209200,0.0,0 -2021-04-26,416.07877085061153,416.85622612911084,415.45082035296537,416.2481994628906,52182400,0.0,0 -2021-04-27,416.56717499198413,416.7765121091303,414.94248535219776,416.15850830078125,51303100,0.0,0 -2021-04-28,416.44754606110035,417.6436451055983,415.54050986233415,416.03887939453125,51238900,0.0,0 -2021-04-29,418.9493779593755,419.34806750828966,415.0820254569766,418.6902160644531,78544300,0.0,0 -2021-04-30,416.2681499173161,417.1751861369732,414.98234797757567,415.939208984375,85527000,0.0,0 -2021-05-03,418.0622733361526,418.4709400172454,416.3080332047567,416.8363037109375,68128300,0.0,0 -2021-05-04,414.7132542452733,415.2415247637895,410.32760818728076,414.26470947265625,101591200,0.0,0 -2021-05-05,416.0189767339039,416.2681615126828,413.7962375566928,414.394287109375,60162200,0.0,0 -2021-05-06,414.474005334694,417.84298834955086,412.3310223596888,417.7034606933594,74321400,0.0,0 -2021-05-07,418.5207910529736,421.44122928600495,417.793160566854,420.7434997558594,67733800,0.0,0 -2021-05-10,421.1222763715203,421.36148402550117,416.44756748557234,416.5771484375,81852400,0.0,0 -2021-05-11,411.75291767546656,413.91582443257477,408.7228223725479,412.8592834472656,116888000,0.0,0 -2021-05-12,409.88904170858723,411.2445923191875,402.68260687757703,404.0880126953125,134811000,0.0,0 -2021-05-13,405.7425842274601,411.0053653483582,405.6927290226677,408.9421081542969,106394000,0.0,0 -2021-05-14,411.8625517435864,416.1285938411969,411.8326507875449,415.2215576171875,82201600,0.0,0 -2021-05-17,414.0354580166412,415.0321970893583,412.0120484976854,414.1650085449219,65129200,0.0,0 -2021-05-18,414.44410855774674,414.7032704593686,410.4272511729261,410.5967102050781,59810200,0.0,0 -2021-05-19,405.59307865736986,409.7095854948221,404.008236756808,409.52020263671875,106467100,0.0,0 -2021-05-20,410.45714875296113,415.2714156346834,410.32759822127946,413.9258117675781,78022200,0.0,0 -2021-05-21,415.51061317621054,416.83629317959014,413.09852164970886,413.5869140625,76578700,0.0,0 -2021-05-24,415.97908156367066,418.9493749551978,415.7199196706066,417.8031311035156,51376700,0.0,0 -2021-05-25,418.95934077786626,419.3381065102229,416.25818628067697,416.87615966796875,57451400,0.0,0 -2021-05-26,417.50410070672774,418.2416779047509,416.39773490969304,417.7034606933594,43088600,0.0,0 -2021-05-27,418.79986473294304,419.3480590493842,417.6236895229869,417.9227294921875,56707700,0.0,0 -2021-05-28,419.5972481220444,419.8763338453259,418.42110331807675,418.6702880859375,58520200,0.0,0 -2021-06-01,421.19205099340206,421.34155577557243,417.8330450756988,418.301513671875,54216600,0.0,0 -2021-06-02,418.99919814823204,419.8564095661502,417.92273333617044,418.9593200683594,49097100,0.0,0 -2021-06-03,416.4874360140431,418.6204418552625,414.9225483379971,417.4044189453125,58138800,0.0,0 -2021-06-04,419.37798090694395,421.54091816152317,417.47420555497655,421.2219543457031,55938800,0.0,0 -2021-06-07,421.21198302326667,421.40136589038974,419.8165543324106,420.81329345703125,51555000,0.0,0 -2021-06-08,421.7302646856138,421.8299446789157,418.9493845062886,420.9029846191406,47134300,0.0,0 -2021-06-09,421.8000339803625,421.87979014038723,420.0358167701135,420.2750244140625,48436300,0.0,0 -2021-06-10,421.5807633606339,423.24533105003803,420.1753575723266,422.2286376953125,51020100,0.0,0 -2021-06-11,422.8167343846925,423.045964907962,421.4412295728234,422.9263610839844,45570800,0.0,0 -2021-06-14,423.0459500478235,423.98288719348784,421.72030048788594,423.8732604980469,42358500,0.0,0 -2021-06-15,424.0327623851421,424.07261004823795,422.1588880054828,423.0958251953125,51508500,0.0,0 -2021-06-16,423.2453224692094,423.48453011579466,418.55068989659617,420.7335205078125,80386100,0.0,0 -2021-06-17,420.2949845814783,421.64055801570163,417.9526416412854,420.593994140625,90949700,0.0,0 -2021-06-18,417.0899963378906,417.8299865722656,414.70001220703125,414.9200134277344,118676300,1.376,0 -2021-06-21,416.79998779296875,421.05999755859375,415.92999267578125,420.8599853515625,72822000,0.0,0 -2021-06-22,420.8500061035156,424.0,420.0799865722656,423.1099853515625,57700300,0.0,0 -2021-06-23,423.19000244140625,424.04998779296875,422.510009765625,422.6000061035156,49445400,0.0,0 -2021-06-24,424.8900146484375,425.54998779296875,424.6199951171875,425.1000061035156,45110300,0.0,0 -2021-06-25,425.8999938964844,427.0899963378906,425.54998779296875,426.6099853515625,58129500,0.0,0 -2021-06-28,427.1700134277344,427.6499938964844,425.8900146484375,427.4700012207031,53159600,0.0,0 -2021-06-29,427.8800048828125,428.55999755859375,427.1300048828125,427.70001220703125,35970500,0.0,0 -2021-06-30,427.2099914550781,428.7799987792969,427.17999267578125,428.05999755859375,64827900,0.0,0 -2021-07-01,428.8699951171875,430.6000061035156,428.79998779296875,430.42999267578125,53441000,0.0,0 -2021-07-02,431.6700134277344,434.1000061035156,430.5199890136719,433.7200012207031,57697700,0.0,0 -2021-07-06,433.7799987792969,434.010009765625,430.010009765625,432.92999267578125,68710400,0.0,0 -2021-07-07,433.6600036621094,434.760009765625,431.510009765625,434.4599914550781,63549500,0.0,0 -2021-07-08,428.7799987792969,431.7300109863281,427.5199890136719,430.9200134277344,97595200,0.0,0 -2021-07-09,432.5299987792969,435.8399963378906,430.7099914550781,435.5199890136719,76238600,0.0,0 -2021-07-12,435.42999267578125,437.3500061035156,434.9700012207031,437.0799865722656,52889600,0.0,0 -2021-07-13,436.239990234375,437.8399963378906,435.30999755859375,435.5899963378906,52911300,0.0,0 -2021-07-14,437.3999938964844,437.9200134277344,434.9100036621094,436.239990234375,64130400,0.0,0 -2021-07-15,434.80999755859375,435.5299987792969,432.7200012207031,434.75,55126400,0.0,0 -2021-07-16,436.010009765625,436.05999755859375,430.9200134277344,431.3399963378906,75874700,0.0,0 -2021-07-19,426.19000244140625,431.4100036621094,421.9700012207031,424.9700012207031,147987000,0.0,0 -2021-07-20,425.67999267578125,432.4200134277344,424.8299865722656,431.05999755859375,99608200,0.0,0 -2021-07-21,432.3399963378906,434.70001220703125,431.010009765625,434.54998779296875,64724400,0.0,0 -2021-07-22,434.739990234375,435.7200012207031,433.69000244140625,435.4599914550781,47878500,0.0,0 -2021-07-23,437.5199890136719,440.29998779296875,436.7900085449219,439.94000244140625,63766600,0.0,0 -2021-07-26,439.30999755859375,441.0299987792969,439.260009765625,441.0199890136719,43719200,0.0,0 -2021-07-27,439.9100036621094,439.94000244140625,435.989990234375,439.010009765625,67397100,0.0,0 -2021-07-28,439.67999267578125,440.29998779296875,437.30999755859375,438.8299865722656,52472400,0.0,0 -2021-07-29,439.82000732421875,441.79998779296875,439.80999755859375,440.6499938964844,47435300,0.0,0 -2021-07-30,437.9100036621094,440.05999755859375,437.7699890136719,438.510009765625,68890600,0.0,0 -2021-08-02,440.3399963378906,440.92999267578125,437.2099914550781,437.5899963378906,58783300,0.0,0 -2021-08-03,438.44000244140625,441.2799987792969,436.1000061035156,441.1499938964844,58053900,0.0,0 -2021-08-04,439.7799987792969,441.1199951171875,438.7300109863281,438.9800109863281,46732200,0.0,0 -2021-08-05,440.2200012207031,441.8500061035156,439.8800048828125,441.760009765625,38969700,0.0,0 -2021-08-06,442.1000061035156,442.94000244140625,441.79998779296875,442.489990234375,46864100,0.0,0 -2021-08-09,442.4599914550781,442.79998779296875,441.30999755859375,442.1300048828125,41222600,0.0,0 -2021-08-10,442.6099853515625,443.44000244140625,441.8800048828125,442.67999267578125,43339300,0.0,0 -2021-08-11,443.82000732421875,443.8800048828125,442.6199951171875,443.7799987792969,44034300,0.0,0 -2021-08-12,443.6199951171875,445.260009765625,442.6600036621094,445.1099853515625,38909400,0.0,0 -2021-08-13,445.5899963378906,445.94000244140625,445.07000732421875,445.9200134277344,39388300,0.0,0 -2021-08-16,444.5299987792969,447.1099853515625,442.8699951171875,446.9700012207031,73740000,0.0,0 -2021-08-17,444.239990234375,444.9599914550781,440.8500061035156,444.0400085449219,92673900,0.0,0 -2021-08-18,442.9599914550781,444.6300048828125,438.9200134277344,439.17999267578125,88807700,0.0,0 -2021-08-19,436.2699890136719,441.1400146484375,436.1199951171875,438.989990234375,61450143,0.0,0 diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/data/sample.csv b/temp_pandas_ta/pandas_ta-0.4.71b0/data/sample.csv deleted file mode 100644 index a8c39a01..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/data/sample.csv +++ /dev/null @@ -1,101 +0,0 @@ -,date,open,high,low,close,volume -0,2018-07-05,272.17,273.18,270.96,273.11,56925919.0 -1,2018-07-06,273.14,275.84,272.715,275.42,66493696.0 -2,2018-07-09,276.55,277.96,276.5,277.9,50550399.0 -3,2018-07-10,278.41,279.01,278.08,278.9,51966829.0 -4,2018-07-11,277.15,278.04,276.52,276.86,77054739.0 -5,2018-07-12,278.28,279.43,277.6,279.37,60124687.0 -6,2018-07-13,279.17,279.93,278.66,279.59,48234964.0 -7,2018-07-16,279.64,279.803,278.84,279.34,48201038.0 -8,2018-07-17,278.47,280.91,278.41,280.47,52315500.0 -9,2018-07-18,280.56,281.18,280.06,281.06,44593465.0 -10,2018-07-19,280.31,280.74,279.46,280.0,61412117.0 -11,2018-07-20,279.77,280.48,279.5,279.68,82372729.0 -12,2018-07-23,279.45,280.43,279.06,280.2,47047565.0 -13,2018-07-24,281.79,282.56,280.63,281.61,68026935.0 -14,2018-07-25,281.33,284.37,281.28,284.01,78882927.0 -15,2018-07-26,283.2,284.11,283.09,283.34,57919495.0 -16,2018-07-27,283.71,283.82,280.38,281.42,76783177.0 -17,2018-07-30,281.51,281.69,279.36,279.95,63742508.0 -18,2018-07-31,280.81,282.02,280.38,281.33,68570493.0 -19,2018-08-01,281.56,282.13,280.1315,280.86,53853326.0 -20,2018-08-02,279.39,282.58,279.16,282.39,63426363.0 -21,2018-08-03,282.53,283.6577,282.33,283.6,53935386.0 -22,2018-08-06,283.64,284.99,283.2015,284.64,39400887.0 -23,2018-08-07,285.39,286.01,285.24,285.58,43196646.0 -24,2018-08-08,285.39,285.91,284.94,285.46,42114551.0 -25,2018-08-09,285.53,285.97,284.915,285.07,35716976.0 -26,2018-08-10,283.45,284.055,282.36,283.16,77076044.0 -27,2018-08-13,283.47,284.16,281.77,282.1,65732909.0 -28,2018-08-14,282.92,284.17,282.4833,283.9,43842031.0 -29,2018-08-15,282.38,282.54,280.16,281.78,102925355.0 -30,2018-08-16,283.4,285.04,283.36,284.06,69967919.0 -31,2018-08-17,283.83,285.5601,283.37,285.06,65618481.0 -32,2018-08-20,285.57,285.97,285.06,285.67,39807490.0 -33,2018-08-21,286.25,287.31,285.7135,286.34,67271983.0 -34,2018-08-22,285.88,286.76,285.575,286.17,44993333.0 -35,2018-08-23,285.97,286.94,285.43,285.79,49204851.0 -36,2018-08-24,286.44,287.67,286.38,287.51,57487399.0 -37,2018-08-27,288.86,289.9,288.68,289.78,57072377.0 -38,2018-08-28,290.3,290.4175,289.4,289.92,46943472.0 -39,2018-08-29,290.16,291.74,289.8854,291.48,61485514.0 -40,2018-08-30,290.94,291.36,289.63,290.3,61229501.0 -41,2018-08-31,289.84,290.81,289.29,290.31,66140838.0 -42,2018-09-04,289.84,290.21,288.68,289.81,57594367.0 -43,2018-09-05,289.41,289.64,287.89,289.03,72452437.0 -44,2018-09-06,289.15,289.49,287.0,288.16,65909863.0 -45,2018-09-07,286.98,288.7,286.71,287.6,73524824.0 -46,2018-09-10,288.74,289.04,287.88,288.1,50191113.0 -47,2018-09-11,287.37,289.55,286.975,289.05,50530492.0 -48,2018-09-12,289.06,289.8,288.23,289.12,59810758.0 -49,2018-09-13,290.32,291.0384,289.995,290.83,51034222.0 -50,2018-09-14,291.06,291.27,290.0,290.88,55079875.0 -51,2018-09-17,290.82,290.86,289.03,289.34,68244043.0 -52,2018-09-18,289.58,291.58,289.55,290.91,61930407.0 -53,2018-09-19,290.97,291.69,290.825,291.22,49080562.0 -54,2018-09-20,292.64,293.94,291.2363,293.58,100360646.0 -55,2018-09-21,293.09,293.22,291.81,291.99,105479656.0 -56,2018-09-24,291.34,291.5,290.37,291.02,53409645.0 -57,2018-09-25,291.53,291.65,290.4833,290.75,44370037.0 -58,2018-09-26,290.91,292.24,289.41,289.88,79739674.0 -59,2018-09-27,290.41,291.91,290.1,290.69,59249455.0 -60,2018-09-28,289.99,291.28,289.95,290.72,70091385.0 -61,2018-10-01,292.11,292.93,290.98,291.73,62078937.0 -62,2018-10-02,291.56,292.355,291.14,291.56,47258227.0 -63,2018-10-03,292.74,293.21,291.32,291.72,64694594.0 -64,2018-10-04,291.18,291.24,287.66,289.44,111545910.0 -65,2018-10-05,289.69,290.27,286.22,287.82,105951698.0 -66,2018-10-08,287.05,288.22,285.5,287.82,87742172.0 -67,2018-10-09,287.39,288.86,286.77,287.4,74338982.0 -68,2018-10-10,286.83,286.91,277.88,278.3,214731000.0 -69,2018-10-11,277.08,278.9,270.36,272.17,274840491.0 -70,2018-10-12,276.77,277.09,272.37,275.95,183186492.0 -71,2018-10-15,275.55,277.04,274.3,274.4,102263717.0 -72,2018-10-16,276.6,280.82,276.07,280.4,118255834.0 -73,2018-10-17,280.44,281.15,277.56,280.45,110625987.0 -74,2018-10-18,279.4,280.07,274.97,276.4,134557525.0 -75,2018-10-19,277.13,279.3,275.47,276.25,139901634.0 -76,2018-10-22,277.0,277.36,274.41,275.01,82415812.0 -77,2018-10-23,270.95,274.87,268.61,273.61,146352719.0 -78,2018-10-24,273.33,273.76,264.7,265.32,177806697.0 -79,2018-10-25,267.38,271.81,266.23,270.08,138061545.0 -80,2018-10-26,265.92,271.0,262.29,265.33,201574596.0 -81,2018-10-29,268.8,270.25,259.85,263.86,160749101.0 -82,2018-10-30,263.67,268.12,263.12,267.77,157115995.0 -83,2018-10-31,270.65,273.23,270.12,270.63,128296325.0 -84,2018-11-01,271.6,273.73,270.38,273.51,99495037.0 -85,2018-11-02,274.75,275.23,269.59,271.89,122634107.0 -86,2018-11-05,272.44,274.01,271.35,273.39,65622482.0 -87,2018-11-06,273.32,275.3,273.25,275.12,60085894.0 -88,2018-11-07,277.56,281.1,277.08,281.01,102752099.0 -89,2018-11-08,280.11,281.22,279.22,280.5,65584886.0 -90,2018-11-09,279.03,279.24,276.18,277.76,98812561.0 -91,2018-11-12,277.19,277.46,271.99,272.57,99673574.0 -92,2018-11-13,273.09,275.325,271.25,272.06,98176610.0 -93,2018-11-14,274.16,274.61,268.45,270.2,125335931.0 -94,2018-11-15,268.78,273.54,267.0102,273.02,135101437.0 -95,2018-11-16,271.79,274.75,271.21,273.73,126668040.0 -96,2018-11-19,273.05,273.38,268.07,269.1,103061706.0 -97,2018-11-20,265.36,267.0,263.15,264.12,136021311.0 -98,2018-11-21,265.86,267.15,265.01,265.02,75563743.0 -99,2018-11-23,263.18,264.8234,263.07,263.25,42807878.0 diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_ADX.png b/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_ADX.png deleted file mode 100644 index 27ee79db..00000000 Binary files a/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_ADX.png and /dev/null differ diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_ATR.png b/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_ATR.png deleted file mode 100644 index a0a75ffa..00000000 Binary files a/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_ATR.png and /dev/null differ diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_CLR.png b/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_CLR.png deleted file mode 100644 index ae92bf6e..00000000 Binary files a/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_CLR.png and /dev/null differ diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_Chart.png b/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_Chart.png deleted file mode 100644 index 447b4cd4..00000000 Binary files a/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_Chart.png and /dev/null differ diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_EBSW.png b/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_EBSW.png deleted file mode 100644 index 13d83a72..00000000 Binary files a/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_EBSW.png and /dev/null differ diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_MACD.png b/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_MACD.png deleted file mode 100644 index 084f32eb..00000000 Binary files a/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_MACD.png and /dev/null differ diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_OBV.png b/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_OBV.png deleted file mode 100644 index 774f317e..00000000 Binary files a/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_OBV.png and /dev/null differ diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_STDEV.png b/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_STDEV.png deleted file mode 100644 index 62bbdcd2..00000000 Binary files a/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_STDEV.png and /dev/null differ diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_VOL.png b/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_VOL.png deleted file mode 100644 index 7c32682e..00000000 Binary files a/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_VOL.png and /dev/null differ diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_ZCDL.png b/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_ZCDL.png deleted file mode 100644 index 632c6038..00000000 Binary files a/temp_pandas_ta/pandas_ta-0.4.71b0/images/SPY_ZCDL.png and /dev/null differ diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/images/pta-logo.svg b/temp_pandas_ta/pandas_ta-0.4.71b0/images/pta-logo.svg deleted file mode 100644 index daf29a7b..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/images/pta-logo.svg +++ /dev/null @@ -1 +0,0 @@ -Pandas TA \ No newline at end of file diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/images/pta-logo.webp b/temp_pandas_ta/pandas_ta-0.4.71b0/images/pta-logo.webp deleted file mode 100644 index 6b9b496d..00000000 Binary files a/temp_pandas_ta/pandas_ta-0.4.71b0/images/pta-logo.webp and /dev/null differ diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/pyproject.toml b/temp_pandas_ta/pandas_ta-0.4.71b0/pyproject.toml deleted file mode 100644 index c6f7b979..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/pyproject.toml +++ /dev/null @@ -1,72 +0,0 @@ -[project] -name = "pandas-ta" -version = "0.4.71b" -description = "A Comprehensive Python 3 Technical Analysis Library with Pandas Dataframe Extension for Quantitative Researchers, Traders, and Investors." -authors = [{ name = "Pandas TA Support", email = "support@pandas-ta.dev" }] -requires-python = ">=3.12" -dependencies = [ - "numba==0.61.2", - "numpy>=2.2.6", - "pandas>=2.3.2", - "tqdm>=4.67.1", -] -readme = { file = "README.md", content-type = "text/markdown" } -license-files = ["LICENSE"] -keywords = [ - "library", - "technical analysis", - "ta", - "indicators", - "pandas", - "dataframe extension", - "finance", - "trading", - "machine learning", - "ai", -] -classifiers = [ - "Development Status :: 4 - Beta", - "Programming Language :: Python :: 3.12", - "Operating System :: OS Independent", - "Natural Language :: English", - "Intended Audience :: Developers", - "Intended Audience :: Financial and Insurance Industry", - "Intended Audience :: Science/Research", - "Topic :: Office/Business :: Financial", - "Topic :: Office/Business :: Financial :: Investment", - "Topic :: Scientific/Engineering", - "Topic :: Scientific/Engineering :: Information Analysis", -] - -[project.urls] -Homepage = "https://www.pandas-ta.dev" -Documentation = "https://www.pandas-ta.dev/api" -Repository = "https://github.com/twopirllc/pandas-ta" - -[build-system] -requires = ["hatchling"] -build-backend = "hatchling.build" - -[dependency-groups] -dev = [ - "bokeh>=3.7.3", - "cryptography>=45.0.6", - "ipython>=9.4.0", - "jupyterlab>=4.4.6", - "matplotlib>=3.10.5", - "pytest>=8.4.1", - "requests>=2.32.5", - "ta-lib==0.6.4", - "yfinance>=0.2.65", -] -docs = [ - "mkdocs>=1.6.1", - "mkdocs-include-markdown-plugin>=7.1.6", - "mkdocs-macros-plugin>=1.3.9", - "mkdocs-material>=9.6.18", - "mkdocs-minify-plugin>=0.8.0", - "mkdocs-plotly-plugin>=0.1.3", - "mkdocs-redirects>=1.2.2", - "mkdocstrings-python>=1.17.0", - "ruff>=0.12.10", -] diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/requirements.dev.txt b/temp_pandas_ta/pandas_ta-0.4.71b0/requirements.dev.txt deleted file mode 100644 index daf9f4e7..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/requirements.dev.txt +++ /dev/null @@ -1,383 +0,0 @@ -# This file was autogenerated by uv via the following command: -# uv export --dev --no-hashes -vn -o requirements.dev.txt --e . -anyio==4.10.0 - # via - # httpx - # jupyter-server -appnope==0.1.4 ; sys_platform == 'darwin' - # via ipykernel -argon2-cffi==25.1.0 - # via jupyter-server -argon2-cffi-bindings==21.2.0 ; python_full_version >= '3.14' - # via argon2-cffi -argon2-cffi-bindings==25.1.0 ; python_full_version < '3.14' - # via argon2-cffi -arrow==1.3.0 - # via isoduration -asttokens==3.0.0 - # via stack-data -async-lru==2.0.5 - # via jupyterlab -attrs==25.3.0 - # via - # jsonschema - # referencing -babel==2.17.0 - # via jupyterlab-server -beautifulsoup4==4.13.5 - # via - # nbconvert - # yfinance -bleach==6.2.0 - # via nbconvert -bokeh==3.7.3 -certifi==2025.8.3 - # via - # curl-cffi - # httpcore - # httpx - # requests -cffi==1.17.1 - # via - # argon2-cffi-bindings - # cryptography - # curl-cffi - # pyzmq -charset-normalizer==3.4.3 - # via requests -colorama==0.4.6 ; sys_platform == 'win32' - # via - # ipython - # pytest - # tqdm -comm==0.2.3 - # via ipykernel -contourpy==1.3.3 - # via - # bokeh - # matplotlib -cryptography==45.0.6 -curl-cffi==0.13.0 - # via yfinance -cycler==0.12.1 - # via matplotlib -debugpy==1.8.16 - # via ipykernel -decorator==5.2.1 - # via ipython -defusedxml==0.7.1 - # via nbconvert -executing==2.2.0 - # via stack-data -fastjsonschema==2.21.2 - # via nbformat -fonttools==4.59.1 - # via matplotlib -fqdn==1.5.1 - # via jsonschema -frozendict==2.4.6 - # via yfinance -h11==0.16.0 - # via httpcore -httpcore==1.0.9 - # via httpx -httpx==0.28.1 - # via jupyterlab -idna==3.10 - # via - # anyio - # httpx - # jsonschema - # requests -iniconfig==2.1.0 - # via pytest -ipykernel==6.30.1 - # via jupyterlab -ipython==9.4.0 - # via ipykernel -ipython-pygments-lexers==1.1.1 - # via ipython -isoduration==20.11.0 - # via jsonschema -jedi==0.19.2 - # via ipython -jinja2==3.1.6 - # via - # bokeh - # jupyter-server - # jupyterlab - # jupyterlab-server - # nbconvert -json5==0.12.1 - # via jupyterlab-server -jsonpointer==3.0.0 - # via jsonschema -jsonschema==4.25.1 - # via - # jupyter-events - # jupyterlab-server - # nbformat -jsonschema-specifications==2025.4.1 - # via jsonschema -jupyter-client==8.6.3 - # via - # ipykernel - # jupyter-server - # nbclient -jupyter-core==5.8.1 - # via - # ipykernel - # jupyter-client - # jupyter-server - # jupyterlab - # nbclient - # nbconvert - # nbformat -jupyter-events==0.12.0 - # via jupyter-server -jupyter-lsp==2.2.6 - # via jupyterlab -jupyter-server==2.17.0 - # via - # jupyter-lsp - # jupyterlab - # jupyterlab-server - # notebook-shim -jupyter-server-terminals==0.5.3 - # via jupyter-server -jupyterlab==4.4.6 -jupyterlab-pygments==0.3.0 - # via nbconvert -jupyterlab-server==2.27.3 - # via jupyterlab -kiwisolver==1.4.9 - # via matplotlib -lark==1.2.2 - # via rfc3987-syntax -llvmlite==0.44.0 - # via numba -markupsafe==3.0.2 - # via - # jinja2 - # nbconvert -matplotlib==3.10.5 -matplotlib-inline==0.1.7 - # via - # ipykernel - # ipython -mistune==3.1.3 - # via nbconvert -multitasking==0.0.12 - # via yfinance -narwhals==2.2.0 - # via bokeh -nbclient==0.10.2 - # via nbconvert -nbconvert==7.16.6 - # via jupyter-server -nbformat==5.10.4 - # via - # jupyter-server - # nbclient - # nbconvert -nest-asyncio==1.6.0 - # via ipykernel -notebook-shim==0.2.4 - # via jupyterlab -numba==0.61.2 - # via pandas-ta -numpy==2.2.6 - # via - # bokeh - # contourpy - # matplotlib - # numba - # pandas - # pandas-ta - # ta-lib - # yfinance -packaging==25.0 - # via - # bokeh - # ipykernel - # jupyter-events - # jupyter-server - # jupyterlab - # jupyterlab-server - # matplotlib - # nbconvert - # pytest -pandas==2.3.2 - # via - # bokeh - # pandas-ta - # yfinance -pandocfilters==1.5.1 - # via nbconvert -parso==0.8.5 - # via jedi -peewee==3.18.2 - # via yfinance -pexpect==4.9.0 ; sys_platform != 'emscripten' and sys_platform != 'win32' - # via ipython -pillow==11.3.0 - # via - # bokeh - # matplotlib -platformdirs==4.3.8 - # via - # jupyter-core - # yfinance -pluggy==1.6.0 - # via pytest -prometheus-client==0.22.1 - # via jupyter-server -prompt-toolkit==3.0.51 - # via ipython -protobuf==6.32.0 - # via yfinance -psutil==7.0.0 - # via ipykernel -ptyprocess==0.7.0 ; os_name != 'nt' or (sys_platform != 'emscripten' and sys_platform != 'win32') - # via - # pexpect - # terminado -pure-eval==0.2.3 - # via stack-data -pycparser==2.22 - # via cffi -pygments==2.19.2 - # via - # ipython - # ipython-pygments-lexers - # nbconvert - # pytest -pyparsing==3.2.3 - # via matplotlib -pytest==8.4.1 -python-dateutil==2.9.0.post0 - # via - # arrow - # jupyter-client - # matplotlib - # pandas -python-json-logger==3.3.0 - # via jupyter-events -pytz==2025.2 - # via - # pandas - # yfinance -pywin32==311 ; platform_python_implementation != 'PyPy' and sys_platform == 'win32' - # via jupyter-core -pywinpty==3.0.0 ; os_name == 'nt' - # via - # jupyter-server - # jupyter-server-terminals - # terminado -pyyaml==6.0.2 - # via - # bokeh - # jupyter-events -pyzmq==27.0.2 - # via - # ipykernel - # jupyter-client - # jupyter-server -referencing==0.36.2 - # via - # jsonschema - # jsonschema-specifications - # jupyter-events -requests==2.32.5 - # via - # jupyterlab-server - # yfinance -rfc3339-validator==0.1.4 - # via - # jsonschema - # jupyter-events -rfc3986-validator==0.1.1 - # via - # jsonschema - # jupyter-events -rfc3987-syntax==1.1.0 - # via jsonschema -rpds-py==0.27.0 - # via - # jsonschema - # referencing -send2trash==1.8.3 - # via jupyter-server -setuptools==80.9.0 - # via - # jupyterlab - # ta-lib -six==1.17.0 - # via - # python-dateutil - # rfc3339-validator -sniffio==1.3.1 - # via anyio -soupsieve==2.7 - # via beautifulsoup4 -stack-data==0.6.3 - # via ipython -ta-lib==0.6.4 -terminado==0.18.1 - # via - # jupyter-server - # jupyter-server-terminals -tinycss2==1.4.0 - # via bleach -tornado==6.5.2 - # via - # bokeh - # ipykernel - # jupyter-client - # jupyter-server - # jupyterlab - # terminado -tqdm==4.67.1 - # via pandas-ta -traitlets==5.14.3 - # via - # ipykernel - # ipython - # jupyter-client - # jupyter-core - # jupyter-events - # jupyter-server - # jupyterlab - # matplotlib-inline - # nbclient - # nbconvert - # nbformat -types-python-dateutil==2.9.0.20250822 - # via arrow -typing-extensions==4.15.0 - # via - # anyio - # beautifulsoup4 - # referencing -tzdata==2025.2 - # via pandas -uri-template==1.3.0 - # via jsonschema -urllib3==2.5.0 - # via requests -wcwidth==0.2.13 - # via prompt-toolkit -webcolors==24.11.1 - # via jsonschema -webencodings==0.5.1 - # via - # bleach - # tinycss2 -websocket-client==1.8.0 - # via jupyter-server -websockets==15.0.1 - # via yfinance -xyzservices==2025.4.0 - # via bokeh -yfinance==0.2.65 diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/requirements.txt b/temp_pandas_ta/pandas_ta-0.4.71b0/requirements.txt deleted file mode 100644 index 49b828ca..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/requirements.txt +++ /dev/null @@ -1,383 +0,0 @@ -# This file was autogenerated by uv via the following command: -# uv export --no-hashes -vn -o requirements.txt --e . -anyio==4.10.0 - # via - # httpx - # jupyter-server -appnope==0.1.4 ; sys_platform == 'darwin' - # via ipykernel -argon2-cffi==25.1.0 - # via jupyter-server -argon2-cffi-bindings==21.2.0 ; python_full_version >= '3.14' - # via argon2-cffi -argon2-cffi-bindings==25.1.0 ; python_full_version < '3.14' - # via argon2-cffi -arrow==1.3.0 - # via isoduration -asttokens==3.0.0 - # via stack-data -async-lru==2.0.5 - # via jupyterlab -attrs==25.3.0 - # via - # jsonschema - # referencing -babel==2.17.0 - # via jupyterlab-server -beautifulsoup4==4.13.5 - # via - # nbconvert - # yfinance -bleach==6.2.0 - # via nbconvert -bokeh==3.7.3 -certifi==2025.8.3 - # via - # curl-cffi - # httpcore - # httpx - # requests -cffi==1.17.1 - # via - # argon2-cffi-bindings - # cryptography - # curl-cffi - # pyzmq -charset-normalizer==3.4.3 - # via requests -colorama==0.4.6 ; sys_platform == 'win32' - # via - # ipython - # pytest - # tqdm -comm==0.2.3 - # via ipykernel -contourpy==1.3.3 - # via - # bokeh - # matplotlib -cryptography==45.0.6 -curl-cffi==0.13.0 - # via yfinance -cycler==0.12.1 - # via matplotlib -debugpy==1.8.16 - # via ipykernel -decorator==5.2.1 - # via ipython -defusedxml==0.7.1 - # via nbconvert -executing==2.2.0 - # via stack-data -fastjsonschema==2.21.2 - # via nbformat -fonttools==4.59.1 - # via matplotlib -fqdn==1.5.1 - # via jsonschema -frozendict==2.4.6 - # via yfinance -h11==0.16.0 - # via httpcore -httpcore==1.0.9 - # via httpx -httpx==0.28.1 - # via jupyterlab -idna==3.10 - # via - # anyio - # httpx - # jsonschema - # requests -iniconfig==2.1.0 - # via pytest -ipykernel==6.30.1 - # via jupyterlab -ipython==9.4.0 - # via ipykernel -ipython-pygments-lexers==1.1.1 - # via ipython -isoduration==20.11.0 - # via jsonschema -jedi==0.19.2 - # via ipython -jinja2==3.1.6 - # via - # bokeh - # jupyter-server - # jupyterlab - # jupyterlab-server - # nbconvert -json5==0.12.1 - # via jupyterlab-server -jsonpointer==3.0.0 - # via jsonschema -jsonschema==4.25.1 - # via - # jupyter-events - # jupyterlab-server - # nbformat -jsonschema-specifications==2025.4.1 - # via jsonschema -jupyter-client==8.6.3 - # via - # ipykernel - # jupyter-server - # nbclient -jupyter-core==5.8.1 - # via - # ipykernel - # jupyter-client - # jupyter-server - # jupyterlab - # nbclient - # nbconvert - # nbformat -jupyter-events==0.12.0 - # via jupyter-server -jupyter-lsp==2.2.6 - # via jupyterlab -jupyter-server==2.17.0 - # via - # jupyter-lsp - # jupyterlab - # jupyterlab-server - # notebook-shim -jupyter-server-terminals==0.5.3 - # via jupyter-server -jupyterlab==4.4.6 -jupyterlab-pygments==0.3.0 - # via nbconvert -jupyterlab-server==2.27.3 - # via jupyterlab -kiwisolver==1.4.9 - # via matplotlib -lark==1.2.2 - # via rfc3987-syntax -llvmlite==0.44.0 - # via numba -markupsafe==3.0.2 - # via - # jinja2 - # nbconvert -matplotlib==3.10.5 -matplotlib-inline==0.1.7 - # via - # ipykernel - # ipython -mistune==3.1.3 - # via nbconvert -multitasking==0.0.12 - # via yfinance -narwhals==2.2.0 - # via bokeh -nbclient==0.10.2 - # via nbconvert -nbconvert==7.16.6 - # via jupyter-server -nbformat==5.10.4 - # via - # jupyter-server - # nbclient - # nbconvert -nest-asyncio==1.6.0 - # via ipykernel -notebook-shim==0.2.4 - # via jupyterlab -numba==0.61.2 - # via pandas-ta -numpy==2.2.6 - # via - # bokeh - # contourpy - # matplotlib - # numba - # pandas - # pandas-ta - # ta-lib - # yfinance -packaging==25.0 - # via - # bokeh - # ipykernel - # jupyter-events - # jupyter-server - # jupyterlab - # jupyterlab-server - # matplotlib - # nbconvert - # pytest -pandas==2.3.2 - # via - # bokeh - # pandas-ta - # yfinance -pandocfilters==1.5.1 - # via nbconvert -parso==0.8.5 - # via jedi -peewee==3.18.2 - # via yfinance -pexpect==4.9.0 ; sys_platform != 'emscripten' and sys_platform != 'win32' - # via ipython -pillow==11.3.0 - # via - # bokeh - # matplotlib -platformdirs==4.3.8 - # via - # jupyter-core - # yfinance -pluggy==1.6.0 - # via pytest -prometheus-client==0.22.1 - # via jupyter-server -prompt-toolkit==3.0.51 - # via ipython -protobuf==6.32.0 - # via yfinance -psutil==7.0.0 - # via ipykernel -ptyprocess==0.7.0 ; os_name != 'nt' or (sys_platform != 'emscripten' and sys_platform != 'win32') - # via - # pexpect - # terminado -pure-eval==0.2.3 - # via stack-data -pycparser==2.22 - # via cffi -pygments==2.19.2 - # via - # ipython - # ipython-pygments-lexers - # nbconvert - # pytest -pyparsing==3.2.3 - # via matplotlib -pytest==8.4.1 -python-dateutil==2.9.0.post0 - # via - # arrow - # jupyter-client - # matplotlib - # pandas -python-json-logger==3.3.0 - # via jupyter-events -pytz==2025.2 - # via - # pandas - # yfinance -pywin32==311 ; platform_python_implementation != 'PyPy' and sys_platform == 'win32' - # via jupyter-core -pywinpty==3.0.0 ; os_name == 'nt' - # via - # jupyter-server - # jupyter-server-terminals - # terminado -pyyaml==6.0.2 - # via - # bokeh - # jupyter-events -pyzmq==27.0.2 - # via - # ipykernel - # jupyter-client - # jupyter-server -referencing==0.36.2 - # via - # jsonschema - # jsonschema-specifications - # jupyter-events -requests==2.32.5 - # via - # jupyterlab-server - # yfinance -rfc3339-validator==0.1.4 - # via - # jsonschema - # jupyter-events -rfc3986-validator==0.1.1 - # via - # jsonschema - # jupyter-events -rfc3987-syntax==1.1.0 - # via jsonschema -rpds-py==0.27.0 - # via - # jsonschema - # referencing -send2trash==1.8.3 - # via jupyter-server -setuptools==80.9.0 - # via - # jupyterlab - # ta-lib -six==1.17.0 - # via - # python-dateutil - # rfc3339-validator -sniffio==1.3.1 - # via anyio -soupsieve==2.7 - # via beautifulsoup4 -stack-data==0.6.3 - # via ipython -ta-lib==0.6.4 -terminado==0.18.1 - # via - # jupyter-server - # jupyter-server-terminals -tinycss2==1.4.0 - # via bleach -tornado==6.5.2 - # via - # bokeh - # ipykernel - # jupyter-client - # jupyter-server - # jupyterlab - # terminado -tqdm==4.67.1 - # via pandas-ta -traitlets==5.14.3 - # via - # ipykernel - # ipython - # jupyter-client - # jupyter-core - # jupyter-events - # jupyter-server - # jupyterlab - # matplotlib-inline - # nbclient - # nbconvert - # nbformat -types-python-dateutil==2.9.0.20250822 - # via arrow -typing-extensions==4.15.0 - # via - # anyio - # beautifulsoup4 - # referencing -tzdata==2025.2 - # via pandas -uri-template==1.3.0 - # via jsonschema -urllib3==2.5.0 - # via requests -wcwidth==0.2.13 - # via prompt-toolkit -webcolors==24.11.1 - # via jsonschema -webencodings==0.5.1 - # via - # bleach - # tinycss2 -websocket-client==1.8.0 - # via jupyter-server -websockets==15.0.1 - # via yfinance -xyzservices==2025.4.0 - # via bokeh -yfinance==0.2.65 diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/__init__.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/__init__.py deleted file mode 100644 index 703f7496..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/__init__.py +++ /dev/null @@ -1,65 +0,0 @@ -# -*- coding: utf-8 -*- -from importlib.metadata import version -version = version("pandas-ta") - -from pandas_ta.maps import EXCHANGE_TZ, RATE, Category, Imports -from pandas_ta.utils import * -from pandas_ta.utils import __all__ as utils_all - -# Flat Structure. Supports ta.ema() or ta.overlap.ema() -from pandas_ta.candle import * -from pandas_ta.cycle import * -from pandas_ta.momentum import * -from pandas_ta.overlap import * -from pandas_ta.performance import * -from pandas_ta.statistics import * -from pandas_ta.trend import * -from pandas_ta.volatility import * -from pandas_ta.volume import * -from pandas_ta.candle import __all__ as candle_all -from pandas_ta.cycle import __all__ as cycle_all -from pandas_ta.momentum import __all__ as momentum_all -from pandas_ta.overlap import __all__ as overlap_all -from pandas_ta.performance import __all__ as performance_all -from pandas_ta.statistics import __all__ as statistics_all -from pandas_ta.trend import __all__ as trend_all -from pandas_ta.volatility import __all__ as volatility_all -from pandas_ta.volume import __all__ as volume_all - -# Common Averages useful for Indicators -# with a mamode argument, like ta.adx() -from pandas_ta.ma import ma - -# Custom External Directory Commands. See help(import_dir) -from pandas_ta.custom import create_dir, import_dir - -# Enable "ta" DataFrame Extension -from pandas_ta.core import AnalysisIndicators - -__all__ = [ - # "name", - "EXCHANGE_TZ", - "RATE", - "Category", - "Imports", - "version", - "ma", - "create_dir", - "import_dir", - "AnalysisIndicators", - "AllStudy", - "CommonStudy", -] - -__all__ += [ - utils_all - + candle_all - + cycle_all - + momentum_all - + overlap_all - + performance_all - + statistics_all - + trend_all - + volatility_all - + volume_all -] diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/__main__.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/__main__.py deleted file mode 100644 index c842f73f..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/__main__.py +++ /dev/null @@ -1,7 +0,0 @@ -#-*- coding: utf-8 -*- -from pandas_ta import version - -SUPPORT="http://www.pandas-ta.dev/support" - -if __name__ == "__main__": - print(f"Pandas TA: {version}\nSupport: {SUPPORT}") diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/_typing.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/_typing.py deleted file mode 100644 index ffc1165d..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/_typing.py +++ /dev/null @@ -1,71 +0,0 @@ -# -*- coding: utf-8 -*- -from pathlib import Path -from typing import ( - Any, - Dict, - Iterable, - List, - Optional, - Sequence, - TextIO, - Tuple, - TypeVar, - Union -) - -from numpy import ndarray, recarray, void -from numpy import bool_ as np_bool_ -from numpy import floating as np_floating -from numpy import generic as np_generic -from numpy import integer as np_integer -from numpy import number as np_number -from pandas import DataFrame, Series - - - -# Generic types -T = TypeVar("T") - -# Scalars -Scalar = Union[str, float, int, complex, bool, object, np_generic] -Number = Union[int, float, complex, np_number, np_bool_] -Int = Union[int, np_integer] -Float = Union[float, np_floating] -IntFloat = Union[Int, Float] - -# Basic sequences -MaybeTuple = Union[T, Tuple[T, ...]] -MaybeList = Union[T | List[T]] -TupleList = Union[List[T], Tuple[T, ...]] -MaybeTupleList = Union[T, List[T], Tuple[T, ...]] -MaybeIterable = Union[T, Iterable[T]] -MaybeSequence = Union[T, Sequence[T]] -ListStr = List[str] - -DictLike = Union[None, dict] -DictLikeSequence = MaybeSequence[DictLike] -Args = Tuple[Any, ...] -ArgsLike = Union[None, Args] -Kwargs = Dict[str, Any] -KwargsLike = Union[None, Kwargs] -KwargsLikeSequence = MaybeSequence[KwargsLike] -FileName = Union[str, Path] - -DTypeLike = Any -PandasDTypeLike = Any -Shape = Tuple[int, ...] -RelaxedShape = Union[int, Shape] -Array = ndarray -Array1d = ndarray -Array2d = ndarray -Array3d = ndarray -Record = void -RecordArray = ndarray -RecArray = recarray -MaybeArray = Union[T, Array] -SeriesFrame = Union[Series, DataFrame] -MaybeSeries = Union[T, Series] -MaybeSeriesFrame = Union[T, Series, DataFrame] -AnyArray = Union[Array, Series, DataFrame] -AnyArray1d = Union[Array1d, Series] -AnyArray2d = Union[Array2d, DataFrame] diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/candle/__init__.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/candle/__init__.py deleted file mode 100644 index 9da8e2ae..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/candle/__init__.py +++ /dev/null @@ -1,16 +0,0 @@ -# -*- coding: utf-8 -*- -from .cdl_doji import cdl_doji -from .cdl_inside import cdl_inside -from .cdl_pattern import cdl_pattern, cdl, ALL_PATTERNS as CDL_PATTERN_NAMES -from .cdl_z import cdl_z -from .ha import ha - -__all__ = [ - "cdl_doji", - "cdl_inside", - "cdl_pattern", - "cdl", - "CDL_PATTERN_NAMES", - "cdl_z", - "ha", -] diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/candle/cdl_doji.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/candle/cdl_doji.py deleted file mode 100644 index bd279d88..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/candle/cdl_doji.py +++ /dev/null @@ -1,90 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta.overlap import sma -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.utils import high_low_range, v_percent -from pandas_ta.utils import real_body, v_offset, v_pos_default -from pandas_ta.utils import v_bool, v_scalar, v_series - - - -def cdl_doji( - open_: Series, high: Series, low: Series, close: Series, - length: Int = None, factor: IntFloat = None, - scalar: IntFloat = None, asint: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Doji - - Attempts to identify a "Doji" candle which is shorter than 10% of - the average of the 10 previous bars High-Low range. - - Sources: - * [TA Lib](https://github.com/TA-Lib/ta-lib/blob/main/src/ta_func/ta_CDLDOJI.c) - - Parameters: - open_ (Series): ```open``` Series - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - length (int): The period. Default: ```10``` - factor (float): Doji value. Default: ```100``` - scalar (float): Scalar. Default: ```100``` - asint (bool): Returns as ```Int```. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - naive (bool): Prefills potential Doji; bodies that are less - than a percentage, ```factor```, of it's High-Low range. - Default: ```False``` - fillna (value): Replaces ```na```'s with ```value```. - - Returns: - (Series): 1 column - - Warning: - TA-Lib Correlation: ```np.float64(0.9434563530497265)``` - - Tip: - Corrective contributions welcome! - """ - # Validate - length = v_pos_default(length, 10) - open_ = v_series(open_, length) - high = v_series(high, length) - low = v_series(low, length) - close = v_series(close, length) - - if open_ is None or high is None or low is None or close is None: - return - - factor = v_scalar(factor, 10) if v_percent(factor) else 10 - scalar = v_scalar(scalar, 100) - asint = v_bool(asint, True) - offset = v_offset(offset) - naive = kwargs.pop("naive", False) - - # Calculate - body = real_body(open_, close).abs() - hl_range = high_low_range(high, low).abs() - hl_range_avg = sma(hl_range, length) - doji = body < 0.01 * factor * hl_range_avg - - if naive: - doji.iat[:length] = body < 0.01 * factor * hl_range - if asint: - doji = scalar * doji.astype(int) - - # Offset - if offset != 0: - doji = doji.shift(offset) - - # Fill - if "fillna" in kwargs: - doji.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - doji.name = f"CDL_DOJI_{length}_{0.01 * factor}" - doji.category = "candle" - - return doji diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/candle/cdl_inside.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/candle/cdl_inside.py deleted file mode 100644 index 99b1a19d..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/candle/cdl_inside.py +++ /dev/null @@ -1,84 +0,0 @@ -# -*- coding: utf-8 -*- -from numba import njit -from numpy import roll, where -from pandas import Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.utils import ( - v_bool, - v_offset, - v_offset, - v_scalar, - v_series -) - - - -@njit(cache=True) -def np_cdl_inside(high, low): - hdiff = where(high - roll(high, 1) < 0, 1, 0) - ldiff = where(low - roll(low, 1) > 0, 1, 0) - return hdiff & ldiff - - -def cdl_inside( - open_: Series, high: Series, low: Series, close: Series, - asbool: bool = None, scalar: IntFloat = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Inside Bar - - Attempts to identify an "Inside" candle which is smaller than it's - previous candle. - - Sources: - * [TA Lib](https://github.com/TA-Lib/ta-lib/blob/main/src/ta_func/ta_CDL3INSIDE.c) - * [tradingview](https://www.tradingview.com/script/IyIGN1WO-Inside-Bar/) - - Parameters: - open_ (Series): ```open``` Series - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - asbool (bool): Return booleans. Default: ```False``` - scalar (float): Scalar. Default: ```100``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): Replaces ```na```'s with ```value```. - - Returns: - (Series): 1 column - """ - # Validate - open_ = v_series(open_) - high = v_series(high) - low = v_series(low) - close = v_series(close) - - if open_ is None or high is None or low is None or close is None: - return - - asbool = v_bool(asbool, False) - scalar = v_scalar(scalar, 100) - offset = v_offset(offset) - - # Calculate - np_high, np_low = high.to_numpy(), low.to_numpy() - np_inside = np_cdl_inside(np_high, np_low) - inside = Series(np_inside, index=close.index, dtype=bool) - - if not asbool: - inside = scalar * inside.astype(int) - - # Offset - if offset != 0: - inside = inside.shift(offset) - - # Fill - if "fillna" in kwargs: - inside.fillna(kwargs["fillna"], inplace=True) - # Name and Category - inside.name = f"CDL_INSIDE" - inside.category = "candle" - - return inside diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/candle/cdl_pattern.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/candle/cdl_pattern.py deleted file mode 100644 index 2f9c40e3..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/candle/cdl_pattern.py +++ /dev/null @@ -1,126 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series, DataFrame -from pandas_ta._typing import DictLike, Int, IntFloat, List -from pandas_ta.maps import Imports -from pandas_ta.utils import v_offset, v_scalar, v_series -from pandas_ta.candle import cdl_doji, cdl_inside - - - -ALL_PATTERNS = [ - "2crows", "3blackcrows", "3inside", "3linestrike", "3outside", - "3starsinsouth", "3whitesoldiers", "abandonedbaby", "advanceblock", - "belthold", "breakaway", "closingmarubozu", "concealbabyswall", - "counterattack", "darkcloudcover", "doji", "dojistar", "dragonflydoji", - "engulfing", "eveningdojistar", "eveningstar", "gapsidesidewhite", - "gravestonedoji", "hammer", "hangingman", "harami", "haramicross", - "highwave", "hikkake", "hikkakemod", "homingpigeon", "identical3crows", - "inneck", "inside", "invertedhammer", "kicking", "kickingbylength", - "ladderbottom", "longleggeddoji", "longline", "marubozu", "matchinglow", - "mathold", "morningdojistar", "morningstar", "onneck", "piercing", - "rickshawman", "risefall3methods", "separatinglines", "shootingstar", - "shortline", "spinningtop", "stalledpattern", "sticksandwich", "takuri", - "tasukigap", "thrusting", "tristar", "unique3river", "upsidegap2crows", - "xsidegap3methods" -] - - -def cdl_pattern( - open_: Series, high: Series, low: Series, close: Series, - name: str | List[str] = "all", - scalar: IntFloat = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Candle Pattern - - This function wraps TA Lib candle patterns. - - Sources: - * [TA Lib](https://ta-lib.org) - - Parameters: - open_ (Series): ```open``` Series - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - name (str | List[str]): Pattern name or a list of pattern names. - Default: ```"all"``` - scalar (float): Scalar. Default: ```100``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): Replaces ```na```'s with ```value```. - - Returns: - (DataFrame): Pattern Column(s) - - Warning: TA Lib - TA Lib must be installed - """ - # Validate Arguments - open_ = v_series(open_, 1) - high = v_series(high, 1) - low = v_series(low, 1) - close = v_series(close, 1) - - if open_ is None or high is None or low is None or close is None: - return - - offset = v_offset(offset) - scalar = v_scalar(scalar, 100) - - pta_patterns = {"doji": cdl_doji, "inside": cdl_inside} - - if name == "all": - name = ALL_PATTERNS - - if isinstance(name, str): - name = [name] - - if Imports["talib"]: - import talib.abstract as tala - - result = {} - for n in name: - if n not in ALL_PATTERNS: - print(f"[X] There is no candle pattern named {n} available!") - continue - - if n in pta_patterns: - pattern_result = pta_patterns[n]( - open_, high, low, close, offset=offset, scalar=scalar, **kwargs - ) - if not isinstance(pattern_result, Series): - continue - result[pattern_result.name] = pattern_result - - else: - if not Imports["talib"]: - print(f"[i] Requires TA-Lib to use {n}. (pip install TA-Lib)") - continue - - pf = tala.Function(f"CDL{n.upper()}") - pattern_result = Series( - 0.01 * scalar * pf(open_, high, low, close, **kwargs) - ) - pattern_result.index = close.index - - # Offset - if offset != 0: - pattern_result = pattern_result.shift(offset) - - # Fill - if "fillna" in kwargs: - pattern_result.fillna(kwargs["fillna"], inplace=True) - result[f"CDL_{n.upper()}"] = pattern_result - - if len(result) == 0: - return - - # Name and Category - df = DataFrame(result) - df.name = "CDL_PATTERN" - df.category = "candle" - return df - -cdl = cdl_pattern # Alias diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/candle/cdl_z.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/candle/cdl_z.py deleted file mode 100644 index 24a5d9e5..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/candle/cdl_z.py +++ /dev/null @@ -1,93 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.statistics import zscore -from pandas_ta.utils import v_bool, v_offset, v_pos_default, v_series - - - -def cdl_z( - open_: Series, high: Series, low: Series, close: Series, - length: Int = None, full: bool = None, ddof: Int = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Z Candles - - Creates candlesticks using a rolling Z Score. - - Sources: - * Kevin Johnson - - Parameters: - open_ (Series): ```open``` Series - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - length (int): The period. Default: ```10``` - full (bool): Apply ```length``` to whole DataFrame. - Default: ```False``` - ddof (int): By default, uses Pandas ```ddof=1```. - For Numpy calculation, use ```0```. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - naive (bool): If ```True```, prefills potential Doji less - than the length if it less than a percentage of it's - High-Low range. Default: ```False``` - fillna (value): Replaces ```na```'s with ```value```. - - Returns: - (DataFrame): 4 columns - - Note: - * Numpy ```std()``` [ddof](https://numpy.org/doc/stable/reference/generated/numpy.std.html) explanation. - """ - # Validate - length = v_pos_default(length, 30) - open_ = v_series(open_, length) - high = v_series(high, length) - low = v_series(low, length) - close = v_series(close, length) - - if open_ is None or high is None or low is None or close is None: - return - - full = v_bool(full, False) - ddof = int(ddof) if isinstance(ddof, int) and 0 <= ddof < length else 1 - offset = v_offset(offset) - - # Calculate - if full: - length = close.size - - z_open = zscore(open_, length=length, ddof=ddof) - z_high = zscore(high, length=length, ddof=ddof) - z_low = zscore(low, length=length, ddof=ddof) - z_close = zscore(close, length=length, ddof=ddof) - - _full = "a" if full else "" - _props = _full if full else f"_{length}_{ddof}" - data = { - f"open_Z{_props}": z_open, - f"high_Z{_props}": z_high, - f"low_Z{_props}": z_low, - f"close_Z{_props}": z_close, - } - df = DataFrame(data, index=close.index) - - if full: - df.fillna(method="backfill", axis=0, inplace=True) - - # Offset - if offset != 0: - df = df.shift(offset) - - # Fill - if "fillna" in kwargs: - df.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - df.name = f"CDL_Z{_props}" - df.category = "candle" - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/candle/ha.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/candle/ha.py deleted file mode 100644 index 59a02971..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/candle/ha.py +++ /dev/null @@ -1,86 +0,0 @@ -# -*- coding: utf-8 -*- -from numba import njit -from numpy import empty_like, maximum, minimum -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import v_offset, v_series - - - -@njit(cache=True) -def np_ha(np_open, np_high, np_low, np_close): - ha_close = 0.25 * (np_open + np_high + np_low + np_close) - ha_open = empty_like(ha_close) - ha_open[0] = 0.5 * (np_open[0] + np_close[0]) - - m = np_close.size - for i in range(1, m): - ha_open[i] = 0.5 * (ha_open[i - 1] + ha_close[i - 1]) - - ha_high = maximum(maximum(ha_open, ha_close), np_high) - ha_low = minimum(minimum(ha_open, ha_close), np_low) - - return ha_open, ha_high, ha_low, ha_close - - -def ha( - open_: Series, high: Series, low: Series, close: Series, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Heikin Ashi Candles - - Creates Japanese _ohlc_ candlesticks that attempts to filter out market - noise. Developed by Munehisa Homma in the 1700s, Heikin Ashi Candles share - some characteristics with standard candlestick charts but creates a - smoother candlestick appearance. - - Sources: - * [Investopedia](https://www.investopedia.com/terms/h/heikinashi.asp) - - Parameters: - open_ (Series): ```open``` Series - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): Replaces ```na```'s with ```value```. - - Returns: - (DataFrame): 4 columns - """ - # Validate - open_ = v_series(open_, 1) - high = v_series(high, 1) - low = v_series(low, 1) - close = v_series(close, 1) - offset = v_offset(offset) - - if open_ is None or high is None or low is None or close is None: - return - - # Calculate - np_open, np_high = open_.to_numpy(), high.to_numpy() - np_low, np_close = low.to_numpy(), close.to_numpy() - ha_open, ha_high, ha_low, ha_close = np_ha(np_open, np_high, np_low, np_close) - df = DataFrame({ - "HA_open": ha_open, - "HA_high": ha_high, - "HA_low": ha_low, - "HA_close": ha_close, - }, index=close.index) - - # Offset - if offset != 0: - df = df.shift(offset) - - # Fill - if "fillna" in kwargs: - df.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - df.name = "Heikin-Ashi" - df.category = "candle" - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/core.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/core.py deleted file mode 100644 index 832a3257..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/core.py +++ /dev/null @@ -1,1834 +0,0 @@ -# -*- coding: utf-8 -*- -from dataclasses import dataclass -from multiprocessing import cpu_count, Pool -from pathlib import Path -from time import perf_counter -from warnings import simplefilter - -from numpy import log, log10, ndarray -from pandas.api.extensions import register_dataframe_accessor -from pandas.errors import PerformanceWarning -from pandas import DataFrame, Series -from pandas import options as pd_options -from tqdm import tqdm - -from pandas_ta._typing import * -from pandas_ta import * - -# Recommended moving forward to Pandas 3 -pd_options.mode.copy_on_write = True - - - -@register_dataframe_accessor("ta") -class AnalysisIndicators(object): - """Pandas DataFrame Extension: "ta" - - The "ta" extension simplifies the processing of concatenating - Technical Analysis indicators onto the existing Pandas DataFrame. - To do so, this extension assumes that the DataFrame includes a DateTime - oriented index and columns named: "open", "high", "low", "close", "volume". - - Returns: - (Series | DataFrame | None): See Notes - - Features: - * Attributes and methods for _ohlcv_ data. - * Indicator Wrappers for each. Simplifies - ```sma = ta.sma(df["Close"]); df["sma"] = sma``` to ```df.ta.sma(append=True)``` - * A ```study``` method, that simplifies processing multiple indicators - with or without multiprocessing. See: ```help(ta.study)``` - - See Also: - * Pandas TA [DataFrame Extension](http://127.0.0.1:8000/docs/api/dataframe/) Documention - * [Pandas DataFrame Accessor](https://pandas.pydata.org/docs/reference/api/pandas.api.extensions.register_dataframe_accessor.html#pandas.api.extensions.register_dataframe_accessor) - - Notes: - Most Indicators will return a Pandas Series. Others like MACD, - BBANDS, KC, et al will return a Pandas DataFrame. Ichimoku on the - other hand will return two DataFrames, the Ichimoku DataFrame for - the known period and a Span DataFrame for the future of the Span values. - - Documentation is formatted for [mkdocs](https://www.mkdocs.org/) and [mkdocs-docstrings](https://mkdocstrings.github.io/). - - Tip: - Remember to adjust the ```cores``` for maximum speed! - """ - # DataFrame Extension Properties/Attributes - _adjusted = None - _cores = cpu_count() - _custom = None - _df = DataFrame() - _ds = "yf" if Imports["yfinance"] else None - _exchange = "NYSE" - _last_run = get_time(_exchange, to_string=True) - _time_range = "years" - - - def __init__(self, obj: SeriesFrame): - v_dataframe(obj) - self._df = obj - self._last_run = get_time(self._exchange, to_string=True) - - - # DataFrame Behavioral Methods - def __call__( - self, kind: str = None, timed: bool = False, - version: bool = False, **kwargs: DictLike - ): - if version: - print(f"Pandas TA - Technical Analysis Indicators - v{version}") - try: - if isinstance(kind, str): - # Get the indicator named "kind" as fn - kind = kind.lower() - - # if kind == "ta": - # self.help() - - fn = getattr(self, kind) - - if timed: - stime = perf_counter() - - # Run the indicator - # Equivalent: fn(**kwargs) = getattr(self, kind)(**kwargs) - result = fn(**kwargs) - - if timed: - result.timed = final_time(stime) - print(f"[+] {kind}: {result.timed}") - - self._last_run = get_time(self.exchange, to_string=True) - return result - else: - self.help() - - except BaseException: - pass - - - @property - def adjusted(self) -> str: - """Get/Set the **adjusted_close** column. - - Parameters: - name (str): The column ```name```, to set as the *adjusted* - column. Default: ```None``` - - Returns: - (str): The *adjusted* column. - """ - return self._adjusted - - - @adjusted.setter - def adjusted(self, name: str) -> None: - if name is not None and isinstance(name, str): - self._adjusted = name - else: - self._adjusted = None - - - @property - def cores(self) -> Int: - """Manage the number of ```cpus``` to utilize for multiprocessing. - - Parameters: - cpus (Int): Number of ```cores``` Default: ```cpu_count()``` - - Returns: - (Int): The number of ```cores``` set for multiprocessing - - !!! tip "Disable multiprocessing" - Set: ```df.ta.cores = 0``` - - !!! warning "Multiprocessing caveats" - * Multiprocessing **will not** work when using the following keys: ```"col_names"```. - * Multiprocessing **may not** work or complete as expected when indicator _chaining_. - * Chained indicators use non-default, _ohlcv_, sources as input Series. - """ - return self._cores - - @cores.setter - def cores(self, cpus: Int) -> None: - _cpus = cpu_count() - if cpus is not None and isinstance(cpus, int): - self._cores = int(cpus) if 0 <= cpus <= _cpus else _cpus - else: - self._cores = _cpus - - - @property - def exchange(self) -> str: - """A label property of the major _exchange_ the _ohlcv_ data is - associated with. - - Parameters: - value (str): The ```exchange```. Must be one of the following - ```ta.EXCHANGE_TZ.keys()```. Default: ```"NYSE"``` - - Returns: - (str): Exchange label - """ - return self._exchange - - @exchange.setter - def exchange(self, value: str) -> None: - if value is not None and isinstance(value, str) and value in EXCHANGE_TZ.keys(): - self._exchange = value - - - @property - def time_range(self) -> IntFloat: - """Useful for annualization. - - Parameters: - value (str): ```"months", "weeks", "days", "hours", "minutes", - "seconds"```. Default: ```"years"``` - - Returns: - (float): Time elapsed between the first and last DateTimeIndex - """ - return total_time(self._df, self._time_range) - - - @time_range.setter - def time_range(self, value: str) -> None: - if value is not None and isinstance(value, str): - self._time_range = value - else: - self._time_range = "years" - - - # Private DataFrame Methods - def _add_prefix_suffix(self, - result: MaybeSeriesFrame = None, **kwargs: DictLike - ) -> MaybeSeriesFrame: - """Add prefix and/or suffix to the result columns""" - if result is None: - return - else: - prefix = suffix = "" - delimiter = kwargs.setdefault("delimiter", "_") - - if "prefix" in kwargs: - prefix = f"{kwargs['prefix']}{delimiter}" - if "suffix" in kwargs: - suffix = f"{delimiter}{kwargs['suffix']}" - - if isinstance(result, Series): - result.name = prefix + result.name + suffix - else: - result.columns = [prefix + column + suffix for column in result.columns] - - - def _append(self, - result: MaybeSeriesFrame = None, **kwargs: DictLike - ) -> MaybeSeriesFrame: - """Appends a Pandas Series or DataFrame columns to self._df.""" - if result is None: return - - if "col_names" in kwargs and not isinstance(kwargs["col_names"], tuple): - # Note: tuple(kwargs["col_names"]) doesn't work - kwargs["col_names"] = (kwargs["col_names"],) - - df = self._df - if isinstance(result, DataFrame): - simplefilter(action="ignore", category=PerformanceWarning) - pd_options.mode.chained_assignment = None - - # Rename the columns if kwargs["col_names"] - if "col_names" in kwargs and isinstance(kwargs["col_names"], tuple): - if len(kwargs["col_names"]) >= len(result.columns): - for col, ind_name in zip(result.columns, kwargs["col_names"]): - df[ind_name] = result.loc[:, col] - else: - print(f"[!] Not enough col_names were specified : got {len(kwargs['col_names'])}, expected {len(result.columns)}.") - return - else: - for i, column in enumerate(result.columns): - df.loc[:, (column)] = result.iloc[:, i] - else: - ind_name = ( - kwargs["col_names"][0] - if "col_names" in kwargs and isinstance(kwargs["col_names"], tuple) - else result.name - ) - df.loc[:, (ind_name)] = result - - - def _check_na_columns(self): - """Returns the columns in which all it's values are na.""" - return [x for x in self._df.columns if all(self._df[x].isna())] - - - def _get_column(self, series: Series | str | None): - """Attempts to get the correct series or 'column' and return it.""" - df = self._df - if df is None: return - - # Explicitly passing a Series to override default. - if isinstance(series, Series): - return series - # Apply default if no series nor a default. - elif series is None: - return df[self.adjusted] if self.adjusted is not None else None - # Ok. So it's a str. - elif isinstance(series, str): - # Return the df column since it's in there. - if series in df.columns: - return df[series] - else: - # Attempt to match the 'series' because it was likely - # misspelled. - matches = df.columns.str.match(series, case=False) - match = [i for i, x in enumerate(matches) if x] - # If found, awesome. Return it or return the 'series'. - NOT_FOUND = f"[X] The '{series}' column was not found in" - cols = ", ".join(list(df.columns)) - - if len(df.columns): NOT_FOUND += f": {cols}" - else: NOT_FOUND += " the DataFrame" - - if len(match): - return df.iloc[:, match[0]] - else: - print(NOT_FOUND) - - - def _indicators_by_category(self, name: str) -> List: - """Returns indicators by Categorical name.""" - return Category[name] if name in self.categories() else None - - - def _mp_worker(self, arguments: Tuple): - """Multiprocessing Worker to handle different Methods.""" - method, args, kwargs = arguments - - if method != "ichimoku": - return getattr(self, method)(*args, **kwargs) - else: - return getattr(self, method)(*args, **kwargs)[0] - - - def _post_process(self, - result: Series | DataFrame, **kwargs: DictLike - ) -> Series | DataFrame: - """Applies any additional modifications to the DataFrame - - * Applies prefixes and/or suffixes - * Appends the result to main DataFrame - """ - verbose = kwargs.pop("verbose", False) - if not isinstance(result, (Series, DataFrame)): - if verbose: - print(f"[X] The result is not a Series or DataFrame.") - return self._df - else: - # Append only specific columns to the dataframe (via - # 'col_numbers':(0,1,3) for example) - result = ( - result.iloc[:, [int(n) for n in kwargs["col_numbers"]]] - if isinstance(result, DataFrame) and - "col_numbers" in kwargs and - kwargs["col_numbers"] is not None else result - ) - # Add prefix/suffix and append to the dataframe - self._add_prefix_suffix(result=result, **kwargs) - - if "append" in kwargs and isinstance(kwargs["append"], bool): - if not kwargs["append"]: - # Issue 388 - No appending, just print to stdout - # No DatetimeIndex could break execution. - print(result) - else: - # Default: Appends result to DataFrame - self._append(result=result, **kwargs) - return result - - - def _study_mode(self, *args: Args) -> Tuple: - """Returns tuple: (name:str, mode:dict)""" - name = "All" - mode = {"all": False, "category": False, "custom": False} - - if len(args) == 0: - mode["all"] = True - else: - _categories = self.categories() - if isinstance(args[0], str): - if args[0].lower() == "all": - name, mode["all"] = name, True - if args[0].lower() in _categories: - name, mode["category"] = args[0], True - - if isinstance(args[0], Study): - study_ = args[0] - if study_.ta is None or study_.name.lower() == "all": - name, mode["all"] = name, True - elif study_.name.lower() in _categories: - name, mode["category"] = study_.name, True - else: - name, mode["custom"] = study_.name, True - - return name, mode - - - # Public DataFrame Methods - def baseline(self, - zero: bool = False, index: int = 0, - k: IntFloat = 1, to_log: bool = False, save: bool = False - ) -> DataFrame: - """baseline - - This method updates the DataFrame _ohlc_ values with a baseline - of ```k=1```. Useful for comparisons. - - Parameters: - zero (bool): Zero the _ohlc_ data. - index (bool): Index to baseline at. - k (IntFloat): Scaler. - to_log (bool): Pre apply ```np.log```. - save (bool): Preserve _ohlc_ when using ```to_log```. - """ - open_ = self._get_column("open") - high = self._get_column("high") - low = self._get_column("low") - close = self._get_column("close") - - zero = v_bool(zero, False) - index = v_pos_default(index, 0) - k = v_scalar(k, 1) - to_log = v_bool(to_log, False) - save = v_bool(save, False) - - if index >= self._df.shape[0]: - index = self._df.shape[0] - 1 - - if to_log: - if save: - self._df["_open"] = open_ - self._df["_high"] = high - self._df["_low"] = low - self._df["_close"] = close - - open_ = log(open_) - high = log(high) - low = log(low) - close = log(close) - - self._df.loc[:, (open_.name)] = k * open_ / open_.iloc[index] - self._df.loc[:, (high.name)] = k * high / high.iloc[index] - self._df.loc[:, (low.name)] = k * low / low.iloc[index] - self._df.loc[:, (close.name)] = k * close / close.iloc[index] - - if zero: - self._df.loc[:, (open_.name)] -= k - self._df.loc[:, (high.name)] -= k - self._df.loc[:, (low.name)] -= k - self._df.loc[:, (close.name)] -= k - - - def categories(self) -> ListStr: - """categories - - List of categories. - - Returns: - (ListStr): List of the indicator categories. - """ - return list(Category.keys()) - - - def constants(self, append: bool, values: Array | List) -> PandasDTypeLike | None: - """constants - - Concatenate / Drop constant(s) to the DataFrame. - - Parameters: - append (bool): Concatenate if ```True```. Drop if ```False```. - Default: ```None``` - values (Array): List/Numpy array of ```values``` to append/drop from - the DataFrame. - - Returns: - (Series, DataFrame, None): Depends upon parameters. - - See Also: - * [TA DataFrame Constants](../support/how-to.md) - """ - if isinstance(values, ndarray) or isinstance(values, list): - if append: - for x in values: - self._df[f"{x}"] = x - return self._df[self._df.columns[-len(values):]] - else: - for x in values: - del self._df[f"{x}"] - - - def datetime_ordered(self) -> bool: - """datetime_ordered - - DataFrame DateTime ordered? - - Returns: - (bool): ```True``` if the DataFrame is DateTime ordered, - otherwise ```False```. - """ - return v_datetime_ordered(self._df) - - - def help(self, s: str ="") -> None | TextIO: - """help - - Help! - - Parameters: - s (str): String to search for. Default: ```""``` - - Returns: - (None | TextIO): Opens web browser to relevant Pandas TA website - page or prints all search keywords. - """ - return help(s) - - - def indicators(self, as_list: bool = None, exclude: ListStr = None) -> TextIO | ListStr: - """indicators - - List indicators. - - Parameters: - as_list (bool): Return as a list. Default: ```False``` - exclude (ListStr): The passed in list will be excluded - from the indicators list. Default: ```None``` - - Returns: - (TextIO | ListStr): Prints list or returns a ```ListStr```. - """ - as_list = bool(as_list) if isinstance(as_list, bool) else False - user_excluded = [] - if isinstance(exclude, list) and len(exclude): - user_excluded = exclude - - # Public DataFrame Extension methods - df_ext_methods = [ - "baseline", - "categories", - "constants", - "datetime_ordered", - "help", - "indicators", - "last_run", - "reverse", - "study", - "ticker", - "to_utc", - ] - # Public df.ta.properties - ta_properties = [ - "adjusted", - "cores", - # "custom", - # "ds", - "exchange", - "time_range" - ] - - # Public non-indicator methods - ta_indicators = list((x for x in dir(DataFrame().ta) if not x.startswith("_") and not x.endswith("_"))) - - # Add Pandas TA methods and properties to be removed - removed = df_ext_methods + ta_properties - - # Add user excluded methods to be removed - if isinstance(user_excluded, list) and len(user_excluded) > 0: - removed += user_excluded - - # Remove the unwanted indicators - [ta_indicators.remove(x) for x in removed] - - if as_list: - return ta_indicators - - indicator_count = len(ta_indicators) - header = f"Pandas TA - Technical Analysis Indicators - v{version}" - - s, _count = f"{header}\n", 0 - if indicator_count > 0: - from pandas_ta.candle.cdl_pattern import ALL_PATTERNS - s += f"\nIndicators and Utilities [{indicator_count}]:\n {', '.join(ta_indicators)}\n" - _count += indicator_count - if Imports["talib"]: - s += f"\nCandle Patterns [{len(ALL_PATTERNS)}]:\n {', '.join(ALL_PATTERNS)}\n" - _count += len(ALL_PATTERNS) - s += f"\nTotal Candles, Indicators and Utilities: {_count}" - print(s) - - - def last_run(self) -> str: - """last_run - - Detailed string of last run time. - - Returns: - (str): Detailed date and time of the lastest run. - """ - return self._last_run - - - def reverse(self) -> None: - """reverse - - Reverse the DataFrame inplace. - - Returns: - (None): DataFrame reversed inplace. - """ - self._df.index = self._df.iloc[::-1].index - - - def study(self, *args: Args, **kwargs: DictLike) -> dataclass: - """study - - Applies the ```ta``` listed in a [```Study```](studies.md). - - Other Parameters: - chunksize (int): Multiprocessing Pool chunksize. - Default: ```df.ta.cores``` - cores (int): Number of Multiprocessing cores. - Default: ```df.ta.cores``` - exclude (ListStr): List of indicator names. Default: ```[]``` - ordered (bool): Run ```ta``` in order. Default: ```True``` - returns (bool): Return the DataFrame. Default: ```False``` - timed (bool): Print the process time. Default: ```False``` - verbose (bool): More verbose output. Default: ```False``` - - Note: Multiprocessing - Multiprocessing is **not** viable or efficient for some cases. - Customize for production. See [Multiprocessing](https://docs.python.org/3.12/library/multiprocessing.html) - for more information. - """ - all_ordered = kwargs.pop("ordered", True) - # Append indicators to the DataFrame by default - kwargs.setdefault("append", True) - # If True, it returns the resultant DataFrame. Default: False - returns = kwargs.pop("returns", False) - - mp_chunksize = kwargs.pop("chunksize", self.cores) - cores = kwargs.pop("cores", self.cores) - self.cores = cores - - # Initialize - initial_column_count = self._df.shape[1] - excluded = ["long_run", "short_run", "tsignals", "xsignals"] - - # Get the Study Name and mode - name, mode = self._study_mode(*args) - - # If All or a Category, exclude user list if any - user_excluded = kwargs.pop("exclude", []) - if isinstance(user_excluded, str) and len(user_excluded) > 1: - user_excluded = [user_excluded] - if mode["all"] or mode["category"]: - excluded += user_excluded - - # Collect the indicators, remove excluded or include kwarg["append"] - if mode["category"]: - ta = self._indicators_by_category(name.lower()) - [ta.remove(x) for x in excluded if x in ta] - elif mode["custom"]: - if hasattr(args[0], "cores") and isinstance(args[0].cores, int): - self.cores = min(args[0].cores, self.cores) - ta = args[0].ta - for kwds in ta: - kwds["append"] = True - elif mode["all"]: - ta = self.indicators(as_list=True, exclude=excluded) - else: - print(f"[X] Study not available.") - return None - - verbose = kwargs.pop("verbose", False) - if verbose: - print(f"[+] Study: {name}\n[i] Indicator arguments: {kwargs}") - if mode["all"] or mode["category"]: - excluded_str = ", ".join(excluded) - print(f"[i] Excluded[{len(excluded)}]: {excluded_str}") - - timed = kwargs.pop("timed", False) - results = [] - use_multiprocessing = True if self.cores > 0 else False - has_col_names = False - - if timed: - stime = perf_counter() - - if use_multiprocessing and mode["custom"]: - # Determine if the Custom Study has "col_names" key - has_col_names = (True if len([ - True for x in ta - if "col_names" in x and isinstance(x["col_names"], tuple) - ]) else False) - - if has_col_names: - use_multiprocessing = False - print(f"[i] Multiprocessing is disabled (cores=0) when using custom \"col_names\".") - - if use_multiprocessing: - _total_ta = len(ta) - with Pool(self.cores) as pool: - # Some magic to optimize chunksize for speed - # based on total ta indicators - if mp_chunksize > _total_ta: - _chunksize = mp_chunksize - 1 - elif mp_chunksize > 0: - _chunksize = mp_chunksize - else: - _chunksize = int(log10(_total_ta)) + 1 - if verbose: - print(f"[i] Multiprocessing {_total_ta} indicators with chunksize {_chunksize} and {self.cores}/{cpu_count()} cpus.") - - results = None - if mode["custom"]: - # Create a list of all the custom indicators into a list - custom_ta = [( - ind["kind"], - ind["params"] if "params" in ind and isinstance(ind["params"], tuple) else (), - {**ind, **kwargs}, - ) for ind in ta] - # Custom multiprocessing pool. Must be ordered for Chained Strategies - # May fix this to cpus if Chaining/Composition if it remains - if verbose: - results = tqdm(pool.map(self._mp_worker, custom_ta, _chunksize), total=len(custom_ta) // _chunksize) - else: - results = pool.map(self._mp_worker, custom_ta, _chunksize) - else: - default_ta = [(ind, tuple(), kwargs) for ind in ta] - tqdm_total = len(default_ta) // _chunksize - # All and Categorical multiprocessing pool. - if all_ordered: - if verbose: - results = tqdm(pool.imap(self._mp_worker, default_ta, _chunksize), total=tqdm_total) # Order over Speed - else: - results = pool.imap(self._mp_worker, default_ta, _chunksize) # Order over Speed - else: - if verbose: - results = tqdm(pool.imap_unordered(self._mp_worker, default_ta, _chunksize), total=tqdm_total) # Speed over Order - else: - results = pool.imap_unordered(self._mp_worker, default_ta, _chunksize) # Speed over Order - if results is None: - print(f"[X] ta.study('{name}') has no results.") - return - - pool.close() - pool.join() - self._last_run = get_time(self.exchange, to_string=True) - - else: - # Without multiprocessing: - if verbose: - _col_msg = f"[i] No multiprocessing. (cores = 0)" - if has_col_names: - _col_msg = f"[i] No multiprocessing support with the 'col_names' keyword." - print(_col_msg) - - if mode["custom"]: - if verbose: - pbar = tqdm(ta, f"[i] Progress") - for ind in pbar: - params = ind["params"] if "params" in ind and isinstance(ind["params"], tuple) else tuple() - getattr(self, ind["kind"])(*params, **{**ind, **kwargs}) - else: - for ind in ta: - params = ind["params"] if "params" in ind and isinstance(ind["params"], tuple) else tuple() - getattr(self, ind["kind"])(*params, **{**ind, **kwargs}) - else: - if verbose: - pbar = tqdm(ta, f"[i] Progress") - for ind in pbar: - getattr(self, ind)(*tuple(), **kwargs) - else: - for ind in ta: - getattr(self, ind)(*tuple(), **kwargs) - self._last_run = get_time(self.exchange, to_string=True) - - # Apply prefixes/suffixes and appends indicator results to the DataFrame - [self._post_process(r, **kwargs) for r in results] - - final_column_count = self._df.shape[1] - _added_columns = final_column_count - initial_column_count - - if verbose: - print(f"[i] Total indicators: {len(ta)}") - print(f"[i] Columns added: {_added_columns}") - print(f"[i] Last Run: {self._last_run}") - if timed: - ft = final_time(stime) - if _added_columns > 0: - avgtd = (perf_counter() - stime) / _added_columns - else: - avgtd = perf_counter() - stime - print(f"[i] Pandas TA Time: {ft} for {_added_columns} columns (avg {avgtd * 1000:2.4f} ms / col)") - - if returns: - return self._df - - - def ticker(self, - ticker: str = None, period: str = None, interval: str = None, - study: Study = None, proxy: dict = None, - timed: bool = False, **kwargs: DictLike - ): - """ticker - - Download Historical _ohlcv_ data as a Pandas DataFrame if _yfinance_ - package is installed. It also can run a ```ta.Study``` afterwards. - - Parameters: - ticker (str): Any string for a ticker you would use - with ```yfinance```. Default: ```"SPY"``` - period (str): See the yfinance ```history()``` method for - more options. Default: ```"max"``` - interval (str): Default: ```"1d"``` - study (ta.Study | str): After downloading, apply ```Study``` - Default: ```None``` - proxy (dict): Proxy dictionary. Default: ```{}``` - timed (bool): Print download time to stdout. Default: ```False``` - - Returns: - (DataFrame | None): _ohlcv_ ```df``` or ```None``` - - Tip: YFinance ```history``` parameters - * [_yfinance_](https://ranaroussi.github.io/yfinance/index.html) - * _yfinance_ [```history()```](https://github.com/ranaroussi/yfinance/blob/main/yfinance/scrapers/history.py) - - Example: - ```py - import panadas as pd - import pandas_ta as ta - - # Simple - df = pd.DataFrame().ta.ticker("SPY", period="2y", timed=True) - - # Built In Study - df = pd.DataFrame().ta.ticker("SPY", period="2y", study=ta.AllStudy, timed=True) - ``` - """ - if self._ds is None: - print(f"[X] Please install yfinance to use this method. (pip install yfinance)") - return - - ticker = v_str(ticker, "SPY") - period = v_str(period, "max") - interval = v_str(interval, "1d") - proxy = proxy if isinstance(proxy, dict) else {} - timed = v_bool(timed, False) - - df, stime = None, None - if self._ds == "yf" and ticker is not None: - import yfinance as yf - yft = yf.Ticker(ticker) - - if timed: stime = perf_counter() - df = yft.history( - period=period, interval=interval, - proxy=proxy, **kwargs - ) - df.name = ticker - else: - return None - - if timed: - df.timed = final_time(stime) - print(f"[+] yf | {ticker}{df.shape}: {df.timed}") - - self._df = df - - if study is not None and isinstance(study, Study): - self.study(study, timed=timed, **kwargs) - - return self._df - - - def to_utc(self) -> None: - """to_utc - - Set the DataFrame index to UTC. - - Returns: - (None): Performs the operation. - """ - self._df = to_utc(self._df) - - - # def version(self) -> str: - # return version - - - # Public DataFrame Methods: Indicators and Utilities - # Candles - def cdl_pattern(self, name: str = "all", offset=None, **kwargs): - open_ = self._get_column(kwargs.pop("open", "open")) - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = cdl_pattern(open_=open_, high=high, low=low, close=close, name=name, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def cdl_z(self, full=None, offset=None, **kwargs): - open_ = self._get_column(kwargs.pop("open", "open")) - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = cdl_z(open_=open_, high=high, low=low, close=close, full=full, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def ha(self, offset=None, **kwargs): - open_ = self._get_column(kwargs.pop("open", "open")) - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = ha(open_=open_, high=high, low=low, close=close, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - # Cycles - def ebsw(self, close=None, length=None, bars=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = ebsw(close=close, length=length, bars=bars, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def reflex(self, close=None, length=None, smooth=None, alpha=None, pi=None, sqrt2=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = reflex(close=close, length=length, smooth=smooth, alpha=alpha, pi=pi, sqrt2=sqrt2, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - # Momentum - def ao(self, fast=None, slow=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - result = ao(high=high, low=low, fast=fast, slow=slow, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def apo(self, fast=None, slow=None, mamode=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = apo(close=close, fast=fast, slow=slow, mamode=mamode, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def bias(self, length=None, mamode=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = bias(close=close, length=length, mamode=mamode, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def bop(self, percentage=False, offset=None, **kwargs): - open_ = self._get_column(kwargs.pop("open", "open")) - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = bop(open_=open_, high=high, low=low, close=close, percentage=percentage, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def brar(self, length=None, scalar=None, drift=None, offset=None, **kwargs): - open_ = self._get_column(kwargs.pop("open", "open")) - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = brar(open_=open_, high=high, low=low, close=close, length=length, scalar=scalar, drift=drift, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def cci(self, length=None, c=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = cci(high=high, low=low, close=close, length=length, c=c, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def cfo(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = cfo(close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def cg(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = cg(close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def cmo(self, length=None, scalar=None, drift=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = cmo(close=close, length=length, scalar=scalar, drift=drift, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def coppock(self, length=None, fast=None, slow=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = coppock(close=close, length=length, fast=fast, slow=slow, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def crsi(self, rsi_length=None, streak_length=None, rank_length=None, drift=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = crsi(close=close, rsi_length=rsi_length, streak_length=streak_length, rank_length=rank_length, drift=drift, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def cti(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = cti(close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def dm(self, drift=None, offset=None, mamode=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - result = dm(high=high, low=low, drift=drift, mamode=mamode, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def er(self, length=None, drift=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = er(close=close, length=length, drift=drift, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def eri(self, length=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = eri(high=high, low=low, close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def exhc(self, length=None, cap=None, asint=None, show_all=None, nozeros=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = exhc(close=close, length=length, cap=cap, asint=asint, show_all=show_all, nozeros=nozeros, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def fisher(self, length=None, signal=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - result = fisher(high=high, low=low, length=length, signal=signal, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def inertia(self, length=None, rvi_length=None, scalar=None, refined=None, thirds=None, mamode=None, drift=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - if refined is not None or thirds is not None: - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - result = inertia(close=close, high=high, low=low, length=length, rvi_length=rvi_length, scalar=scalar, refined=refined, thirds=thirds, mamode=mamode, drift=drift, offset=offset, **kwargs) - else: - result = inertia(close=close, length=length, rvi_length=rvi_length, scalar=scalar, refined=refined, thirds=thirds, mamode=mamode, drift=drift, offset=offset, **kwargs) - - return self._post_process(result, **kwargs) - - def kdj(self, length=None, signal=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = kdj(high=high, low=low, close=close, length=length, signal=signal, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def kst(self, roc1=None, roc2=None, roc3=None, roc4=None, sma1=None, sma2=None, sma3=None, sma4=None, signal=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = kst(close=close, roc1=roc1, roc2=roc2, roc3=roc3, roc4=roc4, sma1=sma1, sma2=sma2, sma3=sma3, sma4=sma4, signal=signal, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def macd(self, fast=None, slow=None, signal=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = macd(close=close, fast=fast, slow=slow, signal=signal, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def mom(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = mom(close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def pgo(self, length=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = pgo(high=high, low=low, close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def ppo(self, fast=None, slow=None, scalar=None, mamode=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = ppo(close=close, fast=fast, slow=slow, scalar=scalar, mamode=mamode, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def psl(self, open_=None, length=None, scalar=None, drift=None, offset=None, **kwargs): - if open_ is not None: - open_ = self._get_column(kwargs.pop("open", "open")) - - close = self._get_column(kwargs.pop("close", "close")) - result = psl(close=close, open_=open_, length=length, scalar=scalar, drift=drift, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def qqe(self, length=None, smooth=None, factor=None, mamode=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = qqe(close=close, length=length, smooth=smooth, factor=factor, mamode=mamode, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def roc(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = roc(close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def rsi(self, length=None, scalar=None, drift=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = rsi(close=close, length=length, scalar=scalar, drift=drift, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def rsx(self, length=None, drift=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = rsx(close=close, length=length, drift=drift, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def rvgi(self, length=None, swma_length=None, offset=None, **kwargs): - open_ = self._get_column(kwargs.pop("open", "open")) - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = rvgi(open_=open_, high=high, low=low, close=close, length=length, swma_length=swma_length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def slope(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = slope(close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def smc(self, abr_length=None, close_length=None, vol_length=None, percent=None, vol_ratio=None, asint=None, mamode=None, talib=None, offset=None, **kwargs): - open_ = self._get_column(kwargs.pop("open", "open")) - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = smc(open_=open_, high=high, low=low, close=close, abr_length=abr_length, close_length=close_length, vol_length=vol_length, percent=percent, vol_ratio=vol_ratio, asint=asint, mamode=mamode, talib=talib, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def smi(self, fast=None, slow=None, signal=None, scalar=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = smi(close=close, fast=fast, slow=slow, signal=signal, scalar=scalar, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def squeeze(self, bb_length=None, bb_std=None, kc_length=None, kc_scalar=None, mom_length=None, mom_smooth=None, use_tr=None, mamode=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = squeeze(high=high, low=low, close=close, bb_length=bb_length, bb_std=bb_std, kc_length=kc_length, kc_scalar=kc_scalar, mom_length=mom_length, mom_smooth=mom_smooth, use_tr=use_tr, mamode=mamode, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def squeeze_pro(self, bb_length=None, bb_std=None, kc_length=None, kc_scalar_wide=None, kc_scalar_normal=None, kc_scalar_narrow=None, mom_length=None, mom_smooth=None, use_tr=None, mamode=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = squeeze_pro(high=high, low=low, close=close, bb_length=bb_length, bb_std=bb_std, kc_length=kc_length, kc_scalar_wide=kc_scalar_wide, kc_scalar_normal=kc_scalar_normal, kc_scalar_narrow=kc_scalar_narrow, mom_length=mom_length, mom_smooth=mom_smooth, use_tr=use_tr, mamode=mamode, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def stc(self, tclength=None, ma1=None, ma2=None, osc=None, fast=None, slow=None, factor=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = stc(close=close, tclength=tclength, ma1=ma1, ma2=ma2, osc=osc, fast=fast, slow=slow, factor=factor, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def stoch(self, k=None, d=None, smooth_k=None, mamode=None, talib=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = stoch(high=high, low=low, close=close, k=k, d=d, smooth_k=smooth_k, mamode=mamode, talib=talib, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def stochf(self, k=None, d=None, mamode=None, talib=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = stochf(high=high, low=low, close=close, k=k, d=d, mamode=mamode, talib=talib, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def stochrsi(self, length=None, rsi_length=None, k=None, d=None, mamode=None, talib=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = stochrsi(high=high, low=low, close=close, length=length, rsi_length=rsi_length, k=k, d=d, mamode=mamode, talib=talib, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def tmo(self, tmo_length=None, calc_length=None, smooth_length=None, mamode=None, compute_momentum=False, normalize_signal=False, offset=None, **kwargs): - open_ = self._get_column(kwargs.pop("open", "open")) - close = self._get_column(kwargs.pop("close", "close")) - result = tmo(open_=open_, close=close, tmo_length=tmo_length, calc_length=calc_length, smooth_length=smooth_length, mamode=mamode, compute_momentum=compute_momentum, normalize_signal=normalize_signal, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def trix(self, length=None, signal=None, scalar=None, drift=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = trix(close=close, length=length, signal=signal, scalar=scalar, drift=drift, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def tsi(self, fast=None, slow=None, drift=None, mamode=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = tsi(close=close, fast=fast, slow=slow, drift=drift, mamode=mamode, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def uo(self, fast=None, medium=None, slow=None, fast_w=None, medium_w=None, slow_w=None, drift=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = uo(high=high, low=low, close=close, fast=fast, medium=medium, slow=slow, fast_w=fast_w, medium_w=medium_w, slow_w=slow_w, drift=drift, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def willr(self, length=None, percentage=True, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = willr(high=high, low=low, close=close, length=length, percentage=percentage, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - # Overlap - def alligator(self, jaw=None, teeth=None, lips=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = alligator(close=close, jaw=jaw, teeth=teeth, lips=lips, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def alma(self, length=None, sigma=None, distribution_offset=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = alma(close=close, length=length, sigma=sigma, distribution_offset=distribution_offset, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def dema(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = dema(close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def ema(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = ema(close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def fwma(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = fwma(close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def hilo(self, high_length=None, low_length=None, mamode=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = hilo(high=high, low=low, close=close, high_length=high_length, low_length=low_length, mamode=mamode, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def hl2(self, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - result = hl2(high=high, low=low, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def hlc3(self, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = hlc3(high=high, low=low, close=close, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def hma(self, length=None, mamode=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = hma(close=close, length=length, mamode=mamode, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def hwma(self, na=None, nb=None, nc=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = hwma(close=close, na=na, nb=nb, nc=nc, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def jma(self, length=None, phase=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = jma(close=close, length=length, phase=phase, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def kama(self, length=None, fast=None, slow=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = kama(close=close, length=length, fast=fast, slow=slow, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def ichimoku(self, tenkan=None, kijun=None, senkou=None, include_chikou=True, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result, span = ichimoku(high=high, low=low, close=close, tenkan=tenkan, kijun=kijun, senkou=senkou, include_chikou=include_chikou, offset=offset, **kwargs) - self._add_prefix_suffix(result, **kwargs) - self._add_prefix_suffix(span, **kwargs) - self._append(result, **kwargs) - # return self._post_process(result, **kwargs), span - return result, span - - def linreg(self, length=None, offset=None, adjust=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = linreg(close=close, length=length, offset=offset, adjust=adjust, **kwargs) - return self._post_process(result, **kwargs) - - def mama(self, fastlimit=None, slowlimit=None, prenan=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = mama(close=close, fastlimit=fastlimit, slowlimit=slowlimit, prenan=prenan, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def mcgd(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = mcgd(close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def midpoint(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = midpoint(close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def midprice(self, length=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - result = midprice(high=high, low=low, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def ohlc4(self, offset=None, **kwargs): - open_ = self._get_column(kwargs.pop("open", "open")) - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = ohlc4(open_=open_, high=high, low=low, close=close, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def pivots(self, method=None, anchor=None, **kwargs): - open_ = self._get_column(kwargs.pop("open", "open")) - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = pivots(open_=open_, high=high, low=low, close=close, method=method, anchor=anchor, **kwargs) - return self._post_process(result, **kwargs) - - def pwma(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = pwma(close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def rma(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = rma(close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def rwi(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = rwi(high=high, low=low, close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def sinwma(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = sinwma(close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def sma(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = sma(close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def smma(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = smma(close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def ssf(self, length=None, everget=None, pi=None, sqrt2=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = ssf(close=close, length=length, everget=everget, pi=pi, sqrt2=sqrt2, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def ssf3(self, length=None, pi=None, sqrt3=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = ssf3(close=close, length=length, pi=pi, sqrt3=sqrt3, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def supertrend(self, length=None, multiplier=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = supertrend(high=high, low=low, close=close, length=length, multiplier=multiplier, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def swma(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = swma(close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def t3(self, length=None, a=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = t3(close=close, length=length, a=a, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def tema(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = tema(close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def trima(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = trima(close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def vidya(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = vidya(close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def wcp(self, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = wcp(high=high, low=low, close=close, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def wma(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = wma(close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def zlma(self, length=None, mamode=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = zlma(close=close, length=length, mamode=mamode, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - # Performance - def log_return(self, length=None, cumulative=False, percent=False, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = log_return(close=close, length=length, cumulative=cumulative, percent=percent, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def percent_return(self, length=None, cumulative=False, percent=False, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = percent_return(close=close, length=length, cumulative=cumulative, percent=percent, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - # Statistics - def entropy(self, length=None, base=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = entropy(close=close, length=length, base=base, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def kurtosis(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = kurtosis(close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def mad(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = mad(close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def median(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = median(close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def quantile(self, length=None, q=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = quantile(close=close, length=length, q=q, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def skew(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = skew(close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def stdev(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = stdev(close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def tos_stdevall(self, length=None, stds=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = tos_stdevall(close=close, length=length, stds=stds, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def variance(self, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = variance(close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def zscore(self, length=None, std=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = zscore(close=close, length=length, std=std, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - # Trend - def adx(self, length=None, lensig=None, mamode=None, scalar=None, drift=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = adx(high=high, low=low, close=close, length=length, lensig=lensig, mamode=mamode, scalar=scalar, drift=drift, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def alphatrend(self, volume=None, src=None, length=None, multiplier=None, threshold=None, lag=None, mamode=None, talib=None, offset=None, **kwargs): - open_ = self._get_column(kwargs.pop("open", "open")) - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - if volume is not None: - volume = self._get_column(kwargs.pop("volume", "volume")) - result = alphatrend(open_=open_, high=high, low=low, close=close, volume=volume, src=src, length=length, multiplier=multiplier, threshold=threshold, lag=lag, mamode=mamode, talib=talib, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def amat(self, fast=None, slow=None, mamode=None, lookback=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = amat(close=close, fast=fast, slow=slow, mamode=mamode, lookback=lookback, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def aroon(self, length=None, scalar=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - result = aroon(high=high, low=low, length=length, scalar=scalar, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def chop(self, length=None, atr_length=None, ln=None, scalar=None, drift=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = chop(high=high, low=low, close=close, length=length, atr_length=atr_length, ln=ln, scalar=scalar, drift=drift, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def cksp(self, p=None, x=None, q=None, mamode=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = cksp(high=high, low=low, close=close, p=p, x=x, q=q, mamode=mamode, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def decay(self, length=None, mode=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = decay(close=close, length=length, mode=mode, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def decreasing(self, length=None, strict=None, asint=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = decreasing(close=close, length=length, strict=strict, asint=asint, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def dpo(self, length=None, centered=True, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = dpo(close=close, length=length, centered=centered, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def ht_trendline(self, talib=None, prenan=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = ht_trendline(close=close, talib=talib, prenan=prenan, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def increasing(self, length=None, strict=None, asint=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = increasing(close=close, length=length, strict=strict, asint=asint, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def long_run(self, fast=None, slow=None, length=None, offset=None, **kwargs): - if fast is None and slow is None: - return self._df - else: - result = long_run(fast=fast, slow=slow, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def psar(self, af0=None, af=None, max_af=None, tv=False, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", None)) - result = psar(high=high, low=low, close=close, af0=af0, af=af, max_af=max_af, tv=tv, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def qstick(self, length=None, offset=None, **kwargs): - open_ = self._get_column(kwargs.pop("open", "open")) - close = self._get_column(kwargs.pop("close", "close")) - result = qstick(open_=open_, close=close, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def rwi(self, length=None, lensig=None, mamode=None, scalar=None, drift=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = rwi(high=high, low=low, close=close, length=length, lensig=lensig, mamode=mamode, scalar=scalar, drift=drift, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def short_run(self, fast=None, slow=None, length=None, offset=None, **kwargs): - if fast is None and slow is None: - return self._df - else: - result = short_run(fast=fast, slow=slow, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def supertrend(self, period=None, multiplier=None, mamode=None, drift=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = supertrend(high=high, low=low, close=close, period=period, multiplier=multiplier, mamode=mamode, drift=drift, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def trendflex(self, close=None, length=None, smooth=None, alpha=None, pi=None, sqrt2=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = trendflex(close=close, length=length, smooth=smooth, alpha=alpha, pi=pi, sqrt2=sqrt2, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def tsignals(self, trend=None, asbool=None, trend_reset=None, trend_offset=None, offset=None, **kwargs): - if trend is None: - return self._df - else: - result = tsignals(trend, asbool=asbool, trend_offset=trend_offset, trend_reset=trend_reset, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def vhf(self, length=None, drift=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = vhf(close=close, length=length, drift=drift, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def vortex(self, drift=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = vortex(high=high, low=low, close=close, drift=drift, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def xsignals(self, signal=None, xa=None, xb=None, above=None, long=None, asbool=None, trend_reset=None, trend_offset=None, offset=None, **kwargs): - if signal is None: - return self._df - else: - result = xsignals(signal=signal, xa=xa, xb=xb, above=above, long=long, asbool=asbool, trend_offset=trend_offset, trend_reset=trend_reset, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def zigzag(self, close=None, legs=None, deviation=None, retrace=None, last_extreme=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - if close is not None: - close = self._get_column(kwargs.pop("close", "close")) - result = zigzag(high=high, low=low, close=close, legs=legs, deviation=deviation, retrace=retrace, last_extreme=last_extreme, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - # Volatility - def aberration(self, length=None, atr_length=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = aberration(high=high, low=low, close=close, length=length, atr_length=atr_length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def accbands(self, length=None, c=None, mamode=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = accbands(high=high, low=low, close=close, length=length, c=c, mamode=mamode, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def atr(self, length=None, mamode=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = atr(high=high, low=low, close=close, length=length, mamode=mamode, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def atrts(self, length=None, ma_length=None, multiplier=None, mamode=None, talib=None, drift=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = atrts(high=high, low=low, close=close, length=length, ma_length=ma_length, multiplier=multiplier, mamode=mamode, talib=talib, drift=drift, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def bbands(self, length=None, lower_std=None, upper_std=None, mamode=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = bbands(close=close, length=length, lower_std=lower_std, upper_std=upper_std, mamode=mamode, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def chandelier_exit(self, high_length=None, low_length=None, atr_length=None, multiplier=None, mamode=None, talib=None, use_close=None, drift=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = chandelier_exit(high=high, low=low, close=close, high_length=high_length, low_length=low_length, atr_length=atr_length, multiplier=multiplier, mamode=mamode, talib=talib, use_close=use_close, drift=drift, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def donchian(self, lower_length=None, upper_length=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - result = donchian(high=high, low=low, lower_length=lower_length, upper_length=upper_length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def hwc(self, na=None, nb=None, nc=None, nd=None, scalar=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = hwc(close=close, na=na, nb=nb, nc=nc, nd=nd, scalar=scalar, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def kc(self, length=None, scalar=None, mamode=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = kc(high=high, low=low, close=close, length=length, scalar=scalar, mamode=mamode, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def massi(self, fast=None, slow=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - result = massi(high=high, low=low, fast=fast, slow=slow, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def natr(self, length=None, mamode=None, scalar=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = natr(high=high, low=low, close=close, length=length, mamode=mamode, scalar=scalar, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def pdist(self, drift=None, offset=None, **kwargs): - open_ = self._get_column(kwargs.pop("open", "open")) - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = pdist(open_=open_, high=high, low=low, close=close, drift=drift, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def rvi(self, length=None, scalar=None, refined=None, thirds=None, mamode=None, drift=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = rvi(high=high, low=low, close=close, length=length, scalar=scalar, refined=refined, thirds=thirds, mamode=mamode, drift=drift, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def thermo(self, long=None, short= None, length=None, mamode=None, drift=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - result = thermo(high=high, low=low, long=long, short=short, length=length, mamode=mamode, drift=drift, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def true_range(self, drift=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - result = true_range(high=high, low=low, close=close, drift=drift, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def ui(self, length=None, scalar=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - result = ui(close=close, length=length, scalar=scalar, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - # Volume - def ad(self, open_=None, signed=True, offset=None, **kwargs): - if open_ is not None: - open_ = self._get_column(kwargs.pop("open", "open")) - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - volume = self._get_column(kwargs.pop("volume", "volume")) - result = ad(high=high, low=low, close=close, volume=volume, open_=open_, signed=signed, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def adosc(self, open_=None, fast=None, slow=None, signed=True, offset=None, **kwargs): - if open_ is not None: - open_ = self._get_column(kwargs.pop("open", "open")) - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - volume = self._get_column(kwargs.pop("volume", "volume")) - result = adosc(high=high, low=low, close=close, volume=volume, open_=open_, fast=fast, slow=slow, signed=signed, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def aobv(self, fast=None, slow=None, mamode=None, max_lookback=None, min_lookback=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - volume = self._get_column(kwargs.pop("volume", "volume")) - result = aobv(close=close, volume=volume, fast=fast, slow=slow, mamode=mamode, max_lookback=max_lookback, min_lookback=min_lookback, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def cmf(self, open_=None, length=None, offset=None, **kwargs): - if open_ is not None: - open_ = self._get_column(kwargs.pop("open", "open")) - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - volume = self._get_column(kwargs.pop("volume", "volume")) - result = cmf(high=high, low=low, close=close, volume=volume, open_=open_, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def efi(self, length=None, mamode=None, offset=None, drift=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - volume = self._get_column(kwargs.pop("volume", "volume")) - result = efi(close=close, volume=volume, length=length, offset=offset, mamode=mamode, drift=drift, **kwargs) - return self._post_process(result, **kwargs) - - def eom(self, length=None, divisor=None, offset=None, drift=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - volume = self._get_column(kwargs.pop("volume", "volume")) - result = eom(high=high, low=low, close=close, volume=volume, length=length, divisor=divisor, offset=offset, drift=drift, **kwargs) - return self._post_process(result, **kwargs) - - def kvo(self, fast=None, slow=None, length_sig=None, mamode=None, offset=None, drift=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - volume = self._get_column(kwargs.pop("volume", "volume")) - result = kvo(high=high, low=low, close=close, volume=volume, fast=fast, slow=slow, length_sig=length_sig, mamode=mamode, offset=offset, drift=drift, **kwargs) - return self._post_process(result, **kwargs) - - def mfi(self, length=None, drift=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - volume = self._get_column(kwargs.pop("volume", "volume")) - result = mfi(high=high, low=low, close=close, volume=volume, length=length, drift=drift, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def nvi(self, length=None, initial=None, signed=True, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - volume = self._get_column(kwargs.pop("volume", "volume")) - result = nvi(close=close, volume=volume, length=length, initial=initial, signed=signed, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def obv(self, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - volume = self._get_column(kwargs.pop("volume", "volume")) - result = obv(close=close, volume=volume, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def pvi(self, length=None, initial=None, mamode=None, overlay=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - volume = self._get_column(kwargs.pop("volume", "volume")) - result = pvi(close=close, volume=volume, length=length, initial=initial, mamode=mamode, overlay=overlay, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def pvo(self, fast=None, slow=None, signal=None, scalar=None, offset=None, **kwargs): - volume = self._get_column(kwargs.pop("volume", "volume")) - result = pvo(volume=volume, fast=fast, slow=slow, signal=signal, scalar=scalar, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def pvol(self, volume=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - volume = self._get_column(kwargs.pop("volume", "volume")) - result = pvol(close=close, volume=volume, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def pvr(self, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - volume = self._get_column(kwargs.pop("volume", "volume")) - result = pvr(close=close, volume=volume) - return self._post_process(result, **kwargs) - - def pvt(self, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - volume = self._get_column(kwargs.pop("volume", "volume")) - result = pvt(close=close, volume=volume, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def tsv(self, length=None, signal=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - volume = self._get_column(kwargs.pop("volume", "volume")) - result = tsv(close=close, volume=volume, signal=signal, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def vhm(self, length=None, std_length=None, offset=None, **kwargs): - volume = self._get_column(kwargs.pop("volume", "volume")) - result = vhm(volume=volume, length=length, std_length=std_length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def vwap(self, anchor=None, offset=None, **kwargs): - high = self._get_column(kwargs.pop("high", "high")) - low = self._get_column(kwargs.pop("low", "low")) - close = self._get_column(kwargs.pop("close", "close")) - volume = self._get_column(kwargs.pop("volume", "volume")) - - if not self.datetime_ordered(): - volume.index = self._df.index - - result = vwap(high=high, low=low, close=close, volume=volume, anchor=anchor, offset=offset, **kwargs) - return self._post_process(result, **kwargs) - - def vwma(self, volume=None, length=None, offset=None, **kwargs): - close = self._get_column(kwargs.pop("close", "close")) - volume = self._get_column(kwargs.pop("volume", "volume")) - result = vwma(close=close, volume=volume, length=length, offset=offset, **kwargs) - return self._post_process(result, **kwargs) diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/custom.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/custom.py deleted file mode 100644 index 2af2044c..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/custom.py +++ /dev/null @@ -1,177 +0,0 @@ -# -*- coding: utf-8 -*- -import importlib -import os -import sys -import types -from glob import glob -from os.path import abspath, basename, exists, join, splitext - -import pandas_ta -from pandas_ta._typing import DictLike - - - -def bind(name: str, fn: types.FunctionType, method: types.MethodType = None): - """Bind - - Helper function to bind the function and class method defined in a custom - indicator module to the active pandas_ta instance. - - Parameters: - name (str): The name of the indicator within pandas_ta - fn (types.FunctionType): The indicator function - method (types.MethodType): The class method corresponding to the passed function - """ - setattr(pandas_ta, name, fn) - setattr(pandas_ta.AnalysisIndicators, name, method) - - -def create_dir(path: str, categories: bool = True, verbose: bool = True): - """Create Dir - - Sets up a suitable folder structure for working with custom indicators. - Use it **once** to setup and initialize the custom folder. - - Parameters: - path (str): Indicator directory full path - categories (bool): Create category sub-folders - verbose (bool): Verbose output - """ - - # ensure that the passed directory exists / is readable - if not exists(path): - os.makedirs(path) - if verbose: - print(f"[i] Created main directory '{path}'.") - - # list the contents of the directory - # dirs = glob(abspath(join(path, '*'))) - - # optionally add any missing category subdirectories - if categories: - for _ in [*pandas_ta.Category]: - d = abspath(join(path, _)) - if not exists(d): - os.makedirs(d) - if verbose: - dirname = basename(d) - print(f"[i] Created an empty sub-directory '{dirname}'.") - - -def get_module_functions(module: types.ModuleType) -> DictLike: - """Get Module Functions - - Returns a dictionary with the mapping: "name" to a _function_. - - Parameters: - module (types.ModuleType): python module - - Returns: - (DictLike): Returns a dictionary with the mapping: "name" to a _function_ - - Example: - Example return - ```py - { - "func1_name": func1, - "func2_name": func2, # ... - } - ``` - """ - module_functions = {} - - for name, item in vars(module).items(): - if isinstance(item, types.FunctionType): - module_functions[name] = item - - return module_functions - - -def import_dir(path: str, verbose: bool = True): - """Import Dir - - Import a directory of custom (proprietary) indicators into Pandas TA. - - Parameters: - path (str): Full path to indicator directory. - verbose (bool): Output process to STDOUT. - """ - # ensure that the passed directory exists / is readable - if not exists(path): - print(f"[X] Unable to read the directory '{path}'.") - return - - # list the contents of the directory - dirs = glob(abspath(join(path, "*"))) - - # traverse full directory, importing all modules found there - for d in dirs: - dirname = basename(d) - - # only look in directories which are valid pandas_ta categories - if dirname not in [*pandas_ta.Category]: - if verbose and dirname not in ["__pycache__", "__init__.py"]: - print( - f"[i] Skipping the sub-directory '{dirname}' since it's not a valid pandas_ta category." - ) - continue - - # for each module found in that category (directory)... - for module in glob(abspath(join(path, dirname, "*.py"))): - module_name = splitext(basename(module))[0] - if module_name not in ["__init__"]: - # ensure that the supplied path is included in our python path - if d not in sys.path: - sys.path.append(d) - - # (re)load the indicator module - module_functions = load_indicator_module(module_name) - - # figure out which of the modules functions to bind to pandas_ta - _callable = module_functions.get(module_name, None) - _method_callable = module_functions.get(f"{module_name}_method", None) - - if _callable == None: - print( - f"[X] Unable to find a function named '{module_name}' in the module '{module_name}.py'." - ) - continue - if _method_callable == None: - missing_method = f"{module_name}_method" - print( - f"[X] Unable to find a method function named '{missing_method}' in the module '{module_name}.py'." - ) - continue - - # add it to the correct category if it's not there yet - if module_name not in pandas_ta.Category[dirname]: - pandas_ta.Category[dirname].append(module_name) - - bind(module_name, _callable, _method_callable) - if verbose: - print( - f"[i] Successfully imported the custom indicator '{module}' into category '{dirname}'." - ) - - -def load_indicator_module(name: str) -> dict: - """ - Helper function to (re)load an indicator module. - - Returns: - dict: module functions mapping - ```{ - "func1_name": func1, - "func2_name": func2, # ... - }``` - - """ - try: - module = importlib.import_module(name) - except Exception as ex: - print(f"[X] An error occurred when attempting to load module {name}: {ex}") - sys.exit(1) - - # reload to refresh previously loaded module - module = importlib.reload(module) - return get_module_functions(module) diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/cycle/__init__.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/cycle/__init__.py deleted file mode 100644 index ae54cda9..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/cycle/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# -*- coding: utf-8 -*- -from .ebsw import ebsw -from .reflex import reflex - -__all__ = [ - "ebsw", - "reflex", -] diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/cycle/ebsw.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/cycle/ebsw.py deleted file mode 100644 index a1824569..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/cycle/ebsw.py +++ /dev/null @@ -1,142 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import cos, exp, mean, nan, pi, roll, sin, sqrt, zeros -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import v_bool, v_offset, v_pos_default, v_series - - - -def ebsw( - close: Series, length: Int = None, bars: Int = None, - initial_version: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Even Better SineWave - - This indicator attempts to quantify market cycles using a low pass filter. - - Sources: - * [rengel8](https://github.com/rengel8) - * J.F.Ehlers 'Cycle Analytics for Traders', 2014 - * [Pandas TA Issue #350](https://github.com/twopirllc/pandas-ta/issues/350) - * [Proreal Code](https://www.prorealcode.com/prorealtime-indicators/even-better-sinewave/) - - Parameters: - close (Series): ```close``` Series - length (int): Max cycle/trend period. Values between ```40-48``` work - as expected with minimum value: ```39```. Default: ```40``` - bars (int): Period of low pass filtering. Default: ```10``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): Replaces ```na```'s with ```value```. - - Returns: - (Series): 1 column - - Note: - The _default_ is more cycle oriented and seems to be less - whipsaw-prune. The older version might offer earlier signals at medium - and stronger reversals. Compared to TradingView, returns very close - results but appears to be one bar earlier. - """ - # Validate - length = v_pos_default(length, 40) - close = v_series(close, length) - - if close is None: - return - - initial_version = v_bool(initial_version, False) - bars = v_pos_default(bars, 10) - offset = v_offset(offset) - - # Calculate - # allow initial version to be used (more responsive/caution!) - m = close.size - if isinstance(initial_version, bool) and initial_version: - # not the default version that is active - alpha1 = hp = 0 # alpha and HighPass - a1 = b1 = c1 = c2 = c3 = 0 - filter_ = power_ = wave = 0 - lastClose = lastHP = 0 - filtHist = [0, 0] # Filter history - - result = [nan for _ in range(0, length - 1)] + [0] - for i in range(length, m): - # HighPass filter cyclic components whose periods are shorter than - # Duration input - alpha1 = (1 - sin(360 / length)) / cos(360 / length) - hp = 0.5 * (1 + alpha1) * (close.iloc[i] - lastClose) + alpha1 * lastHP - - # Smooth with a Super Smoother Filter from equation 3-3 - a1 = exp(-sqrt(2) * pi / bars) - b1 = 2 * a1 * cos(sqrt(2) * 180 / bars) - c2 = b1 - c3 = -1 * a1 * a1 - c1 = 1 - c2 - c3 - filter_ = 0.5 * c1 * (hp + lastHP) + c2 * \ - filtHist[1] + c3 * filtHist[0] - # filter_ = float("{:.8f}".format(float(filter_))) # to fix for - # small scientific notations, the big ones fail - - # 3 Bar average of wave amplitude and power - wave = (filter_ + filtHist[1] + filtHist[0]) / 3 - power_ = (filter_ * filter_ + filtHist[1] * filtHist[1] \ - + filtHist[0] * filtHist[0]) / 3 - # Normalize the Average Wave to Square Root of the Average Power - wave = wave / sqrt(power_) - - # update storage, result - filtHist.append(filter_) # append new filter_ value - # remove first element of list (left) -> updating/trim - filtHist.pop(0) - lastHP = hp - lastClose = close.iloc[i] - result.append(wave) - - else: # Default - lastHP = lastClose = 0 - filtHist = zeros(3) - result = [nan] * (length - 1) + [0] - - angle = 2 * pi / length - alpha1 = (1 - sin(angle)) / cos(angle) - ang = 2 ** .5 * pi / bars - a1 = exp(-ang) - c2 = 2 * a1 * cos(ang) - c3 = -a1 ** 2 - c1 = 1 - c2 - c3 - - for i in range(length, m): - hp = 0.5 * (1 + alpha1) * (close.iloc[i] - lastClose) + alpha1 * lastHP - - # Rotate filters to overwrite oldest value - filtHist = roll(filtHist, -1) - filtHist[-1] = 0.5 * c1 * \ - (hp + lastHP) + c2 * filtHist[1] + c3 * filtHist[0] - - # Wave calculation - wave = mean(filtHist) - rms = sqrt(mean(filtHist ** 2)) - wave = wave / rms - - # Update past values - lastHP = hp - lastClose = close.iloc[i] - result.append(wave) - - ebsw = Series(result, index=close.index) - - # Offset - if offset != 0: - ebsw = ebsw.shift(offset) - - # Fill - if "fillna" in kwargs: - ebsw.fillna(kwargs["fillna"], inplace=True) - # Name and Category - ebsw.name = f"EBSW_{length}_{bars}" - ebsw.category = "cycle" - - return ebsw diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/cycle/reflex.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/cycle/reflex.py deleted file mode 100644 index c5d24111..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/cycle/reflex.py +++ /dev/null @@ -1,115 +0,0 @@ -# -*- coding: utf-8 -*- -from numba import njit -from numpy import cos, exp, nan, sqrt, zeros_like -from pandas import Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.utils import v_offset, v_pos_default, v_series - - - -@njit(cache=True) -def np_reflex(x, n, k, alpha, pi, sqrt2): - m, ratio = x.size, 2 * sqrt2 / k - a = exp(-pi * ratio) - b = 2 * a * cos(180 * ratio) - c = a * a - b + 1 - - _f = zeros_like(x) - _ms = zeros_like(x) - result = zeros_like(x) - - for i in range(2, m): - _f[i] = 0.5 * c * (x[i] + x[i - 1]) + b * _f[i - 1] - a * a * _f[i - 2] - - for i in range(n, m): - slope = (_f[i - n] - _f[i]) / n - - _sum = 0 - for j in range(1, n): - _sum += _f[i] - _f[i - j] + j * slope - _sum /= n - - _ms[i] = alpha * _sum * _sum + (1 - alpha) * _ms[i - 1] - if _ms[i] != 0.0: - result[i] = _sum / sqrt(_ms[i]) - - return result - - -def reflex( - close: Series, length: Int = None, - smooth: Int = None, alpha: IntFloat = None, - pi: IntFloat = None, sqrt2: IntFloat = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Reflex - - This cycle indicator, by John F. Ehlers, attempts to reduce lag. - - Sources: - * [rengel8](https://github.com/rengel8) (2021-08-11) based on the - implementation from "ProRealCode" - * [traders.com](http://traders.com/Documentation/FEEDbk_docs/2020/02/TradersTips.html) - * [prorealcode](https://www.prorealcode.com/prorealtime-indicators/reflex-and-trendflex-indicators-john-f-ehlers/) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```20``` - smooth (int): SuperSmoother period. Default: ```20``` - alpha (float): Alpha weight of Difference Sums. Default: ```0.04``` - pi (float): Ehlers's truncated value: ```3.14159```. - Default: ```3.14159``` - sqrt2 (float): Ehlers's truncated value: ```1.414```. - Default: ```1.414``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): Replaces ```na```'s with ```value```. - - Returns: - (Series): 1 column - - Tip: - This implementation has a separate control parameter for the - internal applied SuperSmoother. - - Note: - John F. Ehlers introduced two indicators within the article - "Reflex: A New Zero-Lag Indicator” in February 2020, TASC magazine. - One of which is Reflex, a lag reduced cycle indicator. Both indicators - (Reflex/Trendflex) are oscillators that complement each other with the - focus for cycle and trend. - """ - # Validate - length = v_pos_default(length, 20) - smooth = v_pos_default(smooth, 20) - _length = max(length, smooth) + 1 - close = v_series(close, _length) - - if close is None: - return - - alpha = v_pos_default(alpha, 0.04) - pi = v_pos_default(pi, 3.14159) - sqrt2 = v_pos_default(sqrt2, 1.414) - offset = v_offset(offset) - - # Calculate - np_close = close.to_numpy() - result = np_reflex(np_close, length, smooth, alpha, pi, sqrt2) - result[:length] = nan - result = Series(result, index=close.index) - - # Offset - if offset != 0: - result = result.shift(offset) - - # Fill - if "fillna" in kwargs: - result.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - result.name = f"REFLEX_{length}_{smooth}_{alpha}" - result.category = "cycle" - - return result diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/ma.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/ma.py deleted file mode 100644 index 92a0814f..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/ma.py +++ /dev/null @@ -1,75 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike -from pandas_ta.overlap.dema import dema -from pandas_ta.overlap.ema import ema -from pandas_ta.overlap.fwma import fwma -from pandas_ta.overlap.hma import hma -from pandas_ta.overlap.linreg import linreg -from pandas_ta.overlap.midpoint import midpoint -from pandas_ta.overlap.pwma import pwma -from pandas_ta.overlap.rma import rma -from pandas_ta.overlap.sinwma import sinwma -from pandas_ta.overlap.sma import sma -from pandas_ta.overlap.ssf import ssf -from pandas_ta.overlap.swma import swma -from pandas_ta.overlap.t3 import t3 -from pandas_ta.overlap.tema import tema -from pandas_ta.overlap.trima import trima -from pandas_ta.overlap.vidya import vidya -from pandas_ta.overlap.wma import wma - - - - -def ma(name: str = None, source: Series = None, **kwargs: DictLike) -> Series: - """MA Selection Utility - - Available MAs: dema, ema, fwma, hma, linreg, midpoint, pwma, rma, - sinwma, sma, ssf, swma, t3, tema, trima, vidya, wma. - - Parameters: - name (str): One of the Available MAs. Default: "ema" - source (Series): Input Series ```source```. - - Other Parameters: - kwargs (**kwargs): Additional args for the MA. - - Returns: - (Series): Selected MA - - Esourceample: - ```py linenums="0" - ema8 = ta.ma("ema", df.close, length=8) - sma50 = ta.ma("sma", df.close, length=50) - pwma10 = ta.ma("pwma", df.close, length=10, asc=False) - ``` - """ - _mas = [ - "dema", "ema", "fwma", "hma", "linreg", "midpoint", "pwma", "rma", - "sinwma", "sma", "ssf", "swma", "t3", "tema", "trima", "vidya", "wma" - ] - if name is None and source is None: - return _mas - elif isinstance(name, str) and name.lower() in _mas: - name = name.lower() - else: # "ema" - name = _mas[1] - - if name == "dema": return dema(source, **kwargs) - elif name == "fwma": return fwma(source, **kwargs) - elif name == "hma": return hma(source, **kwargs) - elif name == "linreg": return linreg(source, **kwargs) - elif name == "midpoint": return midpoint(source, **kwargs) - elif name == "pwma": return pwma(source, **kwargs) - elif name == "rma": return rma(source, **kwargs) - elif name == "sinwma": return sinwma(source, **kwargs) - elif name == "sma": return sma(source, **kwargs) - elif name == "ssf": return ssf(source, **kwargs) - elif name == "swma": return swma(source, **kwargs) - elif name == "t3": return t3(source, **kwargs) - elif name == "tema": return tema(source, **kwargs) - elif name == "trima": return trima(source, **kwargs) - elif name == "vidya": return vidya(source, **kwargs) - elif name == "wma": return wma(source, **kwargs) - else: return ema(source, **kwargs) diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/maps.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/maps.py deleted file mode 100644 index 81fef8c3..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/maps.py +++ /dev/null @@ -1,90 +0,0 @@ -# -*- coding: utf-8 -*- -from importlib.util import find_spec -from pandas_ta._typing import Dict, IntFloat, ListStr - - -Imports: Dict[str, bool] = { - "talib": find_spec("talib") is not None, - "vectorbt": find_spec("vectorbt") is not None, - "yfinance": find_spec("yfinance") is not None, -} - - -# Not ideal and not dynamic but it works. -# TODO: find a dynamic solution later. -Category: Dict[str, ListStr] = { - "candle": [ - "cdl_pattern", "cdl_z", "ha" - ], - "cycle": ["ebsw", "reflex"], - "momentum": [ - "ao", "apo", "bias", "bop", "brar", "cci", "cfo", "cg", "cmo", - "coppock", "crsi", "cti", "er", "eri", "exhc", "fisher", - "inertia", "kdj", "kst", "macd", "mom", "pgo", "ppo", "psl", "qqe", - "roc", "rsi", "rsx", "rvgi", "slope", "smc", "smi", "squeeze", - "squeeze_pro", "stc", "stoch", "stochf", "stochrsi", "tmo", "trix", - "tsi", "uo", "willr" - ], - "overlap": [ - "alligator", "alma", "dema", "ema", "fwma", "hilo", "hl2", "hlc3", - "hma", "hwma", "ichimoku", "jma", "kama", "linreg", "mama", - "mcgd", "midpoint", "midprice", "ohlc4", "pivots", "pwma", "rma", - "sinwma", "sma", "smma", "ssf", "ssf3", "supertrend", "swma", "t3", - "tema", "trima", "vidya", "wcp", "wma", "zlma" - ], - "performance": ["log_return", "percent_return"], - "statistics": [ - "entropy", "kurtosis", "mad", "median", "quantile", "skew", "stdev", - "tos_stdevall", "variance", "zscore" - ], - "trend": [ - "adx", "alphatrend", "amat", "aroon", "chop", "cksp", "decay", - "decreasing", "dpo", "ht_trendline", "increasing", - "long_run", "psar", "qstick", "rwi", "short_run", "trendflex", - "vhf", "vortex", "zigzag" - ], - "volatility": [ - "aberration", "accbands", "atr", "atrts", "bbands", "chandelier_exit", - "donchian", "hwc", "kc", "massi", "natr", "pdist", "rvi", "thermo", - "true_range", "ui" - ], - # Note: "vp" or "Volume Profile" is excluded since it does not - # return a Time Series - "volume": [ - "ad", "adosc", "aobv", "cmf", "efi", "eom", "kvo", "mfi", "nvi", - "obv", "pvi", "pvo", "pvol", "pvr", "pvt", "tsv", "vhm", "vwap", - "vwma" - ], -} - - -CANDLE_AGG: Dict[str, str] = { - "open": "first", - "high": "max", - "low": "min", - "close": "last", - "volume": "sum" -} - - -# https://www.worldtimezone.com/markets24.php -EXCHANGE_TZ: Dict[str, IntFloat] = { - "NZSX": 12, "ASX": 11, - "TSE": 9, "HKE": 8, "SSE": 8, "SGX": 8, - "NSE": 5.5, "DIFX": 4, "RTS": 3, - "JSE": 2, "FWB": 1, "LSE": 1, - "BMF": -2, "NYSE": -4, "TSX": -4, - "GENR": 0 # Generated Data -} - - -RATE: Dict[str, IntFloat] = { - "DAYS_PER_MONTH": 21, - "MINUTES_PER_HOUR": 60, - "MONTHS_PER_YEAR": 12, - "QUARTERS_PER_YEAR": 4, - "TRADING_DAYS_PER_YEAR": 252, # Keep even - "TRADING_HOURS_PER_DAY": 6.5, - "WEEKS_PER_YEAR": 52, - "YEARLY": 1, -} diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/__init__.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/__init__.py deleted file mode 100644 index f773d51f..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/__init__.py +++ /dev/null @@ -1,93 +0,0 @@ -# -*- coding: utf-8 -*- -from .ao import ao -from .apo import apo -from .bias import bias -from .bop import bop -from .brar import brar -from .cci import cci -from .cfo import cfo -from .cg import cg -from .cmo import cmo -from .coppock import coppock -from .crsi import crsi -from .cti import cti -from .dm import dm -from .er import er -from .eri import eri -from .exhc import exhc -from .fisher import fisher -from .inertia import inertia -from .kdj import kdj -from .kst import kst -from .macd import macd -from .mom import mom -from .pgo import pgo -from .ppo import ppo -from .psl import psl -from .qqe import qqe -from .roc import roc -from .rsi import rsi -from .rsx import rsx -from .rvgi import rvgi -from .slope import slope -from .smc import smc -from .smi import smi -from .squeeze import squeeze -from .squeeze_pro import squeeze_pro -from .stc import stc -from .stoch import stoch -from .stochf import stochf -from .stochrsi import stochrsi -from .tmo import tmo -from .trix import trix -from .tsi import tsi -from .uo import uo -from .willr import willr - - -__all__ = [ - "ao", - "apo", - "bias", - "bop", - "brar", - "cci", - "cfo", - "cg", - "cmo", - "coppock", - "crsi", - "cti", - "dm", - "er", - "eri", - "exhc", - "fisher", - "inertia", - "kdj", - "kst", - "macd", - "mom", - "pgo", - "ppo", - "psl", - "qqe", - "roc", - "rsi", - "rsx", - "rvgi", - "slope", - "smc", - "smi", - "squeeze", - "squeeze_pro", - "stc", - "stoch", - "stochf", - "stochrsi", - "tmo", - "trix", - "tsi", - "uo", - "willr", -] diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/ao.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/ao.py deleted file mode 100644 index 71399528..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/ao.py +++ /dev/null @@ -1,66 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.overlap import sma -from pandas_ta.utils import v_offset, v_pos_default, v_series - - - -def ao( - high: Series, low: Series, fast: Int = None, slow: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Awesome Oscillator - - This indicator attempts to identify momentum with the intention to - affirm trends or anticipate possible reversals. - - Sources: - * [ifcm](https://www.ifcm.co.uk/ntx-indicators/awesome-oscillator) - * [tradingview](https://www.tradingview.com/wiki/Awesome_Oscillator_(AO)) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - fast (int): Fast period. Default: ```5``` - slow (int): Slow period. Default: ```34``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - fast = v_pos_default(fast, 5) - slow = v_pos_default(slow, 34) - if slow < fast: - fast, slow = slow, fast - _length = max(fast, slow) - high = v_series(high, _length) - low = v_series(low, _length) - - if high is None or low is None: - return - - offset = v_offset(offset) - - # Calculate - median_price = 0.5 * (high + low) - fast_sma = sma(median_price, fast) - slow_sma = sma(median_price, slow) - ao = fast_sma - slow_sma - - # Offset - if offset != 0: - ao = ao.shift(offset) - - # Fill - if "fillna" in kwargs: - ao.fillna(kwargs["fillna"], inplace=True) - # Name and Category - ao.name = f"AO_{fast}_{slow}" - ao.category = "momentum" - - return ao diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/apo.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/apo.py deleted file mode 100644 index 16775968..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/apo.py +++ /dev/null @@ -1,75 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.ma import ma -from pandas_ta.maps import Imports -from pandas_ta.utils import tal_ma, v_mamode, v_offset -from pandas_ta.utils import v_pos_default, v_series, v_talib - - - -def apo( - close: Series, fast: Int = None, slow: Int = None, - mamode: str = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Absolute Price Oscillator - - This indicator attempts to quantify momentum. - - Sources: - * [tradingtechnologies](https://www.tradingtechnologies.com/xtrader-help/x-study/technical-indicator-definitions/absolute-price-oscillator-apo/) - - Parameters: - close (Series): ```close``` Series - fast (int): Fast period. Default: ```12``` - slow (int): Slow period. Default: ```26``` - mamode (str): See ```help(ta.ma)```. Default: ```"sma"``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Note: - * Simply the difference of two different EMAs. - * APO and MACD lines are equivalent. - """ - # Validate - fast = v_pos_default(fast, 12) - slow = v_pos_default(slow, 26) - if slow < fast: - fast, slow = slow, fast - close = v_series(close, max(fast, slow)) - - if close is None: - return - - mamode = v_mamode(mamode, "sma") - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import APO - apo = APO(close, fast, slow, tal_ma(mamode)) - else: - fastma = ma(mamode, close, length=fast, talib=mode_tal) - slowma = ma(mamode, close, length=slow, talib=mode_tal) - apo = fastma - slowma - - # Offset - if offset != 0: - apo = apo.shift(offset) - - # Fill - if "fillna" in kwargs: - apo.fillna(kwargs["fillna"], inplace=True) - # Name and Category - apo.name = f"APO_{fast}_{slow}" - apo.category = "momentum" - - return apo diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/bias.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/bias.py deleted file mode 100644 index ad7e030b..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/bias.py +++ /dev/null @@ -1,59 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.ma import ma -from pandas_ta.utils import v_mamode, v_offset, v_pos_default, v_series - - - -def bias( - close: Series, length: Int = None, mamode: str = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Bias - - This indicator computes the Rate of Change between the source and a - moving average. - - Sources: - * Few internet resources on definitive definition. - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```26``` - mamode (str): See ```help(ta.ma)```. Default: ```"sma"``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 26) - close = v_series(close, length) - - if close is None: - return - - mamode = v_mamode(mamode, "sma") - offset = v_offset(offset) - - # Calculate - bma = ma(mamode, close, length=length, **kwargs) - bias = (close / bma) - 1 - - # Offset - if offset != 0: - bias = bias.shift(offset) - - # Fill - if "fillna" in kwargs: - bias.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - bias.name = f"BIAS_{bma.name}" - bias.category = "momentum" - - return bias diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/bop.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/bop.py deleted file mode 100644 index 23740edd..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/bop.py +++ /dev/null @@ -1,73 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.maps import Imports -from pandas_ta.utils import ( - non_zero_range, - v_offset, - v_scalar, - v_series, - v_talib -) - - - -def bop( - open_: Series, high: Series, low: Series, close: Series, - scalar: IntFloat = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Balance of Power - - This indicator attempts to quantify the market strength of buyers - versus sellers. - - Sources: - * [worden](http://www.worden.com/TeleChartHelp/Content/Indicators/Balance_of_Power.htm) - - Parameters: - open_ (Series): ```open``` Series - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - scalar (float): Scalar. Default: ```1``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - open_ = v_series(open_) - high = v_series(high) - low = v_series(low) - close = v_series(close) - scalar = v_scalar(scalar, 1) - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal and close.size: - from talib import BOP - bop = BOP(open_, high, low, close) - else: - high_low_range = non_zero_range(high, low) - close_open_range = non_zero_range(close, open_) - bop = scalar * close_open_range / high_low_range - - # Offset - if offset != 0: - bop = bop.shift(offset) - - # Fill - if "fillna" in kwargs: - bop.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - bop.name = f"BOP" - bop.category = "momentum" - - return bop diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/brar.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/brar.py deleted file mode 100644 index c54b93e6..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/brar.py +++ /dev/null @@ -1,93 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.utils import ( - non_zero_range, - v_drift, - v_offset, - v_pos_default, - v_scalar, - v_series -) - - - -def brar( - open_: Series, high: Series, low: Series, close: Series, - length: Int = None, scalar: IntFloat = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """BRAR - - BR and AR - - Sources: - * No internet resources on definitive definition. - - Parameters: - open_ (Series): ```open``` Series - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - length (int): The period. Default: ```26``` - scalar (float): Scalar. Default: ```100``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 2 columns - """ - # Validate - length = v_pos_default(length, 26) - open_ = v_series(open_, length) - high = v_series(high, length) - low = v_series(low, length) - close = v_series(close, length) - - if open_ is None or high is None or low is None or close is None: - return - - scalar = v_scalar(scalar, 100) - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - high_open_range = non_zero_range(high, open_) - open_low_range = non_zero_range(open_, low) - hcy = non_zero_range(high, close.shift(drift)) - cyl = non_zero_range(close.shift(drift), low) - - hcy[hcy < 0] = 0 # Zero negative values - cyl[cyl < 0] = 0 # "" - - ar = scalar * high_open_range.rolling(length).sum() \ - / open_low_range.rolling(length).sum() - - br = scalar * hcy.rolling(length).sum() \ - / cyl.rolling(length).sum() - - # Offset - if offset != 0: - ar = ar.shift(offset) - br = ar.shift(offset) - - # Fill - if "fillna" in kwargs: - ar.fillna(kwargs["fillna"], inplace=True) - br.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = f"_{length}" - ar.name = f"AR{_props}" - br.name = f"BR{_props}" - ar.category = br.category = "momentum" - - data = {ar.name: ar, br.name: br} - df = DataFrame(data, index=close.index) - df.name = f"BRAR{_props}" - df.category = "momentum" - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/cci.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/cci.py deleted file mode 100644 index 1d7071aa..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/cci.py +++ /dev/null @@ -1,75 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.maps import Imports -from pandas_ta.overlap import hlc3, sma -from pandas_ta.statistics import mad -from pandas_ta.utils import v_offset, v_pos_default, v_series, v_talib - - - -def cci( - high: Series, low: Series, close: Series, length: Int = None, - c: IntFloat = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Commodity Channel Index - - This indicator attempts to identify "overbought" and "oversold" levels - relative to a mean. - - Sources: - * [tradingview](https://www.tradingview.com/wiki/Commodity_Channel_Index_(CCI)) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - length (int): The period. Default: ```14``` - c (float): Scaling Constant. Default: ```0.015``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 14) - high = v_series(high, length) - low = v_series(low, length) - close = v_series(close, length) - - if high is None or low is None or close is None: - return - - c = v_pos_default(c, 0.015) - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import CCI - cci = CCI(high, low, close, length) - else: - typical_price = hlc3(high=high, low=low, close=close, talib=mode_tal) - mean_typical_price = sma(typical_price, length=length, talib=mode_tal) - mad_typical_price = mad(typical_price, length=length) - - cci = typical_price - mean_typical_price / (c * mad_typical_price) - - # Offset - if offset != 0: - cci = cci.shift(offset) - - # Fill - if "fillna" in kwargs: - cci.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - cci.name = f"CCI_{length}_{c}" - cci.category = "momentum" - - return cci diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/cfo.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/cfo.py deleted file mode 100644 index df40aa8d..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/cfo.py +++ /dev/null @@ -1,69 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.overlap import linreg -from pandas_ta.utils import ( - v_drift, - v_offset, - v_pos_default, - v_scalar, - v_series -) - - - -def cfo( - close: Series, length: Int = None, - scalar: IntFloat = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Chande Forcast Oscillator - - This indicator attempts to calculate the percentage difference between - the actual price and the Time Series Forecast (the endpoint of a - linear regression line). - - Sources: - * [fmlabs](https://www.fmlabs.com/reference/default.htm?url=ForecastOscillator.htm) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```9``` - scalar (float): Scalar. Default: ```100``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 9) - close = v_series(close, length) - - if close is None: - return - - scalar = v_scalar(scalar, 100) - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - # Finding linear regression of Series - cfo = scalar * (close - linreg(close, length=length, tsf=True)) / close - - # Offset - if offset != 0: - cfo = cfo.shift(offset) - - # Fill - if "fillna" in kwargs: - cfo.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - cfo.name = f"CFO_{length}" - cfo.category = "momentum" - - return cfo diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/cg.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/cg.py deleted file mode 100644 index 581d48ce..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/cg.py +++ /dev/null @@ -1,57 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import v_offset, v_pos_default, v_series, weights - - - -def cg( - close: Series, length: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Center of Gravity - - This indicator, by John Ehlers, attempts to identify turning points with - minimal to zero lag and smoothing. - - Sources: - * [MESA Software](http://www.mesasoftware.com/papers/TheCGOscillator.pdf) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```10``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 10) - close = v_series(close, length) - - if close is None: - return - - offset = v_offset(offset) - - # Calculate - coefficients = range(1, length + 1) - numerator = close.rolling(length).apply(weights(coefficients), raw=True) - cg = -numerator / close.rolling(length).sum() - - # Offset - if offset != 0: - cg = cg.shift(offset) - - # Fill - if "fillna" in kwargs: - cg.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - cg.name = f"CG_{length}" - cg.category = "momentum" - - return cg diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/cmo.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/cmo.py deleted file mode 100644 index 137ed7be..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/cmo.py +++ /dev/null @@ -1,90 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.maps import Imports -from pandas_ta.overlap import rma -from pandas_ta.utils import ( - v_drift, - v_offset, - v_pos_default, - v_scalar, - v_series, - v_talib -) - - - -def cmo( - close: Series, length: Int = None, scalar: IntFloat = None, - talib: bool = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Chande Momentum Oscillator - - This indicator attempts to capture momentum. - - Sources: - * [tradingtechnologies](https://www.tradingtechnologies.com/help/x-study/technical-indicator-definitions/chande-momentum-oscillator-cmo/) - * [tradingview](https://www.tradingview.com/script/hdrf0fXV-Variable-Index-Dynamic-Average-VIDYA/) - - Parameters: - close (Series): ```close``` Series - scalar (float): Scalar. Default: ```100``` - talib (bool): If installed, use TA Lib. Uses EMA if ```False```. - Default: ```True``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Note: - * Overbought around 50 - * Oversold around -50. - """ - # Validate - length = v_pos_default(length, 14) - close = v_series(close, length + 1) - - if close is None: - return - - scalar = v_scalar(scalar, 100) - mode_tal = v_talib(talib) - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import CMO - cmo = CMO(close, length) - else: - mom = close.diff(drift) - positive = mom.copy().clip(lower=0) - negative = mom.copy().clip(upper=0).abs() - - if mode_tal: - pos_ = rma(positive, length) - neg_ = rma(negative, length) - else: - pos_ = positive.rolling(length).sum() - neg_ = negative.rolling(length).sum() - - cmo = scalar * (pos_ - neg_) / (pos_ + neg_) - - # Offset - if offset != 0: - cmo = cmo.shift(offset) - - # Fill - if "fillna" in kwargs: - cmo.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - cmo.name = f"CMO_{length}" - cmo.category = "momentum" - - return cmo diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/coppock.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/coppock.py deleted file mode 100644 index 8070e2ce..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/coppock.py +++ /dev/null @@ -1,70 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.overlap import wma -from pandas_ta.utils import v_offset, v_pos_default, v_series -from .roc import roc - - - -def coppock( - close: Series, length: Int = None, - fast: Int = None, slow: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Coppock Curve - - This indicator, by Edwin Coppock 1962, was originally called the - "Trendex Model", attempts to identify major upturns and downturns. - - Sources: - * [wikipedia](https://en.wikipedia.org/wiki/Coppock_curve) - - Parameters: - close (Series): ```close``` Series - length (int): WMA period. Default: ```10``` - fast (int): Fast ROC period. Default: ```11``` - slow (int): Slow ROC period. Default: ```14``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Note: - Although designed for monthly use, a daily calculation over the same - period length can be made, converting the periods to 294-day and - 231-day rate of changes, and a 210-day WMA. - - """ - # Validate - length = v_pos_default(length, 10) - fast = v_pos_default(fast, 11) - slow = v_pos_default(slow, 14) - _length = length + fast + slow - close = v_series(close, _length) - - if close is None: - return - - offset = v_offset(offset) - - # Calculate - total_roc = roc(close, fast) + roc(close, slow) - coppock = wma(total_roc, length) - - # Offset - if offset != 0: - coppock = coppock.shift(offset) - - # Fill - if "fillna" in kwargs: - coppock.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - coppock.name = f"COPC_{fast}_{slow}_{length}" - coppock.category = "momentum" - - return coppock diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/crsi.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/crsi.py deleted file mode 100644 index 275c9b1b..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/crsi.py +++ /dev/null @@ -1,106 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.maps import Imports -from pandas_ta.momentum.rsi import rsi -from pandas_ta.utils import ( - consecutive_streak, - percent_rank, - v_drift, - v_offset, - v_pos_default, - v_scalar, - v_series, - v_talib, -) - - - -def crsi( - close: Series, rsi_length: Int = None, streak_length: Int = None, - rank_length: Int = None, scalar: IntFloat = None, - talib: bool = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike, -) -> Series: - """Connors Relative Strength Index - - This indicator attempts to identify momentum and potential reversals at - "overbought" or "oversold" conditions. - - Sources: - * [alvarezquanttrading](https://alvarezquanttrading.com/blog/connorsrsi-analysis/) - * [tradingview](https://www.tradingview.com/support/solutions/43000502017-connors-rsi-crsi/) - * An Introduction to ConnorsRSI. Connors Research Trading Strategy Series. - Connors, L., Alvarez, C., & Radtke, M. (2012). ISBN 978-0-9853072-9-5. - - Parameters: - close (Series): ```close``` Series - rsi_length (int): The RSI period. Default: ```3``` - streak_length (int): Streak RSI period. Default: ```2``` - rank_length (int): Percent Rank length. Default: ```100``` - scalar (float): Scalar. Default: ```100``` - talib (bool): If installed, use TA Lib. Default: ```True``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - rsi_length = v_pos_default(rsi_length, 3) - streak_length = v_pos_default(streak_length, 2) - rank_length = v_pos_default(rank_length, 100) - _length = max(rsi_length, streak_length, rank_length) - close = v_series(close, _length) - - if "length" in kwargs: - kwargs.pop("length") - - if close is None: - return None - - scalar = v_scalar(scalar, 100) - mode_tal = v_talib(talib) - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - np_close = close.to_numpy() - streak = Series(consecutive_streak(np_close), index=close.index) - - if Imports["talib"] and mode_tal: - from talib import RSI - _rsi = RSI(close, rsi_length) - _streak_rsi = RSI(streak, streak_length) - else: - # Both TA-lib and Pandas-TA use the Wilder's RSI - # and its smoothing function - _rsi = rsi( - close, length=rsi_length, scalar=scalar, talib=talib, - drift=drift, offset=offset, **kwargs - ) - - _streak_rsi = rsi( - streak, length=streak_length, scalar=scalar, talib=talib, - drift=drift, offset=offset, **kwargs - ) - - _crsi = (_rsi + _streak_rsi + percent_rank(close, rank_length)) / 3.0 - crsi = Series(_crsi, index=close.index) - - # Offset - if offset != 0: - crsi = crsi.shift(offset) - - # Fill - if "fillna" in kwargs: - crsi.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - crsi.name = f"CRSI_{rsi_length}_{streak_length}_{rank_length}" - crsi.category = "momentum" - - return crsi diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/cti.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/cti.py deleted file mode 100644 index f310500f..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/cti.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.overlap import linreg -from pandas_ta.utils import v_offset, v_pos_default, v_series - - - -def cti( - close: Series, length: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Correlation Trend Indicator - - This oscillator, by John Ehlers' in 2020, attempts to identify the - magnitude and direction of a trend using linear regession. - - Note: - This is a wrapper for ```ta.linreg(close, r=True)```. - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```12``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 12) - close = v_series(close, length) - - if close is None: - return - - offset = v_offset(offset) - - # Calculate - cti = linreg(close, length=length, r=True) - - # Offset - if offset != 0: - cti = cti.shift(offset) - - # Fill - if "fillna" in kwargs: - cti.fillna(method=kwargs["fillna"], inplace=True) - - # Name and Category - cti.name = f"CTI_{length}" - cti.category = "momentum" - - return cti diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/dm.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/dm.py deleted file mode 100644 index faaa8fdd..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/dm.py +++ /dev/null @@ -1,94 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.ma import ma -from pandas_ta.maps import Imports -from pandas_ta.utils import ( - v_drift, - v_mamode, - v_offset, - v_pos_default, - v_series, - v_talib, - zero -) - - - -def dm( - high: Series, low: Series, length: Int = None, - mamode: str = None, talib: bool = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Directional Movement - - This indicator, by J. Welles Wilder in 1978, attempts to - determine direction. - - Sources: - * [sierrachart](https://www.sierrachart.com/index.php?page=doc/StudiesReference.php&ID=24&Name=Directional_Movement_Index) - * [tradingview](https://www.tradingview.com/pine-script-reference/#fun_dmi) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - mamode (str): See ```help(ta.ma)```. Default: ```"rma"``` - talib (bool): If installed, use TA Lib. Default: ```True``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 2 columns - """ - # Validate - length = v_pos_default(length, 14) - high = v_series(high, length) - low = v_series(low, length) - - if high is None or low is None: - return - - mamode = v_mamode(mamode, "rma") - mode_tal = v_talib(talib) - drift = v_drift(drift) - offset = v_offset(offset) - - if Imports["talib"] and mode_tal and high.size and low.size: - from talib import MINUS_DM, PLUS_DM - pos = PLUS_DM(high, low, length) - neg = MINUS_DM(high, low, length) - else: - up = high - high.shift(drift) - dn = low.shift(drift) - low - - pos_ = ((up > dn) & (up > 0)) * up - neg_ = ((dn > up) & (dn > 0)) * dn - - pos_ = pos_.apply(zero) - neg_ = neg_.apply(zero) - - # Not the same values as TA Lib's -+DM (Good First Issue) - pos = ma(mamode, pos_, length=length, talib=mode_tal) - neg = ma(mamode, neg_, length=length, talib=mode_tal) - - # Offset - if offset != 0: - pos = pos.shift(offset) - neg = neg.shift(offset) - - # Fill - if "fillna" in kwargs: - pos.fillna(kwargs["fillna"], inplace=True) - neg.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = f"_{length}" - data = {f"DMP{_props}": pos, f"DMN{_props}": neg} - df = DataFrame(data, index=high.index) - df.name = f"DM{_props}" - df.category = "momentum" - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/er.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/er.py deleted file mode 100644 index 2a838eba..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/er.py +++ /dev/null @@ -1,93 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series, concat -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import ( - signals, - v_drift, - v_offset, - v_pos_default, - v_series -) - - - -def er( - close: Series, length: Int = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Efficiency Ratio - - This indicator, by Perry J. Kaufman, attempts to identify market noise - or volatility. - - Sources: - * "New Trading Systems and Methods", Perry J. Kaufman - * [tc2000](https://help.tc2000.com/m/69404/l/749623-kaufman-efficiency-ratio) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Note: - It is calculated by dividing the net change in price movement over - ```n``` periods by the sum of the absolute net changes over the - same ```n``` periods. - """ - # Validate - length = v_pos_default(length, 10) - close = v_series(close, length + 1) - - if close is None: - return - - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - abs_diff = close.diff(length).abs() - abs_volatility = close.diff(drift).abs() - abs_volatility_rsum = abs_volatility.rolling(window=length).sum() - - er = abs_diff / abs_volatility_rsum - - # Offset - if offset != 0: - er = er.shift(offset) - - # Fill - if "fillna" in kwargs: - er.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - er.name = f"ER_{length}" - er.category = "momentum" - - signal_indicators = kwargs.pop("signal_indicators", False) - if not signal_indicators: - return er - else: - signalsdf = concat( - [ - DataFrame({er.name: er}), - signals( - indicator=er, - xa=kwargs.pop("xa", 80), - xb=kwargs.pop("xb", 20), - xseries=kwargs.pop("xseries", None), - xseries_a=kwargs.pop("xseries_a", None), - xseries_b=kwargs.pop("xseries_b", None), - cross_values=kwargs.pop("cross_values", False), - cross_series=kwargs.pop("cross_series", True), - offset=offset, - ), - ], - axis=1, - ) - return signalsdf diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/eri.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/eri.py deleted file mode 100644 index a1c32842..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/eri.py +++ /dev/null @@ -1,75 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.overlap import ema -from pandas_ta.utils import v_offset, v_pos_default, v_series - - - -def eri( - high: Series, low: Series, close: Series, length: Int = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Elder Ray Index - - This indicator, by Dr Alexander Elder, attempts to identify market - strength. - - Sources: - * [admiralmarkets](https://admiralmarkets.com/education/articles/forex-indicators/bears-and-bulls-power-indicator) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - length (int): The period. Default: ```14``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 2 columns - - Note: - * Possible entry signals when used in combination with a trend, - * Bear Power attempts to quantify lower value appeal. - * Bull Power attempts the to quantify higher value appeal. - """ - # Validate - length = v_pos_default(length, 13) - high = v_series(high, length) - low = v_series(low, length) - close = v_series(close, length) - - if high is None or low is None or close is None: - return - - offset = v_offset(offset) - - # Calculate - ema_ = ema(close, length) - bull = high - ema_ - bear = low - ema_ - - # Offset - if offset != 0: - bull = bull.shift(offset) - bear = bear.shift(offset) - - # Fill - if "fillna" in kwargs: - bull.fillna(kwargs["fillna"], inplace=True) - bear.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - bull.name = f"BULLP_{length}" - bear.name = f"BEARP_{length}" - bull.category = bear.category = "momentum" - - data = {bull.name: bull, bear.name: bear} - df = DataFrame(data, index=close.index) - df.name = f"ERI_{length}" - df.category = bull.category - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/exhc.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/exhc.py deleted file mode 100644 index 8e3acb33..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/exhc.py +++ /dev/null @@ -1,110 +0,0 @@ -# -*- coding: utf-8 -*- -from numba import njit -from numpy import clip, cumsum, int64, nan, where -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import ( - nb_ffill, - nb_idiff, - v_bool, - v_int, - v_offset, - v_pos_default, - v_series -) - - - -@njit(cache=True) -def nb_exhc(x, n, cap, lb, ub, show_all): - x_diff = nb_idiff(x, n) - neg_diff, pos_diff = x_diff < 0, x_diff > 0 - - dn_csum = cumsum(neg_diff) - up_csum = cumsum(pos_diff) - - dn = dn_csum - nb_ffill(where(~neg_diff, dn_csum, nan)) - up = up_csum - nb_ffill(where(~pos_diff, up_csum, nan)) - - if cap > 0: - dn = clip(dn, 0, cap) - up = clip(up, 0, cap) - - if show_all: - dn = where(dn == 0, 0, dn) - up = where(up == 0, 0, up) - else: - between_lu = (dn >= lb) & (dn <= ub) - dn = where(between_lu, dn, 0) - up = where(between_lu, up, 0) - - return dn, up - - -def exhc( - close: Series, length: Int = None, cap: Int = None, - asint: bool = None, show_all: bool = None, nozeros: bool = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Exhaustion Count - - This indicator attempts to identify rising/falling exhaustion. - - Sources: - * [demark](https://demark.com) - * [practicaltechnicalanalysis](http://practicaltechnicalanalysis.blogspot.com/2013/01/tom-demark-sequential.html) - - Parameters: - close (Series): Series of close's - length (int): The period. Default: ```4``` - cap (int): Count cap. For no cap, set to ```0```. Default: ```13``` - show_all (bool): Counts 1 - 13. For 6 - 9, set to ```False```. - Default: ```True``` - asint (bool): Returns as ```Int```. Default: ```False``` - nozeros (bool): Replace zeros with ```np.nan```. Default: ```False``` - offset (int): Post shift. Default: ```0``` - - Returns: - (DataFrame): 2 columns - - Note: - Similar to TD Sequential - """ - # Validate - length = v_pos_default(length, 4) - close = v_series(close, length + 1) - - if close is None: - return - - cap = v_int(cap, 13, -1) - show_all = v_bool(show_all, True) - asint = v_bool(asint, False) - nozeros = v_bool(nozeros, False) - offset = v_offset(offset) - - # Calculate - np_close = close.to_numpy() - dn, up = nb_exhc(np_close, length, cap, 6, 9, show_all) - - if asint: - dn = dn.astype(int64) - up = up.astype(int64) - - # Name and Category - data = { - "EXHC_DNa" if show_all else "EXHC_DN": dn, - "EXHC_UPa" if show_all else "EXHC_UP": up - } - df = DataFrame(data, index=close.index) - df.name = "EXHCa" if show_all else "EXHC" - df.category = "momentum" - - if nozeros: - df.replace({0: nan}, inplace=True) - - # Offset - if offset != 0: - df = df.shift(offset) - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/fisher.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/fisher.py deleted file mode 100644 index 12297a60..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/fisher.py +++ /dev/null @@ -1,95 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import isnan, log, nan -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.overlap import hl2 -from pandas_ta.utils import high_low_range, v_offset, v_pos_default, v_series - - - -def fisher( - high: Series, low: Series, length: Int = None, signal: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Fisher Transform - - This indicator attempts to identify significant reversals through - normalization. - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - length (int): The period. Default: ```9``` - signal (int): Signal period. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 2 columns - - Tip: Reversal Signal - When the two lines cross. - """ - # Validate - length = v_pos_default(length, 9) - signal = v_pos_default(signal, 1) - _length = max(length, signal) - high = v_series(high, _length) - low = v_series(low, _length) - - if high is None or low is None: - return - - offset = v_offset(offset) - - # Calculate - hl2_ = hl2(high, low) - highest_hl2 = hl2_.rolling(length).max() - lowest_hl2 = hl2_.rolling(length).min() - - hlr = high_low_range(highest_hl2, lowest_hl2) - hlr[hlr < 0.001] = 0.001 - - position = ((hl2_ - lowest_hl2) / hlr) - 0.5 - - v = 0 - m = high.size - result = [nan for _ in range(0, length - 1)] + [0] - for i in range(length, m): - v = 0.66 * position.iat[i] + 0.67 * v - if v < -0.99: - v = -0.999 - if v > 0.99: - v = 0.999 - result.append(0.5 * (log((1 + v) / (1 - v)) + result[i - 1])) - - fisher = Series(result, index=high.index) - if all(isnan(fisher)): - return # Emergency Break - - signalma = fisher.shift(signal) - - # Offset - if offset != 0: - fisher = fisher.shift(offset) - signalma = signalma.shift(offset) - - # Fill - if "fillna" in kwargs: - fisher.fillna(kwargs["fillna"], inplace=True) - signalma.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = f"_{length}_{signal}" - fisher.name = f"FISHERT{_props}" - signalma.name = f"FISHERTs{_props}" - fisher.category = signalma.category = "momentum" - - data = {fisher.name: fisher, signalma.name: signalma} - df = DataFrame(data, index=high.index) - df.name = f"FISHERT{_props}" - df.category = fisher.category - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/inertia.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/inertia.py deleted file mode 100644 index d902da35..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/inertia.py +++ /dev/null @@ -1,118 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import isnan -from pandas import Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.overlap import linreg -from pandas_ta.utils import ( - v_bool, - v_drift, - v_mamode, - v_offset, - v_pos_default, - v_scalar, - v_series -) -from pandas_ta.volatility import rvi - - - -def inertia( - close: Series, high: Series = None, low: Series = None, - length: Int = None, rvi_length: Int = None, scalar: IntFloat = None, - refined: bool = None, thirds: bool = None, - drift: Int = None, mamode: str = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Inertia - - This indicator, by Donald Dorsey, is the _rvi_ smoothed by the Least Squares - MA. - - Sources: - * Donald Dorsey, some article in September, 1995. - * [sierrachart](https://www.sierrachart.com/index.php?page=doc/StudiesReference.php&ID=285&Name=Inertia) - * [tradingview](https://www.tradingview.com/script/mLZJqxKn-Relative-Volatility-Index/) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - length (int): The period. Default: ```20``` - rvi_length (int): RVI period. Default: ```14``` - refined (bool): Use 'refined' calculation. Default: ```False``` - thirds (bool): Use 'thirds' calculation. Default: ```False``` - mamode (str): See ```help(ta.ma)```. Default: ```"ema"``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Note: - * Negative Inertia when less than 50. - * Positive Inertia when greater than 50. - """ - # Validate - length = v_pos_default(length, 20) - rvi_length = v_pos_default(rvi_length, 14) - _length = 2 * max(length, rvi_length) - min(length, rvi_length) // 2 - 1 - close = v_series(close, _length) - - if close is None: - return - - refined = v_bool(refined, False) - thirds = v_bool(thirds, False) - - if refined or thirds: - high = v_series(high, _length) - low = v_series(low, _length) - if high is None or low is None: - return - - scalar = v_scalar(scalar, 100) - mamode = v_mamode(mamode, "ema") - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - if refined: - _mode = "r" - rvi_ = rvi( - close, high=high, low=low, length=rvi_length, - scalar=scalar, refined=refined, mamode=mamode - ) - elif thirds: - _mode = "t" - rvi_ = rvi( - close, high=high, low=low, length=rvi_length, - scalar=scalar, thirds=thirds, mamode=mamode - ) - else: - _mode = "" - rvi_ = rvi(close, length=rvi_length, scalar=scalar, mamode=mamode) - - if all(isnan(rvi_)): - return # Emergency Break - - inertia = linreg(rvi_, length=length) - if all(isnan(inertia)): - return # Emergency Break - - # Offset - if offset != 0: - inertia = inertia.shift(offset) - - # Fill - if "fillna" in kwargs: - inertia.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = f"_{length}_{rvi_length}" - inertia.name = f"INERTIA{_mode}{_props}" - inertia.category = "momentum" - - return inertia diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/kdj.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/kdj.py deleted file mode 100644 index 32c8a9a5..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/kdj.py +++ /dev/null @@ -1,94 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import ( - non_zero_range, - pd_rma, - v_offset, - v_pos_default, - v_series -) - - - -def kdj( - high: Series, low: Series, close: Series, - length: Int = None, signal: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """KDJ - - This indicator, derived from the Slow Stochastic, includes an - extra signal named the J line. The J line represents the divergence - of the %D value from the %K. - - Sources: - * [anychart](https://docs.anychart.com/Stock_Charts/Technical_Indicators/Mathematical_Description#kdj) - * [prorealcode](https://www.prorealcode.com/prorealtime-indicators/kdj/) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - length (int): The period. Default: ```9``` - signal (int): Signal period. Default: ```3``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 3 columns - - Note: - The J can go beyond ```[0, 100]``` for %K and %D lines when charted. - """ - # Validate - length = v_pos_default(length, 9) - signal = v_pos_default(signal, 3) - _length = length + signal + 1 - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - - if high is None or low is None or close is None: - return - - offset = v_offset(offset) - - # Calculate - highest_high = high.rolling(length).max() - lowest_low = low.rolling(length).min() - - fastk = 100 * (close - lowest_low) / \ - non_zero_range(highest_high, lowest_low) - - k = pd_rma(fastk, n=signal) - d = pd_rma(k, n=signal) - j = 3 * k - 2 * d - - # Offset - if offset != 0: - k = k.shift(offset) - d = d.shift(offset) - j = j.shift(offset) - - # Fill - if "fillna" in kwargs: - k.fillna(kwargs["fillna"], inplace=True) - d.fillna(kwargs["fillna"], inplace=True) - j.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = f"_{length}_{signal}" - k.name = f"K{_props}" - d.name = f"D{_props}" - j.name = f"J{_props}" - k.category = d.category = j.category = "momentum" - - data = {k.name: k, d.name: d, j.name: j} - df = DataFrame(data, index=close.index) - df.name = f"KDJ{_props}" - df.category = "momentum" - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/kst.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/kst.py deleted file mode 100644 index 00bbd517..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/kst.py +++ /dev/null @@ -1,97 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import v_drift, v_offset, v_pos_default, v_series -from .roc import roc - - - -def kst( - close: Series, signal: Int = None, - roc1: Int = None, roc2: Int = None, roc3: Int = None, roc4: Int = None, - sma1: Int = None, sma2: Int = None, sma3: Int = None, sma4: Int = None, - drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """'Know Sure Thing' - - This indicator, by Martin Pring, attempts to capture trends using a - smoothed indicator of four different smoothed ROCs. - - Sources: - * [incrediblecharts](https://www.incrediblecharts.com/indicators/kst.php) - * [tradingview](https://www.tradingview.com/wiki/Know_Sure_Thing_(KST)) - - Parameters: - close (Series): ```close``` Series - roc1 (int): ROC 1 period. Default: ```10``` - roc2 (int): ROC 2 period. Default: ```15``` - roc3 (int): ROC 3 period. Default: ```20``` - roc4 (int): ROC 4 period. Default: ```30``` - sma1 (int): SMA 1 period. Default: ```10``` - sma2 (int): SMA 2 period. Default: ```10``` - sma3 (int): SMA 3 period. Default: ```10``` - sma4 (int): SMA 4 period. Default: ```15``` - signal (int): Signal period. Default: ```9``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 2 columns - """ - # Validate - roc1 = int(roc1) if roc1 and roc1 > 0 else 10 - roc2 = int(roc2) if roc2 and roc2 > 0 else 15 - roc3 = int(roc3) if roc3 and roc3 > 0 else 20 - roc4 = int(roc4) if roc4 and roc4 > 0 else 30 - - sma1 = int(sma1) if sma1 and sma1 > 0 else 10 - sma2 = int(sma2) if sma2 and sma2 > 0 else 10 - sma3 = int(sma3) if sma3 and sma3 > 0 else 10 - sma4 = int(sma4) if sma4 and sma4 > 0 else 15 - - signal = v_pos_default(signal, 9) - _rmax = max(roc1, roc2, roc3, roc4) - _smax = max(sma1, sma2, sma3, sma4) - _length = _rmax + _smax - close = v_series(close, _length) - - if close is None: - return - - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - rocma1 = roc(close, roc1).rolling(sma1).mean() - rocma2 = roc(close, roc2).rolling(sma2).mean() - rocma3 = roc(close, roc3).rolling(sma3).mean() - rocma4 = roc(close, roc4).rolling(sma4).mean() - - kst = 100 * (rocma1 + 2 * rocma2 + 3 * rocma3 + 4 * rocma4) - kst_signal = kst.rolling(signal).mean() - - # Offset - if offset != 0: - kst = kst.shift(offset) - kst_signal = kst_signal.shift(offset) - - # Fill - if "fillna" in kwargs: - kst.fillna(kwargs["fillna"], inplace=True) - kst_signal.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - kst.name = f"KST_{roc1}_{roc2}_{roc3}_{roc4}_{sma1}_{sma2}_{sma3}_{sma4}" - kst_signal.name = f"KSTs_{signal}" - kst.category = kst_signal.category = "momentum" - - data = {kst.name: kst, kst_signal.name: kst_signal} - df = DataFrame(data, index=close.index) - df.name = f"KST_{roc1}_{roc2}_{roc3}_{roc4}_{sma1}_{sma2}_{sma3}_{sma4}_{signal}" - df.category = "momentum" - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/macd.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/macd.py deleted file mode 100644 index 791364c3..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/macd.py +++ /dev/null @@ -1,141 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import concat, DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.maps import Imports -from pandas_ta.overlap import ema -from pandas_ta.utils import ( - signals, - v_offset, - v_pos_default, - v_series, - v_talib -) - - - -def macd( - close: Series, fast: Int = None, slow: Int = None, - signal: Int = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Moving Average Convergence Divergence - - This indicator attempts to identify trends. - - Sources: - * [tradingview](https://www.tradingview.com/wiki/MACD_(Moving_Average_Convergence/Divergence)) - * [tradingview (AS Mode)](https://tr.tradingview.com/script/YFlKXHnP/) - - Parameters: - close (Series): ```close``` Series - fast (int): Fast MA period. Default: ```12``` - slow (int): Slow MA period. Default: ```26``` - signal (int): Signal period. Default: ```9``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - asmode (value): Enable AS version of MACD. Default: ```False``` - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 3 columns - """ - # Validate - fast = v_pos_default(fast, 12) - slow = v_pos_default(slow, 26) - signal = v_pos_default(signal, 9) - if slow < fast: - fast, slow = slow, fast - _length = slow + signal - 1 - close = v_series(close, _length) - - if close is None: - return - - mode_tal = v_talib(talib) - offset = v_offset(offset) - as_mode = kwargs.setdefault("asmode", False) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import MACD - macd, signalma, histogram = MACD(close, fast, slow, signal) - else: - fastma = ema(close, length=fast, talib=mode_tal) - slowma = ema(close, length=slow, talib=mode_tal) - - macd = fastma - slowma - macd_fvi = macd.loc[macd.first_valid_index():, ] - signalma = ema(close=macd_fvi, length=signal, talib=mode_tal) - histogram = macd - signalma - - if as_mode: - macd = macd - signalma - macd_fvi = macd.loc[macd.first_valid_index():, ] - signalma = ema(close=macd_fvi, length=signal, talib=mode_tal) - histogram = macd - signalma - - # Offset - if offset != 0: - macd = macd.shift(offset) - histogram = histogram.shift(offset) - signalma = signalma.shift(offset) - - # Fill - if "fillna" in kwargs: - macd.fillna(kwargs["fillna"], inplace=True) - histogram.fillna(kwargs["fillna"], inplace=True) - signalma.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _asmode = "AS" if as_mode else "" - _props = f"_{fast}_{slow}_{signal}" - macd.name = f"MACD{_asmode}{_props}" - histogram.name = f"MACD{_asmode}h{_props}" - signalma.name = f"MACD{_asmode}s{_props}" - macd.category = histogram.category = signalma.category = "momentum" - - data = { - macd.name: macd, - histogram.name: histogram, - signalma.name: signalma - } - df = DataFrame(data, index=close.index) - df.name = f"MACD{_asmode}{_props}" - df.category = macd.category - - signal_indicators = kwargs.pop("signal_indicators", False) - if not signal_indicators: - return df - else: - signalsdf = concat( - [ - df, - signals( - indicator=histogram, - xa=kwargs.pop("xa", 0), - xb=kwargs.pop("xb", None), - xseries=kwargs.pop("xseries", None), - xseries_a=kwargs.pop("xseries_a", None), - xseries_b=kwargs.pop("xseries_b", None), - cross_values=kwargs.pop("cross_values", True), - cross_series=kwargs.pop("cross_series", True), - offset=offset, - ), - signals( - indicator=macd, - xa=kwargs.pop("xa", 0), - xb=kwargs.pop("xb", None), - xseries=kwargs.pop("xseries", None), - xseries_a=kwargs.pop("xseries_a", None), - xseries_b=kwargs.pop("xseries_b", None), - cross_values=kwargs.pop("cross_values", False), - cross_series=kwargs.pop("cross_series", True), - offset=offset, - ), - ], - axis=1, - ) - - return signalsdf diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/mom.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/mom.py deleted file mode 100644 index 6f6ec352..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/mom.py +++ /dev/null @@ -1,76 +0,0 @@ -# -*- coding: utf-8 -*- -from numba import njit -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.maps import Imports -from pandas_ta.utils import ( - nb_idiff, - v_offset, - v_pos_default, - v_series, - v_talib -) - - - -@njit(cache=True) -def nb_mom(x, n): - return nb_idiff(x, n) - - -def mom( - close: Series, length: Int = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Momentum - - This indicator attempts to quantify speed by using the differences over - a bar length. - - Sources: - * [onlinetradingconcepts](http://www.onlinetradingconcepts.com/TechnicalAnalysis/Momentum.html) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```1``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 10) - close = v_series(close, length + 1) - - if close is None: - return - - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import MOM - mom = MOM(close, length) - else: - np_close = close.to_numpy() - _mom = nb_mom(np_close, length) - mom = Series(_mom, index=close.index) - - # Offset - if offset != 0: - mom = mom.shift(offset) - - # Fill - if "fillna" in kwargs: - mom.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - mom.name = f"MOM_{length}" - mom.category = "momentum" - - return mom diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/pgo.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/pgo.py deleted file mode 100644 index 5fc121d8..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/pgo.py +++ /dev/null @@ -1,68 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.overlap import ema, sma -from pandas_ta.utils import v_offset, v_pos_default, v_series -from pandas_ta.volatility import atr - - - -def pgo( - high: Series, low: Series, close: Series, length: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Pretty Good Oscillator - - This indicator, by Mark Johnson, attempts to identify breakouts for longer - time periods based on the distance of the current bar to its N-day - SMA, expressed in terms of an ATR over a similar length. - - Sources: - * [tradingtechnologies](https://library.tradingtechnologies.com/trade/chrt-ti-pretty-good-oscillator.html) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - length (int): The period. Default: ```14``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Note: Entry - * Long when greater than 3. - * Short when less than -3. - """ - # Validate - length = v_pos_default(length, 14) - _length = 2 * length - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - - if high is None or low is None or close is None: - return - - offset = v_offset(offset) - - # Calculate - pgo = (close - sma(close, length)) \ - / ema(atr(high, low, close, length), length) - - # Offset - if offset != 0: - pgo = pgo.shift(offset) - - # Fill - if "fillna" in kwargs: - pgo.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - pgo.name = f"PGO_{length}" - pgo.category = "momentum" - - return pgo diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/ppo.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/ppo.py deleted file mode 100644 index 71d09079..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/ppo.py +++ /dev/null @@ -1,107 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import isnan -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.ma import ma -from pandas_ta.maps import Imports -from pandas_ta.utils import ( - tal_ma, - v_mamode, - v_offset, - v_pos_default, - v_scalar, - v_series, - v_talib -) - - - -def ppo( - close: Series, fast: Int = None, slow: Int = None, signal: Int = None, - scalar: IntFloat = None, mamode: str = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Percentage Price Oscillator - - Similar to MACD. - - Sources: - * [investopedia](https://www.investopedia.com/terms/p/ppo.asp) - - Parameters: - close (Series): ```close``` Series - fast (int): Fast MA period. Default: ```12``` - slow (int): Slow MA period. Default: ```26``` - signal (int): Signal period. Default: ```9``` - scalar (float): Scalar. Default: ```100``` - mamode (str): See ```help(ta.ma)```. Default: ```"sma"``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 3 columns - """ - # Validate - fast = v_pos_default(fast, 12) - slow = v_pos_default(slow, 26) - signal = v_pos_default(signal, 9) - if slow < fast: - fast, slow = slow, fast - _length = max(fast, slow, signal) - close = v_series(close, _length) - - if close is None: - return - - scalar = v_scalar(scalar, 100) - mamode = v_mamode(mamode, "sma") - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import PPO - ppo = PPO(close, fast, slow, tal_ma(mamode)) - else: - fastma = ma(mamode, close, length=fast, talib=mode_tal) - slowma = ma(mamode, close, length=slow, talib=mode_tal) - ppo = scalar * (fastma - slowma) / slowma - - if all(isnan(ppo)): - return # Emergency Break - - signalma = ma("ema", ppo, length=signal, talib=mode_tal) - histogram = ppo - signalma - - # Offset - if offset != 0: - ppo = ppo.shift(offset) - histogram = histogram.shift(offset) - signalma = signalma.shift(offset) - - # Fill - if "fillna" in kwargs: - ppo.fillna(kwargs["fillna"], inplace=True) - histogram.fillna(kwargs["fillna"], inplace=True) - signalma.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = f"_{fast}_{slow}_{signal}" - ppo.name = f"PPO{_props}" - histogram.name = f"PPOh{_props}" - signalma.name = f"PPOs{_props}" - ppo.category = histogram.category = signalma.category = "momentum" - - data = { - ppo.name: ppo, - histogram.name: histogram, - signalma.name: signalma - } - df = DataFrame(data, index=close.index) - df.name = f"PPO{_props}" - df.category = ppo.category - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/psl.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/psl.py deleted file mode 100644 index 7e1774e9..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/psl.py +++ /dev/null @@ -1,79 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import sign -from pandas import Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.utils import ( - v_drift, - v_offset, - v_pos_default, - v_scalar, - v_series -) - - - -def psl( - close: Series, open_: Series = None, - length: Int = None, scalar: IntFloat = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Psychological Line - - This indicator compares the number of the rising bars to the total number - of bars. In other words, it is the percentage of bars that are above the - previous bar over a given length. - - Sources: - * [quantshare](https://www.quantshare.com/item-851-psychological-line) - - Parameters: - close (Series): ```close``` Series - open_ (Series): ```open``` Series - length (int): The period. Default: ```12``` - scalar (float): Scalar. Default: ```100``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 12) - close = v_series(close, length) - - if close is None: - return - - scalar = v_scalar(scalar, 100) - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - if open_ is not None: - open_ = v_series(open_) - diff = sign(close - open_) - else: - diff = sign(close.diff(drift)) - - diff.fillna(0, inplace=True) - diff[diff <= 0] = 0 # Set negative values to zero - - psl = scalar * diff.rolling(length).sum() / length - - # Offset - if offset != 0: - psl = psl.shift(offset) - - # Fill - if "fillna" in kwargs: - psl.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = f"_{length}" - psl.name = f"PSL{_props}" - psl.category = "momentum" - - return psl diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/qqe.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/qqe.py deleted file mode 100644 index 10aa0769..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/qqe.py +++ /dev/null @@ -1,174 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import isnan, maximum, minimum, nan -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.ma import ma -from pandas_ta.utils import ( - v_drift, - v_mamode, - v_offset, - v_pos_default, - v_scalar, - v_series -) -from .rsi import rsi - - - -def qqe( - close: Series, length: Int = None, - smooth: Int = None, factor: IntFloat = None, - mamode: str = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Quantitative Qualitative Estimation - - This indicator is similar to SuperTrend but uses a Smoothed ```rsi``` - with upper and lower bands. - - Sources: - * [prorealcode](https://www.prorealcode.com/prorealtime-indicators/qqe-quantitative-qualitative-estimation/) - * [tradingpedia](https://www.tradingpedia.com/forex-trading-indicators/quantitative-qualitative-estimation) - * [tradingview](https://www.tradingview.com/script/IYfA9R2k-QQE-MT4/) - - Parameters: - close (Series): ```close``` Series - length (int): RSI period. Default: ```14``` - smooth (int): RSI smoothing period. Default: ```5``` - factor (float): QQE Factor. Default: ```4.236``` - mamode (str): See ```help(ta.ma)```. Default: ```"ema"``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 4 columns - - Tip: Trend - * Long: When the Smoothed RSI crosses the previous upperband. - * Short: When the Smoothed RSI crosses the previous lowerband. - - Note: See also - * QQE.mq5 by EarnForex Copyright © 2010 - * Tim Hyder (2008) version - * Roman Ignatov (2006) version - """ - # Validate - length = v_pos_default(length, 14) - smooth = v_pos_default(smooth, 5) - wilders_length = 2 * length - 1 - _length = wilders_length + smooth - close = v_series(close, _length) - - if close is None: - return - - factor = v_scalar(factor, 4.236) - mamode = v_mamode(mamode, "ema") - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - rsi_ = rsi(close, length) - _mode = mamode.lower()[0] if mamode != "ema" else "" - rsi_ma = ma(mamode, rsi_, length=smooth) - - # RSI MA True Range - rsi_ma_tr = rsi_ma.diff(drift).abs() - if all(isnan(rsi_ma_tr)): - return - - # Double Smooth the RSI MA True Range using Wilder's Length with a default - # width of 4.236. - smoothed_rsi_tr_ma = ma("ema", rsi_ma_tr, length=wilders_length) - if all(isnan(smoothed_rsi_tr_ma)): - return # Emergency Break - dar = factor * ma("ema", smoothed_rsi_tr_ma, length=wilders_length) - if all(isnan(dar)): - return # Emergency Break - - # Create the Upper and Lower Bands around RSI MA. - upperband = rsi_ma + dar - lowerband = rsi_ma - dar - - m = close.size - long = Series(0, index=close.index) - short = Series(0, index=close.index) - trend = Series(1, index=close.index) - qqe = Series(rsi_ma.iat[0], index=close.index) - qqe_long = Series(nan, index=close.index) - qqe_short = Series(nan, index=close.index) - - for i in range(1, m): - c_rsi, p_rsi = rsi_ma.iat[i], rsi_ma.iat[i - 1] - c_long, p_long = long.iat[i - 1], long.iat[i - 2] - c_short, p_short = short.iat[i - 1], short.iat[i - 2] - - # Long Line - if p_rsi > c_long and c_rsi > c_long: - long.iat[i] = maximum(c_long, lowerband.iat[i]) - else: - long.iat[i] = lowerband.iat[i] - - # Short Line - if p_rsi < c_short and c_rsi < c_short: - short.iat[i] = minimum(c_short, upperband.iat[i]) - else: - short.iat[i] = upperband.iat[i] - - # Trend & QQE Calculation - # Long: Current RSI_MA value Crosses the Prior Short Line Value - # Short: Current RSI_MA Crosses the Prior Long Line Value - if (c_rsi > c_short and p_rsi < p_short) or \ - (c_rsi <= c_short and p_rsi >= p_short): - trend.iat[i] = 1 - qqe.iat[i] = qqe_long.iat[i] = long.iat[i] - elif (c_rsi > c_long and p_rsi < p_long) or \ - (c_rsi <= c_long and p_rsi >= p_long): - trend.iat[i] = -1 - qqe.iat[i] = qqe_short.iat[i] = short.iat[i] - else: - trend.iat[i] = trend.iat[i - 1] - if trend.iat[i] == 1: - qqe.iat[i] = qqe_long.iat[i] = long.iat[i] - else: - qqe.iat[i] = qqe_short.iat[i] = short.iat[i] - - # Offset - if offset != 0: - rsi_ma = rsi_ma.shift(offset) - qqe = qqe.shift(offset) - long = long.shift(offset) - short = short.shift(offset) - - # Fill - if "fillna" in kwargs: - rsi_ma.fillna(kwargs["fillna"], inplace=True) - qqe.fillna(kwargs["fillna"], inplace=True) - qqe_long.fillna(kwargs["fillna"], inplace=True) - qqe_short.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = f"{_mode}_{length}_{smooth}_{factor}" - qqe.name = f"QQE{_props}" - rsi_ma.name = f"QQE{_props}_RSI{_mode.upper()}MA" - qqe_long.name = f"QQEl{_props}" - qqe_short.name = f"QQEs{_props}" - qqe.category = rsi_ma.category = "momentum" - qqe_long.category = qqe_short.category = qqe.category - - data = { - qqe.name: qqe, - rsi_ma.name: rsi_ma, - # long.name: long, - # short.name: short - qqe_long.name: qqe_long, - qqe_short.name: qqe_short - } - df = DataFrame(data, index=close.index) - df.name = f"QQE{_props}" - df.category = qqe.category - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/roc.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/roc.py deleted file mode 100644 index c7d3bcf5..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/roc.py +++ /dev/null @@ -1,84 +0,0 @@ -# -*- coding: utf-8 -*- -from numba import njit -from pandas import Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.maps import Imports -from pandas_ta.utils import ( - nb_idiff, - nb_shift, - v_offset, - v_pos_default, - v_scalar, - v_series, - v_talib -) -# from .mom import mom - - - -@njit(cache=True) -def nb_roc(x, n, k): - return k * nb_idiff(x, n) / nb_shift(x, n) - - -def roc( - close: Series, length: Int = None, - scalar: IntFloat = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Rate of Change - - This indicator, also (confusingly) known as Momentum, is a pure - oscillator that quantifies the percent change. - - Sources: - * [tradingview](https://www.tradingview.com/wiki/Rate_of_Change_(ROC)) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```10``` - scalar (float): Scalar. Default: ```100``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 10) - close = v_series(close, length + 1) - - if close is None: - return - - scalar = v_scalar(scalar, 100) - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import ROC - roc = ROC(close, length) - else: - # roc = scalar * mom(close=close, length=length, talib=mode_tal) \ - # / close.shift(length) - np_close = close.to_numpy() - _roc = nb_roc(np_close, length, scalar) - roc = Series(_roc, index=close.index) - - # Offset - if offset != 0: - roc = roc.shift(offset) - - # Fill - if "fillna" in kwargs: - roc.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - roc.name = f"ROC_{length}" - roc.category = "momentum" - - return roc diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/rsi.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/rsi.py deleted file mode 100644 index b4d51d5e..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/rsi.py +++ /dev/null @@ -1,115 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series, concat -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.maps import Imports -from pandas_ta.ma import ma -from pandas_ta.utils import ( - signals, - v_drift, - v_mamode, - v_offset, - v_pos_default, - v_scalar, - v_series, - v_talib -) - - - -def rsi( - close: Series, length: Int = None, scalar: IntFloat = None, - mamode: str = None, talib: bool = None, - drift: Int = None, offset: Int = None, - **kwargs: DictLike -) -> Series: - """Relative Strength Index - - This oscillator used to attempts to quantify "velocity" and "magnitude". - - Sources: - * [tradingview](https://www.tradingview.com/wiki/Relative_Strength_Index_(RSI)) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```14``` - scalar (float): Scalar. Default: ```100``` - mamode (str): See ```help(ta.ma)```. Default: ```"rma"``` - talib (bool): If installed, use TA Lib. Default: ```True``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Warning: - TA-Lib Correlation: ```np.float64(0.9289853267851295)``` - - Tip: - Corrective contributions welcome! - """ - # Validate - length = v_pos_default(length, 14) - close = v_series(close, length + 1) - - if close is None: - return - - scalar = v_scalar(scalar, 100) - mamode = v_mamode(mamode, "rma") - mode_tal = v_talib(talib) - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import RSI - rsi = RSI(close, length) - else: - negative = close.diff(drift) - positive = negative.copy() - - positive[positive < 0] = 0 # Make negatives 0 for the positive series - negative[negative > 0] = 0 # Make positives 0 for the negative series - - positive_avg = ma(mamode, positive, length=length, talib=mode_tal) - negative_avg = ma(mamode, negative, length=length, talib=mode_tal) - - rsi = scalar * positive_avg / (positive_avg + negative_avg.abs()) - - # Offset - if offset != 0: - rsi = rsi.shift(offset) - - # Fill - if "fillna" in kwargs: - rsi.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - rsi.name = f"RSI_{length}" - rsi.category = "momentum" - - signal_indicators = kwargs.pop("signal_indicators", False) - if not signal_indicators: - return rsi - else: - signalsdf = concat( - [ - DataFrame({rsi.name: rsi}), - signals( - indicator=rsi, - xa=kwargs.pop("xa", 80), - xb=kwargs.pop("xb", 20), - xseries=kwargs.pop("xseries", None), - xseries_a=kwargs.pop("xseries_a", None), - xseries_b=kwargs.pop("xseries_b", None), - cross_values=kwargs.pop("cross_values", False), - cross_series=kwargs.pop("cross_series", True), - offset=offset, - ), - ], - axis=1, - ) - return signalsdf diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/rsx.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/rsx.py deleted file mode 100644 index c028a2e8..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/rsx.py +++ /dev/null @@ -1,148 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import nan -from pandas import DataFrame, Series, concat -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import ( - signals, - v_drift, - v_offset, - v_pos_default, - v_series -) - - - -def rsx( - close: Series, length: Int = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Relative Strength Xtra - - This indicator, by Jurik Research, is an enhanced version of the RSI which - attemps to reduce noise and provide a clearer, though slightly - delayed, signal. - - Sources: - * [jurikres](http://www.jurikres.com/catalog1/ms_rsx.htm) - * [prorealcode](https://www.prorealcode.com/prorealtime-indicators/jurik-rsx/) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```14``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 14) - close = v_series(close, length) - - if close is None: - return - - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - m = close.size - vC, v1C = 0, 0 - v4, v8, v10, v14, v18, v20 = 0, 0, 0, 0, 0, 0 - - f0, f8, f10, f18, f20, f28, f30, f38 = 0, 0, 0, 0, 0, 0, 0, 0 - f40, f48, f50, f58, f60, f68, f70, f78 = 0, 0, 0, 0, 0, 0, 0, 0 - f80, f88, f90 = 0, 0, 0 - - result = [nan for _ in range(0, length - 1)] + [50] - for i in range(length, m): - if f90 == 0: - f90 = 1.0 - f0 = 0.0 - if length - 1.0 >= 5: - f88 = length - 1.0 - else: - f88 = 5.0 - f8 = 100.0 * close.iat[i] - f18 = 3.0 / (length + 2.0) - f20 = 1.0 - f18 - else: - if f88 <= f90: - f90 = f88 + 1 - else: - f90 = f90 + 1 - f10 = f8 - f8 = 100 * close.iat[i] - v8 = f8 - f10 - f28 = f20 * f28 + f18 * v8 - f30 = f18 * f28 + f20 * f30 - vC = 1.5 * f28 - 0.5 * f30 - f38 = f20 * f38 + f18 * vC - f40 = f18 * f38 + f20 * f40 - v10 = 1.5 * f38 - 0.5 * f40 - f48 = f20 * f48 + f18 * v10 - f50 = f18 * f48 + f20 * f50 - v14 = 1.5 * f48 - 0.5 * f50 - f58 = f20 * f58 + f18 * abs(v8) - f60 = f18 * f58 + f20 * f60 - v18 = 1.5 * f58 - 0.5 * f60 - f68 = f20 * f68 + f18 * v18 - f70 = f18 * f68 + f20 * f70 - v1C = 1.5 * f68 - 0.5 * f70 - f78 = f20 * f78 + f18 * v1C - f80 = f18 * f78 + f20 * f80 - v20 = 1.5 * f78 - 0.5 * f80 - - if f88 >= f90 and f8 != f10: - f0 = 1.0 - if f88 == f90 and f0 == 0.0: - f90 = 0.0 - - if f88 < f90 and v20 > 0.0000000001: - v4 = (v14 / v20 + 1.0) * 50.0 - if v4 > 100.0: - v4 = 100.0 - if v4 < 0.0: - v4 = 0.0 - else: - v4 = 50.0 - result.append(v4) - rsx = Series(result, index=close.index) - - # Offset - if offset != 0: - rsx = rsx.shift(offset) - - # Fill - if "fillna" in kwargs: - rsx.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - rsx.name = f"RSX_{length}" - rsx.category = "momentum" - - signal_indicators = kwargs.pop("signal_indicators", False) - if not signal_indicators: - return rsx - else: - signalsdf = concat( - [ - DataFrame({rsx.name: rsx}), - signals( - indicator=rsx, - xa=kwargs.pop("xa", 80), - xb=kwargs.pop("xb", 20), - xseries=kwargs.pop("xseries", None), - xseries_a=kwargs.pop("xseries_a", None), - xseries_b=kwargs.pop("xseries_b", None), - cross_values=kwargs.pop("cross_values", False), - cross_series=kwargs.pop("cross_series", True), - offset=offset, - ), - ], - axis=1 - ) - return signalsdf diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/rvgi.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/rvgi.py deleted file mode 100644 index da302012..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/rvgi.py +++ /dev/null @@ -1,87 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import isnan -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.overlap import swma -from pandas_ta.utils import non_zero_range, v_offset, v_pos_default, v_series - - - -def rvgi( - open_: Series, high: Series, low: Series, close: Series, - length: Int = None, swma_length: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Relative Vigor Index - - This indicator attempts to quantify the strength of a trend relative to - its trading range. - - Sources: - * [investopedia](https://www.investopedia.com/terms/r/relative_vigor_index.asp) - - Parameters: - open_ (Series): ```open``` Series - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - length (int): The period. Default: ```14``` - swma_length (int): SWMA period. Default: ```4``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 14) - swma_length = v_pos_default(swma_length, 4) - _length = length + swma_length - 1 - open_ = v_series(open_, _length) - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - - if open_ is None or high is None or low is None or close is None: - return - - offset = v_offset(offset) - - # Calculate - high_low_range = non_zero_range(high, low) - close_open_range = non_zero_range(close, open_) - - numerator = swma(close_open_range, length=swma_length) \ - .rolling(length).sum() - denominator = swma(high_low_range, length=swma_length) \ - .rolling(length).sum() - - rvgi = numerator / denominator - signal = swma(rvgi, length=swma_length) - - if all(isnan(signal.to_numpy())): - return # Emergency Break - - # Offset - if offset != 0: - rvgi = rvgi.shift(offset) - signal = signal.shift(offset) - - # Fill - if "fillna" in kwargs: - rvgi.fillna(kwargs["fillna"], inplace=True) - signal.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - rvgi.name = f"RVGI_{length}_{swma_length}" - signal.name = f"RVGIs_{length}_{swma_length}" - rvgi.category = signal.category = "momentum" - - data = {rvgi.name: rvgi, signal.name: signal} - df = DataFrame(data, index=close.index) - df.name = f"RVGI_{length}_{swma_length}" - df.category = rvgi.category - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/slope.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/slope.py deleted file mode 100644 index ebe36e68..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/slope.py +++ /dev/null @@ -1,71 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import arctan, rad2deg -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import ( - nb_idiff, - v_bool, - v_offset, - v_pos_default, - v_series -) - - - -def slope( - close: Series, length: Int = None, - as_angle: bool = None, to_degrees: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Slope - - Calculates a rolling slope. - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```1``` - as_angle (bool): Converts slope to an angle in radians - per ```np.arctan()```. Default: ```False``` - to_degrees (value): If ```as_angle=True```, converts radians to - degrees. Default: ```False``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 1) - close = v_series(close, length + 1) - - if close is None: - return - - as_angle = v_bool(as_angle, False) - to_degrees = v_bool(to_degrees, False) - offset = v_offset(offset) - - # Calculate - np_close = close.to_numpy() - _slope = nb_idiff(np_close, length) / length - if as_angle: - _slope = arctan(_slope) - if to_degrees: - _slope = rad2deg(_slope) - slope = Series(_slope, index=close.index) - - # Offset - if offset != 0: - slope = slope.shift(offset) - - # Fill - if "fillna" in kwargs: - slope.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - slope.name = f"SLOPE_{length}" if not as_angle else f"ANGLE{'d' if to_degrees else 'r'}_{length}" - slope.category = "momentum" - - return slope diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/smc.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/smc.py deleted file mode 100644 index b47da384..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/smc.py +++ /dev/null @@ -1,118 +0,0 @@ -# -*- coding: utf-8 -*- -from sys import float_info as sflt -from numpy import maximum, minimum -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.ma import ma -from pandas_ta.utils import ( - v_bool, - v_mamode, - v_offset, - v_pos_default, - v_scalar, - v_series, - v_talib -) - - -def smc( - open_: Series, high: Series, low: Series, close: Series, - abr_length: Int = None, close_length: Int = None, vol_length: Int = None, - percent: Int = None, vol_ratio: IntFloat = None, asint: bool = None, - mamode: str = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> DictLike: - """Smart Money Concept - - This indicator combines several techniques in an attempt to identify - significant movements that might indicate "smart money" actions. - It uses candlestick patterns, moving averages, and imbalance calculations. - - Sources: - * [tradingview](https://www.tradingview.com/script/CnB3fSph-Smart-Money-Concepts-LuxAlgo/) - - Parameters: - abr_length (int): ABR length. Default: ```14``` - close_length (int): The ```close``` MA period. Default: ```50``` - vol_length (int): Volatility period. Default: ```20``` - percent (int): Percent of wick that exceeds the body. Default: ```5``` - vol_ratio (float): Volatility ratio (high) limit. Default: ```1.5``` - asint (bool): Returns as ```Int```. Default: ```True``` - mamode (str): See ```help(ta.ma)```. Default: ```"sma"``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Returns: - (DataFrame): 7 columns - """ - # Validate - abr_length = v_pos_default(abr_length, 14) - close_length = v_pos_default(close_length, 50) - vol_length = v_pos_default(vol_length, 20) - if close_length < abr_length: - abr_length, close_length = close_length, abr_length - _length = max(abr_length, close_length, vol_length) + 1 - - open_ = v_series(open_, _length) - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - - if open_ is None or high is None or low is None or close is None: - return - - percent = v_pos_default(percent, 5) - body_percent = 0.01 * percent - vol_ratio = v_scalar(vol_ratio, 1.5) - asint = v_bool(asint) - mamode = v_mamode(mamode, "sma") - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - body_high, body_low = maximum(open_, close), minimum(open_, close) - body = body_high - body_low + sflt.epsilon - close_ma = ma(mamode, body, length=close_length, talib=mode_tal) - - # Calculate imbalance sizes and percentages based on Average Bar Range (abr) - abr = high.rolling(window=abr_length).max() - low.rolling(window=abr_length).min() - top_imbalance = low.shift(2) - high - btm_imbalance = low - high.shift(2) - top_imbalance_pct = 100 * top_imbalance / abr - btm_imbalance_pct = 100 * btm_imbalance / abr - hld = high - low + sflt.epsilon - high_volatility = hld > vol_ratio * ma(mamode, hld, length=vol_length, talib=mode_tal) - - btm_imbalance_flag = (btm_imbalance > 0) & (btm_imbalance_pct > 1) - top_imbalance_flag = (top_imbalance > 0) & (top_imbalance_pct > 1) - - if asint: - high_volatility = high_volatility.astype(int) - btm_imbalance_flag = btm_imbalance_flag.astype(int) - top_imbalance_flag = top_imbalance_flag.astype(int) - - _props = f"_{abr_length}_{close_length}_{vol_length}_{percent}" - data = { - f"SMChv{_props}": high_volatility, - f"SMCbf{_props}": btm_imbalance_flag, - f"SMCbi{_props}": btm_imbalance, - f"SMCbp{_props}": btm_imbalance_pct, - f"SMCtf{_props}": top_imbalance_flag, - f"SMCti{_props}": top_imbalance, - f"SMCtp{_props}": top_imbalance_pct, - } - df = DataFrame(data, index=close.index) - - # Offset - if offset != 0: - df = df.shift(offset) - - # Fill - df.ffill(inplace=True) - df.bfill(inplace=True) - - # Name and Category - df.name = f"SMC{_props}" - df.category = "momentum" - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/smi.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/smi.py deleted file mode 100644 index 5c3fa566..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/smi.py +++ /dev/null @@ -1,92 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import isnan -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.utils import v_offset, v_pos_default, v_scalar, v_series -from .tsi import tsi - - - -def smi( - close: Series, fast: Int = None, slow: Int = None, - signal: Int = None, scalar: IntFloat = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """SMI Ergodic Indicator - - This indicator, by William Blau, is the same as the TSI except the SMI - includes a signal line. A trend is considered bullish when crossing above - zero and bearish when crossing below zero. This implementation includes - both the SMI Ergodic Indicator and SMI Ergodic Oscillator. - - Sources: - * [motivewave](https://www.motivewave.com/studies/smi_ergodic_indicator.htm) - * [tradingview A](https://www.tradingview.com/script/Xh5Q0une-SMI-Ergodic-Oscillator/) - * [tradingview B](https://www.tradingview.com/script/cwrgy4fw-SMIIO/) - - Parameters: - close (Series): ```close``` Series - fast (int): The short period. Default: ```5``` - slow (int): The long period. Default: ```20``` - signal (int): Signal period. Default: ```5``` - scalar (float): Scalar. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 3 columns - """ - # Validate - fast = v_pos_default(fast, 5) - slow = v_pos_default(slow, 20) - signal = v_pos_default(signal, 5) - if slow < fast: - fast, slow = slow, fast - _length = slow + signal + 1 - close = v_series(close, _length) - - if close is None: - return - - scalar = v_scalar(scalar, 1) - offset = v_offset(offset) - - # Calculate - tsi_df = tsi(close, fast=fast, slow=slow, signal=signal, scalar=scalar) - if tsi_df is None: - return # Emergency Break - - smi = tsi_df.iloc[:, 0] - signalma = tsi_df.iloc[:, 1] - if all(isnan(signalma)): - return # Emergency Break - osc = smi - signalma - - # Offset - if offset != 0: - smi = smi.shift(offset) - signalma = signalma.shift(offset) - osc = osc.shift(offset) - - # Fill - if "fillna" in kwargs: - smi.fillna(kwargs["fillna"], inplace=True) - signalma.fillna(kwargs["fillna"], inplace=True) - osc.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - # _scalar = f"_{scalar}" if scalar != 1 else "" - _props = f"_{fast}_{slow}_{signal}_{scalar}" - smi.name = f"SMI{_props}" - signalma.name = f"SMIs{_props}" - osc.name = f"SMIo{_props}" - smi.category = signalma.category = osc.category = "momentum" - - data = {smi.name: smi, signalma.name: signalma, osc.name: osc} - df = DataFrame(data, index=close.index) - df.name = f"SMI{_props}" - df.category = smi.category - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/squeeze.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/squeeze.py deleted file mode 100644 index b4330676..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/squeeze.py +++ /dev/null @@ -1,205 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import nan -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.overlap import ema, linreg, sma -from pandas_ta.trend import decreasing, increasing -from pandas_ta.utils import ( - simplify_columns, - unsigned_differences, - v_bool, - v_mamode, - v_offset, - v_pos_default, - v_series -) -from pandas_ta.volatility import bbands, kc -from .mom import mom - - - -def squeeze( - high: Series, low: Series, close: Series, - bb_length: Int = None, bb_std: IntFloat = None, - kc_length: Int = None, kc_scalar: IntFloat = None, - mom_length: Int = None, mom_smooth: Int = None, - use_tr: bool = None, mamode: str = None, - prenan: bool = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Squeeze - - This indicator, based on John Carter's "TTM Squeeze" indicator, attempts - identify momentum using volatility. - - Sources: - * "Mastering the Trade" (chapter 11), John Carter - * [thinkorswim](https://tlc.thinkorswim.com/center/reference/Tech-Indicators/studies-library/T-U/TTM-Squeeze) - * [tradestation](https://tradestation.tradingappstore.com/products/TTMSqueeze) - * [tradingview](https://www.tradingview.com/scripts/lazybear/) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - bb_length (int): BB period. Default: ```20``` - bb_std (float): BB Std. Dev. Default: ```2``` - kc_length (int): KC period. Default: ```20``` - kc_scalar (float): KC scalar. Default: ```1.5``` - mom_length (int): Momentum Period. Default: ```12``` - mom_smooth (int): Momentum Smoothing period. Default: ```6``` - mamode (str): One of: "ema" or "sma". Default: ```"sma"``` - prenan (bool): Apply prenans. Default: ```False``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - tr (value): Use True Range for Keltner Channels. Default: ```True``` - asint (bool): Returns as ```Int```. Default: ```True``` - lazybear (value): LazyBear's TradingView. Default: ```False``` - detailed (value): Extra detailed. Default: ```False``` - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): - * Default: 4 columns - * Detailed: 10 columns - - Note: Volatility - * Increasing: ```kc``` and ```bbands``` difference increases - * Decreasing: ```kc``` and ```bbands``` difference decreases - """ - # Validate - bb_length = v_pos_default(bb_length, 20) - kc_length = v_pos_default(kc_length, 20) - mom_length = v_pos_default(mom_length, 12) - mom_smooth = v_pos_default(mom_smooth, 6) - _length = max(bb_length, kc_length, mom_length, mom_smooth) + 1 - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - - if high is None or low is None or close is None: - return - - bb_std = v_pos_default(bb_std, 2.0) - kc_scalar = v_pos_default(kc_scalar, 1.5) - mamode = v_mamode(mamode, "sma") - prenan = v_bool(prenan, False) - offset = v_offset(offset) - - use_tr = kwargs.pop("tr", True) - asint = kwargs.pop("asint", True) - detailed = kwargs.pop("detailed", False) - lazybear = kwargs.pop("lazybear", False) - - # Calculate - bbd = bbands(close, length=bb_length, std=bb_std, mamode=mamode) - kch = kc( - high, low, close, length=kc_length, scalar=kc_scalar, - mamode=mamode, tr=use_tr - ) - - # Simplify KC and BBAND column names for dynamic access - bbd.columns = simplify_columns(bbd) - kch.columns = simplify_columns(kch) - - if lazybear: - highest_high = high.rolling(kc_length).max() - lowest_low = low.rolling(kc_length).min() - avg_ = 0.5 * (0.5 * (highest_high + lowest_low) + kch.b) - - squeeze = linreg(close - avg_, length=kc_length) - - else: - momo = mom(close, length=mom_length) - if mamode.lower() == "ema": - squeeze = ema(momo, length=mom_smooth) - else: # "sma" - squeeze = sma(momo, length=mom_smooth) - - # Classify Squeezes - squeeze_on = (bbd.l > kch.l) & (bbd.u < kch.u) - squeeze_off = (bbd.l < kch.l) & (bbd.u > kch.u) - no_squeeze = ~squeeze_on & ~squeeze_off - - # Offset - if offset != 0: - squeeze = squeeze.shift(offset) - squeeze_on = squeeze_on.shift(offset) - squeeze_off = squeeze_off.shift(offset) - no_squeeze = no_squeeze.shift(offset) - - # Fill - if "fillna" in kwargs: - squeeze.fillna(kwargs["fillna"], inplace=True) - squeeze_on.fillna(kwargs["fillna"], inplace=True) - squeeze_off.fillna(kwargs["fillna"], inplace=True) - no_squeeze.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = "" if use_tr else "hlr" - _props += f"_{bb_length}_{bb_std}_{kc_length}_{kc_scalar}" - _props += "_LB" if lazybear else "" - squeeze.name = f"SQZ{_props}" - - if asint: - squeeze_on = squeeze_on.astype(int) - squeeze_off = squeeze_off.astype(int) - no_squeeze = no_squeeze.astype(int) - - if prenan: - nanlength = max(bb_length, kc_length) - 2 - squeeze_on[:nanlength] = nan - squeeze_off[:nanlength] = nan - no_squeeze[:nanlength] = nan - - data = { - squeeze.name: squeeze, - f"SQZ_ON": squeeze_on, - f"SQZ_OFF": squeeze_off, - f"SQZ_NO": no_squeeze - } - df = DataFrame(data, index=close.index) - df.name = squeeze.name - df.category = squeeze.category = "momentum" - - # More Detail - if detailed: - pos_squeeze = squeeze[squeeze >= 0] - neg_squeeze = squeeze[squeeze < 0] - - pos_inc, pos_dec = unsigned_differences(pos_squeeze, asint=True) - neg_inc, neg_dec = unsigned_differences(neg_squeeze, asint=True) - - pos_inc *= squeeze - pos_dec *= squeeze - neg_dec *= squeeze - neg_inc *= squeeze - - pos_inc.replace(0, nan, inplace=True) - pos_dec.replace(0, nan, inplace=True) - neg_dec.replace(0, nan, inplace=True) - neg_inc.replace(0, nan, inplace=True) - - sqz_inc = squeeze * increasing(squeeze) - sqz_dec = squeeze * decreasing(squeeze) - sqz_inc.replace(0, nan, inplace=True) - sqz_dec.replace(0, nan, inplace=True) - - # Handle fills - if "fillna" in kwargs: - sqz_inc.fillna(kwargs["fillna"], inplace=True) - sqz_dec.fillna(kwargs["fillna"], inplace=True) - pos_inc.fillna(kwargs["fillna"], inplace=True) - pos_dec.fillna(kwargs["fillna"], inplace=True) - neg_dec.fillna(kwargs["fillna"], inplace=True) - neg_inc.fillna(kwargs["fillna"], inplace=True) - - df[f"SQZ_INC"] = sqz_inc - df[f"SQZ_DEC"] = sqz_dec - df[f"SQZ_PINC"] = pos_inc - df[f"SQZ_PDEC"] = pos_dec - df[f"SQZ_NDEC"] = neg_dec - df[f"SQZ_NINC"] = neg_inc - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/squeeze_pro.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/squeeze_pro.py deleted file mode 100644 index 524c66a8..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/squeeze_pro.py +++ /dev/null @@ -1,222 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import nan -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.ma import ma -from pandas_ta.momentum import mom -from pandas_ta.trend import decreasing, increasing -from pandas_ta.utils import ( - simplify_columns, - unsigned_differences, - v_bool, - v_mamode, - v_offset, - v_pos_default, - v_scalar, - v_series -) -from pandas_ta.volatility import bbands, kc - - - -def squeeze_pro( - high: Series, low: Series, close: Series, - bb_length: Int = None, bb_std: IntFloat = None, - kc_length: Int = None, kc_scalar_narrow: IntFloat = None, - kc_scalar_normal: IntFloat = None, kc_scalar_wide: IntFloat = None, - mom_length: Int = None, mom_smooth: Int = None, - use_tr: bool = None, mamode: str = None, - prenan: bool = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Squeeze Pro - - This indicator, based on John Carter's "TTM Squeeze" indicator, attempts - identify momentum using volatility with additional details. - - Sources: - * [usethinkscript](https://usethinkscript.com/threads/john-carters-squeeze-pro-indicator-for-thinkorswim-free.4021/) - * [tradingview](https://www.tradingview.com/script/TAAt6eRX-Squeeze-PRO-Indicator-Makit0/) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - bb_length (int): BB period. Default: ```20``` - bb_std (float): BB Std. Dev. Default: ```2``` - kc_length (int): KC period. Default: ```20``` - kc_scalar_normal (float): Keltner Channel scalar for normal channel. - Default: ```1.5``` - kc_scalar_narrow (float): Narrow channel KC scalar. Default: ```1``` - kc_scalar_wide (float): Wide channel KC scalar. Default: ```2``` - mom_length (int): Momentum Period. Default: ```12``` - mom_smooth (int): Momentum Smoothing period. Default: ```6``` - mamode (str): One of: "ema" or "sma". Default: ```"sma"``` - prenan (bool): Apply prenans. Default: ```False``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - tr (value): Use True Range for Keltner Channels. - Default: ```True``` - asint (bool): Returns as ```Int```. Default: ```True``` - mamode (value): Which MA to use. Default: ```"sma"``` - detailed (value): Extra detailed. Default: ```False``` - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 6 columns (_default_) or 12 columns if ```detailed=True``` - - Warning: - May be depreciated in the future and combined with ```squeeze```. - """ - # Validate - bb_length = v_pos_default(bb_length, 20) - kc_length = v_pos_default(kc_length, 20) - mom_length = v_pos_default(mom_length, 12) - mom_smooth = v_pos_default(mom_smooth, 6) - _length = max(bb_length, kc_length, mom_length, mom_smooth) + 1 - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - - if high is None or low is None or close is None: - return - - kc_scalar_narrow = v_scalar(kc_scalar_narrow, 1) - kc_scalar_normal = v_scalar(kc_scalar_normal, 1.5) - kc_scalar_wide = v_scalar(kc_scalar_wide, 2) - prenan = v_bool(prenan, False) - valid_kc_scaler = kc_scalar_wide > kc_scalar_normal \ - and kc_scalar_normal > kc_scalar_narrow - - if not valid_kc_scaler: - return - - bb_std = v_pos_default(bb_std, 2.0) - mamode = v_mamode(mamode, "sma") - offset = v_offset(offset) - use_tr = kwargs.pop("tr", True) - asint = kwargs.pop("asint", True) - detailed = kwargs.pop("detailed", False) - - # Calculate - bbd = bbands(close, length=bb_length, std=bb_std, mamode=mamode) - kch_wide = kc( - high, low, close, length=kc_length, scalar=kc_scalar_wide, - mamode=mamode, tr=use_tr - ) - kch_normal = kc( - high, low, close, length=kc_length, scalar=kc_scalar_normal, - mamode=mamode, tr=use_tr - ) - kch_narrow = kc( - high, low, close, length=kc_length, scalar=kc_scalar_narrow, - mamode=mamode, tr=use_tr - ) - - # Simplify KC and BBAND column names for dynamic access - bbd.columns = simplify_columns(bbd) - kch_wide.columns = simplify_columns(kch_wide) - kch_normal.columns = simplify_columns(kch_normal) - kch_narrow.columns = simplify_columns(kch_narrow) - - momo = mom(close, length=mom_length) - squeeze = ma(mamode, momo, length=mom_smooth) - - # Classify Squeezes - squeeze_on_wide = (bbd.l > kch_wide.l) & (bbd.u < kch_wide.u) - squeeze_on_normal = (bbd.l > kch_normal.l) & (bbd.u < kch_normal.u) - squeeze_on_narrow = (bbd.l > kch_narrow.l) & (bbd.u < kch_narrow.u) - squeeze_off_wide = (bbd.l < kch_wide.l) & (bbd.u > kch_wide.u) - no_squeeze = ~squeeze_on_wide & ~squeeze_off_wide - - # Offset - if offset != 0: - squeeze = squeeze.shift(offset) - squeeze_on_wide = squeeze_on_wide.shift(offset) - squeeze_on_normal = squeeze_on_normal.shift(offset) - squeeze_on_narrow = squeeze_on_narrow.shift(offset) - squeeze_off_wide = squeeze_off_wide.shift(offset) - no_squeeze = no_squeeze.shift(offset) - - # Fill - if "fillna" in kwargs: - squeeze.fillna(kwargs["fillna"], inplace=True) - squeeze_on_wide.fillna(kwargs["fillna"], inplace=True) - squeeze_on_normal.fillna(kwargs["fillna"], inplace=True) - squeeze_on_narrow.fillna(kwargs["fillna"], inplace=True) - squeeze_off_wide.fillna(kwargs["fillna"], inplace=True) - no_squeeze.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = "" if use_tr else "hlr" - _props += f"_{bb_length}_{bb_std}_{kc_length}_{kc_scalar_wide}_{kc_scalar_normal}_{kc_scalar_narrow}" - squeeze.name = f"SQZPRO{_props}" - - if asint: - squeeze_on_wide = squeeze_on_wide.astype(int) - squeeze_on_narrow = squeeze_on_narrow.astype(int) - squeeze_on_normal = squeeze_on_normal.astype(int) - squeeze_off_wide = squeeze_off_wide.astype(int) - no_squeeze = no_squeeze.astype(int) - - if prenan: - nanlength = max(bb_length, kc_length) - 2 - squeeze_on_wide[:nanlength] = nan - squeeze_on_narrow[:nanlength] = nan - squeeze_on_normal[:nanlength] = nan - squeeze_off_wide[:nanlength] = nan - no_squeeze[:nanlength] = nan - - data = { - squeeze.name: squeeze, - f"SQZPRO_ON_WIDE": squeeze_on_wide, - f"SQZPRO_ON_NORMAL": squeeze_on_normal, - f"SQZPRO_ON_NARROW": squeeze_on_narrow, - f"SQZPRO_OFF": squeeze_off_wide, - f"SQZPRO_NO": no_squeeze - } - df = DataFrame(data, index=close.index) - df.name = squeeze.name - df.category = squeeze.category = "momentum" - - # More Detail - if detailed: - pos_squeeze = squeeze[squeeze >= 0] - neg_squeeze = squeeze[squeeze < 0] - - pos_inc, pos_dec = unsigned_differences(pos_squeeze, asint=True) - neg_inc, neg_dec = unsigned_differences(neg_squeeze, asint=True) - - pos_inc *= squeeze - pos_dec *= squeeze - neg_dec *= squeeze - neg_inc *= squeeze - - pos_inc.replace(0, nan, inplace=True) - pos_dec.replace(0, nan, inplace=True) - neg_dec.replace(0, nan, inplace=True) - neg_inc.replace(0, nan, inplace=True) - - sqz_inc = squeeze * increasing(squeeze) - sqz_dec = squeeze * decreasing(squeeze) - sqz_inc.replace(0, nan, inplace=True) - sqz_dec.replace(0, nan, inplace=True) - - # Fill - if "fillna" in kwargs: - sqz_inc.fillna(kwargs["fillna"], inplace=True) - sqz_dec.fillna(kwargs["fillna"], inplace=True) - pos_inc.fillna(kwargs["fillna"], inplace=True) - pos_dec.fillna(kwargs["fillna"], inplace=True) - neg_dec.fillna(kwargs["fillna"], inplace=True) - neg_inc.fillna(kwargs["fillna"], inplace=True) - - df[f"SQZPRO_INC"] = sqz_inc - df[f"SQZPRO_DEC"] = sqz_dec - df[f"SQZPRO_PINC"] = pos_inc - df[f"SQZPRO_PDEC"] = pos_dec - df[f"SQZPRO_NDEC"] = neg_dec - df[f"SQZPRO_NINC"] = neg_inc - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/stc.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/stc.py deleted file mode 100644 index 518b3d25..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/stc.py +++ /dev/null @@ -1,175 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import nan -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.overlap import ema -from pandas_ta.utils import ( - non_zero_range, - v_offset, - v_pos_default, - v_series -) - - - -def schaff_tc(close: Series, seed: Series, tc_length: int, factor: IntFloat): - lowest_xmacd = seed.rolling(tc_length).min() - xmacd_range = non_zero_range(seed.rolling(tc_length).max(), lowest_xmacd) - m = len(seed) - - # Initialize lists - stoch1, pf = [0] * m, [0] * m - stoch2, pff = [0] * m, [0] * m - - for i in range(1, m): - # %Fast K of MACD - if lowest_xmacd.iloc[i] > 0: - stoch1[i] = 100 * ((seed.iloc[i] - lowest_xmacd.iloc[i]) / xmacd_range.iloc[i]) - else: - stoch1[i] = stoch1[i - 1] - # Smoothed Calculation for % Fast D of MACD - pf[i] = round(pf[i - 1] + (factor * (stoch1[i] - pf[i - 1])), 8) - - # find min and max so far - if i < tc_length: - # If there are not enough elements for a full tclength window, - # use what is available - lowest_pf = min(pf[:i+1]) - highest_pf = max(pf[:i+1]) - else: - lowest_pf = min(pf[i - tc_length + 1:i + 1]) - highest_pf = max(pf[i - tc_length + 1:i + 1]) - - # Ensure non-zero range - pf_range = highest_pf - lowest_pf if highest_pf - lowest_pf > 0 else 1 - - # % of Fast K of PF - if pf_range > 0: - stoch2[i] = 100 * ((pf[i] - lowest_pf) / pf_range) - else: - stoch2[i] = stoch2[i - 1] - pff[i] = round(pff[i - 1] + (factor * (stoch2[i] - pff[i - 1])), 8) - - pf_series = Series(pf, index=close.index) - pff_series = Series(pff, index=close.index) - - return pff_series, pf_series - - -def stc( - close: Series, tc_length: Int = None, - fast: Int = None, slow: Int = None, factor: IntFloat = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Schaff Trend Cycle - - This indicator is an evolved MACD with additional smoothing. - - Sources: - * [rengel8](https://github.com/rengel8) - * [prorealcode](https://www.prorealcode.com/prorealtime-indicators/schaff-trend-cycle2/) - - Parameters: - close (Series): ```close``` Series - tc_length (int): TC period. (Adjust to the half of cycle) - Default: ```10``` - fast (int): Fast MA period. Default: ```12``` - slow (int): Slow MA period. Default: ```26``` - factor (float): Smoothing factor for last stoch. calculation. - Default: ```0.5``` - offset (int): How many bars to shift the results. Default: ```0`` - - Other Parameters: - ma1 (Series): User chosen MA. Default: ```False``` - ma2 (Series): User chosen MA. Default: ```False``` - osc (Series): User chosen oscillator. Default: ```False``` - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 3 columns - - Note: - Can also seed STC with two MAs, ```ma1``` and ```ma2```, or an oscillator ```osc```. - - * ```ma1``` and ```ma2``` are **both** required if this option is used. - """ - # Validate - fast = v_pos_default(fast, 12) - slow = v_pos_default(slow, 26) - tc_length = v_pos_default(tc_length, 10) - if slow < fast: - fast, slow = slow, fast - _length = max(tc_length, fast, slow) - close = v_series(close, _length) - - if close is None: - return - - factor = v_pos_default(factor, 0.5) - offset = v_offset(offset) - - # Calculate - # kwargs allows for three more series (ma1, ma2 and osc) which can be passed - # here ma1 and ma2 input negate internal ema calculations, osc substitutes - # both ma's. - ma1 = kwargs.pop("ma1", False) - ma2 = kwargs.pop("ma2", False) - osc = kwargs.pop("osc", False) - - if isinstance(ma1, Series) and isinstance(ma2, Series) and not osc: - ma1 = v_series(ma1, _length) - ma2 = v_series(ma2, _length) - - if ma1 is None or ma2 is None: - return - seed = ma1 - ma2 - - elif isinstance(osc, Series): - osc = v_series(osc, _length) - if osc is None: - return - seed = osc - - else: - fastma = ema(close, length=fast) - slowma = ema(close, length=slow) - seed = fastma - slowma - - pff, pf = schaff_tc(close, seed, tc_length, factor) - pf[:_length - 1] = nan - - stc = Series(pff, index=close.index) - macd = Series(seed, index=close.index) - stoch = Series(pf, index=close.index) - - stc.iloc[:_length - 1] = nan - - # Offset - if offset != 0: - stc = stc.shift(offset) - macd = macd.shift(offset) - stoch = stoch.shift(offset) - - # Fill - if "fillna" in kwargs: - stc.fillna(kwargs["fillna"], inplace=True) - macd.fillna(kwargs["fillna"], inplace=True) - stoch.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = f"_{tc_length}_{fast}_{slow}_{factor}" - stc.name = f"STC{_props}" - macd.name = f"STCmacd{_props}" - stoch.name = f"STCstoch{_props}" - stc.category = macd.category = stoch.category = "momentum" - - data = { - stc.name: stc, - macd.name: macd, - stoch.name: stoch - } - df = DataFrame(data, index=close.index) - df.name = f"STC{_props}" - df.category = stc.category - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/stoch.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/stoch.py deleted file mode 100644 index 0d10ca64..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/stoch.py +++ /dev/null @@ -1,121 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.ma import ma -from pandas_ta.maps import Imports -from pandas_ta.utils import ( - non_zero_range, - tal_ma, - v_mamode, - v_offset, - v_pos_default, - v_series, - v_talib -) - - - -def stoch( - high: Series, low: Series, close: Series, - k: Int = None, d: Int = None, smooth_k: Int = None, - mamode: str = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Stochastic - - This indicator, by George Lane in the 1950's, attempts to identify and - quantify momentum; it assumes that momentum precedes value change. - - Sources: - * [sierrachart](https://www.sierrachart.com/index.php?page=doc/StudiesReference.php&ID=332&Name=KD_-_Slow) - * [tradingview](https://www.tradingview.com/wiki/Stochastic_(STOCH)) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - k (int): The Fast %K period. Default: ```14``` - d (int): The Slow %D period. Default: ```3``` - smooth_k (int): The Slow %K period. Default: ```3``` - mamode (str): See ```help(ta.ma)```. Default: ```"sma"``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 3 columns - """ - # Validate - k = v_pos_default(k, 14) - d = v_pos_default(d, 3) - smooth_k = v_pos_default(smooth_k, 3) - _length = k + d + smooth_k - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - - if high is None or low is None or close is None: - return - - mode_tal = v_talib(talib) - mamode = v_mamode(mamode, "sma") - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal and smooth_k > 2: - from talib import STOCH - stoch_ = STOCH( - high, low, close, k, d, tal_ma(mamode), d, tal_ma(mamode) - ) - stoch_k, stoch_d = stoch_[0], stoch_[1] - else: - ll = low.rolling(k).min() - hh = high.rolling(k).max() - - stoch = 100 * (close - ll) / non_zero_range(hh, ll) - - if stoch is None: return - - stoch_fvi = stoch.loc[stoch.first_valid_index():, ] - if smooth_k == 1: - stoch_k = stoch - else: - stoch_k = ma(mamode, stoch_fvi, length=smooth_k) - - stochk_fvi = stoch_k.loc[stoch_k.first_valid_index():, ] - stoch_d = ma(mamode, stochk_fvi, length=d) - - stoch_h = stoch_k - stoch_d # Histogram - - # Offset - if offset != 0: - stoch_k = stoch_k.shift(offset) - stoch_d = stoch_d.shift(offset) - stoch_h = stoch_h.shift(offset) - - # Fill - if "fillna" in kwargs: - stoch_k.fillna(kwargs["fillna"], inplace=True) - stoch_d.fillna(kwargs["fillna"], inplace=True) - stoch_h.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _name = "STOCH" - _props = f"_{k}_{d}_{smooth_k}" - stoch_k.name = f"{_name}k{_props}" - stoch_d.name = f"{_name}d{_props}" - stoch_h.name = f"{_name}h{_props}" - stoch_k.category = stoch_d.category = stoch_h.category = "momentum" - - data = { - stoch_k.name: stoch_k, - stoch_d.name: stoch_d, - stoch_h.name: stoch_h - } - df = DataFrame(data, index=close.index) - df.name = f"{_name}{_props}" - df.category = stoch_k.category - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/stochf.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/stochf.py deleted file mode 100644 index 8b214321..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/stochf.py +++ /dev/null @@ -1,100 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.ma import ma -from pandas_ta.maps import Imports -from pandas_ta.utils import ( - non_zero_range, - tal_ma, - v_mamode, - v_offset, - v_pos_default, - v_series, - v_talib -) - - - -def stochf( - high: Series, low: Series, close: Series, - k: Int = None, d: Int = None, - mamode: str = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Fast Stochastic - - This indicator, by George Lane in the 1950's, attempts to identify and - quantify momentum like STOCH, but is more volatile. - - Sources: - * [corporatefinanceinstitute](https://corporatefinanceinstitute.com/resources/knowledge/trading-investing/fast-stochastic-indicator/) - * [sierrachart](https://www.sierrachart.com/index.php?page=doc/StudiesReference.php&ID=333&Name=KD_-_Fast) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - k (int): The Fast %K period. Default: ```14``` - d (int): The Slow %D period. Default: ```3``` - mamode (str): See ```help(ta.ma)```. Default: ```"sma"``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 2 columns - """ - # Validate - k = v_pos_default(k, 14) - d = v_pos_default(d, 3) - _length = k + d - 1 - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - - if high is None or low is None or close is None: - return - - mamode = v_mamode(mamode, "sma") - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import STOCHF - stochf_ = STOCHF(high, low, close, k, d, tal_ma(mamode)) - stochf_k, stochf_d = stochf_[0], stochf_[1] - else: - lowest_low = low.rolling(k).min() - highest_high = high.rolling(k).max() - - stochf_k = 100 * (close - lowest_low) \ - / non_zero_range(highest_high, lowest_low) - stochfk_fvi = stochf_k.loc[stochf_k.first_valid_index():, ] - stochf_d = ma(mamode, stochfk_fvi, length=d, talib=mode_tal) - - # Offset - if offset != 0: - stochf_k = stochf_k.shift(offset) - stochf_d = stochf_d.shift(offset) - - # Fill - if "fillna" in kwargs: - stochf_k.fillna(kwargs["fillna"], inplace=True) - stochf_d.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _name = "STOCHF" - _props = f"_{k}_{d}" - stochf_k.name = f"{_name}k{_props}" - stochf_d.name = f"{_name}d{_props}" - stochf_k.category = stochf_d.category = "momentum" - - data = {stochf_k.name: stochf_k, stochf_d.name: stochf_d} - df = DataFrame(data, index=close.index) - df.name = f"{_name}{_props}" - df.category = stochf_k.category - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/stochrsi.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/stochrsi.py deleted file mode 100644 index 4fe88410..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/stochrsi.py +++ /dev/null @@ -1,104 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.ma import ma -from pandas_ta.maps import Imports -from pandas_ta.momentum import rsi -from pandas_ta.utils import ( - non_zero_range, - v_mamode, - v_offset, - v_pos_default, - v_series, - v_talib -) - - - -def stochrsi( - close: Series, length: Int = None, rsi_length: Int = None, - k: Int = None, d: Int = None, mamode: str = None, - talib: bool = None, offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Stochastic RSI - - This indicator attempts to quantify RSI relative to its High-Low range. - - Sources: - * "Stochastic RSI and Dynamic Momentum Index", Tushar Chande and - Stanley Kroll, Stock & Commodities V.11:5 (189-199) - * [tradingview](https://www.tradingview.com/wiki/Stochastic_(STOCH)) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```14``` - rsi_length (int): RSI period. Default: ```14``` - k (int): The Fast %K period. Default: ```3``` - d (int): The Slow %K period. Default: ```3``` - mamode (str): See ```help(ta.ma)```. Default: ```"sma"``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 2 columns - - Note: - May be more sensitive to RSI and thus identify potential "overbought" - or "oversold" signals. - """ - # Validate - length = v_pos_default(length, 14) - rsi_length = v_pos_default(rsi_length, 14) - k = v_pos_default(k, 3) - d = v_pos_default(d, 3) - _length = length + rsi_length + 2 - close = v_series(close, _length) - - if close is None: - return - - mamode = v_mamode(mamode, "sma") - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - # if Imports["talib"] and mode_tal: - # from talib import RSI - # rsi_ = RSI(close, length) - # else: - - rsi_ = rsi(close, length=rsi_length) - lowest_rsi = rsi_.rolling(length).min() - highest_rsi = rsi_.rolling(length).max() - - stoch = 100 * (rsi_ - lowest_rsi) / non_zero_range(highest_rsi, lowest_rsi) - - stochrsi_k = ma(mamode, stoch, length=k) - stochrsi_d = ma(mamode, stochrsi_k, length=d) - - # Offset - if offset != 0: - stochrsi_k = stochrsi_k.shift(offset) - stochrsi_d = stochrsi_d.shift(offset) - - # Fill - if "fillna" in kwargs: - stochrsi_k.fillna(kwargs["fillna"], inplace=True) - stochrsi_d.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _name = "STOCHRSI" - _props = f"_{length}_{rsi_length}_{k}_{d}" - stochrsi_k.name = f"{_name}k{_props}" - stochrsi_d.name = f"{_name}d{_props}" - stochrsi_k.category = stochrsi_d.category = "momentum" - - data = {stochrsi_k.name: stochrsi_k, stochrsi_d.name: stochrsi_d} - df = DataFrame(data, index=close.index) - df.name = f"{_name}{_props}" - df.category = stochrsi_k.category - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/tmo.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/tmo.py deleted file mode 100644 index b046602a..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/tmo.py +++ /dev/null @@ -1,129 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import isnan, zeros -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.ma import ma -from pandas_ta.utils import ( - sum_signed_rolling_deltas, - v_bool, - v_mamode, - v_offset, - v_pos_default, - v_series -) - - -def tmo( - open_: Series, close: Series, tmo_length: Int = None, - calc_length: Int = None, smooth_length: Int = None, - momentum: bool = None, normalize: bool = None, exclusive: bool = None, - mamode: str = None, offset: Int = None, **kwargs: DictLike, -) -> DataFrame: - """True Momentum Oscillator - - This indicator attempts to quantify momentum. - - Sources: - * [tradingview A](https://www.tradingview.com/script/VRwDppqd-True-Momentum-Oscillator/) - * [tradingview B](https://www.tradingview.com/script/65vpO7T5-True-Momentum-Oscillator-Universal-Edition/) - - Parameters: - open_ (Series): ```open``` Series - close (Series): ```close``` Series - tmo_length (int): TMO period. Default: ```14``` - calc_length (int): Initial MA period. Default: ```5``` - smooth_length (int): Main and smooth signal MA period. Default: ```3``` - mamode (str): See ```help(ta.ma)```. Default: ```"ema"``` - momentum (bool): Compute main and smooth momentum. Default: ```False``` - normalize (bool): Normalize. Default: ```False``` - exclusive (bool): Exclusive period over ```n``` bars, or inclusively - over ```n-1``` bars. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): DataFrame.fillna(value) - - Returns: - (DataFrame): 4 columns - """ - # Validate - tmo_length = v_pos_default(tmo_length, 14) - calc_length = v_pos_default(calc_length, 5) - smooth_length = v_pos_default(smooth_length, 3) - _length = max(tmo_length, calc_length, smooth_length) - - open_ = v_series(open_, _length) - close = v_series(close, _length) - offset = v_offset(offset) - - if "length" in kwargs: - kwargs.pop("length") - - if open_ is None or close is None: - return None - - mamode = v_mamode(mamode, "ema") - compute_momentum = v_bool(momentum, False) - normalize_signal = v_bool(normalize, False) - exclusive = v_bool(exclusive, True) - - signed_diff_sum = sum_signed_rolling_deltas( - open_, close, tmo_length, exclusive=exclusive - ) - if all(isnan(signed_diff_sum)): - return None # Emergency Break - - initial_ma = ma(mamode, signed_diff_sum, length=calc_length) - if all(isnan(initial_ma)): - return None # Emergency Break - - main = ma(mamode, initial_ma, length=smooth_length) - if all(isnan(main)): - return None # Emergency Break - - smooth = ma(mamode, main, length=smooth_length) - if all(isnan(smooth)): - return None # Emergency Break - - if compute_momentum: - mom_main = main - main.shift(tmo_length) - mom_smooth = smooth - smooth.shift(tmo_length) - else: - zero_array = zeros(main.size) - mom_main = Series(zero_array, index=main.index) - mom_smooth = Series(zero_array, index=smooth.index) - - # Offset - if offset != 0: - main = main.shift(offset) - smooth = smooth.shift(offset) - mom_main = mom_main.shift(offset) - mom_smooth = mom_smooth.shift(offset) - - # Fill - if "fillna" in kwargs: - main.fillna(kwargs["fillna"], inplace=True) - smooth.fillna(kwargs["fillna"], inplace=True) - mom_main.fillna(kwargs["fillna"], inplace=True) - mom_smooth.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = f"_{tmo_length}_{calc_length}_{smooth_length}" - main.name = f"TMO{_props}" - smooth.name = f"TMOs{_props}" - mom_main.name = f"TMOM{_props}" - mom_smooth.name = f"TMOMs{_props}" - main.category = smooth.category = "momentum" - mom_main.category = mom_smooth.category = main.category - - data = { - main.name: main, - smooth.name: smooth, - mom_main.name: mom_main, - mom_smooth.name: mom_smooth, - } - df = DataFrame(data, index=close.index) - df.name = f"TMO{_props}" - df.category = main.category - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/trix.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/trix.py deleted file mode 100644 index 123bf7de..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/trix.py +++ /dev/null @@ -1,93 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import isnan -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.overlap.ema import ema -from pandas_ta.utils import ( - v_drift, - v_offset, - v_pos_default, - v_scalar, - v_series -) - - - -def trix( - close: Series, length: Int = None, signal: Int = None, - scalar: IntFloat = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Trix - - This indicator attempts to identify divergences as an oscillator. - - Sources: - * [tradingview](https://www.tradingview.com/wiki/TRIX) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```18``` - signal (int): Signal period. Default: ```9``` - scalar (float): Scalar. Default: ```100``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 30) - signal = v_pos_default(signal, 9) - if length < signal: - length, signal = signal, length - _length = 3 * length - 1 - close = v_series(close, _length) - - if close is None: - return - - scalar = v_scalar(scalar, 100) - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - ema1 = ema(close=close, length=length, **kwargs) - if all(isnan(ema1)): - return # Emergency Break - - ema2 = ema(close=ema1, length=length, **kwargs) - if all(isnan(ema2)): - return # Emergency Break - - ema3 = ema(close=ema2, length=length, **kwargs) - if all(isnan(ema3)): - return # Emergency Break - - trix = scalar * ema3.pct_change(drift) - trix_signal = trix.rolling(signal).mean() - - # Offset - if offset != 0: - trix = trix.shift(offset) - trix_signal = trix_signal.shift(offset) - - # Fill - if "fillna" in kwargs: - trix.fillna(kwargs["fillna"], inplace=True) - trix_signal.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - trix.name = f"TRIX_{length}_{signal}" - trix_signal.name = f"TRIXs_{length}_{signal}" - trix.category = trix_signal.category = "momentum" - - data = {trix.name: trix, trix_signal.name: trix_signal} - df = DataFrame(data, index=close.index) - df.name = f"TRIX_{length}_{signal}" - df.category = "momentum" - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/tsi.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/tsi.py deleted file mode 100644 index 025a0f47..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/tsi.py +++ /dev/null @@ -1,106 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import isnan -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.ma import ma -from pandas_ta.overlap import ema -from pandas_ta.utils import ( - v_drift, - v_mamode, - v_offset, - v_pos_default, - v_scalar, - v_series -) - - - -def tsi( - close: Series, fast: Int = None, slow: Int = None, - signal: Int = None, scalar: IntFloat = None, - mamode: str = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """True Strength Index - - This indicator attempts to identify short-term swings in trend direction - as well as identifying possible "overbought" and "oversold" signals. - - Sources: - * [investopedia](https://www.investopedia.com/terms/t/tsi.asp) - - Parameters: - close (Series): ```close``` Series - fast (int): Fast MA period. Default: ```13``` - slow (int): Slow MA period. Default: ```25``` - signal (int): Signal period. Default: ```13``` - scalar (float): Scalar. Default: ```100``` - mamode (str): Signal MA. See ```help(ta.ma)```. Default: ```"ema"``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 2 columns - """ - # Validate - fast = v_pos_default(fast, 13) - slow = v_pos_default(slow, 25) - signal = v_pos_default(signal, 13) - if slow < fast: - fast, slow = slow, fast - _length = slow + signal + 1 - close = v_series(close, _length) - - if "length" in kwargs: - kwargs.pop("length") - - if close is None: - return - - scalar = v_scalar(scalar, 100) - mamode = v_mamode(mamode, "ema") - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - diff = close.diff(drift) - slow_ema = ema(close=diff, length=slow, **kwargs) - if all(isnan(slow_ema)): - return # Emergency Break - fast_slow_ema = ema(close=slow_ema, length=fast, **kwargs) - - abs_diff = diff.abs() - abs_slow_ema = ema(close=abs_diff, length=slow, **kwargs) - if all(isnan(abs_slow_ema)): - return # Emergency Break - abs_fast_slow_ema = ema(close=abs_slow_ema, length=fast, **kwargs) - - tsi = scalar * fast_slow_ema / abs_fast_slow_ema - if all(isnan(tsi)): - return # Emergency Break - tsi_signal = ma(mamode, tsi, length=signal) - - # Offset - if offset != 0: - tsi = tsi.shift(offset) - tsi_signal = tsi_signal.shift(offset) - - # Fill - if "fillna" in kwargs: - tsi.fillna(kwargs["fillna"], inplace=True) - tsi_signal.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - tsi.name = f"TSI_{fast}_{slow}_{signal}" - tsi_signal.name = f"TSIs_{fast}_{slow}_{signal}" - tsi.category = tsi_signal.category = "momentum" - - data = {tsi.name: tsi, tsi_signal.name: tsi_signal} - df = DataFrame(data, index=close.index) - df.name = f"TSI_{fast}_{slow}_{signal}" - df.category = "momentum" - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/uo.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/uo.py deleted file mode 100644 index ab407b3a..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/uo.py +++ /dev/null @@ -1,105 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.maps import Imports -from pandas_ta.utils import ( - v_drift, - v_offset, - v_pos_default, - v_series, - v_talib -) - - - -def uo( - high: Series, low: Series, close: Series, - fast: Int = None, medium: Int = None, slow: Int = None, - fast_w: IntFloat = None, medium_w: IntFloat = None, slow_w: IntFloat = None, - talib: bool = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Ultimate Oscillator - - This indicator, by Larry Williams, attempts to identify momentum. - - Sources: - * [tradingview](https://www.tradingview.com/wiki/Ultimate_Oscillator_(UO)) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - fast (int): The Fast %K period. Default: ```7``` - medium (int): The Slow %K period. Default: ```14``` - slow (int): The Slow %D period. Default: ```28``` - fast_w (float): The Fast %K period. Default: ```4.0``` - medium_w (float): The Slow %K period. Default: ```2.0``` - slow_w (float): The Slow %D period. Default: ```1.0``` - talib (bool): If installed, use TA Lib. Default: ```True``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - fast = v_pos_default(fast, 7) - medium = v_pos_default(medium, 14) - slow = v_pos_default(slow, 28) - _length = max(fast, medium, slow) + 1 - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - - if high is None or low is None or close is None: - return - - fast_w = v_pos_default(fast_w, 4.0) - medium_w = v_pos_default(medium_w, 2.0) - slow_w = v_pos_default(slow_w, 1.0) - mode_tal = v_talib(talib) - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import ULTOSC - uo = ULTOSC(high, low, close, fast, medium, slow) - else: - close_drift = close.shift(drift) - tdf = DataFrame({ - "high": high, "low": low, f"close_{drift}": close_drift - }) - max_h_or_pc = tdf.loc[:, ["high", f"close_{drift}"]].max(axis=1) - min_l_or_pc = tdf.loc[:, ["low", f"close_{drift}"]].min(axis=1) - del tdf - - bp = close - min_l_or_pc - tr = max_h_or_pc - min_l_or_pc - - fast_avg = bp.rolling(fast).sum() / tr.rolling(fast).sum() - medium_avg = bp.rolling(medium).sum() / tr.rolling(medium).sum() - slow_avg = bp.rolling(slow).sum() / tr.rolling(slow).sum() - - total_weight = fast_w + medium_w + slow_w - weights = (fast_w * fast_avg) + (medium_w * medium_avg) \ - + (slow_w * slow_avg) - uo = 100 * weights / total_weight - - # Offset - if offset != 0: - uo = uo.shift(offset) - - # Fill - if "fillna" in kwargs: - uo.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - uo.name = f"UO_{fast}_{medium}_{slow}" - uo.category = "momentum" - - return uo diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/willr.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/willr.py deleted file mode 100644 index c83c1272..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/momentum/willr.py +++ /dev/null @@ -1,75 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.maps import Imports -from pandas_ta.utils import v_offset, v_pos_default, v_series, v_talib - - - -def willr( - high: Series, low: Series, close: Series, - length: Int = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """William's Percent R - - This indicator attempts to identify "overbought" and "oversold" - conditions similar to the RSI. - - Sources: - * [tradingview](https://www.tradingview.com/wiki/Williams_%25R_(%25R)) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - length (int): The period. Default: ```14``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 14) - if "min_periods" in kwargs and kwargs["min_periods"] is not None: - min_periods = int(kwargs["min_periods"]) - else: - min_periods = length - _length = max(length, min_periods) - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - - if high is None or low is None or close is None: - return - - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import WILLR - willr = WILLR(high, low, close, length) - else: - lowest_low = low.rolling(length, min_periods=min_periods).min() - highest_high = high.rolling(length, min_periods=min_periods).max() - - willr = 100 * ((close - lowest_low) / (highest_high - lowest_low) - 1) - - # Offset - if offset != 0: - willr = willr.shift(offset) - - # Fill - if "fillna" in kwargs: - willr.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - willr.name = f"WILLR_{length}" - willr.category = "momentum" - - return willr diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/__init__.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/__init__.py deleted file mode 100644 index d68ac52d..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/__init__.py +++ /dev/null @@ -1,77 +0,0 @@ -# -*- coding: utf-8 -*- -from .alligator import alligator -from .alma import alma -from .dema import dema -from .ema import ema -from .fwma import fwma -from .hilo import hilo -from .hl2 import hl2 -from .hlc3 import hlc3 -from .hma import hma -from .hwma import hwma -from .ichimoku import ichimoku -from .jma import jma -from .kama import kama -from .linreg import linreg -from .mama import mama -from .mcgd import mcgd -from .midpoint import midpoint -from .midprice import midprice -from .ohlc4 import ohlc4 -from .pivots import pivots -from .pwma import pwma -from .rma import rma -from .sinwma import sinwma -from .sma import sma -from .smma import smma -from .ssf import ssf -from .ssf3 import ssf3 -from .supertrend import supertrend -from .swma import swma -from .t3 import t3 -from .tema import tema -from .trima import trima -from .vidya import vidya -from .wcp import wcp -from .wma import wma -from .zlma import zlma - - -__all__ = [ - "alligator", - "alma", - "dema", - "ema", - "fwma", - "hilo", - "hl2", - "hlc3", - "hma", - "hwma", - "ichimoku", - "jma", - "kama", - "linreg", - "mama", - "mcgd", - "midpoint", - "midprice", - "ohlc4", - "pivots", - "pwma", - "rma", - "sinwma", - "sma", - "smma", - "ssf", - "ssf3", - "supertrend", - "swma", - "t3", - "tema", - "trima", - "vidya", - "wcp", - "wma", - "zlma", -] diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/alligator.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/alligator.py deleted file mode 100644 index 67dd95f0..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/alligator.py +++ /dev/null @@ -1,86 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import v_offset, v_pos_default, v_series, v_talib -from .smma import smma - - - -def alligator( - close: Series, jaw: Int = None, teeth: Int = None, lips: Int = None, - talib: bool = None, offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Bill Williams Alligator - - This indicator, by Bill Williams, attempts to identify trends. - - Sources: - * [sierrachart](https://www.sierrachart.com/index.php?page=doc/StudiesReference.php&ID=175&Name=Bill_Williams_Alligator) - * [tradingview](https://www.tradingview.com/scripts/alligator/) - - Parameters: - close (Series): ```close``` Series - jaw (int): Jaw period. Default: ```13``` - teeth (int): Teeth period. Default: ```8``` - lips (int): Lips period. Default: ```5``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 3 columns - - Tip: - To avoid data leaks, offsets are to be done manually. - - Note: - Williams believed the fx market trends between 15% and 30% of the - time. Otherwise it is range bound. Inspired by fractal geometry, - where the outputs are meant to resemble an alligator opening and - closing its mouth. It It consists of 3 lines: Jaw, Teeth, and - Lips which each have differing lengths. - """ - # Validate - jaw = v_pos_default(jaw, 13) - teeth = v_pos_default(teeth, 8) - lips = v_pos_default(lips, 5) - close = v_series(close, max(jaw, teeth, lips)) - - if close is None: - return - - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - gator_jaw = smma(close, length=jaw, talib=mode_tal) - gator_teeth = smma(close, length=teeth, talib=mode_tal) - gator_lips = smma(close, length=lips, talib=mode_tal) - - # Offset - if offset != 0: - gator_jaw = gator_jaw.shift(offset) - gator_teeth = gator_teeth.shift(offset) - gator_lips = gator_lips.shift(offset) - - # Fill - if "fillna" in kwargs: - gator_jaw.fillna(kwargs["fillna"], inplace=True) - gator_teeth.fillna(kwargs["fillna"], inplace=True) - gator_lips.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = f"_{jaw}_{teeth}_{lips}" - data = { - f"AGj{_props}": gator_jaw, - f"AGt{_props}": gator_teeth, - f"AGl{_props}": gator_lips - } - df = DataFrame(data, index=close.index) - - df.name = f"AG{_props}" - df.category = "overlap" - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/alma.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/alma.py deleted file mode 100644 index 1ca3f3b6..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/alma.py +++ /dev/null @@ -1,81 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import append, arange, array, exp, floor, nan, tensordot -from numpy.version import version as np_version -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas import Series -from pandas_ta.utils import strided_window, v_offset, v_pos_default, v_series - - - -def alma( - close: Series, length: Int = None, - sigma: IntFloat = None, dist_offset: IntFloat = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Arnaud Legoux Moving Average - - This indicator attempts to reduce lag with Gaussian smoothing. - - Sources: - * [prorealcode](https://www.prorealcode.com/prorealtime-indicators/alma-arnaud-legoux-moving-average/) - * [sierrachart](https://www.sierrachart.com/index.php?page=doc/StudiesReference.php&ID=475&Name=Moving_Average_-_Arnaud_Legoux) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```9``` - sigma (float): Smoothing value. Default ```6.0``` - dist_offset (float): Distribution offset, range ```[0, 1]```. - Default ```0.85``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 9) - close = v_series(close, length) - - if close is None: - return - - sigma = v_pos_default(sigma, 6.0) - - if isinstance(dist_offset, float) and 0 <= dist_offset <= 1: - offset_ = float(dist_offset) - else: - offset_ = 0.85 - - offset = v_offset(offset) - - # Calculate - np_close = close.to_numpy() - x = arange(length) - k = floor(offset_ * (length - 1)) - weights = exp(-0.5 * ((sigma / length) * (x - k)) ** 2) - weights /= weights.sum() - - if np_version >= "1.20.0": - from numpy.lib.stride_tricks import sliding_window_view - window = sliding_window_view(np_close, length) - else: - window = strided_window(np_close, length) - result = append(array([nan] * (length - 1)), - tensordot(window, weights, axes=1)) - alma = Series(result, index=close.index) - - # Offset - if offset != 0: - alma = alma.shift(offset) - - # Fill - if "fillna" in kwargs: - alma.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - alma.name = f"ALMA_{length}_{sigma}_{offset_}" - alma.category = "overlap" - - return alma diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/dema.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/dema.py deleted file mode 100644 index e58ab701..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/dema.py +++ /dev/null @@ -1,75 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import isnan -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.maps import Imports -from pandas_ta.utils import v_offset, v_pos_default, v_series, v_talib -from .ema import ema - - - -def dema( - close: Series, length: Int = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Double Exponential Moving Average - - This indicator attempts to create a smoother average with less lag than - the EMA. - - Sources: - * [tradingtechnologies](https://www.tradingtechnologies.com/help/x-study/technical-indicator-definitions/double-exponential-moving-average-dema/) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```10``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Warning: - TA-Lib Correlation: ```np.float64(0.9999894518202522)``` - - Tip: - Corrective contributions welcome! - """ - # Validate - length = v_pos_default(length, 10) - close = v_series(close, length) - - if close is None: - return - - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import DEMA - dema = DEMA(close, length) - else: - ema1 = ema(close=close, length=length, talib=mode_tal) - ema2 = ema(close=ema1, length=length, talib=mode_tal) - dema = 2 * ema1 - ema2 - - if all(isnan(dema.to_numpy())): - return # Emergency Break - - # Offset - if offset != 0: - dema = dema.shift(offset) - - # Fill - if "fillna" in kwargs: - dema.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - dema.name = f"DEMA_{length}" - dema.category = "overlap" - - return dema diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/ema.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/ema.py deleted file mode 100644 index b41e5521..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/ema.py +++ /dev/null @@ -1,80 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import nan -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.maps import Imports -from pandas_ta.utils import ( - v_bool, - v_offset, - v_pos_default, - v_series, - v_talib -) - - - -def ema( - close: Series, length: Int = None, - talib: bool = None, presma: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Exponential Moving Average - - This Moving Average is more responsive than the Simple Moving - Average (SMA). - - Sources: - * [investopedia](https://www.investopedia.com/ask/answers/122314/what-exponential-moving-average-ema-formula-and-how-ema-calculated.asp) - * [stockcharts](https://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:moving_averages) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```10``` - talib (bool): If installed, use TA Lib. Default: ```True``` - presma (bool): Initialize with SMA like TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - adjust (bool): Default: ```False``` - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 10) - close = v_series(close, length) - - if close is None: - return - - mode_tal = v_talib(talib) - presma = v_bool(presma, True) - offset = v_offset(offset) - adjust = kwargs.setdefault("adjust", False) - - # Calculate - if Imports["talib"] and mode_tal and length > 1: - from talib import EMA - ema = EMA(close, length) - else: - if presma: # TA Lib implementation - close = close.copy() - sma_nth = close.iloc[0:length].mean() - close.iloc[:length - 1] = nan - close.iloc[length - 1] = sma_nth - ema = close.ewm(span=length, adjust=adjust).mean() - - # Offset - if offset != 0: - ema = ema.shift(offset) - - # Fill - if "fillna" in kwargs: - ema.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - ema.name = f"EMA_{length}" - ema.category = "overlap" - - return ema diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/fwma.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/fwma.py deleted file mode 100644 index eee67a80..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/fwma.py +++ /dev/null @@ -1,66 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import ( - fibonacci, - v_ascending, - v_offset, - v_pos_default, - v_series, - weights -) - - - -def fwma( - close: Series, length: Int = None, asc: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Fibonacci's Weighted Moving Average - - This indicator, by Kevin Johnson, is similar to a Weighted Moving Average - (WMA) where the weights are based on the Fibonacci Sequence. - - Sources: - * Kevin Johnson - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```10``` - asc (bool): Recent values weigh more. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 10) - close = v_series(close, length) - - if close is None: - return - - asc = v_ascending(asc) - offset = v_offset(offset) - - # Calculate - fibs = fibonacci(n=length, weighted=True) - fwma = close.rolling(length, min_periods=length) \ - .apply(weights(fibs), raw=True) - - # Offset - if offset != 0: - fwma = fwma.shift(offset) - - # Fill - if "fillna" in kwargs: - fwma.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - fwma.name = f"FWMA_{length}" - fwma.category = "overlap" - - return fwma diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/hilo.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/hilo.py deleted file mode 100644 index d359be13..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/hilo.py +++ /dev/null @@ -1,100 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import nan -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.ma import ma -from pandas_ta.utils import v_mamode, v_offset, v_pos_default, v_series - - - -def hilo( - high: Series, low: Series, close: Series, - high_length: Int = None, low_length: Int = None, mamode: str = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Gann HiLo Activator - - This indicator, by Robert Krausz, uses two different Moving Averages to - identify trends. - - Sources: - * Gann HiLo Activator, , Stocks & Commodities Magazine, 1998 - * [sierrachart](https://www.sierrachart.com/index.php?page=doc/StudiesReference.php&ID=447&Name=Gann_HiLo_Activator) - * [tradingview](https://www.tradingview.com/script/XNQSLIYb-Gann-High-Low/) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - high_length (int): High period. Default: ```13``` - low_length (int): Low period. Default: ```21``` - mamode (str): See ```help(ta.ma)```. Default: ```"sma"``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 3 columns - - Note: - Increasing ```high_length``` and decreasing ```low_length``` is - better for short trades and vice versa for long trades. - """ - # Validate - high_length = v_pos_default(high_length, 13) - low_length = v_pos_default(low_length, 21) - _length = max(high_length, low_length) + 1 - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - - if high is None or low is None or close is None: - return - - mamode = v_mamode(mamode, "sma") - offset = v_offset(offset) - - # Calculate - m = close.size - hilo = Series(nan, index=close.index) - long = Series(nan, index=close.index) - short = Series(nan, index=close.index) - - high_ma = ma(mamode, high, length=high_length) - low_ma = ma(mamode, low, length=low_length) - - for i in range(1, m): - if close.iat[i] > high_ma.iat[i - 1]: - hilo.iat[i] = long.iat[i] = low_ma.iat[i] - elif close.iat[i] < low_ma.iat[i - 1]: - hilo.iat[i] = short.iat[i] = high_ma.iat[i] - else: - hilo.iat[i] = hilo.iat[i - 1] - long.iat[i] = short.iat[i] = hilo.iat[i - 1] - - # Offset - if offset != 0: - hilo = hilo.shift(offset) - long = long.shift(offset) - short = short.shift(offset) - - # Fill - if "fillna" in kwargs: - hilo.fillna(kwargs["fillna"], inplace=True) - long.fillna(kwargs["fillna"], inplace=True) - short.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = f"_{high_length}_{low_length}" - data = { - f"HILO{_props}": hilo, - f"HILOl{_props}": long, - f"HILOs{_props}": short - } - df = DataFrame(data, index=close.index) - - df.name = f"HILO{_props}" - df.category = "overlap" - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/hl2.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/hl2.py deleted file mode 100644 index 281bc72b..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/hl2.py +++ /dev/null @@ -1,52 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import v_offset, v_series - - - -def hl2( - high: Series, low: Series, - offset: Int = None, **kwargs: DictLike -) -> Series: - """HL2 - - HL2 is the midpoint/average of high and low. - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)```. - Only works when offset. - - Returns: - (Series): 1 column - """ - # Validate - high = v_series(high) - low = v_series(low) - offset = v_offset(offset) - - if high is None or low is None: - return - - # Calculate - avg = 0.5 * (high.to_numpy() + low.to_numpy()) - hl2 = Series(avg, index=high.index) - - # Offset - if offset != 0: - hl2 = hl2.shift(offset) - - # Fill - if "fillna" in kwargs: - hl2.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - hl2.name = "HL2" - hl2.category = "overlap" - - return hl2 diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/hlc3.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/hlc3.py deleted file mode 100644 index 7287d3ab..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/hlc3.py +++ /dev/null @@ -1,60 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.maps import Imports -from pandas_ta.utils import v_offset, v_series, v_talib - - - -def hlc3( - high: Series, low: Series, close: Series, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """HLC3 - - HLC3 is the average of high, low and close. - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)```. - Only works when offset. - - Returns: - (Series): 1 column - """ - # Validate - high = v_series(high) - low = v_series(low) - close = v_series(close) - mode_tal = v_talib(talib) - offset = v_offset(offset) - - if high is None or low is None or close is None: - return - - # Calculate - if Imports["talib"] and mode_tal and close.size: - from talib import TYPPRICE - hlc3 = TYPPRICE(high, low, close) - else: - avg = (high.to_numpy() + low.to_numpy() + close.to_numpy()) / 3.0 - hlc3 = Series(avg, index=close.index) - - # Offset - if offset != 0: - hlc3 = hlc3.shift(offset) - - # Fill - if "fillna" in kwargs: - hlc3.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - hlc3.name = "HLC3" - hlc3.category = "overlap" - - return hlc3 diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/hma.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/hma.py deleted file mode 100644 index db39e9eb..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/hma.py +++ /dev/null @@ -1,72 +0,0 @@ -# -*- coding: utf-8 -*- -from sys import modules as module_ -from numpy import sqrt -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import v_mamode, v_offset, v_pos_default, v_series -from .ema import ema -from .sma import sma -from .wma import wma - - - -def hma( - close: Series, length: Int = None, mamode: str = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Hull Moving Average - - This indicator, by Alan Hull, attempts to reduce lag compared to - classical moving averages. - - Sources: - * [Alan Hull](https://alanhull.com/hull-moving-average) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```10``` - mamode (str): One of: 'ema', 'sma', or 'wma'. Default: ```"wma"``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 10) - close = v_series(close, length + 2) - - if close is None: - return - - mamode = v_mamode(mamode, "wma") - offset = v_offset(offset) - - if mamode not in ["ema", "sma", "wma"]: - return - - _ma = getattr(module_[__name__], mamode) - - # Calculate - half_length = int(length / 2) - sqrt_length = int(sqrt(length)) - - maf = _ma(close, length=half_length) - mas = _ma(close, length=length) - hma = _ma(close=2 * maf - mas, length=sqrt_length) - - # Offset - if offset != 0: - hma = hma.shift(offset) - - # Fill - if "fillna" in kwargs: - hma.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - hma.name = f"HMA{"" if mamode == "wma" else mamode[0]}_{length}" - hma.category = "overlap" - - return hma diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/hwma.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/hwma.py deleted file mode 100644 index 8a43c301..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/hwma.py +++ /dev/null @@ -1,73 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.utils import v_offset, v_series - - - -def hwma( - close: Series, - na: IntFloat = None, nb: IntFloat = None, nc: IntFloat = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Holt-Winter Moving Average - - This indicator uses a three parameter Holt-Winter Moving Average for - smoothing. - - Sources: - * [rengel8](https://github.com/rengel8) based on a publication for - MetaTrader 5. - * [mql5](https://www.mql5.com/en/code/20856) - - Parameters: - close (Series): ```close``` Series - na (float): Smoothed series parameter (from 0 to 1). Default: 0.2 - nb (float): Trend parameter (from 0 to 1). Default: 0.1 - nc (float): Seasonality parameter (from 0 to 1). Default: 0.1 - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - Series: 1 column - """ - # Validate - close = v_series(close, 1) - na = float(na) if isinstance(na, float) and 0 < na < 1 else 0.2 - nb = float(nb) if isinstance(nb, float) and 0 < nb < 1 else 0.1 - nc = float(nc) if isinstance(nc, float) and 0 < nc < 1 else 0.1 - offset = v_offset(offset) - - if close is None: - return - - # Calculate - last_a = last_v = 0 - last_f = close.iloc[0] - - result = [] - m = close.size - for i in range(m): - F = (1.0 - na) * (last_f + last_v + 0.5 * last_a) + na * close.iloc[i] - V = (1.0 - nb) * (last_v + last_a) + nb * (F - last_f) - A = (1.0 - nc) * last_a + nc * (V - last_v) - result.append((F + V + 0.5 * A)) - last_a, last_f, last_v = A, F, V # update values - - hwma = Series(result, index=close.index) - - # Offset - if offset != 0: - hwma = hwma.shift(offset) - - # Fill - if "fillna" in kwargs: - hwma.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - hwma.name = f"HWMA_{na}_{nb}_{nc}" - hwma.category = "overlap" - - return hwma diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/ichimoku.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/ichimoku.py deleted file mode 100644 index cf4df242..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/ichimoku.py +++ /dev/null @@ -1,131 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, RangeIndex, Timedelta, Series, date_range -from pandas_ta._typing import DictLike, Int, Tuple -from pandas_ta.utils import v_offset, v_pos_default, v_series -from .midprice import midprice - - - -def ichimoku( - high: Series, low: Series, close: Series, - tenkan: Int = None, kijun: Int = None, senkou: Int = None, - include_chikou: bool = True, - offset: Int = None, **kwargs: DictLike -) -> Tuple[DataFrame, DataFrame]: - """Ichimoku Kinkō Hyō - - A forecasting model used in Japaese financial markets Pre WWII. - - Sources: - * [tradingtechnologies](https://www.tradingtechnologies.com/help/x-study/technical-indicator-definitions/ichimoku-ich/) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - tenkan (int): Tenkan period. Default: ```9``` - kijun (int): Kijun period. Default: ```26``` - senkou (int): Senkou period. Default: ```52``` - include_chikou (bool): Whether to include chikou component. - Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - lookahead (value): To avoid data leakage set to ```False```. - - Returns: - (Tuple[pd.DataFrame, pd.DataFrame]): - * Historical DataFrame, 5 columns - * Forward Looking DataFrame, 2 columns - - Danger: Possible Data Leak - Set ```lookahead=False``` to avoid data leakage. Issue [#60](https://github.com/twopirllc/pandas-ta/issues/60#). - """ - # Validate - tenkan = v_pos_default(tenkan, 9) - kijun = v_pos_default(kijun, 26) - senkou = v_pos_default(senkou, 52) - _length = max(tenkan, kijun, senkou) - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - - if high is None or low is None or close is None: - return None, None - - offset = v_offset(offset) - if not kwargs.get("lookahead", True): - include_chikou = False - - # Calculate - tenkan_sen = midprice(high=high, low=low, length=tenkan) - kijun_sen = midprice(high=high, low=low, length=kijun) - span_a = 0.5 * (tenkan_sen + kijun_sen) - span_b = midprice(high=high, low=low, length=senkou) - - # Copy Span A and B values before their shift - _span_a = span_a[-kijun:].shift(-1).copy() - _span_b = span_b[-kijun:].shift(-1).copy() - - span_a = span_a.shift(kijun - 1) - span_b = span_b.shift(kijun - 1) - chikou_span = close.shift(-kijun + 1) - - # Offset - if offset != 0: - tenkan_sen = tenkan_sen.shift(offset) - kijun_sen = kijun_sen.shift(offset) - span_a = span_a.shift(offset) - span_b = span_b.shift(offset) - chikou_span = chikou_span.shift(offset) - - # Fill - if "fillna" in kwargs: - span_a.fillna(kwargs["fillna"], inplace=True) - span_b.fillna(kwargs["fillna"], inplace=True) - chikou_span.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - span_a.name = f"ISA_{tenkan}" - span_b.name = f"ISB_{kijun}" - tenkan_sen.name = f"ITS_{tenkan}" - kijun_sen.name = f"IKS_{kijun}" - chikou_span.name = f"ICS_{kijun}" - - chikou_span.category = kijun_sen.category = tenkan_sen.category = "overlap" - span_b.category = span_a.category = chikou_span - - # Prepare Ichimoku DataFrame - data = { - span_a.name: span_a, - span_b.name: span_b, - tenkan_sen.name: tenkan_sen, - kijun_sen.name: kijun_sen, - } - if include_chikou: - data[chikou_span.name] = chikou_span - - ichimokudf = DataFrame(data, index=close.index) - ichimokudf.name = f"ICHIMOKU_{tenkan}_{kijun}_{senkou}" - ichimokudf.category = "overlap" - - # Prepare Span DataFrame - last = close.index[-1] - if close.index.dtype == "int64": - ext_index = RangeIndex(start=last + 1, stop=last + kijun + 1) - spandf = DataFrame(index=ext_index, columns=[span_a.name, span_b.name]) - _span_a.index = _span_b.index = ext_index - else: - df_freq = close.index.value_counts().mode()[0] - tdelta = Timedelta(df_freq, unit="d") - new_dt = date_range(start=last + tdelta, periods=kijun, freq="B") - spandf = DataFrame(index=new_dt, columns=[span_a.name, span_b.name]) - _span_a.index = _span_b.index = new_dt - - spandf[span_a.name] = _span_a - spandf[span_b.name] = _span_b - spandf.name = f"ICHISPAN_{tenkan}_{kijun}" - spandf.category = "overlap" - - return ichimokudf, spandf diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/jma.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/jma.py deleted file mode 100644 index d47d7799..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/jma.py +++ /dev/null @@ -1,117 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import average, log, nan, sqrt, zeros_like -from numpy import power as np_power -from pandas import Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.utils import v_float, v_offset, v_pos_default, v_series - - - -def jma( - close: Series, length: IntFloat = None, phase: IntFloat = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Jurik Moving Average Average - - This indicator, by Mark Jurik, attempts to eliminate noise. It claims - to have extremely low lag, is very smooth and is responsive to gaps. - - Sources: - * [mql5](https://c.mql5.com/forextsd/forum/164/jurik_1.pdf) - * [prorealcode](https://www.prorealcode.com/prorealtime-indicators/jurik-volatility-bands/) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```7``` - phase (float): Phase value between [-100, 100]. Default: ```0``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - _length = v_pos_default(length, 7) - close = v_series(close, _length) - - if close is None: - return - - phase = v_float(phase, 0.0) - offset = v_offset(offset) - - # Calculate - jma = zeros_like(close) - volty = zeros_like(close) - v_sum = zeros_like(close) - - kv = det0 = det1 = ma2 = 0.0 - jma[0] = ma1 = uBand = lBand = close.iloc[0] - - # Static variables - sum_length = 10 - length = 0.5 * (_length - 1) - pr = 0.5 if phase < -100 else 2.5 if phase > 100 else 1.5 + phase * 0.01 - length1 = max((log(sqrt(length)) / log(2.0)) + 2.0, 0) - pow1 = max(length1 - 2.0, 0.5) - length2 = length1 * sqrt(length) - bet = length2 / (length2 + 1) - beta = 0.45 * (_length - 1) / (0.45 * (_length - 1) + 2.0) - - m = close.shape[0] - for i in range(1, m): - price = close.iloc[i] - - # Price volatility - del1 = price - uBand - del2 = price - lBand - volty[i] = max(abs(del1), abs(del2)) if abs(del1) != abs(del2) else 0 - - # Relative price volatility factor - v_sum[i] = v_sum[i - 1] + \ - (volty[i] - volty[max(i - sum_length, 0)]) / sum_length - avg_volty = average(v_sum[max(i - 65, 0):i + 1]) - d_volty = 0 if avg_volty == 0 else volty[i] / avg_volty - r_volty = max(1.0, min(np_power(length1, 1 / pow1), d_volty)) - # r_volty = max(1.0, min(length1 **(1 / pow1), d_volty)) - - # Jurik volatility bands - pow2 = np_power(r_volty, pow1) - kv = np_power(bet, sqrt(pow2)) - uBand = price if (del1 > 0) else price - (kv * del1) - lBand = price if (del2 < 0) else price - (kv * del2) - - # Jurik Dynamic Factor - power = np_power(r_volty, pow1) - alpha = np_power(beta, power) - - # 1st stage - preliminary smoothing by adaptive EMA - ma1 = (1 - alpha) * price + alpha * ma1 - - # 2nd stage - one more preliminary smoothing by Kalman filter - det0 = (1 - beta) * (price - ma1) + beta * det0 - ma2 = ma1 + pr * det0 - - # 3rd stage - final smoothing by unique Jurik adaptive filter - det1 = ((ma2 - jma[i - 1]) * (1 - alpha) * \ - (1 - alpha)) + (alpha * alpha * det1) - jma[i] = jma[i - 1] + det1 - - jma = Series(jma, index=close.index) - jma.iloc[0:_length - 1] = nan - - # Offset - if offset != 0: - jma = jma.shift(offset) - - # Fill - if "fillna" in kwargs: - jma.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - jma.name = f"JMA_{_length}_{phase}" - jma.category = "overlap" - - return jma diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/kama.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/kama.py deleted file mode 100644 index c98f28eb..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/kama.py +++ /dev/null @@ -1,94 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import nan -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.ma import ma -from pandas_ta.utils import ( - non_zero_range, - v_drift, - v_mamode, - v_offset, - v_pos_default, - v_series -) - - - -def kama( - close: Series, length: Int = None, fast: Int = None, slow: Int = None, - mamode: str = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Kaufman's Adaptive Moving Average - - This indicator, by Perry Kaufman, attempts to find the overall trend by - adapting to volatility. - - Sources: - * [stockcharts](https://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:kaufman_s_adaptive_moving_average) - * [tradingview](https://www.tradingview.com/script/wZGOIz9r-REPOST-Indicators-3-Different-Adaptive-Moving-Averages/) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```10``` - fast (int): Fast MA period. Default: ```2``` - slow (int): Slow MA period. Default: ```30``` - mamode (str): See ```help(ta.ma)```. Default: ```"sma"``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 10) - fast = v_pos_default(fast, 2) - slow = v_pos_default(slow, 30) - close = v_series(close, max(fast, slow, length)) - - if close is None: - return - - mamode = v_mamode(mamode, "sma") - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - def weight(length: int) -> float: - return 2 / (length + 1) - - fr = weight(fast) - sr = weight(slow) - - abs_diff = non_zero_range(close, close.shift(length)).abs() - peer_diff = non_zero_range(close, close.shift(drift)).abs() - peer_diff_sum = peer_diff.rolling(length).sum() - er = abs_diff / peer_diff_sum - x = er * (fr - sr) + sr - sc = x * x - - m = close.size - ma0 = ma(mamode, close.iloc[:length], length=length, **kwargs).iloc[-1] - result = [nan for _ in range(0, length - 1)] + [ma0] - for i in range(length, m): - result.append(sc.iat[i] * close.iat[i] \ - + (1 - sc.iat[i]) * result[i - 1]) - - kama = Series(result, index=close.index) - - # Offset - if offset != 0: - kama = kama.shift(offset) - - # Fill - if "fillna" in kwargs: - kama.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - kama.name = f"KAMA_{length}_{fast}_{slow}" - kama.category = "overlap" - - return kama diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/linreg.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/linreg.py deleted file mode 100644 index 670863dd..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/linreg.py +++ /dev/null @@ -1,164 +0,0 @@ -# -*- coding: utf-8 -*- -from sys import float_info as sflt -from numpy import arctan, nan, pi, zeros_like -from numpy.version import version as np_version -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.maps import Imports -from pandas_ta.utils import ( - strided_window, - v_offset, - v_pos_default, - v_series, - v_talib, - zero -) - - - -def linreg( - close: Series, length: Int = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Linear Regression Moving Average - - This indicator is a simplified version of Standard Linear Regression. It is - one variable rolling regression whereas a Standard Linear Regression is - between two or more variables. - - Sources: - * [TA Lib](https://ta-lib.org) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```10``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - angle (bool): Returns the slope angle in radians. - Default: ```False``` - degrees (bool): Return the slope angle in degrees. - Default: ```False``` - intercept (bool): Return the intercept. Default: ```False``` - r (bool): Return the 'r' correlation. Default: ```False``` - slope (bool): Return the slope. Default: ```False``` - tsf (bool): Return the Time Series Forecast value. - Default: ```False``` - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Warning: - TA-Lib Correlation: ```np.float64(0.9985638477660118)``` - - Tip: - Corrective contributions welcome! - """ - # Validate - length = v_pos_default(length, 14) - close = v_series(close, length) - - if close is None: - return - - mode_tal = v_talib(talib) - offset = v_offset(offset) - - angle = kwargs.pop("angle", False) - intercept = kwargs.pop("intercept", False) - degrees = kwargs.pop("degrees", False) - r = kwargs.pop("r", False) - slope = kwargs.pop("slope", False) - tsf = kwargs.pop("tsf", False) - - # Calculate - np_close = close.to_numpy() - - if Imports["talib"] and mode_tal and not r: - from talib import LINEARREG, LINEARREG_ANGLE, LINEARREG_INTERCEPT, LINEARREG_SLOPE, TSF - if tsf: - linreg = TSF(close, timeperiod=length) - elif slope: - linreg = LINEARREG_SLOPE(close, timeperiod=length) - elif intercept: - linreg = LINEARREG_INTERCEPT(close, timeperiod=length) - elif angle: - linreg = LINEARREG_ANGLE(close, timeperiod=length) - else: - linreg = LINEARREG(close, timeperiod=length) - else: - linreg_ = zeros_like(np_close) - # [1, 2, ..., n] from 1 to n keeps Sum(xy) low - x = range(1, length + 1) - x_sum = 0.5 * length * (length + 1) - x2_sum = x_sum * (2 * length + 1) / 3 - divisor = length * x2_sum - x_sum * x_sum - - # Needs to be reworked outside the method - def linear_regression(series): - y_sum = series.sum() - xy_sum = (x * series).sum() - - m = (length * xy_sum - x_sum * y_sum) / divisor - if slope: - return m - b = (y_sum * x2_sum - x_sum * xy_sum) / divisor - if intercept: - return b - - if angle: - theta = arctan(m) - if degrees: - theta *= 180 / pi - return theta - - if r: - y2_sum = (series * series).sum() - rn = length * xy_sum - x_sum * y_sum - rd = (divisor * (length * y2_sum - y_sum * y_sum)) ** 0.5 - if zero(rd) == 0: - rd = sflt.epsilon - return rn / rd - - return m * length + b if not tsf else m * (length - 1) + b - - if np_version >= "1.20.0": - from numpy.lib.stride_tricks import sliding_window_view - linreg_ = [ - linear_regression(_) for _ in sliding_window_view( - np_close, length) - ] - - else: - linreg_ = [ - linear_regression(_) for _ in strided_window( - np_close, length) - ] - - linreg = Series([nan] * (length - 1) + linreg_, index=close.index) - - # Offset - if offset != 0: - linreg = linreg.shift(offset) - - # Fill - if "fillna" in kwargs: - linreg.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - linreg.name = f"LINREG" - if slope: - linreg.name += "m" - if intercept: - linreg.name += "b" - if angle: - linreg.name += "a" - if r: - linreg.name += "r" - - linreg.name += f"_{length}" - linreg.category = "overlap" - - return linreg diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/mama.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/mama.py deleted file mode 100644 index a7a51a3c..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/mama.py +++ /dev/null @@ -1,167 +0,0 @@ -# -*- coding: utf-8 -*- -from numba import njit -from numpy import arctan, isnan, nan, zeros_like -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.maps import Imports -from pandas_ta.utils import v_offset, v_pos_default, v_series, v_talib - - - -# Ehler's Mother of Adaptive Moving Averages -# http://traders.com/documentation/feedbk_docs/2014/01/traderstips.html -@njit(cache=True) -def nb_mama(x, fastlimit, slowlimit, prenan): - a, b, m = 0.0962, 0.5769, x.size - p_w, smp_w, smp_w_c = 0.2, 0.33, 0.67 - - wma4 = zeros_like(x) - dt, smp = zeros_like(x), zeros_like(x) - i1, i2 = zeros_like(x), zeros_like(x) - ji, jq = zeros_like(x), zeros_like(x) - q1, q2 = zeros_like(x), zeros_like(x) - re, im, alpha = zeros_like(x), zeros_like(x), zeros_like(x) - period, phase = zeros_like(x), zeros_like(x) - mama, fama = zeros_like(x), zeros_like(x) - - # Ehler's starts from 6, TV-LB from 3, TALib from 32 - for i in range(3, m): - adj_prev_period = 0.075 * period[i - 1] + 0.54 - - # WMA(x,4) & Detrended WMA(x,4) - wma4[i] = 0.4 * x[i] + 0.3 * x[i - 1] + 0.2 * x[i - 2] + 0.1 * x[i - 3] - dt[i] = adj_prev_period * (a * wma4[i] + b * wma4[i - 2] - b * wma4[i - 4] - a * wma4[i - 6]) - - # Quadrature(Detrender) and In Phase Component - q1[i] = adj_prev_period * (a * dt[i] + b * dt[i - 2] - b * dt[i - 4] - a * dt[i - 6]) - i1[i] = dt[i - 3] - - # Phase Q1 and I1 by 90 degrees - ji[i] = adj_prev_period * (a * i1[i] + b * i1[i - 2] - b * i1[i - 4] - a * i1[i - 6]) - jq[i] = adj_prev_period * (a * q1[i] + b * q1[i - 2] - b * q1[i - 4] - a * q1[i - 6]) - - # Phasor Addition for 3 Bar Averaging - i2[i] = i1[i] - jq[i] - q2[i] = q1[i] + ji[i] - - # Smooth I2 & Q2 - i2[i] = p_w * i2[i] + (1 - p_w) * i2[i - 1] - q2[i] = p_w * q2[i] + (1 - p_w) * q2[i - 1] - - # Homodyne Discriminator - re[i] = i2[i] * i2[i - 1] + q2[i] * q2[i - 1] - im[i] = i2[i] * q2[i - 1] + q2[i] * i2[i - 1] - - # Smooth Re & Im - re[i] = p_w * re[i] + (1 - p_w) * re[i - 1] - im[i] = p_w * im[i] + (1 - p_w) * im[i - 1] - - if im[i] != 0.0 and re[i] != 0.0: - period[i] = 360 / arctan(im[i] / re[i]) - else: - period[i] = 0 - - if period[i] > 1.5 * period[i - 1]: - period[i] = 1.5 * period[i - 1] - if period[i] < 0.67 * period[i - 1]: - period[i] = 0.67 * period[i - 1] - if period[i] < 6: - period[i] = 6 - if period[i] > 50: - period[i] = 50 - - period[i] = p_w * period[i] + (1 - p_w) * period[i - 1] - smp[i] = smp_w * period[i] + smp_w_c * smp[i - 1] - - if i1[i] != 0.0: - phase[i] = arctan(q1[i] / i1[i]) - - dphase = phase[i - 1] - phase[i] - if dphase < 1: - dphase = 1 - - alpha[i] = fastlimit / dphase - if alpha[i] > fastlimit: - alpha[i] = fastlimit - if alpha[i] < slowlimit: - alpha[i] = slowlimit - - mama[i] = alpha[i] * x[i] + (1 - alpha[i]) * mama[i - 1] - fama[i] = 0.5 * alpha[i] * mama[i] + (1 - 0.5 * alpha[i]) * fama[i - 1] - - mama[:prenan], fama[:prenan] = nan, nan - return mama, fama - - -def mama( - close: Series, fastlimit: IntFloat = None, slowlimit: IntFloat = None, - prenan: Int = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """MESA Adaptive Moving Average - - This indicator, aka the Mother of All Moving Averages by John Ehlers, - attempts to adapt to volatility by using a Hilbert Transform Discriminator - - Sources: - * [Ehlers's Mother of Adaptive Moving Averages](http://traders.com/documentation/feedbk_docs/2014/01/traderstips.html) - * [tradingview](https://www.tradingview.com/script/foQxLbU3-Ehlers-MESA-Adaptive-Moving-Average-LazyBear/) - - Parameters: - close (Series): ```close``` Series - fastlimit (float): Fast limit. Default: ```0.5``` - slowlimit (float): Slow limit. Default: ```0.05``` - prenan (int): Prenans to apply. TV-LB ```3```, Ehler's ```6```, - TA Lib ```32```. Default: ```3``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 2 columns - - Tip: - **FAMA** also included - """ - # Validate - close = v_series(close, 1) - - if close is None: - return - - fastlimit = v_pos_default(fastlimit, 0.5) - slowlimit = v_pos_default(slowlimit, 0.05) - prenan = v_pos_default(prenan, 3) - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - np_close = close.to_numpy() - if Imports["talib"] and mode_tal: - from talib import MAMA - mama, fama = MAMA(np_close, fastlimit, slowlimit) - else: - mama, fama = nb_mama(np_close, fastlimit, slowlimit, prenan) - - if all(isnan(mama)) or all(isnan(fama)): - return # Emergency Break - - # Name and Category - _props = f"_{fastlimit}_{slowlimit}" - data = {f"MAMA{_props}": mama, f"FAMA{_props}": fama} - df = DataFrame(data, index=close.index) - - df.name = f"MAMA{_props}" - df.category = "overlap" - - # Offset - if offset != 0: - df = df.shift(offset) - - # Fill - if "fillna" in kwargs: - df.fillna(kwargs["fillna"], inplace=True) - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/mcgd.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/mcgd.py deleted file mode 100644 index 5c60429b..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/mcgd.py +++ /dev/null @@ -1,72 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.utils import v_offset, v_pos_default, v_series - - - -def _mcgd(x, n, k): - d = (k * n * (x[1] / x[0]) ** 4) - x[1] = (x[0] + ((x[1] - x[0]) / d)) - return x[1] - - -def mcgd( - close: Series, length: Int = None, c: IntFloat = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """McGinley Dynamic Indicator - - This indicator, by John R. McGinley, is not a moving average but a - differential smoothing technique. - - Sources: - * John R. McGinley, a Certified Market Technician (CMT) and former - editor of the Market Technicians Association's Journal of - Technical Analysis. - * [investopedia](https://www.investopedia.com/articles/forex/09/mcginley-dynamic-indicator.asp) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```10``` - c (float): Denominator multiplier. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Note: - Sometimes ```c``` is set to ```0.6```. - """ - # Validate - length = v_pos_default(length, 10) - close = v_series(close, length) - - if close is None: - return - - c = float(c) if isinstance(c, float) and 0 < c <= 1 else 1 - offset = v_offset(offset) - - # Calculate - close = close.copy() - - mcg_ds = close[0:].rolling(2, min_periods=2) \ - .apply(_mcgd, kwargs={"n": length, "k": c}, raw=True) - - # Offset - if offset != 0: - mcg_ds = mcg_ds.shift(offset) - - # Fill - if "fillna" in kwargs: - mcg_ds.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - mcg_ds.name = f"MCGD_{length}" - mcg_ds.category = "overlap" - - return mcg_ds diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/midpoint.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/midpoint.py deleted file mode 100644 index 20ec369e..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/midpoint.py +++ /dev/null @@ -1,64 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.maps import Imports -from pandas_ta.utils import v_offset, v_pos_default, v_series, v_talib - - - -def midpoint( - close: Series, length: Int = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Midpoint - - The Midpoint is the average of the rolling high and low of period length. - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```2``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 2) - if "min_periods" in kwargs and kwargs["min_periods"] is not None: - min_periods = int(kwargs["min_periods"]) - else: - min_periods = length - close = v_series(close, max(length, min_periods)) - - if close is None: - return - - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import MIDPOINT - midpoint = MIDPOINT(close, length) - else: - lowest = close.rolling(length, min_periods=min_periods).min() - highest = close.rolling(length, min_periods=min_periods).max() - midpoint = 0.5 * (lowest + highest) - - # Offset - if offset != 0: - midpoint = midpoint.shift(offset) - - # Fill - if "fillna" in kwargs: - midpoint.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - midpoint.name = f"MIDPOINT_{length}" - midpoint.category = "overlap" - - return midpoint diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/midprice.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/midprice.py deleted file mode 100644 index 6593cd74..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/midprice.py +++ /dev/null @@ -1,67 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.maps import Imports -from pandas_ta.utils import v_offset, v_pos_default, v_series, v_talib - - - -def midprice( - high: Series, low: Series, length: Int = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Midprice - - The Midprice is the average of the rolling high and low of period length. - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - length (int): The period. Default: ```2``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 2) - if "min_periods" in kwargs and kwargs["min_periods"] is not None: - min_periods = int(kwargs["min_periods"]) - else: - min_periods = length - _length = max(length, min_periods) - high = v_series(high, _length) - low = v_series(low, _length) - - if high is None or low is None: - return - - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import MIDPRICE - midprice = MIDPRICE(high, low, length) - else: - lowest_low = low.rolling(length, min_periods=min_periods).min() - highest_high = high.rolling(length, min_periods=min_periods).max() - midprice = 0.5 * (lowest_low + highest_high) - - # Offset - if offset != 0: - midprice = midprice.shift(offset) - - # Fill - if "fillna" in kwargs: - midprice.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - midprice.name = f"MIDPRICE_{length}" - midprice.category = "overlap" - - return midprice diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/ohlc4.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/ohlc4.py deleted file mode 100644 index 30ad87dc..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/ohlc4.py +++ /dev/null @@ -1,53 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import v_offset, v_series - - - -def ohlc4( - open_: Series, high: Series, low: Series, close: Series, - offset: Int = None, **kwargs: DictLike -) -> Series: - """OHLC4 - - OHLC4 is the average of open, high, low and close. - - Parameters: - open_ (Series): ```open``` Series - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)```. - Only works when offset. - - Returns: - (Series): 1 column - """ - # Validate - open_ = v_series(open_) - high = v_series(high) - low = v_series(low) - close = v_series(close) - offset = v_offset(offset) - - # Calculate - avg = 0.25 * (open_.to_numpy() + high.to_numpy() + low.to_numpy() + close.to_numpy()) - ohlc4 = Series(avg, index=close.index) - - # Offset - if offset != 0: - ohlc4 = ohlc4.shift(offset) - - # Fill - if "fillna" in kwargs: - ohlc4.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - ohlc4.name = "OHLC4" - ohlc4.category = "overlap" - - return ohlc4 diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/pivots.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/pivots.py deleted file mode 100644 index 157c3da6..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/pivots.py +++ /dev/null @@ -1,264 +0,0 @@ -# -*- coding: utf-8 -*- -from numba import njit -from numpy import greater, nan, zeros_like -from pandas import DataFrame, DateOffset, Series, infer_freq -from pandas_ta._typing import DictLike -from pandas_ta.utils import ( - nb_nonzero_range, - v_datetime_ordered, - v_series, - v_str -) - -# Support for Pandas v1.4.x and v2.2.x -td_mapping = { - 'Y': 'years', - 'YE': 'years', - 'M': 'months', - 'ME': 'months', - 'D': 'days', -} - - - -@njit(cache=True) -def pivot_camarilla(high, low, close): - tp = (high + low + close) / 3 - hl_range = nb_nonzero_range(high, low) - - s1 = close - 11 / 120 * hl_range - s2 = close - 11 / 60 * hl_range - s3 = close - 0.275 * hl_range - s4 = close - 0.55 * hl_range - - r1 = close + 11 / 120 * hl_range - r2 = close + 11 / 60 * hl_range - r3 = close + 0.275 * hl_range - r4 = close + 0.55 * hl_range - - return tp, s1, s2, s3, s4, r1, r2, r3, r4 - - -@njit(cache=True) -def pivot_classic(high, low, close): - tp = (high + low + close) / 3 - hl_range = nb_nonzero_range(high, low) - - s1 = 2 * tp - high - s2 = tp - hl_range - s3 = tp - 2 * hl_range - s4 = tp - 3 * hl_range - - r1 = 2 * tp - low - r2 = tp + hl_range - r3 = tp + 2 * hl_range - r4 = tp + 3 * hl_range - - return tp, s1, s2, s3, s4, r1, r2, r3, r4 - - -@njit(cache=True) -def pivot_demark(open_, high, low, close): - if (open_ == close).all(): - tp = 0.25 * (high + low + 2 * close) - elif greater(close, open_).all(): - tp = 0.25 * (2 * high + low + close) - else: - tp = 0.25 * (high + 2 * low + close) - - s1 = 2 * tp - high - r1 = 2 * tp - low - - return tp, s1, r1 - - -@njit(cache=True) -def pivot_fibonacci(high, low, close): - tp = (high + low + close) / 3 - hl_range = nb_nonzero_range(high, low) - - s1 = tp - 0.382 * hl_range - s2 = tp - 0.618 * hl_range - s3 = tp - hl_range - - r1 = tp + 0.382 * hl_range - r2 = tp + 0.618 * hl_range - r3 = tp + hl_range - - return tp, s1, s2, s3, r1, r2, r3 - - -@njit(cache=True) -def pivot_traditional(high, low, close): - tp = (high + low + close) / 3 - hl_range = nb_nonzero_range(high, low) - - s1 = 2 * tp - high - s2 = tp - hl_range - s3 = tp - 2 * hl_range - s4 = tp - 2 * hl_range - - r1 = 2 * tp - low - r2 = tp + hl_range - r3 = tp + 2 * hl_range - r4 = tp + 2 * hl_range - - return tp, s1, s2, s3, s4, r1, r2, r3, r4 - - -@njit(cache=True) -def pivot_woodie(open_, high, low): - tp = (2 * open_ + high + low) / 4 - hl_range = nb_nonzero_range(high, low) - - s1 = 2 * tp - high - s2 = tp - hl_range - s3 = low - 2 * (high - tp) - s4 = s3 - hl_range - - r1 = 2 * tp - low - r2 = tp + hl_range - r3 = high + 2 * (tp - low) - r4 = r3 + hl_range - - return tp, s1, s2, s3, s4, r1, r2, r3, r4 - - -def pivots( - open_: Series, high: Series, - low: Series, close: Series, - method: str = None, anchor: str = None, - **kwargs: DictLike -) -> DataFrame: - """Pivot Points - - Pivot Points attempt to identify support and resistance levels. - There are many different methods of calculating Pivot Points. The most - common (and default) method is: Traditional. Other methods include: - Camarilla, Classic, Demark, Fibonacci, and Woodie. - - Sources: - * [sierrachart](https://www.sierrachart.com/index.php?page=doc/PivotPoints.html) - - Parameters: - open_ (Series): ```open``` Series - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - method (str): Pivot methode. Default: ```'traditional'``` - anchor (str): Anchor frequency. Default: ```'D'``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 3, 7 or 9 columns - - Note: - [Pandas Offset Aliases](https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#timeseries-offset-aliases) - """ - # Validate - open_ = v_series(open_) - high = v_series(high) - low = v_series(low) - close = v_series(close) - - if open_ is None or high is None or low is None or close is None: - return None - - methods = [ - "traditional", "fibonacci", "woodie", "classic", "demark", "camarilla" - ] - method = v_str(method, methods[0]) - - if close.index.size < 3: - return # Emergency Break - - if not v_datetime_ordered(close): - print("[!] Pivots requires an ordered DatetimeIndex.") - return - - dt_index = close.index - freq = infer_freq(dt_index) - - if anchor and isinstance(anchor, str) and len(anchor) >= 1: - anchor = anchor.upper() - else: - anchor = "D" - - # Resample if freq does not match the anchor - if freq is not anchor: - df = DataFrame( - data={ - "open": open_.resample(anchor).first(), - "high": high.resample(anchor).max(), - "low": low.resample(anchor).min(), - "close": close.resample(anchor).last() - } - ) - df.dropna(inplace=True) - else: - df = DataFrame( - data={"open": open_, "high": high, "low": low, "close": close}, - index=dt_index - ) - - np_open = df.open.to_numpy() - np_high = df.high.to_numpy() - np_low = df.low.to_numpy() - np_close = df.close.to_numpy() - - # Create nan arrays for "demark" and "fibonacci" pivots - _nan_array = zeros_like(np_close) - _nan_array[:] = nan - tp = s1 = s2 = s3 = s4 = r1 = r2 = r3 = r4 = _nan_array - - # Calculate - if method == "camarilla": - tp, s1, s2, s3, s4, r1, r2, r3, r4 = \ - pivot_camarilla(np_high, np_low, np_close) - - elif method == "classic": - tp, s1, s2, s3, s4, r1, r2, r3, r4 = \ - pivot_classic(np_high, np_low, np_close) - - elif method == "demark": - tp, s1, r1 = pivot_demark(np_open, np_high, np_low, np_close) - - elif method == "fibonacci": - tp, s1, s2, s3, r1, r2, r3 = pivot_fibonacci(np_high, np_low, np_close) - - elif method == "woodie": - tp, s1, s2, s3, s4, r1, r2, r3, r4 = \ - pivot_woodie(np_open, np_high, np_low) - - else: # Traditional - tp, s1, s2, s3, s4, r1, r2, r3, r4 = \ - pivot_traditional(np_high, np_low, np_close) - - # Name and Category - _props = f"PIVOTS_{method[:4].upper()}_{anchor}" - df[f"{_props}_P"] = tp - df[f"{_props}_S1"], df[f"{_props}_S2"] = s1, s2 - df[f"{_props}_S3"], df[f"{_props}_S4"] = s3, s4 - df[f"{_props}_R1"], df[f"{_props}_R2"] = r1, r2 - df[f"{_props}_R3"], df[f"{_props}_R4"] = r3, r4 - - time_unit = td_mapping.get(anchor.upper(), None) - if time_unit: - time_delta = DateOffset(**{time_unit: 1}) - df.index = df.index + time_delta - else: - print(f"[!] Unsupported time anchor {anchor}.") - - if freq is not anchor: - df = df.reindex(dt_index, method="ffill") - df = df.iloc[:,4:] - - if method in ["demark", "fibonacci"]: - df.drop(columns=[x for x in df.columns if all(df[x].isna())], inplace=True) - - df.name = _props - df.category = "overlap" - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/pwma.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/pwma.py deleted file mode 100644 index 3c3ccdfd..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/pwma.py +++ /dev/null @@ -1,66 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import ( - pascals_triangle, - v_offset, - v_ascending, - v_pos_default, - v_series, - weights -) - - - -def pwma( - close: Series, length: Int = None, asc: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Pascal's Weighted Moving Average - - This indicator, by Kevin Johnson, creates a weighted moving average using - Pascal's Triangle. - - Sources: - * Kevin Johnson - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```10``` - asc (bool): Ascending. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 1 column - """ - # Validate - length = v_pos_default(length, 10) - close = v_series(close, length) - - if close is None: - return - - asc = v_ascending(asc) - offset = v_offset(offset) - - # Calculate - triangle = pascals_triangle(n=length - 1, weighted=True) - pwma = close.rolling(length, min_periods=length) \ - .apply(weights(triangle), raw=True) - - # Offset - if offset != 0: - pwma = pwma.shift(offset) - - # Fill - if "fillna" in kwargs: - pwma.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - pwma.name = f"PWMA_{length}" - pwma.category = "overlap" - - return pwma diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/rma.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/rma.py deleted file mode 100644 index 8162933e..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/rma.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import v_offset, v_pos_default, v_series - - - -def rma( - close: Series, length: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """wildeR's Moving Average - - This indicator, by Wilder, is simply an EMA where _alpha_ is - the recipical of its _length_. - - Sources: - * [incrediblecharts](https://www.incrediblecharts.com/indicators/wilder_moving_average.php) - * [thinkorswim](https://tlc.thinkorswim.com/center/reference/Tech-Indicators/studies-library/V-Z/WildersSmoothing) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```10``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 10) - close = v_series(close, length) - - if close is None: - return - - alpha = (1.0 / length) if length > 0 else 0.5 - offset = v_offset(offset) - - rma = close.ewm(alpha=alpha, adjust=False).mean() - - # Offset - if offset != 0: - rma = rma.shift(offset) - - # Fill - if "fillna" in kwargs: - rma.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - rma.name = f"RMA_{length}" - rma.category = "overlap" - - return rma diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/sinwma.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/sinwma.py deleted file mode 100644 index cdeb3cff..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/sinwma.py +++ /dev/null @@ -1,63 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import pi, sin -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import v_offset, v_pos_default, v_series, weights - - - -def sinwma( - close: Series, length: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Sine Weighted Moving Average - - This indicator is a weighted average using sine cycles where the central - values have greater weight. - - Source: - * [Everget](https://www.tradingview.com/u/everget/) - * [tradingview](https://www.tradingview.com/script/6MWFvnPO-Sine-Weighted-Moving-Average/) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```10``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 14) - close = v_series(close, length) - - if close is None: - return - - offset = v_offset(offset) - - # Calculate - sines = Series( - [sin((i + 1) * pi / (length + 1)) for i in range(0, length)] - ) - w = sines / sines.sum() - - sinwma = close.rolling(length, min_periods=length) \ - .apply(weights(w), raw=True) - - # Offset - if offset != 0: - sinwma = sinwma.shift(offset) - - # Fill - if "fillna" in kwargs: - sinwma.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - sinwma.name = f"SINWMA_{length}" - sinwma.category = "overlap" - - return sinwma diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/sma.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/sma.py deleted file mode 100644 index efe058e3..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/sma.py +++ /dev/null @@ -1,85 +0,0 @@ -# -*- coding: utf-8 -*- -from numba import njit -from numpy import convolve, ones -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.maps import Imports -from pandas_ta.utils import ( - nb_prepend, - v_offset, - v_pos_default, - v_series, - v_talib -) - - - -# Fast SMA Options: https://github.com/numba/numba/issues/4119 -@njit(cache=True) -def nb_sma(x, n): - result = convolve(ones(n) / n, x)[n - 1:1 - n] - return nb_prepend(result, n - 1) - - -def sma( - close: Series, length: Int = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Simple Moving Average - - This indicator is the the textbook moving average, a rolling sum of - values divided by the window period (or length). - - Sources: - * [tradingtechnologies](https://www.tradingtechnologies.com/help/x-study/technical-indicator-definitions/simple-moving-average-sma/) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```10``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - adjust (bool): Adjust the values. Default: ```True``` - presma (bool): If True, uses SMA for initial value. - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 10) - if "min_periods" in kwargs and kwargs["min_periods"] is not None: - min_periods = int(kwargs["min_periods"]) - else: - min_periods = length - close = v_series(close, max(length, min_periods)) - - if close is None: - return - - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal and length > 1: - from talib import SMA - sma = SMA(close, length) - else: - np_close = close.to_numpy() - sma = nb_sma(np_close, length) - sma = Series(sma, index=close.index) - - # Offset - if offset != 0: - sma = sma.shift(offset) - - # Fill - if "fillna" in kwargs: - sma.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - sma.name = f"SMA_{length}" - sma.category = "overlap" - - return sma diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/smma.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/smma.py deleted file mode 100644 index 99af8e43..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/smma.py +++ /dev/null @@ -1,82 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import nan -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.ma import ma -from pandas_ta.utils import ( - v_mamode, - v_offset, - v_pos_default, - v_series, - v_talib -) - - - -def smma( - close: Series, length: Int = None, - mamode: str = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """SMoothed Moving Average - - This indicator attempts to confirm trends and identify support and - resistance areas. It tries to reduce noise in contrast to reducing lag. - - Sources: - * [sierrachart](https://www.sierrachart.com/index.php?page=doc/StudiesReference.php&ID=173&Name=Moving_Average_-_Smoothed) - * [tradingview](https://www.tradingview.com/scripts/smma/) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```10``` - mamode (str): See ```help(ta.ma)```. Default: ```"sma"``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Note: - A core component of Bill Williams Alligator indicator. - """ - # Validate - length = v_pos_default(length, 7) - if "min_periods" in kwargs and kwargs["min_periods"] is not None: - min_periods = int(kwargs["min_periods"]) - else: - min_periods = length - close = v_series(close, max(length, min_periods)) - - if close is None: - return - - mamode = v_mamode(mamode, "sma") - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - m = close.size - smma = close.copy() - smma[:length - 1] = nan - smma.iloc[length - 1] = ma(mamode, close[0:length], length=length, talib=mode_tal).iloc[-1] - - for i in range(length, m): - smma.iat[i] = ((length - 1) * smma.iat[i - 1] + smma.iat[i]) / length - - # Offset - if offset != 0: - smma = smma.shift(offset) - - # Fill - if "fillna" in kwargs: - smma.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - smma.name = f"SMMA_{length}" - smma.category = "overlap" - - return smma diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/ssf.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/ssf.py deleted file mode 100644 index 3f50a18f..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/ssf.py +++ /dev/null @@ -1,115 +0,0 @@ -# -*- coding: utf-8 -*- -from numba import njit -from numpy import copy, cos, exp -from pandas import Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.utils import v_bool, v_offset, v_pos_default, v_series - - - -# Ehlers's Super Smoother Filter -# http://traders.com/documentation/feedbk_docs/2014/01/traderstips.html -@njit(cache=True) -def nb_ssf(x, n, pi, sqrt2): - m, ratio, result = x.size, sqrt2 / n, copy(x) - a = exp(-pi * ratio) - b = 2 * a * cos(180 * ratio) - c = a * a - b + 1 - - # result[:2] = x[:2] - for i in range(2, m): - result[i] = 0.5 * c * (x[i] + x[i - 1]) + b * result[i - 1] \ - - a * a * result[i - 2] - - return result - - -# John F. Ehlers's Super Smoother Filter by Everget (2 poles), Tradingview -# https://www.tradingview.com/script/VdJy0yBJ-Ehlers-Super-Smoother-Filter/ -@njit(cache=True) -def nb_ssf_everget(x, n, pi, sqrt2): - m, arg, result = x.size, pi * sqrt2 / n, copy(x) - a = exp(-arg) - b = 2 * a * cos(arg) - - # result[:2] = x[:2] - for i in range(2, m): - result[i] = 0.5 * (a * a - b + 1) * (x[i] + x[i - 1]) \ - + b * result[i - 1] - a * a * result[i - 2] - - return result - - -def ssf( - close: Series, length: Int = None, - everget: bool = None, pi: IntFloat = None, sqrt2: IntFloat = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Ehlers's Super Smoother Filter - - This indicator, by John F. Ehlers's © 2013, is a (Recursive) Digital - Filter that attempts to reduce lag and remove aliases. This version - has two poles. - - Sources: - * [mql5](https://www.mql5.com/en/code/588) - * [traders.com](http://traders.com/documentation/feedbk_docs/2014/01/traderstips.html) - * [tradingview](https://www.tradingview.com/script/VdJy0yBJ-Ehlers-Super-Smoother-Filter/) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```20``` - everget (bool): Everget's implementation of ssf that uses pi - instead of 180 for the b factor of ssf. Default: ```False``` - pi (float): The default is Ehlers's truncated value: ```3.14159```. - Default: ```3.14159``` - sqrt2 (float): The default is Ehlers's truncated value: ```1.414```. - Default: ```1.414``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Note: - * Everget's calculation on TradingView: - ```pi=np.pi```, ```sqrt2=np.sqrt(2)``` - - Danger: - Possible Data Leak - """ - # Validate - length = v_pos_default(length, 20) - close = v_series(close, length) - - if close is None: - return - - pi = v_pos_default(pi, 3.14159) - sqrt2 = v_pos_default(sqrt2, 1.414) - everget = v_bool(everget, False) - offset = v_offset(offset) - - # Calculate - np_close = close.to_numpy() - if everget: - ssf = nb_ssf_everget(np_close, length, pi, sqrt2) - else: - ssf = nb_ssf(np_close, length, pi, sqrt2) - ssf = Series(ssf, index=close.index) - - # Offset - if offset != 0: - ssf = ssf.shift(offset) - - # Fill - if "fillna" in kwargs: - ssf.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - ssf.name = f"SSF{'e' if everget else ''}_{length}" - ssf.category = "overlap" - - return ssf diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/ssf3.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/ssf3.py deleted file mode 100644 index 497abbb4..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/ssf3.py +++ /dev/null @@ -1,94 +0,0 @@ -# -*- coding: utf-8 -*- -from numba import njit -from numpy import copy, cos, exp -from pandas import Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.utils import v_offset, v_pos_default, v_series - - - -# John F. Ehler's Super Smoother Filter by Everget (3 poles), Tradingview -# https://www.tradingview.com/script/VdJy0yBJ-Ehlers-Super-Smoother-Filter/ -@njit(cache=True) -def nb_ssf3(x, n, pi, sqrt3): - m, result = x.size, copy(x) - a = exp(-pi / n) - b = 2 * a * cos(-pi * sqrt3 / n) - c = a * a - - d4 = c * c - d3 = -c * (1 + b) - d2 = b + c - d1 = 1 - d2 - d3 - d4 - - # result[:3] = x[:3] - for i in range(3, m): - result[i] = d1 * x[i] + d2 * result[i - 1] \ - + d3 * result[i - 2] + d4 * result[i - 3] - - return result - - -def ssf3( - close: Series, length: Int = None, - pi: IntFloat = None, sqrt3: IntFloat = None, - offset: Int = None, **kwargs: DictLike -): - """Ehlers's 3 Pole Super Smoother Filter - - This indicator, by John F. Ehlers's © 2013, is a (Recursive) Digital - Filter that attempts to reduce lag and remove aliases. This version - has two poles. - - Sources: - * [mql5](https://www.mql5.com/en/code/589) - * [tradingview](https://www.tradingview.com/script/VdJy0yBJ-Ehlers-Super-Smoother-Filter/) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```20``` - pi (float): The value of ```PI```. The default is Ehler's truncated - value: ```3.14159```. Default: ```3.14159``` - sqrt3 (float): The value of ```sqrt(3)``` to use. The default is - Ehler's truncated value: ```1.732```. Default: ```1.732``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Note: - * Everget's calculation on TradingView: - ```pi=np.pi```, ```sqrt2=np.sqrt(2)``` - """ - # Validate - length = v_pos_default(length, 20) - close = v_series(close, length) - - if close is None: - return - - pi = v_pos_default(pi, 3.14159) - sqrt3 = v_pos_default(sqrt3, 1.732) - offset = v_offset(offset) - - # Calculate - np_close = close.to_numpy() - ssf = nb_ssf3(np_close, length, pi, sqrt3) - ssf = Series(ssf, index=close.index) - - # Offset - if offset != 0: - ssf = ssf.shift(offset) - - # Fill - if "fillna" in kwargs: - ssf.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - ssf.name = f"SSF3_{length}" - ssf.category = "overlap" - - return ssf diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/supertrend.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/supertrend.py deleted file mode 100644 index 8adb08bf..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/supertrend.py +++ /dev/null @@ -1,108 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import nan -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.overlap import hl2 -from pandas_ta.utils import v_mamode, v_offset, v_pos_default, v_series -from pandas_ta.volatility import atr - - - -def supertrend( - high: Series, low: Series, close: Series, - length: Int = None, atr_length: Int = None, - multiplier: IntFloat = None, - atr_mamode : str = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Supertrend - - This indicator attempts to identify trend direction as well as support and - resistance levels. - - Sources: - * [freebsensetips](http://www.freebsensetips.com/blog/detail/7/What-is-supertrend-indicator-its-calculation) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - length (int): The period. Default: ```7``` - atr_length (int): ATR period. Default: ```length``` - multiplier (float): Coefficient for upper and lower band distance to - midrange. Default: ```3.0``` - atr_mamode (str) : MA type to be used for ATR calculation. - See ```help(ta.ma)```. Default: ```"rma"``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 4 columns - """ - # Validate - length = v_pos_default(length, 7) - atr_length = v_pos_default(atr_length, length) - high = v_series(high, length + 1) - low = v_series(low, length + 1) - close = v_series(close, length + 1) - - if high is None or low is None or close is None: - return - - multiplier = v_pos_default(multiplier, 3.0) - atr_mamode = v_mamode(atr_mamode, "rma") - offset = v_offset(offset) - - # Calculate - m = close.size - dir_, trend = [1] * m, [0] * m - long, short = [nan] * m, [nan] * m - - hl2_ = hl2(high, low) - matr = multiplier * atr(high, low, close, atr_length, mamode=atr_mamode) - lb = hl2_ - matr - ub = hl2_ + matr - - for i in range(1, m): - if close.iat[i] > ub.iat[i - 1]: - dir_[i] = 1 - elif close.iat[i] < lb.iat[i - 1]: - dir_[i] = -1 - else: - dir_[i] = dir_[i - 1] - if dir_[i] > 0 and lb.iat[i] < lb.iat[i - 1]: - lb.iat[i] = lb.iat[i - 1] - if dir_[i] < 0 and ub.iat[i] > ub.iat[i - 1]: - ub.iat[i] = ub.iat[i - 1] - - if dir_[i] > 0: - trend[i] = long[i] = lb.iat[i] - else: - trend[i] = short[i] = ub.iat[i] - - trend[0] = nan - dir_[:length] = [nan] * length - - _props = f"_{length}_{multiplier}" - data = { - f"SUPERT{_props}": trend, - f"SUPERTd{_props}": dir_, - f"SUPERTl{_props}": long, - f"SUPERTs{_props}": short - } - df = DataFrame(data, index=close.index) - - df.name = f"SUPERT{_props}" - df.category = "overlap" - - # Offset - if offset != 0: - df = df.shift(offset) - - # Fill - if "fillna" in kwargs: - df.fillna(kwargs["fillna"], inplace=True) - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/swma.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/swma.py deleted file mode 100644 index bbab9005..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/swma.py +++ /dev/null @@ -1,68 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import ( - symmetric_triangle, - v_offset, - v_pos_default, - v_series, - weights -) - - - -def swma( - close: Series, length: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Symmetric Weighted Moving Average - - This indicator is based on a Symmetric Weighted Moving Average where - weights are based on a symmetric triangle. - - Source: - * [tradingview](https://www.tradingview.com/study-script-reference/#fun_swma) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```10``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Note: - * ```n=3``` -> ```[1, 2, 1]``` - * ```n=4``` -> ```[1, 2, 2, 1]``` - * etc... - """ - # Validate - length = v_pos_default(length, 10) - close = v_series(close, length) - - if close is None: - return - - offset = v_offset(offset) - - # Calculate - triangle = symmetric_triangle(length, weighted=True) - swma = close.rolling(length, min_periods=length) \ - .apply(weights(triangle), raw=True) - - # Offset - if offset != 0: - swma = swma.shift(offset) - - # Fill - if "fillna" in kwargs: - swma.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - swma.name = f"SWMA_{length}" - swma.category = "overlap" - - return swma diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/t3.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/t3.py deleted file mode 100644 index 8aee19e3..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/t3.py +++ /dev/null @@ -1,84 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.maps import Imports -from pandas_ta.utils import v_offset, v_pos_default, v_series, v_talib -from .ema import ema - - - -def t3( - close: Series, length: Int = None, a: IntFloat = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """T3 - - This indicator, by Tim Tillson, attempts to be smoother and more - responsive relative to other moving averages. - - Sources: - * [binarytribune](http://www.binarytribune.com/forex-trading-indicators/t3-moving-average-indicator/) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```10``` - a (float): The a factor, 0 < a < 1. Default: ```0.7``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - adjust (bool): Default: True - presma (bool): If True, uses SMA for initial value. - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Warning: - TA-Lib Correlation: ```np.float64(0.9999994265973177)``` - - Tip: - Corrective contributions welcome! - """ - # Validate - length = v_pos_default(length, 10) - close = v_series(close, 5 * (length + 1)) - - if close is None: - return - - a = float(a) if isinstance(a, float) and 0 < a < 1 else 0.7 - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import T3 - t3 = T3(close, length, a) - else: - c1 = -a * a**2 - c2 = 3 * a**2 + 3 * a**3 - c3 = -6 * a**2 - 3 * a - 3 * a**3 - c4 = a**3 + 3 * a**2 + 3 * a + 1 - - e1 = ema(close=close, length=length, talib=mode_tal, **kwargs) - e2 = ema(close=e1, length=length, talib=mode_tal, **kwargs) - e3 = ema(close=e2, length=length, talib=mode_tal, **kwargs) - e4 = ema(close=e3, length=length, talib=mode_tal, **kwargs) - e5 = ema(close=e4, length=length, talib=mode_tal, **kwargs) - e6 = ema(close=e5, length=length, talib=mode_tal, **kwargs) - t3 = c1 * e6 + c2 * e5 + c3 * e4 + c4 * e3 - - # Offset - if offset != 0: - t3 = t3.shift(offset) - - # Fill - if "fillna" in kwargs: - t3.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - t3.name = f"T3_{length}_{a}" - t3.category = "overlap" - - return t3 diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/tema.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/tema.py deleted file mode 100644 index b5555595..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/tema.py +++ /dev/null @@ -1,73 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.maps import Imports -from pandas_ta.utils import v_offset, v_pos_default, v_series, v_talib -from .ema import ema - - - -def tema( - close: Series, length: Int = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Triple Exponential Moving Average - - This indicator attempts to be less laggy than the EMA. - - Sources: - * [tradingtechnologies](https://www.tradingtechnologies.com/help/x-study/technical-indicator-definitions/triple-exponential-moving-average-tema/) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```10``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - adjust (bool): Default: ```True``` - presma (bool): If True, uses SMA for initial value. - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Warning: - TA-Lib Correlation: ```np.float64(0.9999355450605516)``` - - Tip: - Corrective contributions welcome! - """ - # Validate - length = v_pos_default(length, 10) - close = v_series(close, 3 * length) - - if close is None: - return - - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import TEMA - tema = TEMA(close, length) - else: - ema1 = ema(close=close, length=length, talib=mode_tal, **kwargs) - ema2 = ema(close=ema1, length=length, talib=mode_tal, **kwargs) - ema3 = ema(close=ema2, length=length, talib=mode_tal, **kwargs) - tema = 3 * (ema1 - ema2) + ema3 - - # Offset - if offset != 0: - tema = tema.shift(offset) - - # Fill - if "fillna" in kwargs: - tema.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - tema.name = f"TEMA_{length}" - tema.category = "overlap" - - return tema diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/trima.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/trima.py deleted file mode 100644 index 41f887f5..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/trima.py +++ /dev/null @@ -1,77 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.maps import Imports -from pandas_ta.utils import v_offset, v_pos_default, v_series, v_talib -from .sma import sma - - - -def trima( - close: Series, length: Int = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Triangular Moving Average - - This indicator is a weighted moving average where the shape of the - weights are triangular with the greatest weight is in the middle - of the period. - - Sources: - * [tradingtechnologies](https://www.tradingtechnologies.com/help/x-study/technical-indicator-definitions/triangular-moving-average-trima/) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```10``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - adjust (bool): Default: True - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Note: - tma = sma(sma(src, ceil(length / 2)), floor(length / 2) + 1) # Tradingview - trima = sma(sma(x, n), n) # Tradingview - - Warning: - TA-Lib Correlation: ```np.float64(0.9991752493891967)``` - - Tip: - Corrective contributions welcome! - """ - # Validate - length = v_pos_default(length, 10) - close = v_series(close, length) - - if close is None: - return - - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import TRIMA - trima = TRIMA(close, length) - else: - half_length = round(0.5 * (length + 1)) - sma1 = sma(close, length=half_length, talib=mode_tal) - trima = sma(sma1, length=half_length, talib=mode_tal) - - # Offset - if offset != 0: - trima = trima.shift(offset) - - # Fill - if "fillna" in kwargs: - trima.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - trima.name = f"TRIMA_{length}" - trima.category = "overlap" - - return trima diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/vidya.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/vidya.py deleted file mode 100644 index c1e44ab1..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/vidya.py +++ /dev/null @@ -1,113 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import nan -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.maps import Imports -from pandas_ta.utils import ( - v_drift, - v_offset, - v_pos_default, - v_series, - v_talib -) - - - -def vidya( - close: Series, length: Int = None, - talib: bool = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Variable Index Dynamic Average - - This indicator, by Tushar Chande, is similar to an EMA but it has a - dynamically adjusted lookback period dependent based on CMO. - - Sources: - * [perfecttrendsystem](https://www.perfecttrendsystem.com/blog_mt4_2/en/vidya-indicator-for-mt4) - * [tradingview](https://www.tradingview.com/script/hdrf0fXV-Variable-Index-Dynamic-Average-VIDYA/) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```14``` - talib (bool): If installed, use TA Lib. Default: ```True``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Note: - Sometimes used as a moving average or a trend identifier. - """ - # Validate - length = v_pos_default(length, 14) - close = v_series(close, length + 1) - - if close is None: - return - - mode_tal = v_talib(talib) - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - m = close.size - alpha = 2 / (length + 1) - - if Imports["talib"] and mode_tal: - from talib import CMO - cmo_ = 0.01 * CMO(close, length) - else: - cmo_ = _cmo(close, length, drift) - abs_cmo = cmo_.abs().astype(float) - - vidya = Series(0.0, index=close.index) - for i in range(length, m): - vidya.iloc[i] = alpha * abs_cmo.iloc[i] * close.iloc[i] + \ - vidya.iloc[i - 1] * (1 - alpha * abs_cmo.iloc[i]) - vidya.replace({0: nan}, inplace=True) - - # Offset - if offset != 0: - vidya = vidya.shift(offset) - - # Fill - if "fillna" in kwargs: - vidya.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - vidya.name = f"VIDYA_{length}" - vidya.category = "overlap" - - return vidya - - -def _cmo(x: Series, length: Int, drift: Int): - """Chande Momentum Oscillator Patch - - Unguarded CMO Patch - - Parameters: - x (Series): ```x``` Series - length (int): The period. - drift (int): Difference amount. - - Returns: - (Series): 1 column - - Info: Weird Circular TypeError!? - For some reason: from pandas_ta.momentum import cmo causes - pandas_ta.momentum.coppock to not be able to import it's _wma_ like - from pandas_ta.overlap import wma? - """ - mom = x.diff(drift) - positive = mom.copy().clip(lower=0) - negative = mom.copy().clip(upper=0).abs() - pos_sum = positive.rolling(length).sum() - neg_sum = negative.rolling(length).sum() - - return (pos_sum - neg_sum) / (pos_sum + neg_sum) diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/wcp.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/wcp.py deleted file mode 100644 index 14ac9d79..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/wcp.py +++ /dev/null @@ -1,65 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.maps import Imports -from pandas_ta.utils import v_offset, v_series, v_talib - - - -def wcp( - high: Series, low: Series, close: Series, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Weighted Closing Price - - This indicator is a weighted value of: high, low and twice the close. - - Sources: - * [fmlabs](https://www.fmlabs.com/reference/default.htm?url=WeightedCloses.htm) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - _length = 1 - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - - if high is None or low is None or close is None: - return - - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import WCLPRICE - wcp = WCLPRICE(high, low, close) - else: - weight = high.to_numpy() + low.to_numpy() + 2 * close.to_numpy() - wcp = Series(weight, index=close.index) - - # Offset - if offset != 0: - wcp = wcp.shift(offset) - - # Fill - if "fillna" in kwargs: - wcp.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - wcp.name = "WCP" - wcp.category = "overlap" - - return wcp diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/wma.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/wma.py deleted file mode 100644 index 4b05de16..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/wma.py +++ /dev/null @@ -1,94 +0,0 @@ -# -*- coding: utf-8 -*- -from numba import njit -from numpy import arange, float64, nan, zeros_like -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.maps import Imports -from pandas_ta.utils import ( - v_ascending, - v_offset, - v_pos_default, - v_series, - v_talib -) - - - -@njit(cache=True) -def nb_wma(x, n, asc, prenan): - m = x.size - w = arange(1, n + 1, dtype=float64) - result = zeros_like(x, dtype=float64) - - if not asc: - w = w[::-1] - - for i in range(n - 1, m): - result[i] = (w * x[i - n + 1:i + 1]).sum() - result *= 2 / (n * n + n) - - if prenan: - result[:n - 1] = nan - - return result - - -def wma( - close: Series, length: Int = None, - asc: bool = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Weighted Moving Average - - This indicator is a Moving Average where the weights are linearly - increasing and the most recent data has the heaviest weight. - - Sources: - * [wikipedia](https://en.wikipedia.org/wiki/Moving_average#Weighted_moving_average) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```10``` - asc (bool): Recent values weigh more. Default: ```True``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 10) - close = v_series(close, length) - - if close is None: - return - - asc = v_ascending(asc) - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import WMA - wma = WMA(close, length) - else: - np_close = close.to_numpy() - wma_ = nb_wma(np_close, length, asc, True) - wma = Series(wma_, index=close.index) - - # Offset - if offset != 0: - wma = wma.shift(offset) - - # Fill - if "fillna" in kwargs: - wma.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - wma.name = f"WMA_{length}" - wma.category = "overlap" - - return wma diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/zlma.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/zlma.py deleted file mode 100644 index 2e57d347..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/overlap/zlma.py +++ /dev/null @@ -1,99 +0,0 @@ -# -*- coding: utf-8 -*- -from sys import modules as sys_modules -from numpy import isnan -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import v_mamode, v_offset, v_pos_default, v_series - -# Available MAs for zlma -from .dema import dema -from .ema import ema -from .fwma import fwma -from .hma import hma -from .linreg import linreg -from .midpoint import midpoint -from .pwma import pwma -from .rma import rma -from .sinwma import sinwma -from .sma import sma -from .ssf import ssf -from .swma import swma -from .t3 import t3 -from .tema import tema -from .trima import trima -from .vidya import vidya -from .wma import wma - - - -def zlma( - close: Series, length: Int = None, mamode: str = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Zero Lag Moving Average - - This indicator, by John Ehlers and Ric Way, attempts to eliminate the lag - often introduced in other moving averages. - - Sources: - * [wikipedia](https://en.wikipedia.org/wiki/Zero_lag_exponential_moving_average) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```10``` - mamode (str): One of: "dema", "ema", "fwma", "hma", "linreg", - "midpoint", "pwma", "rma", "sinwma", "ssf", "swma", "t3", - "tema", "trima", "vidya", or "wma". Default: ```"ema"``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 10) - close = v_series(close, length) - - if close is None: - return - - mamode = v_mamode(mamode, "ema") - supported_mas = [ - "dema", "ema", "fwma", "hma", "linreg", - "midpoint", "pwma", "rma", "sinwma", "sma", - "ssf", "swma", "t3", "tema", "trima", "vidya", "wma" - ] - - if mamode not in supported_mas: - return - - offset = v_offset(offset) - - # Calculate - lag = int(0.5 * (length - 1)) - close_ = 2 * close - close.shift(lag) - - kwargs.update({"close": close_}) - kwargs.update({"length": length}) - - fn = getattr(sys_modules[__name__], mamode) - zlma = fn(**kwargs) - - if zlma is None or all(isnan(zlma)): - return # Emergency Break - - # Offset - if offset != 0: - zlma = zlma.shift(offset) - - # Fill - if "fillna" in kwargs: - zlma.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - zlma.name = f"ZL_{zlma.name}" - zlma.category = "overlap" - - return zlma diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/performance/__init__.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/performance/__init__.py deleted file mode 100644 index c30db9ec..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/performance/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -# -*- coding: utf-8 -*- -from .drawdown import drawdown -from .log_return import log_return -from .percent_return import percent_return - -__all__ = [ - "drawdown", - "log_return", - "percent_return", -] diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/performance/drawdown.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/performance/drawdown.py deleted file mode 100644 index 1976c5e2..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/performance/drawdown.py +++ /dev/null @@ -1,68 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import log, seterr -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import v_offset, v_series - - - -def drawdown( - close: Series, offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Drawdown - - This indicator traces the peak-to-trough decline over a specific period. - Commonly quoted as the percentage between the peak and the subsequent - trough. - - Sources: - * [investopedia](https://www.investopedia.com/terms/d/drawdown.asp) - - Parameters: - close (Series): ```close``` Series. - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 3 columns - """ - # Validate - close = v_series(close) - offset = v_offset(offset) - - # Calculate - max_close = close.cummax() - dd = max_close - close - dd_pct = 1 - (close / max_close) - - _np_err = seterr() - seterr(divide="ignore", invalid="ignore") - dd_log = log(max_close) - log(close) - seterr(divide=_np_err["divide"], invalid=_np_err["invalid"]) - - # Offset - if offset != 0: - dd = dd.shift(offset) - dd_pct = dd_pct.shift(offset) - dd_log = dd_log.shift(offset) - - # Fill - if "fillna" in kwargs: - dd.fillna(kwargs["fillna"], inplace=True) - dd_pct.fillna(kwargs["fillna"], inplace=True) - dd_log.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - dd.name = "DD" - dd_pct.name = f"{dd.name}_PCT" - dd_log.name = f"{dd.name}_LOG" - dd.category = dd_pct.category = dd_log.category = "performance" - - data = {dd.name: dd, dd_pct.name: dd_pct, dd_log.name: dd_log} - df = DataFrame(data, index=close.index) - df.name = dd.name - df.category = dd.category - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/performance/log_return.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/performance/log_return.py deleted file mode 100644 index b9c1c2ab..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/performance/log_return.py +++ /dev/null @@ -1,64 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import log, nan, roll -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import v_bool, v_offset, v_pos_default, v_series - - - -def log_return( - close: Series, length: Int = None, cumulative: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Log Return - - Calculates the logarithmic return. - - Sources: - * [stackoverflow](https://stackoverflow.com/questions/31287552/logarithmic-returns-in-pandas-dataframe) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```20``` - cumulative (bool): If True, returns the cumulative returns. - Default: ```False``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 1) - close = v_series(close, length + 1) - - if close is None: - return - - cumulative = v_bool(cumulative, False) - offset = v_offset(offset) - - # Calculate - np_close = close.to_numpy() - if cumulative: - r = np_close / np_close[0] - else: - r = np_close / roll(np_close, length) - r[:length] = nan - log_return = Series(log(r), index=close.index) - - # Offset - if offset != 0: - log_return = log_return.shift(offset) - - # Fill - if "fillna" in kwargs: - log_return.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - log_return.name = f"{'CUM' if cumulative else ''}LOGRET_{length}" - log_return.category = "performance" - - return log_return diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/performance/percent_return.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/performance/percent_return.py deleted file mode 100644 index 221fffc7..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/performance/percent_return.py +++ /dev/null @@ -1,64 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import nan, roll -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import v_bool, v_offset, v_pos_default, v_series - - - -def percent_return( - close: Series, length: Int = None, cumulative: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Percent Return - - Calculates the percent return. - - Sources: - * [stackoverflow](https://stackoverflow.com/questions/31287552/logarithmic-returns-in-pandas-dataframe) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```1``` - cumulative (bool): If True, returns the cumulative returns. - Default: ```False``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 1) - close = v_series(close, length + 1) - - if close is None: - return - - cumulative = v_bool(cumulative, False) - offset = v_offset(offset) - - # Calculate - np_close = close.to_numpy() - if cumulative: - pr = (np_close / np_close[0]) - 1 - else: - pr = (np_close / roll(np_close, length)) - 1 - pr[:length] = nan - pct_return = Series(pr, index=close.index) - - # Offset - if offset != 0: - pct_return = pct_return.shift(offset) - - # Fill - if "fillna" in kwargs: - pct_return.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - pct_return.name = f"{'CUM' if cumulative else ''}PCTRET_{length}" - pct_return.category = "performance" - - return pct_return diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/py.typed b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/py.typed deleted file mode 100644 index e69de29b..00000000 diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/__init__.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/__init__.py deleted file mode 100644 index 594392bc..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/__init__.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -from .entropy import entropy -from .kurtosis import kurtosis -from .mad import mad -from .median import median -from .quantile import quantile -from .skew import skew -from .stdev import stdev -from .tos_stdevall import tos_stdevall -from .variance import variance -from .zscore import zscore - -__all__ = [ - "entropy", - "kurtosis", - "mad", - "median", - "quantile", - "skew", - "stdev", - "tos_stdevall", - "variance", - "zscore", -] \ No newline at end of file diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/entropy.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/entropy.py deleted file mode 100644 index 198123cf..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/entropy.py +++ /dev/null @@ -1,60 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import log -from pandas import Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.utils import v_offset, v_pos_default, v_series - - - -def entropy( - close: Series, length: Int = None, base: IntFloat = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Entropy - - This indicator attempts to quantify the unpredictability of the data, - or equivalently, its average information. It is a rolling entropy - calculation. - - Sources: - * [wikipedia](https://en.wikipedia.org/wiki/Entropy_(information_theory)) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```10``` - base (float): Logarithmic Base. Default: ```2``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 10) - close = v_series(close, 2 * length - 1) - - if close is None: - return - - base = v_pos_default(base, 2.0) - offset = v_offset(offset) - - # Calculate - p = close / close.rolling(length).sum() - entropy = (-p * log(p) / log(base)).rolling(length).sum() - - # Offset - if offset != 0: - entropy = entropy.shift(offset) - - # Fill - if "fillna" in kwargs: - entropy.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - entropy.name = f"ENTP_{length}" - entropy.category = "statistics" - - return entropy diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/kurtosis.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/kurtosis.py deleted file mode 100644 index de5b79f0..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/kurtosis.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import v_offset, v_pos_default, v_series - - - -def kurtosis( - close: Series, length: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Rolling Kurtosis - - Calculates a rolling Kurtosis. - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```30``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Danger: - Possible Data Leak - """ - # Validate - length = v_pos_default(length, 30) - if "min_periods" in kwargs and kwargs["min_periods"] is not None: - min_periods = int(kwargs["min_periods"]) - else: - min_periods = length - close = v_series(close, max(length, min_periods)) - - if close is None: - return - - offset = v_offset(offset) - - # Calculate - kurtosis = close.rolling(length, min_periods=min_periods).kurt() - - # Offset - if offset != 0: - kurtosis = kurtosis.shift(offset) - - # Fill - if "fillna" in kwargs: - kurtosis.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - kurtosis.name = f"KURT_{length}" - kurtosis.category = "statistics" - - return kurtosis diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/mad.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/mad.py deleted file mode 100644 index 50541c47..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/mad.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import fabs -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import v_offset, v_pos_default, v_series - - - -def _mad(series: Series): - """Mean Absolute Deviation""" - return fabs(series - series.mean()).mean() - - -def mad( - close: Series, length: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Rolling Mean Absolute Deviation - - Calculates a rolling Mean Absolute Deviation (MAD). - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```30``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 30) - if "min_periods" in kwargs and kwargs["min_periods"] is not None: - min_periods = int(kwargs["min_periods"]) - else: - min_periods = length - close = v_series(close, max(length, min_periods)) - - if close is None: - return - - offset = v_offset(offset) - - # Calculate - mad = close.rolling(length, min_periods=min_periods).apply(_mad, raw=True) - - # Offset - if offset != 0: - mad = mad.shift(offset) - - # Fill - if "fillna" in kwargs: - mad.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - mad.name = f"MAD_{length}" - mad.category = "statistics" - - return mad diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/median.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/median.py deleted file mode 100644 index 03e57005..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/median.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import v_offset, v_pos_default, v_series - - - -def median( - close: Series, length: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Rolling Median - - Calculates a rolling Median. - - Sources: - * [incrediblecharts](https://www.incrediblecharts.com/indicators/median_price.php) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```30``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 30) - if "min_periods" in kwargs and kwargs["min_periods"] is not None: - min_periods = int(kwargs["min_periods"]) - else: - min_periods = length - close = v_series(close, max(length, min_periods)) - - if close is None: - return - - offset = v_offset(offset) - - # Calculate - median = close.rolling(length, min_periods=min_periods).median() - - # Offset - if offset != 0: - median = median.shift(offset) - - # Fill - if "fillna" in kwargs: - median.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - median.name = f"MEDIAN_{length}" - median.category = "statistics" - - return median diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/quantile.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/quantile.py deleted file mode 100644 index 35439167..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/quantile.py +++ /dev/null @@ -1,57 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.utils import v_offset, v_pos_default, v_series - - - -def quantile( - close: Series, length: Int = None, q: IntFloat = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Rolling Quantile - - Calculates a rolling Quantile. - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```30``` - q (float): The quantile. Default: ```0.5``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 30) - if "min_periods" in kwargs and kwargs["min_periods"] is not None: - min_periods = int(kwargs["min_periods"]) - else: - min_periods = length - close = v_series(close, max(length, min_periods)) - - if close is None: - return - - q = float(q) if isinstance(q, float) and 0 < q < 1 else 0.5 - offset = v_offset(offset) - - # Calculate - quantile = close.rolling(length, min_periods=min_periods).quantile(q) - - # Offset - if offset != 0: - quantile = quantile.shift(offset) - - # Fill - if "fillna" in kwargs: - quantile.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - quantile.name = f"QTL_{length}_{q}" - quantile.category = "statistics" - - return quantile diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/skew.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/skew.py deleted file mode 100644 index e1068d04..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/skew.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import v_offset, v_pos_default, v_series - - - -def skew( - close: Series, length: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Rolling Skew - - Calculates a rolling Skew. - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```30``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Danger: - Possible Data Leak - """ - # Validate - length = v_pos_default(length, 30) - if "min_periods" in kwargs and kwargs["min_periods"] is not None: - min_periods = int(kwargs["min_periods"]) - else: - min_periods = length - close = v_series(close, max(length, min_periods)) - - if close is None: - return - - offset = v_offset(offset) - - # Calculate - skew = close.rolling(length, min_periods=min_periods).skew() - - # Offset - if offset != 0: - skew = skew.shift(offset) - - # Fill - if "fillna" in kwargs: - skew.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - skew.name = f"SKEW_{length}" - skew.category = "statistics" - - return skew diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/stdev.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/stdev.py deleted file mode 100644 index 90f7b2d4..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/stdev.py +++ /dev/null @@ -1,70 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import sqrt -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.maps import Imports -from pandas_ta.utils import v_offset, v_pos_default, v_series, v_talib -from .variance import variance - - - -def stdev( - close: Series, length: Int = None, - ddof: Int = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Rolling Standard Deviation - - Calculates a rolling Standard Deviation. - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```30``` - ddof (int): Delta Degrees of Freedom. Default: ```1``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Note: - * TA Lib does not have a ```ddof``` parameter. - * The divisor used in calculations is: ```N - ddof```, where ```N``` - is the number of elements. To use ```ddof```, set ```talib=False```. - """ - # Validate - length = v_pos_default(length, 30) - close = v_series(close, length) - - if close is None: - return - - ddof = int(ddof) if isinstance(ddof, int) and 0 <= ddof < length else 1 - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import STDDEV - stdev = STDDEV(close, length) - else: - stdev = variance( - close=close, length=length, ddof=ddof, talib=mode_tal - ).apply(sqrt) - - # Offset - if offset != 0: - stdev = stdev.shift(offset) - - # Fill - if "fillna" in kwargs: - stdev.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - stdev.name = f"STDEV_{length}" - stdev.category = "statistics" - - return stdev diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/tos_stdevall.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/tos_stdevall.py deleted file mode 100644 index b3876a7d..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/tos_stdevall.py +++ /dev/null @@ -1,96 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import arange, array, polyfit, std -from pandas import DataFrame, DatetimeIndex, Series -from pandas_ta._typing import DictLike, Int, List -from pandas_ta.utils import v_list, v_lowerbound, v_offset, v_series - - - -def tos_stdevall( - close: Series, length: Int = None, - stds: List = None, ddof: Int = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """TD Ameritrade's Think or Swim Standard Deviation All - - This indicator returns the standard deviation(s) over all the bars or the - last ```n``` (length) bars. - - Sources: - * [thinkorswim](https://tlc.thinkorswim.com/center/reference/thinkScript/Functions/Statistical/StDevAll) - - Parameters: - close (Series): ```close``` Series - length (int): Bars since current/last bar, Series[-1]. Default: ```None``` - stds (list): List of standard deviations in increasing order from the - central Linear Regression line. Default: ```[1,2,3]``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 7+ columns - - Note: - * TA Lib does not have a ```ddof``` parameter. - * The divisor used in calculations is: ```N - ddof```, where ```N``` - is the number of elements. To use ```ddof```, set ```talib=False```. - - Danger: - Possible Data Leak - """ - # Validate - _props = f"TOS_STDEVALL" - if length is None: - length = close.size - else: - length = v_lowerbound(length, 2, 30) - close = close.iloc[-length:] - _props = f"{_props}_{length}" - - close = v_series(close, 2) - - if close is None: - return - - stds = v_list(stds, [1, 2, 3]) - if min(stds) <= 0: - return - - if not all(i < j for i, j in zip(stds, stds[1:])): - stds = stds[::-1] - - ddof = int(ddof) if isinstance(ddof, int) and 0 <= ddof < length else 1 - offset = v_offset(offset) - - # Calculate - X = src_index = close.index - if isinstance(close.index, DatetimeIndex): - X = arange(length) - close = array(close) - - m, b = polyfit(X, close, 1) - lr = Series(m * X + b, index=src_index) - stdev = std(close, ddof=ddof) - - # Name and Category - df = DataFrame({f"{_props}_LR": lr}, index=src_index) - for i in stds: - df[f"{_props}_L_{i}"] = lr - i * stdev - df[f"{_props}_U_{i}"] = lr + i * stdev - df[f"{_props}_L_{i}"].name = df[f"{_props}_U_{i}"].name = f"{_props}" - df[f"{_props}_L_{i}"].category = df[f"{_props}_U_{i}"].category = "statistics" - - # Offset - if offset != 0: - df = df.shift(offset) - - # Fill - if "fillna" in kwargs: - df.fillna(kwargs["fillna"], inplace=True) - - df.name = f"{_props}" - df.category = "statistics" - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/variance.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/variance.py deleted file mode 100644 index 85e9f850..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/variance.py +++ /dev/null @@ -1,70 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.maps import Imports -from pandas_ta.utils import v_lowerbound, v_offset, v_series, v_talib - - - -def variance( - close: Series, length: Int = None, - ddof: Int = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Rolling Variance - - Calculates a rolling Variance. - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```30``` - ddof (int): Delta Degrees of Freedom. Default: ```1``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Note: - * TA Lib does not have a ```ddof``` parameter. - * The divisor used in calculations is: ```N - ddof```, where ```N``` - is the number of elements. To use ```ddof```, set ```talib=False```. - """ - # Validate - length = v_lowerbound(length, 1, 30) - if "min_periods" in kwargs and kwargs["min_periods"] is not None: - min_periods = int(kwargs["min_periods"]) - else: - min_periods = length - close = v_series(close, max(length, min_periods)) - - if close is None: - return - - ddof = int(ddof) if isinstance(ddof, int) and 0 <= ddof < length else 1 - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import VAR - variance = VAR(close, length) - else: - variance = close.rolling(length, min_periods=min_periods).var(ddof) - - # Offset - if offset != 0: - variance = variance.shift(offset) - - # Fill - if "fillna" in kwargs: - variance.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - variance.name = f"VAR_{length}" - variance.category = "statistics" - - return variance diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/zscore.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/zscore.py deleted file mode 100644 index a1ff7459..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/statistics/zscore.py +++ /dev/null @@ -1,57 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.overlap import sma -from pandas_ta.statistics import stdev -from pandas_ta.utils import v_lowerbound, v_offset, v_series - - - -def zscore( - close: Series, length: Int = None, std: IntFloat = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Rolling Z Score - - Calculates a rolling Z Score. - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```30``` - std (float): Number of deviation standards. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_lowerbound(length, 1, 30) - close = v_series(close, length) - - if close is None: - return - - std = v_lowerbound(std, 1, 1.0) - offset = v_offset(offset) - - # Calculate - std *= stdev(close=close, length=length, **kwargs) - mean = sma(close=close, length=length, **kwargs) - zscore = (close - mean) / std - - # Offset - if offset != 0: - zscore = zscore.shift(offset) - - # Fill - if "fillna" in kwargs: - zscore.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - zscore.name = f"ZS_{length}" - zscore.category = "statistics" - - return zscore diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/__init__.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/__init__.py deleted file mode 100644 index afb75b32..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/__init__.py +++ /dev/null @@ -1,46 +0,0 @@ -# -*- coding: utf-8 -*- -from .adx import adx -from .alphatrend import alphatrend -from .amat import amat -from .aroon import aroon -from .chop import chop -from .cksp import cksp -from .decay import decay -from .decreasing import decreasing -from .dpo import dpo -from .ht_trendline import ht_trendline -from .increasing import increasing -from .long_run import long_run -from .psar import psar -from .qstick import qstick -from .rwi import rwi -from .short_run import short_run -from .trendflex import trendflex -from .ttm_trend import ttm_trend -from .vhf import vhf -from .vortex import vortex -from .zigzag import zigzag - -__all__ = [ - "adx", - "alphatrend", - "amat", - "aroon", - "chop", - "cksp", - "decay", - "decreasing", - "dpo", - "ht_trendline", - "increasing", - "long_run", - "psar", - "qstick", - "rwi", - "short_run", - "trendflex", - "ttm_trend", - "vhf", - "vortex", - "zigzag", -] diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/adx.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/adx.py deleted file mode 100644 index 12c6fb22..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/adx.py +++ /dev/null @@ -1,168 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import isnan, nan -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.ma import ma -from pandas_ta.maps import Imports -from pandas_ta.utils import ( - v_bool, - v_drift, - v_mamode, - v_offset, - v_pos_default, - v_scalar, - v_series, - v_talib, - zero -) -from pandas_ta.volatility import atr - - - -def adx( - high: Series, low: Series, close: Series, length: Int = None, - signal_length: Int = None, adxr_length: Int = None, scalar: IntFloat = None, - talib: bool = None, tvmode: bool = None, mamode: str = None, - drift: Int = None, offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Average Directional Movement - - This indicator attempts to quantify trend strength by measuring the - amount of movement in a single direction. - - Sources: - * [tradingtechnologies](https://www.tradingtechnologies.com/help/x-study/technical-indicator-definitions/average-directional-movement-adx/) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - length (int): The period. Default: ```14``` - signal_length (int): Signal period. Default: ```length``` - adxr_length (int): ADXR period. Default: ```2``` - scalar (float): Scalar. Default: ```100``` - talib (bool): If installed, use TA Lib. Default: ```True``` - tvmode (bool): Trading View. Default: ```False``` - mamode (str): See ```help(ta.ma)```. Default: ```"rma"``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 4 columns - - Note: - ```signal_length``` is like TradingView's default ADX. - """ - # Validate - length = v_pos_default(length, 14) - signal_length = v_pos_default(signal_length, length) - adxr_length = v_pos_default(adxr_length, 2) - _length = max(length, signal_length, adxr_length) - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - - if high is None or low is None or close is None: - return - - scalar = v_scalar(scalar, 100) - mamode = v_mamode(mamode, "rma") - mode_tal = v_talib(talib) - mode_tv = v_bool(tvmode, False) - - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - atr_ = atr( - high=high, low=low, close=close, - length=length, prenan=kwargs.pop("prenan", True) - ) - if atr_ is None or all(isnan(atr_)): - return - - k = scalar / atr_ - - up = high - high.shift(drift) # high.diff(drift) - dn = low.shift(drift) - low # low.diff(-drift).shift(drift) - - pos = ((up > dn) & (up > 0)) * up - neg = ((dn > up) & (dn > 0)) * dn - - # Issue #671 Solution - # not_close = ~isclose(up, dn) - # pos = ((up > dn) & (up > 0) * up & not_close) * up - # neg = ((dn > up) & (dn > 0) * dn & not_close) * dn - - pos = pos.apply(zero) - neg = neg.apply(zero) - - if not mode_tv and Imports["talib"] and mode_tal and length > 1: - from talib import ADX, MINUS_DM, PLUS_DM - adx = ADX(high, low, close, length) - dmp = PLUS_DM(high, low, length) - dmn = MINUS_DM(high, low, length) - - elif mode_tv: - # How to treat the initial value of RMA varies from one another. - # It follows the way TradingView does, setting it to the average of - # previous values. Since 'pandas' does not provide API to control - # the initial value, work around it by modifying input value to get - # desired output. - pos.iloc[length - 1] = pos[:length].sum() - pos[:length - 1] = 0 - neg.iloc[length - 1] = neg[:length].sum() - neg[:length - 1] = 0 - - alpha = 1 / length - dmp = k * pos.ewm(alpha=alpha, adjust=False, min_periods=length).mean() - dmn = k * neg.ewm(alpha=alpha, adjust=False, min_periods=length).mean() - - # The same goes with dx. - dx = scalar * (dmp - dmn).abs() / (dmp + dmn) - dx = dx.shift(-length) - dx.iloc[length - 1] = dx[:length].sum() - dx[:length - 1] = 0 - - adx = ma(mamode, dx, length=signal_length) - # Rollback shifted rows. - adx[:length - 1] = nan - adx = adx.shift(length) - else: - dmp = k * ma(mamode, pos, length=length) - dmn = k * ma(mamode, neg, length=length) - dx = scalar * (dmp - dmn).abs() / (dmp + dmn) - adx = ma(mamode, dx, length=signal_length) - - adxr = 0.5 * (adx + adx.shift(adxr_length)) - - # Offset - if offset != 0: - adx = adx.shift(offset) - adxr = adxr.shift(offset) - dmn = dmn.shift(offset) - dmp = dmp.shift(offset) - - # Fill - if "fillna" in kwargs: - adx.fillna(kwargs["fillna"], inplace=True) - adxr.fillna(kwargs["fillna"], inplace=True) - dmp.fillna(kwargs["fillna"], inplace=True) - dmn.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - adx.name = f"ADX_{signal_length}" - adxr.name = f"ADXR_{signal_length}_{adxr_length}" - dmp.name = f"DMP_{length}" - dmn.name = f"DMN_{length}" - adx.category = dmp.category = dmn.category = "trend" - - data = {adx.name: adx, adxr.name: adxr, dmp.name: dmp, dmn.name: dmn} - df = DataFrame(data, index=close.index) - df.name = f"ADX_{signal_length}" - df.category = "trend" - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/alphatrend.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/alphatrend.py deleted file mode 100644 index 5c1070ff..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/alphatrend.py +++ /dev/null @@ -1,161 +0,0 @@ -# -*- coding: utf-8 -*- -from numba import njit -from numpy import isnan, nan, zeros_like -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.momentum import rsi -from pandas_ta.volatility import atr -from pandas_ta.volume.mfi import mfi -from pandas_ta.utils import ( - v_mamode, - v_offset, - v_pos_default, - v_series, - v_str, - v_talib -) - - - -@njit(cache=True) -def nb_alpha(low_atr, high_atr, momo_threshold): - m = momo_threshold.size - result = zeros_like(low_atr) - - for i in range(1, m): - if momo_threshold[i]: - if low_atr[i] < result[i - 1]: - result[i] = result[i - 1] - else: - result[i] = low_atr[i] - else: - if high_atr[i] > result[i - 1]: - result[i] = result[i - 1] - else: - result[i] = high_atr[i] - result[0] = nan - - return result - - -def alphatrend( - open_: Series, high: Series, low: Series, close: Series, - volume: Series = None, src: str = None, - length: int = None, multiplier: IntFloat = None, - threshold: IntFloat = None, lag: Int = None, - mamode: str = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -): - """Alpha Trend - - This indicator attempts to filter sideways movement for accurate signals. - - Sources: - * [OnlyFibonacci](https://github.com/OnlyFibonacci/AlgoSeyri/blob/main/alphaTrendIndicator.py) - * [tradingview](https://www.tradingview.com/script/o50NYLAZ-AlphaTrend/) - - Parameters: - open_ (Series): ```open``` Series - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - volume (Series): ```volume``` Series. Default: ```None``` - src (str): One of: "open", "high", "low" or "close". - Default: ```"close"``` - length (int): ATR, MFI, or RSI period. Default: ```14``` - multiplier (float): Trailing ATR multiple. Default: ```1``` - threshold (float): Momentum threshold. Default: ```50``` - lag (int): Lag period of main trend. Default: ```2``` - mamode (str): See ```help(ta.ma)```. Default: ```"sma"``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 2 columns - """ - # Validate - length = v_pos_default(length, 14) - open_ = v_series(open_, length) - high = v_series(high, length) - low = v_series(low, length) - close = v_series(close, length) - - if open_ is None or high is None or low is None or close is None: - return - - _src = {"open": open_, "high": high, "low": low, "close": close} - src = v_str(src, "close") - src = src if src in _src.keys() else "close" - - multiplier = v_pos_default(multiplier, 1) - threshold = v_pos_default(threshold, 50) - lag = v_pos_default(lag, 2) - - mamode = v_mamode(mamode, "sma") - mode_tal = v_talib(talib) - offset = v_offset(offset) - - if volume is not None: - volume = v_series(volume) - if volume is None: - return - - # Calculate - atr_ = atr( - high=high, low=low, close=close, length=length, - mamode=mamode, talib=mode_tal - ) - - if atr_ is None or all(isnan(atr_)): - return - - lower_atr = low - atr_ * multiplier - upper_atr = high + atr_ * multiplier - - momo = None - if volume is None: - momo = rsi(close=_src[src], length=length, mamode=mamode, talib=mode_tal) - else: - momo = mfi( - high=high, low=low, close=close, volume=volume, - length=length, talib=mode_tal - ) - - if momo is None: - return - - np_upper_atr, np_lower_atr = upper_atr.to_numpy(), lower_atr.to_numpy() - - at = nb_alpha(np_lower_atr, np_upper_atr, momo.to_numpy() >= threshold) - at = Series(at, index=close.index) - - atl = at.shift(lag) - - if all(isnan(at)) or all(isnan(atl)): - return # Emergency Break - - # Offset - if offset != 0: - at = at.shift(offset) - atl = atl.shift(offset) - - # Fill - if "fillna" in kwargs: - at.fillna(kwargs["fillna"], inplace=True) - atl.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = f"_{length}_{multiplier}_{threshold}" - at.name = f"ALPHAT{_props}" - atl.name = f"ALPHATl{_props}_{lag}" - at.category = atl.category = "trend" - - data = {at.name: at, atl.name: atl} - df = DataFrame(data, index=close.index) - df.name = at.name - df.category = at.category - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/amat.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/amat.py deleted file mode 100644 index f5d48c77..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/amat.py +++ /dev/null @@ -1,87 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.ma import ma -from pandas_ta.utils import v_mamode, v_offset, v_pos_default, v_series -from .long_run import long_run -from .short_run import short_run - - - -def amat( - close: Series, fast: Int = None, slow: Int = None, - lookback: Int = None, mamode: str = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Archer Moving Averages Trends - - This indicator, by Kevin Johnson, attempts to identify both long run - and short run trends. - - Sources: - * Kevin Johnson - * [tradingview](https://www.tradingview.com/script/Z2mq63fE-Trade-Archer-Moving-Averages-v1-4F/) - - Parameters: - close (Series): ```close``` Series - fast (int): Fast MA period. Default: ```8``` - slow (int): Slow MA period. Default: ```21``` - lookback (int): Lookback period for ```long_run``` and ```short_run```. - Default: ```2``` - mamode (str): See ```help(ta.ma)```. Default: ```"ema"``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - run_length (int): OBV trend period. Default: ```2``` - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 2 columns - - Note: - Both the long run and short run values are integers, where ```1``` - is a trend and ```0``` is not a trend. - """ - # Validate - fast = v_pos_default(fast, 8) - slow = v_pos_default(slow, 21) - lookback = v_pos_default(lookback, 2) - close = v_series(close, max(fast, slow, lookback)) - - if close is None: - return - - mamode = v_mamode(mamode, "ema") - offset = v_offset(offset) - if "length" in kwargs: - kwargs.pop("length") - - # Calculate - fast_ma = ma(mamode, close, length=fast, **kwargs) - slow_ma = ma(mamode, close, length=slow, **kwargs) - - mas_long = long_run(fast_ma, slow_ma, length=lookback) - mas_short = short_run(fast_ma, slow_ma, length=lookback) - - # Offset - if offset != 0: - mas_long = mas_long.shift(offset) - mas_short = mas_short.shift(offset) - - # Fill - if "fillna" in kwargs: - mas_long.fillna(kwargs["fillna"], inplace=True) - mas_short.fillna(kwargs["fillna"], inplace=True) - - _props = f"_{fast}_{slow}_{lookback}" - data = { - f"AMAT{mamode[0]}_LR{_props}": mas_long, - f"AMAT{mamode[0]}_SR{_props}": mas_short - } - df = DataFrame(data, index=close.index) - - # Name and Category - df.name = f"AMAT{mamode[0]}{_props}" - df.category = "trend" - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/aroon.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/aroon.py deleted file mode 100644 index e627029f..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/aroon.py +++ /dev/null @@ -1,100 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.maps import Imports -from pandas_ta.utils import ( - recent_maximum_index, - recent_minimum_index, - v_offset, - v_pos_default, - v_scalar, - v_series, - v_talib -) - - - -def aroon( - high: Series, low: Series, - length: Int = None, scalar: IntFloat = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Aroon & Aroon Oscillator - - This indicator attempts to identify trends and their magnitude. - - Sources: - * [tradingtechnologies](https://www.tradingtechnologies.com/help/x-study/technical-indicator-definitions/aroon-ar/) - * [tradingview](https://www.tradingview.com/wiki/Aroon) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - length (int): The period. Default: ```14``` - scalar (float): Scalar. Default: ```100``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 3 columns - """ - # Validate - length = v_pos_default(length, 14) - high = v_series(high, length + 1) - low = v_series(low, length + 1) - - if high is None or low is None: - return - - scalar = v_scalar(scalar, 100) - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import AROON, AROONOSC - aroon_down, aroon_up = AROON(high, low, length) - aroon_osc = AROONOSC(high, low, length) - else: - periods_from_hh = high.rolling(length + 1) \ - .apply(recent_maximum_index,raw=True) - periods_from_ll = low.rolling(length + 1) \ - .apply(recent_minimum_index,raw=True) - - aroon_up = aroon_down = scalar - aroon_up *= 1 - (periods_from_hh / length) - aroon_down *= 1 - (periods_from_ll / length) - aroon_osc = aroon_up - aroon_down - - # Offset - if offset != 0: - aroon_up = aroon_up.shift(offset) - aroon_down = aroon_down.shift(offset) - aroon_osc = aroon_osc.shift(offset) - - # Fill - if "fillna" in kwargs: - aroon_up.fillna(kwargs["fillna"], inplace=True) - aroon_down.fillna(kwargs["fillna"], inplace=True) - aroon_osc.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - aroon_up.name = f"AROONU_{length}" - aroon_down.name = f"AROOND_{length}" - aroon_osc.name = f"AROONOSC_{length}" - - aroon_down.category = aroon_up.category = aroon_osc.category = "trend" - - data = { - aroon_down.name: aroon_down, - aroon_up.name: aroon_up, - aroon_osc.name: aroon_osc - } - df = DataFrame(data, index=high.index) - df.name = f"AROON_{length}" - df.category = aroon_down.category - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/chop.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/chop.py deleted file mode 100644 index 7db600d5..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/chop.py +++ /dev/null @@ -1,92 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import log, log10 -from pandas import Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.utils import ( - v_bool, - v_drift, - v_offset, - v_pos_default, - v_scalar, - v_series -) -from pandas_ta.volatility import atr - - - -def chop( - high: Series, low: Series, close: Series, - length: Int = None, atr_length: Int = None, - ln: bool = None, scalar: IntFloat = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Choppiness Index - - This indicator, by E.W. Dreiss, attempts to determine choppiness. - - Sources: - * E.W. Dreiss an Australian Commodity Trader - * [motivewave](https://www.motivewave.com/studies/choppiness_index.htm) - * [tradingview](https://www.tradingview.com/scripts/choppinessindex/) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - length (int): The period. Default: ```14``` - atr_length (int): ATR period. Default: ```1``` - ln (bool): Use ```ln``` instead of ```log10```. Default: ```False``` - scalar (float): Scalar. Default: ```100``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Note: - * Choppy: ```~ 100``` - * Trending: ```~ 0``` - """ - # Validate - length = v_pos_default(length, 14) - high = v_series(high, length + 1) - low = v_series(low, length + 1) - close = v_series(close, length + 1) - - if high is None or low is None or close is None: - return - - atr_length = v_pos_default(atr_length, 1) - scalar = v_scalar(scalar, 100) - ln = v_bool(ln, False) - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - diff = high.rolling(length).max() - low.rolling(length).min() - - atr_ = atr(high=high, low=low, close=close, length=atr_length) - atr_sum = atr_.rolling(length).sum() - - chop = scalar - if ln: - chop *= (log(atr_sum) - log(diff)) / log(length) - else: - chop *= (log10(atr_sum) - log10(diff)) / log10(length) - - # Offset - if offset != 0: - chop = chop.shift(offset) - - # Fill - if "fillna" in kwargs: - chop.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - chop.name = f"CHOP{'ln' if ln else ''}_{length}_{atr_length}_{scalar}" - chop.category = "trend" - - return chop diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/cksp.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/cksp.py deleted file mode 100644 index fb2fa274..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/cksp.py +++ /dev/null @@ -1,101 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import isnan -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.utils import ( - v_mamode, - v_offset, - v_pos_default, - v_series, - v_tradingview -) -from pandas_ta.volatility import atr - - - -def cksp( - high: Series, low: Series, close: Series, - p: Int = None, x: IntFloat = None, q: Int = None, - tvmode: bool = None, mamode: str = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Chande Kroll Stop - - This indicator, by Tushar Chande and Stanley Kroll, attempts to identify - trends with long and short stops. - - Sources: - * "The New Technical Trader", Wiley 1st ed. ISBN 9780471597803, page 95 - * [multicharts](https://www.multicharts.com/discussion/viewtopic.php?t=48914) - - Parameters: - close (Series): ```close``` Series - p (int): ATR and first stop period; see Note. - Default: ```10``` for both modes - x (float): ATR scalar; see Note. Default: ```1``` or ```3``` - q (int): Second stop period; see Note. Default: ```9``` or ```20``` - tvmode (bool): Trading View mode. Default: ```True``` - mamode (str): See ```help(ta.ma)```. Default: ```None``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 2 columns - - Note: Book vs TradingView Defaults - * Book: ```p=10, x=3, q=20, ma="sma"``` - * Trading View: ```p=10, x=1, q=9, ma="rma"``` - """ - # Validate - mode_tv = v_tradingview(tvmode) - p = v_pos_default(p, 10) - # TODO: clean up x and q - x = float(x) if isinstance(x, float) and x > 0 else 1 if tvmode is True else 3 - q = int(q) if isinstance(q, float) and q > 0 else 9 if tvmode is True else 20 - _length = p + q - - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - - if high is None or low is None or close is None: - return - - mamode = v_mamode(mamode, "rma") if mode_tv else v_mamode(mamode, "sma") - offset = v_offset(offset) - - # Calculate - atr_ = atr(high=high, low=low, close=close, length=p, mamode=mamode) - if atr_ is None or all(isnan(atr_)): - return - - long_stop_ = high.rolling(p).max() - x * atr_ - long_stop = long_stop_.rolling(q).max() - - short_stop_ = low.rolling(p).min() + x * atr_ - short_stop = short_stop_.rolling(q).min() - - # Offset - if offset != 0: - long_stop = long_stop.shift(offset) - short_stop = short_stop.shift(offset) - - # Fill - if "fillna" in kwargs: - long_stop.fillna(kwargs["fillna"], inplace=True) - short_stop.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = f"_{p}_{x}_{q}" - long_stop.name = f"CKSPl{_props}" - short_stop.name = f"CKSPs{_props}" - long_stop.category = short_stop.category = "trend" - - data = {long_stop.name: long_stop, short_stop.name: short_stop} - df = DataFrame(data, index=close.index) - df.name = f"CKSP{_props}" - df.category = long_stop.category - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/decay.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/decay.py deleted file mode 100644 index 161a3de3..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/decay.py +++ /dev/null @@ -1,95 +0,0 @@ -# -*- coding: utf-8 -*- -from numba import njit -from numpy import float64, zeros_like -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import v_offset, v_pos_default, v_series, v_str - - - -# Exponential Decay - https://tulipindicators.org/edecay -@njit(cache=True) -def nb_exponential_decay(x, n): - m, rate = x.size, 1.0 - (1.0 / n) - - result = zeros_like(x, dtype=float64) - result[0] = x[0] - - for i in range(1, m): - result[i] = max(0, x[i], result[i - 1] * rate) - - return result - - -# Linear Decay - https://tulipindicators.org/decay -@njit(cache=True) -def nb_linear_decay(x, n): - m, rate = x.size, 1.0 / n - - result = zeros_like(x, dtype=float64) - result[0] = x[0] - - for i in range(1, m): - result[i] = max(0, x[i], result[i - 1] - rate) - - return result - - -def decay( - close: Series, length: Int = None, mode: str = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Decay - - This function creates a decay moving forward from prior signals. - - Sources: - * [tulipindicators](https://tulipindicators.org/decay) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```1``` - mode (str): Either ```"linear"``` or ```"exp"``` (exponetional) - Default: ```"linear"``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - close = v_series(close, length) - - if close is None: - return - - length = v_pos_default(length, 1) - mode = v_str(mode, "linear") - offset = v_offset(offset) - - # Calculate - _mode, np_close = "L", close.to_numpy() - - if mode in ["exp", "exponential"]: - _mode = "EXP" - result = nb_exponential_decay(np_close, length) - else: # "linear" - result = nb_linear_decay(np_close, length) - - result = Series(result, index=close.index) - - # Offset - if offset != 0: - result = result.shift(offset) - - # Fill - if "fillna" in kwargs: - result.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - result.name = f"{_mode}DECAY_{length}" - result.category = "trend" - - return result diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/decreasing.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/decreasing.py deleted file mode 100644 index 04762e15..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/decreasing.py +++ /dev/null @@ -1,85 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.utils import ( - v_percent, - v_bool, - v_drift, - v_offset, - v_pos_default, - v_series -) - - - -def decreasing( - close: Series, length: Int = None, strict: bool = None, - asint: bool = None, percent: IntFloat = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Decreasing - - This indicator, by Kevin Johnson, attempts to identify decreasing periods. - - Sources: - * Kevin Johnson - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```1``` - strict (bool): Check if continuously increasing. Default: ```False``` - percent (float): Percent, i.e. ```5.0```. Default: ```None``` - asint (bool): Returns as ```Int```. Default: ```True``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 1) - close = v_series(close, length) - - if close is None: - return - - strict = v_bool(strict, False) - asint = v_bool(asint, True) - percent = float(percent) if v_percent(percent) else False - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - close_ = (1 - 0.01 * percent) * close if percent else close - if strict: - # Returns value as float64? Have to cast to bool - decreasing = close < close_.shift(drift) - for x in range(3, length + 1): - decreasing &= (close.shift(x - (drift + 1)) < close_.shift(x - drift)) - - decreasing.fillna(0, inplace=True) - decreasing = decreasing.astype(bool) - else: - decreasing = close_.diff(length) < 0 - - if asint: - decreasing = decreasing.astype(int) - - # Offset - if offset != 0: - decreasing = decreasing.shift(offset) - - # Fill - if "fillna" in kwargs: - decreasing.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _percent = f"_{0.01 * percent}" if percent else '' - _props = f"{'S' if strict else ''}DEC{'p' if percent else ''}" - decreasing.name = f"{_props}_{length}{_percent}" - decreasing.category = "trend" - - return decreasing diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/dpo.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/dpo.py deleted file mode 100644 index db003497..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/dpo.py +++ /dev/null @@ -1,69 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.overlap import sma -from pandas_ta.utils import v_bool, v_offset, v_pos_default, v_series - - - -def dpo( - close: Series, length: Int = None, centered: bool = True, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Detrend Price Oscillator - - This indicator attempts to detrend (remove the trend) and identify cycles. - - Sources: - * [fidelity](https://www.fidelity.com/learning-center/trading-investing/technical-analysis/technical-indicator-guide/dpo) - * [stockcharts](http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:detrended_price_osci) - * [tradingview](https://www.tradingview.com/scripts/detrendedpriceoscillator/) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```20``` - centered (bool): Shift the dpo back by ```int(0.5 * length) + 1```. - Set to ```False``` to remove data leakage. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Danger: Possible Data Leak - Set ```centered=False``` to remove data leakage. See [Issue #60]( https://github.com/twopirllc/pandas-ta/issues/60#). - """ - # Validate - length = v_pos_default(length, 20) - close = v_series(close, length + 1) - - if close is None: - return - - centered = v_bool(centered, True) - offset = v_offset(offset) - - # Calculate - t = int(0.5 * length) + 1 - ma = sma(close, length) - - if centered: - dpo = (close.shift(t) - ma).shift(-t) - else: - dpo = close - ma.shift(t) - - # Offset - if offset != 0: - dpo = dpo.shift(offset) - - # Fill - if "fillna" in kwargs: - dpo.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - dpo.name = f"DPO_{length}" - dpo.category = "trend" - - return dpo diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/ht_trendline.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/ht_trendline.py deleted file mode 100644 index 72c47b74..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/ht_trendline.py +++ /dev/null @@ -1,148 +0,0 @@ -# -*- coding: utf-8 -*- -from numba import njit -from numpy import arctan, isnan, nan, rad2deg, zeros_like -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.maps import Imports -from pandas_ta.utils import v_offset, v_pos_default, v_series, v_talib - - - -@njit(cache=True) -def nb_ht_trendline(x): - a, b, m = 0.0962, 0.5769, x.size - - wma4, dt = zeros_like(x), zeros_like(x) - q1, q2 = zeros_like(x), zeros_like(x) - ji, jq = zeros_like(x), zeros_like(x) - i1, i2 = zeros_like(x), zeros_like(x) - re, im = zeros_like(x), zeros_like(x) - period, smp = zeros_like(x), zeros_like(x) - i_trend = zeros_like(x) - - result = zeros_like(x) - result[:13] = x[:13] - - # Ehlers's starts from 6, TALib from 63 - for i in range(6, m): - adj_prev_period = 0.075 * period[i - 1] + 0.54 - - wma4[i] = 0.4 * x[i] + 0.3 * x[i - 1] + 0.2 * x[i - 2] + 0.1 * x[i - 3] - dt[i] = adj_prev_period * (a * wma4[i] + b * wma4[i - 2] - b * wma4[i - 4] - a * wma4[i - 6]) - - q1[i] = adj_prev_period * (a * dt[i] + b * dt[i - 2] - b * dt[i - 4] - a * dt[i - 6]) - i1[i] = dt[i - 3] - - ji[i] = adj_prev_period * (a * i1[i] + b * i1[i - 2] - b * i1[i - 4] - a * i1[i - 6]) - jq[i] = adj_prev_period * (a * q1[i] + b * q1[i - 2] - b * q1[i - 4] - a * q1[i - 6]) - - i2[i] = i1[i] - jq[i] - q2[i] = q1[i] + ji[i] - - i2[i] = 0.2 * i2[i] + 0.8 * i2[i - 1] - q2[i] = 0.2 * q2[i] + 0.8 * q2[i - 1] - - re[i] = i2[i] * i2[i - 1] + q2[i] * q2[i - 1] - im[i] = i2[i] * q2[i - 1] - q2[i] * i2[i - 1] - - re[i] = 0.2 * re[i] + 0.8 * re[i - 1] - im[i] = 0.2 * im[i] + 0.8 * im[i - 1] - - if re[i] != 0 and im[i] != 0: - period[i] = 360.0 / rad2deg(arctan(im[i] / re[i])) - if period[i] > 1.5 * period[i - 1]: - period[i] = 1.5 * period[i - 1] - if period[i] < 0.67 * period[i - 1]: - period[i] = 0.67 * period[i - 1] - if period[i] < 6.0: - period[i] = 6.0 - if period[i] > 50.0: - period[i] = 50.0 - period[i] = 0.2 * period[i] + 0.8 * period[i - 1] - smp[i] = 0.33 * period[i] + 0.67 * smp[i - 1] - - dc_period = int(smp[i] + 0.5) - dcp_avg = 0 - for k in range(dc_period): - dcp_avg += x[i - k] - - if dc_period > 0: - dcp_avg /= dc_period - - i_trend[i] = dcp_avg - - if i > 12: - result[i] = 0.4 * i_trend[i] + 0.3 * i_trend[i - 1] + 0.2 * i_trend[i - 2] + 0.1 * i_trend[i - 3] - - return result - - -def ht_trendline( - close: Series, talib: bool = None, - prenan: Int = None, offset: Int = None, - **kwargs: DictLike -) -> Series: - """Hilbert Transform TrendLine - - This indicator uses the Hilbert Transform to smooth values. - - Sources: - * John F Ehlers's "Rocket Science for Traders" Book - * [mql5](https://c.mql5.com/forextsd/forum/59/023inst.pdf) - * TA-Lib [ta_HT_TRENDLINE](https://github.com/TA-Lib/ta-lib/blob/main/src/ta_func/ta_HT_TRENDLINE.c) - - Parameters: - close (Series): ```close``` Series. - talib (bool): If installed, use TA Lib. Default: ```True``` - prenan (int): Prenans to apply. Ehlers's ```6``` or ```12```, - TALib ```63``` Default: ```63``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Warning: - TA-Lib Correlation: ```np.float64(0.9979308363057683)``` - - Tip: - Corrective contributions welcome! - """ - # Validate - prenan = v_pos_default(prenan, 63) - close = v_series(close, prenan) - - if close is None: - return - - mode_tal = v_talib(talib) - offset = v_offset(offset) - - if Imports["talib"] and mode_tal: - from talib import HT_TRENDLINE - tl = HT_TRENDLINE(close) - else: - np_close = close.to_numpy() - np_tl = nb_ht_trendline(np_close) - - if prenan > 0: - np_tl[:prenan] = nan - tl = Series(np_tl, index=close.index) - - if all(isnan(tl)): - return # Emergency Break - - # Offset - if offset != 0: - trend_line = tl.shift(offset) - - # Fill - if "fillna" in kwargs: - tl.fillna(kwargs["fillna"], inplace=True) - - tl.name = f"HT_TL" - tl.category = "trend" - - return tl diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/increasing.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/increasing.py deleted file mode 100644 index 6d06b19d..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/increasing.py +++ /dev/null @@ -1,85 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.utils import ( - v_percent, - v_bool, - v_drift, - v_offset, - v_pos_default, - v_series -) - - - -def increasing( - close: Series, length: Int = None, strict: bool = None, - asint: bool = None, percent: IntFloat = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Increasing - - This indicator, by Kevin Johnson, attempts to identify increasing periods. - - Sources: - * Kevin Johnson - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```1``` - strict (bool): Check if continuously increasing. Default: ```False``` - percent (float): Percent, i.e. ```5.0```. Default: ```None``` - asint (bool): Returns as ```Int```. Default: ```True``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 1) - close = v_series(close, length) - - if close is None: - return - - strict = v_bool(strict, False) - asint = v_bool(asint, True) - percent = float(percent) if v_percent(percent) else False - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - close_ = (1 + 0.01 * percent) * close if percent else close - if strict: - # Returns value as float64? Have to cast to bool - increasing = close > close_.shift(drift) - for x in range(3, length + 1): - increasing &= (close.shift(x - (drift + 1)) > close_.shift(x - drift)) - - increasing.fillna(0, inplace=True) - increasing = increasing.astype(bool) - else: - increasing = close_.diff(length) > 0 - - if asint: - increasing = increasing.astype(int) - - # Offset - if offset != 0: - increasing = increasing.shift(offset) - - # Fill - if "fillna" in kwargs: - increasing.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _percent = f"_{0.01 * percent}" if percent else '' - _props = f"{'S' if strict else ''}INC{'p' if percent else ''}" - increasing.name = f"{_props}_{length}{_percent}" - increasing.category = "trend" - - return increasing diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/long_run.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/long_run.py deleted file mode 100644 index 24a51d20..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/long_run.py +++ /dev/null @@ -1,66 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import v_offset, v_pos_default, v_series -from .decreasing import decreasing -from .increasing import increasing - - - -def long_run( - fast: Series, slow: Series, length: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Long Run - - This indicator, by Kevin Johnson, attempts to identify long runs. - - Sources: - * Kevin Johnson - * [tradingview](https://www.tradingview.com/script/Z2mq63fE-Trade-Archer-Moving-Averages-v1-4F/) - - Parameters: - fast (Series): ```fast``` Series. - slow (Series): ```slow``` Series. - length (int): The ```decreasing``` and ```increasing``` period. - Default: ```2``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 2) - fast = v_series(fast, length) - slow = v_series(slow, length) - - if fast is None or slow is None: - return - - offset = v_offset(offset) - - # Calculate - inc = increasing(fast, length) - - # potential bottom or bottom - pb = inc & decreasing(slow, length) - # fast and slow are increasing - bi = inc & increasing(slow, length) - long_run = pb | bi - - # Offset - if offset != 0: - long_run = long_run.shift(offset) - - # Fill - if "fillna" in kwargs: - long_run.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - long_run.name = f"LR_{length}" - long_run.category = "trend" - - return long_run diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/psar.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/psar.py deleted file mode 100644 index a4b4bcaf..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/psar.py +++ /dev/null @@ -1,154 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import full, nan, zeros -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.utils import v_offset, v_pos_default, v_series, zero - - - -def psar( - high: Series, low: Series, close: Series = None, - af0: IntFloat = None, af: IntFloat = None, max_af: IntFloat = None, tv=False, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Parabolic Stop and Reverse - - This indicator, by J. Wells Wilder, attempts to identify trend direction - and potential reversals. - - Sources: - * [sierrachart](https://www.sierrachart.com/index.php?page=doc/StudiesReference.php&ID=66&Name=Parabolic) - * [tradingview](https://www.tradingview.com/pine-script-reference/#fun_sar) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): Optional ```close``` Series - af0 (float): Initial Acceleration Factor. Default: ```0.02``` - af (float): Acceleration Factor. Default: ```0.02``` - max_af (float): Maximum Acceleration Factor. Default: ```0.2``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 4 columns - - Warning: - TA-Lib Correlation: ```np.float64(0.9837617513753181)``` - - Tip: - Corrective contributions welcome! - """ - # Validate - _length = 1 - high = v_series(high, _length) - low = v_series(low, _length) - - if high is None or low is None: - return - - orig_high = high.copy() - orig_low = low.copy() - # Numpy arrays offer some performance improvements - high, low = high.to_numpy(), low.to_numpy() - - paf = v_pos_default(af, 0.02) # paf is used to keep af from parameters - af0 = v_pos_default(af0, paf) - af = af0 - - max_af = v_pos_default(max_af, 0.2) - offset = v_offset(offset) - - # Set up - m = high.size - sar = zeros(m) - long = full(m, nan) - short = full(m, nan) - reversal = zeros(m, dtype=int) - _af = zeros(m) - _af[:2] = af0 - falling = _falling(orig_high.iloc[:2], orig_low.iloc[:2]) - ep = low[0] if falling else high[0] - if close is not None: - close = v_series(close) - sar[0] = close.iloc[0] - else: - sar[0] = high[0] if falling else low[0] - - # Calculate - for i in range(1, m): - sar[i] = sar[i - 1] + af * (ep - sar[i - 1]) - - if falling: - reverse = high[i] > sar[i] - if low[i] < ep: - ep = low[i] - af = min(af + af0, max_af) - sar[i] = max(high[i - 1], sar[i]) - else: - reverse = low[i] < sar[i] - if high[i] > ep: - ep = high[i] - af = min(af + af0, max_af) - sar[i] = min(low[i - 1], sar[i]) - - if reverse: - sar[i] = ep - af = af0 - falling = not falling - ep = low[i] if falling else high[i] - - # Separate long/short SAR based on falling - if falling: - short[i] = sar[i] - else: - long[i] = sar[i] - - _af[i] = af - reversal[i] = int(reverse) - - _af = Series(_af, index=orig_high.index) - long = Series(long, index=orig_high.index) - short = Series(short, index=orig_high.index) - reversal = Series(reversal, index=orig_high.index) - - # Offset - if offset != 0: - _af = _af.shift(offset) - long = long.shift(offset) - short = short.shift(offset) - reversal = reversal.shift(offset) - - # Fill - if "fillna" in kwargs: - _af.fillna(kwargs["fillna"], inplace=True) - long.fillna(kwargs["fillna"], inplace=True) - short.fillna(kwargs["fillna"], inplace=True) - reversal.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _name = f"PSAR" - _props = f"_{af0}_{max_af}" - - data = { - f"{_name}l{_props}": long, - f"{_name}s{_props}": short, - f"{_name}af{_props}": _af, - f"{_name}r{_props}": reversal - } - df = DataFrame(data, index=orig_high.index) - df.name = f"{_name}{_props}" - df.category = long.category = short.category = "trend" - - return df - - -def _falling(high, low, drift: int = 1): - """Returns the last -DM value""" - # Not to be confused with ta.falling() - up = high - high.shift(drift) - dn = low.shift(drift) - low - _dmn = (((dn > up) & (dn > 0)) * dn).apply(zero).iloc[-1] - return _dmn > 0 diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/qstick.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/qstick.py deleted file mode 100644 index 7fd14657..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/qstick.py +++ /dev/null @@ -1,67 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.ma import ma -from pandas_ta.utils import ( - non_zero_range, - v_mamode, - v_offset, - v_pos_default, - v_series -) - - - -def qstick( - open_: Series, close: Series, length: Int = None, mamode: str = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Q Stick - - This indicator, by Tushar Chande, attempts to quantify and identify - trends. - - Sources: - * [tradingtechnologies](https://library.tradingtechnologies.com/trade/chrt-ti-qstick.html) - - Parameters: - open_ (Series): ```open``` Series - close (Series): ```close``` Series - length (int): The period. Default: ```10``` - mamode (str): See ```help(ta.ma)```. Default: ```"sma"``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 10) - open_ = v_series(open_, length) - close = v_series(close, length) - - if open_ is None or close is None: - return - - mamode = v_mamode(mamode, "sma") - offset = v_offset(offset) - - # Calculate - diff = non_zero_range(close, open_) - qstick = ma(mamode, diff, length=length, **kwargs) - - # Offset - if offset != 0: - qstick = qstick.shift(offset) - - # Fill - if "fillna" in kwargs: - qstick.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - qstick.name = f"QS_{length}" - qstick.category = "trend" - - return qstick diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/rwi.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/rwi.py deleted file mode 100644 index ed77f181..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/rwi.py +++ /dev/null @@ -1,94 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import isnan -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.volatility import atr -from pandas_ta.utils import ( - v_drift, - v_mamode, - v_offset, - v_pos_default, - v_series, - v_talib -) - - - -def rwi( - high: Series, low: Series, close: Series, - length: Int = None, mamode: str = None, talib: bool = None, - drift: Int = None, offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Random Walk Index - - This indicator attempts to identify the difference between a trend and - a random walk. - - Sources: - * [technicalindicators](https://www.technicalindicators.net/indicators-technical-analysis/168-rwi-random-walk-index) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - length (int): The period. Default: ```14``` - mamode (str): See ```help(ta.ma)```. Default: ```"rma"``` - talib (bool): If installed, use TA Lib. Default: ```True``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 2 columns - """ - # Validate - length = v_pos_default(length, 14) - _length = length + 1 - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - - if high is None or low is None or close is None: - return - - mamode = v_mamode(mamode, "rma") - mode_tal = v_talib(talib) - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - atr_ = atr( - high=high, low=low, close=close, - length=length, mamode=mamode, talib=mode_tal - ) - if all(isnan(atr_)): - return # Emergency Break - - denom = atr_ * (length ** 0.5) - rwi_high = (high - low.shift(length)) / denom - rwi_low = (high.shift(length) - low) / denom - - # Offset - if offset != 0: - rwi_high = rwi_high.shift(offset) - rwi_low = rwi_low.shift(offset) - - # Fill - if "fillna" in kwargs: - rwi_high.fillna(kwargs["fillna"], inplace=True) - rwi_low.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - rwi_high.name = f"RWIh_{length}" - rwi_low.name = f"RWIl_{length}" - rwi_high.category = rwi_low.category = "trend" - - # Prepare DataFrame to return - data = {rwi_high.name: rwi_high, rwi_low.name: rwi_low} - df = DataFrame(data, index=close.index) - df.name = f"RWI_{length}" - df.category = "trend" - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/short_run.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/short_run.py deleted file mode 100644 index 3aa86866..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/short_run.py +++ /dev/null @@ -1,66 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import v_offset, v_pos_default, v_series -from .decreasing import decreasing -from .increasing import increasing - - - -def short_run( - fast: Series, slow: Series, length: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Short Run - - This indicator, by Kevin Johnson, attempts to identify short runs. - - Sources: - * Kevin Johnson - * [tradingview](https://www.tradingview.com/script/Z2mq63fE-Trade-Archer-Moving-Averages-v1-4F/) - - Parameters: - fast (Series): ```fast``` Series. - slow (Series): ```slow``` Series. - length (int): The ```decreasing``` and ```increasing``` period. - Default: ```2``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 2) - fast = v_series(fast, length) - slow = v_series(slow, length) - - if fast is None or slow is None: - return - - offset = v_offset(offset) - - # Calculate - dec = decreasing(fast, length) - - # potential top or top - pt = dec & increasing(slow, length) - # fast and slow are decreasing - bd = dec & decreasing(slow, length) - short_run = pt | bd - - # Offset - if offset != 0: - short_run = short_run.shift(offset) - - # Fill - if "fillna" in kwargs: - short_run.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - short_run.name = f"SR_{length}" - short_run.category = "trend" - - return short_run diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/trendflex.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/trendflex.py deleted file mode 100644 index e90a11de..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/trendflex.py +++ /dev/null @@ -1,111 +0,0 @@ -# -*- coding: utf-8 -*- -from numba import njit -from numpy import cos, exp, nan, sqrt, zeros_like -from pandas import Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.utils import v_offset, v_pos_default, v_series - - - -# Ehlers's Trendflex -# http://traders.com/Documentation/FEEDbk_docs/2020/02/TradersTips.html -@njit(cache=True) -def nb_trendflex(x, n, k, alpha, pi, sqrt2): - m, ratio = x.size, 2 * sqrt2 / k - a = exp(-pi * ratio) - b = 2 * a * cos(180 * ratio) - c = a * a - b + 1 - - _f = zeros_like(x) - _ms = zeros_like(x) - result = zeros_like(x) - - for i in range(2, m): - _f[i] = 0.5 * c * (x[i] + x[i - 1]) + b * _f[i - 1] - a * a * _f[i - 2] - - for i in range(n, m): - _sum = 0 - for j in range(1, n): - _sum += _f[i] - _f[i - j] - _sum /= n - - _ms[i] = alpha * _sum * _sum + (1 - alpha) * _ms[i - 1] - if _ms[i] != 0.0: - result[i] = _sum / sqrt(_ms[i]) - - return result - - -def trendflex( - close: Series, length: Int = None, - smooth: Int = None, alpha: IntFloat = None, - pi: IntFloat = None, sqrt2: IntFloat = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Trendflex - - This trend indicator, by John F. Ehlers, complements the "reflex" - indicator. - - Sources: - * [rengel8](https://github.com/rengel8) (2021-08-11) based on the - implementation from "ProRealCode" (2021-08-11) - * [prorealcode](https://www.prorealcode.com/prorealtime-indicators/reflex-and-trendflex-indicators-john-f-ehlers/) - * [traders](http://traders.com/Documentation/FEEDbk_docs/2020/02/TradersTips.html) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```20``` - smooth (int): Super Smoother period. Default: ```20```` - alpha (float): Alpha weight. Default: ```0.04``` - pi (float): Ehlers's truncated value: ```3.14159```. - Default: ```3.14159``` - sqrt2 (float): Ehlers's truncated value: ```1.414```. - Default: ```1.414``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Note: - John F. Ehlers introduced two indicators within the article - "Reflex: A New Zero-Lag Indicator” in February 2020, TASC magazine. - One of which is Reflex, a lag reduced cycle indicator. Both indicators - (Reflex/Trendflex) are oscillators that complement each other with the - focus for cycle and trend. - """ - # Validate - length = v_pos_default(length, 20) - smooth = v_pos_default(smooth, 20) - close = v_series(close, max(length, smooth) + 1) - - if close is None: - return - - alpha = v_pos_default(alpha, 0.04) - pi = v_pos_default(pi, 3.14159) - sqrt2 = v_pos_default(sqrt2, 1.414) - offset = v_offset(offset) - - # Calculate - np_close = close.to_numpy() - result = nb_trendflex(np_close, length, smooth, alpha, pi, sqrt2) - result[:length] = nan - result = Series(result, index=close.index) - - # Offset - if offset != 0: - result = result.shift(offset) - - # Fill - if "fillna" in kwargs: - result.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - result.name = f"TRENDFLEX_{length}_{smooth}_{alpha}" - result.category = "trend" - - return result diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/ttm_trend.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/ttm_trend.py deleted file mode 100644 index f3578c84..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/ttm_trend.py +++ /dev/null @@ -1,76 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.overlap import hl2 -from pandas_ta.utils import v_offset, v_pos_default, v_series - - - -def ttm_trend( - high: Series, low: Series, close: Series, - length: Int = None, offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """TTM Trend - - This indicator, by John Carter, labels bars green, ```1```, or - red ```-1```, when above or below the average value. - - Sources: - * John Carter, book “Mastering the Trade” - * [prorealcode](https://www.prorealcode.com/prorealtime-indicators/ttm-trend-price/) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - length (int): The period. Default: ```6``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 1 column - - Tip: - * Two bars of the opposite color is the signal to get in or out. - * Recommended to stay in trade if colors do not change. - """ - # Validate - length = v_pos_default(length, 6) - high = v_series(high, length) - low = v_series(low, length) - close = v_series(close, length) - - if high is None or low is None or close is None: - return - - offset = v_offset(offset) - - # Calculate - trend_avg = hl2(high, low) - for i in range(1, length): - trend_avg = trend_avg + hl2(high.shift(i), low.shift(i)) - - trend_avg = trend_avg / length - - tm_trend = (close > trend_avg).astype(int) - tm_trend.replace(0, -1, inplace=True) - - # Offset - if offset != 0: - tm_trend = tm_trend.shift(offset) - - # Fill - if "fillna" in kwargs: - tm_trend.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - tm_trend.name = f"TTM_TRND_{length}" - tm_trend.category = "momentum" - - df = DataFrame({tm_trend.name: tm_trend}, index=close.index) - df.name = f"TTMTREND_{length}" - df.category = tm_trend.category - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/vhf.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/vhf.py deleted file mode 100644 index 7c7814e2..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/vhf.py +++ /dev/null @@ -1,68 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import inf, fabs, nan -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import ( - non_zero_range, - v_drift, - v_offset, - v_pos_default, - v_series -) - - - -def vhf( - close: Series, length: Int = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Vertical Horizontal Filter - - This indicator, by Adam White, attempts to identify trending and - ranging markets. - - Sources: - * [incrediblecharts](https://www.incrediblecharts.com/indicators/vertical_horizontal_filter.php) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```28``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 28) - close = v_series(close, length) - - if close is None: - return - - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - hcp = close.rolling(length).max() - lcp = close.rolling(length).min() - diff = fabs(close.diff(drift)) - vhf = fabs(non_zero_range(hcp, lcp)) / diff.rolling(length).sum() - vhf.replace([inf, -inf], nan, inplace=True) - # np_vhf = where(np_vhf == inf, nan, np_vhf) - - # Offset - if offset != 0: - vhf = vhf.shift(offset) - - # Fill - if "fillna" in kwargs: - vhf.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - vhf.name = f"VHF_{length}" - vhf.category = "trend" - - return vhf diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/vortex.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/vortex.py deleted file mode 100644 index ba60ed87..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/vortex.py +++ /dev/null @@ -1,83 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import v_drift, v_offset, v_pos_default, v_series -from pandas_ta.volatility import true_range - - - -def vortex( - high: Series, low: Series, close: Series, - length: Int = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Vortex - - This indicator attempts to capture positive and negative trend movement - using two oscillators. - - Sources: - * [stockcharts](https://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:vortex_indicator) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - length (int): The period. Default: ```14``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 2 columns - """ - # Validate - length = v_pos_default(length, 14) - if "min_periods" in kwargs and kwargs["min_periods"] is not None: - min_periods = int(kwargs["min_periods"]) - else: - min_periods = length - _length = max(length, min_periods) - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - - if high is None or low is None or close is None: - return - - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - tr = true_range(high=high, low=low, close=close) - tr_sum = tr.rolling(length, min_periods=min_periods).sum() - - vmp = (high - low.shift(drift)).abs() - vmm = (low - high.shift(drift)).abs() - - vip = vmp.rolling(length, min_periods=min_periods).sum() / tr_sum - vim = vmm.rolling(length, min_periods=min_periods).sum() / tr_sum - - # Offset - if offset != 0: - vip = vip.shift(offset) - vim = vim.shift(offset) - - # Fill - if "fillna" in kwargs: - vip.fillna(kwargs["fillna"], inplace=True) - vim.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - vip.name = f"VTXP_{length}" - vim.name = f"VTXM_{length}" - vip.category = vim.category = "trend" - - data = {vip.name: vip, vim.name: vim} - df = DataFrame(data, index=close.index) - df.name = f"VTX_{length}" - df.category = "trend" - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/zigzag.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/zigzag.py deleted file mode 100644 index 2bcd4103..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/trend/zigzag.py +++ /dev/null @@ -1,335 +0,0 @@ -# -*- coding: utf-8 -*- -from numba import njit -from numpy import floor, nan, zeros, zeros_like, roll -from pandas import Series, DataFrame -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.utils import ( - v_bool, - v_offset, - v_pos_default, - v_series, -) - - -# Find high and low pivots using a centered rolling window. -@njit(cache=True) -def nb_rolling_hl(np_high, np_low, window_size): - idx = zeros_like(np_high) - swing = zeros_like(np_high) # where a high = 1 and low = -1 - value = zeros_like(np_high) - - extremes = 0 - left = int(floor(window_size / 2)) - right = left + 1 - # sample_array = [*[left-window], *[center], *[right-window]] - - m = np_high.size - for i in range(left, m - right): - low_center = np_low[i] - high_center = np_high[i] - low_window = np_low[i - left: i + right] - high_window = np_high[i - left: i + right] - - if (low_center <= low_window).all(): - idx[extremes] = i - swing[extremes] = -1 - value[extremes] = low_center - extremes += 1 - - if (high_center >= high_window).all(): - idx[extremes] = i - swing[extremes] = 1 - value[extremes] = high_center - extremes += 1 - - return idx[:extremes], swing[:extremes], value[:extremes] - - -# Calculate zigzag points using pre-calculated unfiltered pivots. -@njit(cache=True) -def nb_zz_backtest(idx, swing, value, deviation): - zz_idx = zeros_like(idx) - zz_swing = zeros_like(swing) - zz_value = zeros_like(value) - zz_dev = zeros_like(idx) - - zigzags = 0 - changes = 0 - zz_idx[zigzags] = idx[0] - zz_swing[zigzags] = swing[0] - zz_value[zigzags] = value[0] - zz_dev[zigzags] = 0 - - # print(f'Starting S: {zz_swing[0]}') - - m = idx.size - for i in range(1, m): - last_zz_value = zz_value[zigzags] - current_dev = (value[i] - last_zz_value) / last_zz_value - - # print(f'{i} | P {swing[i]:.0f} : {idx[i]:.0f} , {value[i]}') - # print(f'{len(str(i))*" "} | Last: {zz_swing[zigzags-changes]:.0f} , Dev: %{(current_dev*100):.1f}') - - # Last point in zigzag is bottom - if zz_swing[zigzags-changes] == -1: - if swing[i] == -1: - # If the current pivot is lower than the last ZZ bottom: - # create a new point and log it as a change - if value[i] < zz_value[zigzags]: - if zz_idx[zigzags - changes] == idx[i]: - continue - # print(f'{len(str(i))*" "} | Change -1 : {zz_value[zigzags]} to {value[i]}') - zigzags += 1 - changes += 1 - zz_idx[zigzags] = idx[i] - zz_swing[zigzags] = swing[i] - zz_value[zigzags] = value[i] - zz_dev[zigzags] = 100 * current_dev - else: - # If the deviation between pivot and the last ZZ bottom is - # great enough create new ZZ point. - if current_dev > 0.01 * deviation: - if zz_idx[zigzags - changes] == idx[i]: - continue - # print(f'{len(str(i))*" "} | new ZZ 1 {value[i]}') - zigzags += 1 - zz_idx[zigzags] = idx[i] - zz_swing[zigzags] = swing[i] - zz_value[zigzags] = value[i] - zz_dev[zigzags] = 100 * current_dev - changes = 0 - - # last point in zigzag is top - else: - if swing[i] == 1: - # If the current pivot is higher than the last ZZ top: - # create a new point and log it as a change - if value[i] > zz_value[zigzags]: - if zz_idx[zigzags - changes] == idx[i]: - continue - # print(f'{len(str(i))*" "} | Change 1 : {zz_value[zigzags]} to {value[i]}') - zigzags += 1 - changes += 1 - zz_idx[zigzags] = idx[i] - zz_swing[zigzags] = swing[i] - zz_value[zigzags] = value[i] - zz_dev[zigzags] = 100 * current_dev - else: - # If the deviation between pivot and the last ZZ top is great - # enough create new ZZ point. - if current_dev < -0.01 * deviation: - if zz_idx[zigzags - changes] == idx[i]: - continue - # print(f'{len(str(i))*" "} | new ZZ -1 {value[i]}') - zigzags += 1 - zz_idx[zigzags] = idx[i] - zz_swing[zigzags] = swing[i] - zz_value[zigzags] = value[i] - zz_dev[zigzags] = 100 * current_dev - changes = 0 - - _n = zigzags + 1 - return zz_idx[:_n], zz_swing[:_n], zz_value[:_n], zz_dev[:_n] - - -# Calculate zigzag points using pre-calculated unfiltered pivots. -@njit(cache=True) -def nb_find_zz(idx, swing, value, deviation): - zz_idx = zeros_like(idx) - zz_swing = zeros_like(swing) - zz_value = zeros_like(value) - zz_dev = zeros_like(idx) - - zigzags = 0 - zz_idx[zigzags] = idx[-1] - zz_swing[zigzags] = swing[-1] - zz_value[zigzags] = value[-1] - zz_dev[zigzags] = 0 - - m = idx.size - for i in range(m - 2, -1, -1): - # Next point in zigzag is bottom - if zz_swing[zigzags] == -1: - if swing[i] == -1: - # If the current pivot is lower than the next ZZ bottom in - # time, move it to the pivot. As this lower value invalidates - # the other one - if value[i] < zz_value[zigzags] and zigzags > 1: - current_dev = (zz_value[zigzags - 1] - value[i]) / value[i] - zz_idx[zigzags] = idx[i] - zz_swing[zigzags] = swing[i] - zz_value[zigzags] = value[i] - zz_dev[zigzags - 1] = 100 * current_dev - else: - # If the deviation between pivot and the next ZZ bottom is - # great enough create new ZZ point. - current_dev = (value[i] - zz_value[zigzags]) / value[i] - if current_dev > 0.01 * deviation: - if zz_idx[zigzags] == idx[i]: - continue - zigzags += 1 - zz_idx[zigzags] = idx[i] - zz_swing[zigzags] = swing[i] - zz_value[zigzags] = value[i] - zz_dev[zigzags - 1] = 100 * current_dev - - # Next point in zigzag is top - else: - if swing[i] == 1: - # If the current pivot is greater than the next ZZ top in time, - # move it to the pivot. - # As this higher value invalidates the other one - if value[i] > zz_value[zigzags] and zigzags > 1: - current_dev = (value[i] - zz_value[zigzags - 1]) / value[i] - zz_idx[zigzags] = idx[i] - zz_swing[zigzags] = swing[i] - zz_value[zigzags] = value[i] - zz_dev[zigzags - 1] = 100 * current_dev - else: - # If the deviation between pivot and the next ZZ top is great - # enough create new ZZ point. - current_dev = (zz_value[zigzags] - value[i]) / value[i] - if current_dev > 0.01 * deviation: - if zz_idx[zigzags] == idx[i]: - continue - zigzags += 1 - zz_idx[zigzags] = idx[i] - zz_swing[zigzags] = swing[i] - zz_value[zigzags] = value[i] - zz_dev[zigzags - 1] = 100 * current_dev - - _n = zigzags + 1 - return zz_idx[:_n], zz_swing[:_n], zz_value[:_n], zz_dev[:_n] - - - -# Maps nb_find_zz results back onto the original data indices. -@njit(cache=True) -def nb_map_zz(idx, swing, value, deviation, n): - swing_map = zeros(n) - value_map = zeros(n) - dev_map = zeros(n) - - for j, i in enumerate(idx): - i = int(i) - swing_map[i] = swing[j] - value_map[i] = value[j] - dev_map[i] = deviation[j] - - for i in range(n): - if swing_map[i] == 0: - swing_map[i] = nan - value_map[i] = nan - dev_map[i] = nan - - return swing_map, value_map, dev_map - - - -def zigzag( - high: Series, low: Series, close: Series = None, - legs: int = None, deviation: IntFloat = None, backtest: bool = None, - offset: Int = None, **kwargs: DictLike -): - """Zigzag - - This indicator attempts to filter out smaller movements while identifying - trend direction. It does not predict future trends, but it does identify - swing highs and lows. - - Sources: - * [stockcharts](https://school.stockcharts.com/doku.php?id=technical_indicators:zigzag) - * [tradingview](https://www.tradingview.com/support/solutions/43000591664-zig-zag/#:~:text=Definition,trader%20visual%20the%20price%20action.) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series. Default: ```None``` - legs (int): Number of legs (> 2). Default: ```10``` - deviation (float): Reversal deviation percentage. Default: ```5``` - backtest (bool): Default: ```False``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 2 columns - - Note: Deviation - When ```deviation=10```, it shows movements greater than ```10%```. - - Note: Backtest Mode - Ensures the DataFrame is safe for backtesting. By default, swing - points are returned on the pivot index. Intermediate swings are - not returned at all. This mode swing detection is placed on the bar - that would have been detected. Furthermore, changes in swing levels - are also included instead of only the final value. - - * Use the following formula to get the true index of a pivot: - ```p_i = i - int(floor(legs / 2))``` - - Warning: - A Series reversal will create a new line. - """ - # Validate - legs = v_pos_default(legs, 10) - _length = legs + 1 - high = v_series(high, _length) - low = v_series(low, _length) - - if high is None or low is None: - return - - if close is not None: - close = v_series(close,_length) - np_close = close.values - if close is None: - return - - deviation = v_pos_default(deviation, 5.0) - offset = v_offset(offset) - backtest = v_bool(backtest, False) - - if backtest: - offset+=int(floor(legs/2)) - - # Calculation - np_high, np_low = high.to_numpy(), low.to_numpy() - hli, hls, hlv = nb_rolling_hl(np_high, np_low, legs) - - if backtest: - zzi, zzs, zzv, zzd = nb_zz_backtest(hli, hls, hlv, deviation) - else: - zzi, zzs, zzv, zzd = nb_find_zz(hli, hls, hlv, deviation) - - swing, value, dev = nb_map_zz(zzi, zzs, zzv, zzd, np_high.size) - - # Offset - if offset != 0: - swing = roll(swing, offset) - value = roll(value, offset) - dev = roll(dev, offset) - - swing[:offset] = nan - value[:offset] = nan - dev[:offset] = nan - - # Fill - if "fillna" in kwargs: - swing.fillna(kwargs["fillna"], inplace=True) - value.fillna(kwargs["fillna"], inplace=True) - dev.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = f"_{deviation}%_{legs}" - data = { - f"ZIGZAGs{_props}": swing, - f"ZIGZAGv{_props}": value, - f"ZIGZAGd{_props}": dev, - } - df = DataFrame(data, index=high.index) - df.name = f"ZIGZAG{_props}" - df.category = "trend" - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/utils/__init__.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/utils/__init__.py deleted file mode 100644 index a27ff5ce..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/utils/__init__.py +++ /dev/null @@ -1,28 +0,0 @@ -# -*- coding: utf-8 -*- -from ._candles import * -from ._core import * -from ._math import * -from ._numba import * -from ._signals import * -from ._study import * -from ._time import * -from ._validate import * -from ._candles import __all__ as _candles_all -from ._core import __all__ as _core_all -from ._math import __all__ as _math_all -from ._numba import __all__ as _numba_all -from ._signals import __all__ as _signals_all -from ._study import __all__ as _study_all -from ._time import __all__ as _time_all -from ._validate import __all__ as _validate_all - -__all__ = ( - _candles_all - + _core_all - + _math_all - + _numba_all - + _signals_all - + _study_all - + _time_all - + _validate_all -) diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/utils/_candles.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/utils/_candles.py deleted file mode 100644 index da0537d5..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/utils/_candles.py +++ /dev/null @@ -1,54 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta.utils._core import non_zero_range - -__all__ = ["candle_color", "high_low_range", "real_body"] - - - -def candle_color(open_: Series, close: Series) -> Series: - """Candle Change - - If ```close >= open_```, returns ```1```. Otherwise ```-1```. - - Parameters: - open_ (Series): ```open``` Series - close (Series): ```close``` Series - - Returns: - (Series): 1 column - """ - color = close.copy().astype(int) - color[close >= open_] = 1 - color[close < open_] = -1 - return color - - -def high_low_range(high: Series, low: Series) -> Series: - """High Low Range - - Returns a non-zero ```high - low```. - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - - Returns: - (.Series): 1 column - """ - return non_zero_range(high, low) - - -def real_body(open_: Series, close: Series) -> Series: - """Body Range - - Returns a non-zero ```close - open_```. - - Parameters: - open_ (Series): ```open``` Series - close (Series): ```close``` Series - - Returns: - (Series): 1 column - """ - return non_zero_range(close, open_) diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/utils/_core.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/utils/_core.py deleted file mode 100644 index e8ed0ece..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/utils/_core.py +++ /dev/null @@ -1,454 +0,0 @@ -# -*- coding: utf-8 -*- -import re as re_ -from contextlib import redirect_stdout -from io import StringIO -from sys import float_info as sflt -from webbrowser import open as webbrowser_open - -from numpy import argmax, argmin -from pandas import DataFrame, Series - -from pandas_ta._typing import ( - Array, - Int, - IntFloat, - ListStr, - TextIO, - Tuple -) -from pandas_ta.utils._validate import ( - v_array, - v_bool, - v_dataframe, - v_pos_default, - v_series, - v_str -) -from pandas_ta.utils._study import Study -from pandas_ta.maps import Category, Imports - -__all__ = [ - "camelCase2Title", - "category_files", - "help", - "ms2secs", - "non_zero_range", - "recent_maximum_index", - "recent_minimum_index", - "pd_rma", - "signed_series", - "simplify_columns", - "speed_test", - "tal_ma", - "unsigned_differences", -] - - - -def camelCase2Title(x: str) -> str | None: - """camelCase2Title - - Converts Camel Case to Title - - Sources: - * [stackoverflow](https://stackoverflow.com/questions/5020906/python-convert-camel-case-to-space-delimited-using-regex-and-taking-acronyms-in) - - Parameters: - x (str): input - - Returns: - (str | None): Title Case string or None - """ - if isinstance(x, str) and len(x): - return re_.sub("([a-z])([A-Z])", r"\g<1> \g<2>", x).title() - return None - - - -def category_files(category: str) -> list: - """Category Files - - Return all filenames in the category directory. - - Parameters: - category (str): String name of a Indicator Category - - Returns: - (list): List of filenames of Category - """ - files = [ - x.stem - for x in list(Path(f"pandas_ta/{category}/").glob("*.py")) - if x.stem != "__init__" - ] - return files - - - -def help(query: str = "") -> None | TextIO: - """Pandas TA Help - - Prints available query words or opens a web browser to relevant - documentation. - - Parameters: - query (str): Query string. Default: ```""``` - - Returns: - (TextIO | None): Available query keywords or opens web browser to - online documentation. - """ - s = v_str(query, "") - - _categories = list(Category.keys()) - _dataframes = ["pandas", "dataframe", "extension"] - _events = ["events", "signals"] - _features = ["bugs", "features", "contribute", "contributing"] - _help = ["help", "support"] - _how2 = ["how2", "how to", "usage"] - _mp = ["custom", "multiprocessing"] - _studies = ["study", "studies"] - KEYWORDS = _dataframes + _events + _features + _help \ - + _how2 + _studies + _categories + _mp - - www = "https://www.pandas-ta.dev" - _url = "" - - if s == "": - out = f'\nSearch words:\n\t{", ".join(sorted(KEYWORDS))}\n' - out += '\nExample: df.ta.help("usage")' - print(out) - elif s in _categories: - _url = f"{www}/api/{s.lower()}" - elif s in _dataframes: - _url = f"{www}/api/ta-extension" - elif s in _events: - _url = f"{www}/api/events" - elif s in _features: - _url = f"{www}/support/bugs-and-features" - elif s in _help: - _url = f"{www}/support" - elif s in _how2: - _url = f"{www}/support/how-to" - elif s in _mp: - _url = f"{www}/getting-started/usage" - elif s in _studies: - _url = f"{www}/api/studies" - else: - _url = f"{www}" - webbrowser_open(_url, new=1) - - - -def ms2secs(ms: IntFloat, p: Int) -> IntFloat: - """ms2secs - - Convert ms to secs - - Parameters: - ms (IntFloat): ms - p (Int): Rounding precision - - Returns: - (IntFloat): seconds - """ - return round(0.001 * ms, p) - - - -def non_zero_range(x: Series, y: Series) -> Series: - """Non-Zero Range - - Calculates the difference of two Series plus epsilon to any zero values. - Technically: ```x - y + epsilon``` - - Parameters: - x (Series): Series of 'x's - y (Series): Series of 'y's - - Returns: - (Series): 1 column - """ - diff = x - y - if diff.eq(0).any().any(): - diff += sflt.epsilon - return diff - - - -def recent_maximum_index(x) -> Int: - """Recent Maximum Index - - Index of the largest value in ```x``` - - Parameters: - x (Series): ```x``` values - - Returns: - (int): Index of the largest value - """ - return int(argmax(x[::-1])) - - - -def recent_minimum_index(x) -> Int: - """Recent Minimum Index - - Index of the smallest value in ```x``` - - Parameters: - x (Series): ```x``` values - - Returns: - (int): Index of the smallest value - """ - return int(argmin(x[::-1])) - - - -def pd_rma(x: Series, n: Int) -> Series: - """RMA (Pandas) - - Pandas Implementation of RMA. - - Parameters: - x (Series): ```x``` Series - n (Int): Bars of lookback. Default: ```0.5``` - - Returns: - (Series): 1 column - """ - x = v_series(x) - if x is None: - return - a = (1.0 / n) if n > 0 else 0.5 - return x.ewm(alpha=a, min_periods=n).mean() - - - -def signed_series(x: Series, initial: Int, lag: Int = None) -> Series: - """Signed Series - - Returns a Signed Series with or without an initial value - - Parameters: - x (Series): Series of 'x's - initial (int): Set inital values of the signed Series. - lag (int): Difference between adjacent items. Default: ```1``` - - Returns: - (Series): 1 column - """ - initial = None - if initial is not None and not isinstance(lag, str): - initial = initial - x = v_series(x) - lag = v_pos_default(lag, 1) - sign = x.diff(lag) - sign[sign > 0] = 1 - sign[sign < 0] = -1 - sign.iloc[0] = initial # sign.iloc[:lag-1] - return sign - - - -def simplify_columns(df: DataFrame, n: Int=3) -> ListStr: - """Simplify Columns - - Helper method for managing columns used by Squeeze and Squeeze Pro. - - Parameters: - df (DataFrame): DataFrame with the columns - n (int): Default: ```3``` - - Returns: - (ListStr): List of string column - """ - df.columns = df.columns.str.lower() - return [c.split("_")[0][n - 1:n] for c in df.columns] - - - -def speed_test(df: DataFrame, - only: ListStr = None, excluded: ListStr = None, - top: Int = None, talib: bool = False, - ascending: bool = False, sortby: str = "secs", - gradient: bool = False, places: Int = 5, stats: bool = False, - verbose: bool = False, silent: bool = False - ) -> DataFrame | Tuple[DataFrame, DataFrame]: - """Speed Test - - Given a standard ohlcv DataFrame, the Speed Test calculates the - speed of each indicator of the DataFrame Extension: df.ta.(). - - Parameters: - df (DataFrame): DataFrame with _ohlcv_ columns - only (list): List of indicators to run. Default: ```None``` - excluded (list): List of indicators to exclude. Default: ```None``` - top (Int): Return a DataFrame the 'top' values. Default: ```None``` - talib (bool): Enable TA Lib. Default: ```False``` - ascending (bool): Ascending Order. Default: ```False``` - sortby (str): Options: "ms", "secs". Default: ```"secs"``` - gradient (bool): Returns a DataFrame the 'top' values with gradient - styling. Default: ```False``` - places (Int): Decimal places. Default: ```5``` - stats (bool): Returns a Tuple of two DataFrames. The second tuple - contains Stats on the performance time. Default: ```False``` - verbose (bool): Display more info. Default: ```False``` - silent (bool): Display nothing. Default: ```False``` - - Returns: - (DataFrame): if ```stats=False``` - (DataFrame, DataFrame): if ```stats=True``` - """ - if df.empty: - print(f"[X] No DataFrame") - return - talib = v_bool(talib, False) - top = int(top) if isinstance(top, int) and top > 0 else None - stats = v_bool(stats, False) - verbose = v_bool(verbose, False) - silent = v_bool(silent, False) - - _ichimoku = ["ichimoku"] - if excluded is None and isinstance(only, list) and len(only) > 0: - _indicators = only - elif only is None and isinstance(excluded, list) and len(excluded) > 0: - _indicators = df.ta.indicators(as_list=True, exclude=_ichimoku + excluded) - else: - _indicators = df.ta.indicators(as_list=True, exclude=_ichimoku) - - if len(_indicators) == 0: return None - - _iname = "Indicator" - if verbose: - print() - data = _speed_group(df.copy(), _indicators, talib, _iname, places) - else: - _this = StringIO() - with redirect_stdout(_this): - data = _speed_group(df.copy(), _indicators, talib, _iname, places) - _this.close() - - tdf = DataFrame.from_dict(data) - tdf.set_index(_iname, inplace=True) - tdf.sort_values(by=sortby, ascending=ascending, inplace=True) - - total_timedf = DataFrame( - tdf.describe().loc[['min', '50%', 'mean', 'max']]).T - total_timedf["total"] = tdf.sum(axis=0).T - total_timedf = total_timedf.T - - _div = "=" * 60 - _observations = f" Bars{'[talib]' if talib else ''}: {df.shape[0]}" - _quick_slow = "Quickest" if ascending else "Slowest" - _title = f" {_quick_slow} Indicators" - _perfstats = f"Time Stats:\n{total_timedf}" - if top: - _title = f" {_quick_slow} {top} Indicators [{tdf.shape[0]}]" - tdf = tdf.head(top) - - if not silent: - print(f"\n{_div}\n{_title}\n{_observations}\n{_div}\n{tdf}\n\n{_div}\n{_perfstats}\n\n{_div}\n") - - if isinstance(gradient, bool) and gradient: - return tdf.style.background_gradient("autumn_r"), total_timedf - - if stats: - return tdf, total_timedf - else: - return tdf - - - -def tal_ma(name: str) -> Int: - """TA Lib MA - - Helper Function that returns the Enum value for TA Lib's MA Type - - Parameters: - name (str): Abbreivated Name of the Moving Average - - Returns: - (int): The equivalent TA Lib MA Enum value for ```name``` - """ - if Imports["talib"] and isinstance(name, str) and len(name) > 1: - from talib import MA_Type - name = name.lower() - if name == "sma": - return MA_Type.SMA # 0 - elif name == "ema": - return MA_Type.EMA # 1 - elif name == "wma": - return MA_Type.WMA # 2 - elif name == "dema": - return MA_Type.DEMA # 3 - elif name == "tema": - return MA_Type.TEMA # 4 - elif name == "trima": - return MA_Type.TRIMA # 5 - elif name == "kama": - return MA_Type.KAMA # 6 - elif name == "mama": - return MA_Type.MAMA # 7 - elif name == "t3": - return MA_Type.T3 # 8 - return 0 # Default: SMA -> 0 - - - -def unsigned_differences( - x: Series, lag: Int = None, asint: bool = None -) -> Tuple[Series, Series]: - """Unsigned Differences - - Returns two Series, an unsigned positive and unsigned negative series based - on the differences of the original series. The positive series are only the - increases and the negative series are only the decreases. - - Parameters: - x (Series): Series of 'x's - lag (int): Difference between adjacent items. Default: ```1``` - asint (bool): Returns as ```Int```. Default: ```False``` - - Returns: - (Series | Series): Positive Series, Negative Series - - Example: - ```py - ta.unsigned_differences(Series([3, 2, 2, 1, 1, 5, 6, 6, 7, 5, 3])) - ``` - """ - asint = v_bool(asint, False) - lag = int(lag) if lag is not None else 1 - negative = x.diff(lag) - negative.fillna(0, inplace=True) - positive = negative.copy() - - positive[positive <= 0] = 0 - positive[positive > 0] = 1 - - negative[negative >= 0] = 0 - negative[negative < 0] = 1 - - if asint: - positive = positive.astype(int) - negative = negative.astype(int) - - return positive, negative - - - -def _speed_group( - df: DataFrame, group: ListStr = [], talib: bool = False, - index_name: str = "Indicator", p: Int = 4 - ) -> ListStr: - result = [] - for i in group: - r = df.ta(i, talib=talib, timed=True) - if r is None: - print(f"[S] {i} skipped due to returning None") - continue # ta.pivots() sometimes returns None - ms = float(r.timed.split(" ")[0].split(" ")[0]) - result.append({index_name: i, "ms": ms, "secs": ms2secs(ms, p)}) - return result diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/utils/_math.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/utils/_math.py deleted file mode 100644 index 848cd3dc..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/utils/_math.py +++ /dev/null @@ -1,811 +0,0 @@ -# -*- coding: utf-8 -*- -from collections.abc import Callable -from functools import reduce -from math import floor as mfloor -from operator import mul -from sys import float_info as sflt - -from numpy import ( - all, array, broadcast_to, concatenate, diff, dot, exp, - fabs, full, isnan, log, logical_and, nan, nanmean, nansum, - ndarray, newaxis, ones, pad, sign, sqrt, sum, triu, zeros -) -from numpy import max as np_max -from numpy import min as np_min -from numpy.lib.stride_tricks import sliding_window_view - -from pandas import DataFrame, Series -from numba import njit -from pandas_ta._typing import ( - Array, - DictLike, - Float, - Int, - IntFloat, - List -) -from pandas_ta.maps import Imports -from pandas_ta.utils._validate import ( - v_array, - v_dataframe, - v_float, - v_int, - v_lowerbound, - v_offset, - v_pos_default, - v_scalar, - v_series -) - -__all__ = [ - "combination", - "cube", - "consecutive_streak", - "df_error_analysis", - "erf", - "fibonacci", - "geometric_mean", - "hpoly", - "ifisher", - "log_geometric_mean", - "pascals_triangle", - "percent_rank", - "remap", - "strided_window", - "sum_signed_rolling_deltas", - "symmetric_triangle", - "weights", - "zero", -] - - - -def combination( - n: Int = 1, r: Int = 0, - repetition: bool = False, multichoose: bool = False -) -> Int: - """Combination - - Combination computation. - - Sources: - * [stackoverflow](https://stackoverflow.com/questions/4941753/is-there-a-math-ncr-function-in-python) - - Parameters: - n (Int): ```n``` - r (Int): ```r``` - repetition (bool): Apply repetition. - multichoose (bool): Apply multichoose. - - Returns: - (Int): Combination value - - Note: - ```n``` Choose ```r```: ```(n r)``` - """ - n, r = int(fabs(n)), int(fabs(r)) - - if repetition or multichoose: - n = n + r - 1 - - # if r < 0: return None - r = min(n, n - r) - if r == 0: - return 1 - - numerator = reduce(mul, range(n, n - r, -1), 1) - denominator = reduce(mul, range(1, r + 1), 1) - return numerator // denominator - - - -def consecutive_streak(x: Array) -> Array: - """Consecutive Streak - - Computes the streak of consecutive value increases or decreases. - - Parameters: - x (Array): Numpy array. - - Returns: - (Array): Streak array of element changes. - - Note: Logic - Yield an array where each value represents the streak value - for that bar. - - 1. Computes the difference between consecutive values. - 2. Assigns 1 for each positive change, -1 for each negative - change -1 and 0 for no change. - - Note: Streaks - * Positive: Consecutive bars of value increases - * Negative: Consecutive bars of value decreases - * Zero: When direction of the value change reverses - - Example: - ```py - x = np.array([100, 101, 102, 100, 100, 101, 102, 103]) - result = consecutive_streak(x) - expected = np.array([0, 1, 1, -1, 0, 1, 1, 1]) - np.array_equal(result, expected) - ``` - """ - return concatenate(([0], sign(diff(x)))) - - - -def cube( - src: Series, pwr: IntFloat = None, signal_offset: Int = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Cube Transform - - This transform, by John Ehlers, is used to compress Svalues near zero for - a normalized oscillator like the Inverse Fisher Transform. - - In other words, a Power Transform/Function: ```result = src ^ pwr``` - - Sources: - * [rengel8](https://github.com/rengel8) based on Markus K. - (cryptocoinserver)'s source - * "Cycle Analytics for Traders", 2014, by John Ehlers, page 200 - - Parameters: - src (Series): Source - pwr (float): The transform power. Default: ```3``` - signal_offset (int): Signal offset. Default: ```-1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 2 columns - - Note: - * Values near ```-1``` and ```1``` are nearly unchanged, whereas - values near zero are reduced. - * Input effects of spectral dilation should have been removed - (i.e. roofing filter). - - """ - # Validate - src = v_series(src) - pwr = v_lowerbound(pwr, 3.0, 3.0, strict=False) - signal_offset = v_int(signal_offset, -1, 0) - offset = v_offset(offset) - - # Calculate - result = src ** pwr - ct = Series(result, index=src.index) - ct_signal = Series(result, index=src.index) - - # Offset - if offset != 0: - ct = ct.shift(offset) - ct_signal = ct_signal.shift(offset) - if signal_offset != 0: - ct = ct.shift(signal_offset) - ct_signal = ct_signal.shift(signal_offset) - - if all(isnan(ct)) and all(isnan(ct_signal)): - return # Emergency Break - - # Fill - if "fillna" in kwargs: - ct.fillna(kwargs["fillna"], inplace=True) - ct_signal.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = f"_{pwr}_{signal_offset}" - ct.name = f"CUBE{_props}" - ct_signal.name = f"CUBEs{_props}" - ct.category = ct_signal.category = "transform" - - data = {ct.name: ct, ct_signal.name: ct_signal} - df = DataFrame(data, index=src.index) - df.name = f"CUBE{_props}" - df.category = ct.category - - return df - - - -def erf(x: IntFloat) -> Float: - """Error Function - - Computes the erf(x) - - Sources: - * Handbook of Mathematical Functions, formula 7.1.26. - * [stackoverflow](https://stackoverflow.com/questions/457408/is-there-an-easily-available-implementation-of-erf-for-python) - - Parameters: - x (IntFloat): ```x``` value. - - Returns: - (Float): Error value - """ - x_sign = sign(x) - x = abs(x) - - # constants - a1 = 0.254829592 - a2 = -0.284496736 - a3 = 1.421413741 - a4 = -1.453152027 - a5 = 1.061405429 - p = 0.3275911 - - # A&S formula 7.1.26 - t = 1.0 / (1.0 + p * x) - y = 1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) - * t + a1) * t * exp(-x * x) - return x_sign * y # erf(-x) = -erf(x) - - - -@njit(cache=True) -def fibonacci(n: Int = 2, weighted: bool = False) -> Array: - """Fibonacci - - Computes closed form Fibonacci values. - - Parameters: - n (Int): Number of terms (n >= 2). Default: ```2``` - weighted (bool): Return weighted values. Default: ```False``` - - Returns: - (Array): Numpy array results - """ - n = n if n > 1 else 2 - sqrt5 = sqrt(5.0) - phi, psi = 0.5 * (1.0 + sqrt5), 0.5 * (1.0 - sqrt5) - - result = zeros(n) - for i in range(0, n): - result[i] = float(phi ** (i + 1) - psi ** (i + 1)) / sqrt5 - - if weighted: - return result / result.sum() - return result - - - -def geometric_mean(x: Series) -> Float: - """Geometric Mean - - Computes the Geometric Mean of positive values. - - Parameters: - x (Series): Values - - Returns: - (Float): Geometric Mean - """ - n = x.size - if n < 1: - return x.iloc[0] - - has_zeros = 0 in x.to_numpy() - if has_zeros: - x = x.fillna(0) + 1 - if all(x > 0): - mean = x.prod() ** (1 / n) - return mean if not has_zeros else mean - 1 - return 0 - - - -def hpoly(x: Array, v: IntFloat) -> Float: - """Horner's Polynomial - - Evaluates a polynomial with an array of polynomial coefficients, ```x```, - and a value, ```v```, using Horner's Calculation for Polynomial - Evaluation. - - Parameters: - x (Array): Polynomial coefficients as ```np.array``` - v (IntFloat): Value - - Returns: - (Float): Polynomial value. - - Tip: Performance - Use a ```np.array``` for best performance. - - Example: - ```py - coeffs_0 = [4, -3, 0, 1] # 4x^3 - 3x^2 + 0x + 1 - coeffs_1 = np.array(coeffs_0) # Faster - coeffs_2 = pd.Series(coeffs_0).to_numpy() - x = -6.5 - - hpoly(coeffs_0, x) => -1224.25 - hpoly(coeffs_1, x) or hpoly(coeffs_2, x) => -1224.25 # Faster - ``` - """ - if not isinstance(x, ndarray): - x = array(x) - - m, y = x.size, x[0] - - for i in range(1, m): - y = x[i] + v * y - return y - - - -def ifisher( - x: Series, - amp: IntFloat = None, signal_offset: Int = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Inverse Fisher Transform - - This transform function, by John Ehlers, attempts to create clearer - signals by changing the Probability Distribution Function (pdf) for the - results of known oscillator-indicators. - - Sources: - * [rengel8](https://github.com/rengel8) based on Markus K. - (cryptocoinserver)'s source - * "Cycle Analytics for Traders", 2014, by John Ehlers, page 198 - * [mesasoftware](https://www.mesasoftware.com/papers/TheInverseFisherTransform.pdf) - - Parameters: - x (Series): Normalized to range ```[-1, 1]``` - amp (float): Amplifier. Default: ```1``` - signal_offset (int): Signal line offset. Default: ```-1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 2 columns - - Note: - * Normalized input, ```x```, with range ```[-1, 1]``` - * Data range of ```[-0.5, 0.5]``` would not have a significant impact - - Example: Preparation Examples - Or use _ta.remap()_ function to prep - - (RSI - 50) * 0.1 RSI [0 to 100] -> -5 to 5 - - (RSI - 50) * 0.02 RSI [0 to 100] -> -1 to 1 (use amp of 5 to match input of example above) - """ - # Validate - x = v_series(x) - amp = v_scalar(amp, 1.0) - signal_offset = v_int(signal_offset, -1, 0) - offset = v_offset(offset) - - # Calculate - np_x = x.to_numpy() - is_remapped = logical_and(np_x >= -1, np_x <= 1) - if not all(is_remapped): - _np_max, _np_min = np_max(np_x), np_min(np_x) - x_map = remap(x, - from_min=_np_min, from_max=_np_max, - to_min=-1, to_max=1 - ) - if x_map is None or all(isnan(x_map.to_numpy())): - return # Emergency Break - np_x = x_map.to_numpy() - - amped = exp(amp * np_x) - result = (amped - 1) / (amped + 1) - - inv_fisher = Series(result, index=x.index) - signal = Series(result, index=x.index) - - # Offset - if offset != 0: - inv_fisher = inv_fisher.shift(offset) - signal = signal.shift(offset) - - if signal_offset != 0: - inv_fisher = inv_fisher.shift(offset) - signal = signal.shift(offset) - - # Fill - if "fillna" in kwargs: - inv_fisher.fillna(kwargs["fillna"], inplace=True) - signal.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = f"_{amp}" - inv_fisher.name = f"INVFISHER{_props}" - signal.name = f"INVFISHERs{_props}" - - data = {inv_fisher.name: inv_fisher, signal.name: signal} - df = DataFrame(data, index=x.index) - df.name = f"INVFISHER{_props}" - - return df - - - -def log_geometric_mean(x: Series) -> Float: - """Logarithmic Geometric Mean - - Computes the Logarithmic Geometric Mean of positive values. - - Parameters: - x (Series): Values - - Returns: - (Float): LogGeometric Mean or zero - """ - n = x.size - if n > 1: - x = x.fillna(0) + 1 - if all(x > 0): - return exp(log(x).sum() / n) - 1 - return 0 - - - -def pascals_triangle( - n: Int = None, inverse: bool = False, weighted: bool = False -) -> Array: - """Pascal's Triangle - - The ```n```th row of Pascal's Triangle. - - Parameters: - n (Int): ```n^th``` row of Pascal' Triange - inverse (bool): Return Inverse weighted. - weighted (bool): Return weighted. - - Returns: - (Array): Classical, Weighted, or Inversely - - Example: - ```py - # Classical - pt4 = pascals_triangle(4) - # pt4 = [1, 4, 6, 4, 1] - - # Inverse - invpt4 = pascals_triangle(4, inverse=True) - # invpt4 = [0.9375, 0.75, 0.625, 0.75, 0.9375] - - # Weighted - wpt4 = pascals_triangle(4, weighted=True) - # wpt4 = [0.0625, 0.25, 0.375, 0.25, 0.0625] - ``` - """ - n = int(fabs(n)) if n is not None else 0 - - # Calculation - triangle = array([combination(n=n, r=i) for i in range(0, n + 1)]) - triangle_sum = sum(triangle) - triangle_weights = triangle / triangle_sum - inverse_weights = 1 - triangle_weights - - if weighted and inverse: - return inverse_weights - if weighted: - return triangle_weights - if inverse: - return None - - return triangle - - - -def percent_rank(x: Series, length: int) -> Series: - """Percent Rank - - Percent Rank of values over a specified length. - - Parameters: - x (Series): ```x``` values - length (int): The period. - - Returns: - (Series): Percent Rank values. - - Note: Logic - Yield a Series where the initial part (up to ```length - 1```) is - padded with NaNs, and the rest contains the Percent Rank values. - - 1. Computes the daily percentage returns. - 2. Creates a rolling window of these returns. - 3. Compares each value in the window to the current value (the - last value in each window). - 4. Percent Rank is calculated as the percentage of values in each - window that are less than the current value. - - Example: - ```py - x = Series([100, 80, 75, 123, 140, 80, 70, 40, 100, 120]).to_numpy() - result = percent_rank(x, 3) - expected_result = Series([np.nan, np.nan, np.nan, 66.666667, 66.666667, 0.0, 33.333333, 0.0, 100.0, 66.666667]) - np.allclose(result, expected_result, rtol=1e-6, equal_nan=True) - ``` - """ - np_pctchg = x.pct_change().to_numpy() - - rws = sliding_window_view(np_pctchg, window_shape=(length + 1,)) - comparison_matrix = rws[:, :-1] < rws[:, -1, newaxis] - - prs = 100 * nanmean(comparison_matrix, axis=1) - result = full(len(x), nan) - result[length:] = prs - - # return Series(padded_percent_ranks, index=x.index) - return result - - - -def remap( - x: Series, from_min: IntFloat = None, from_max: IntFloat = None, - to_min: IntFloat = None, to_max: IntFloat = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """remap - - The standard method of transforming from a source range to a target range - using Max-Min. Useful for bounded sources; not unbounded sources - like _ohlcv_ data. - - Sources: - * Linear (Max-Min) Normalization - - Parameters: - x (Series): Series of 'x's - from_min (IntFloat): Input minimum. Default: ```0.0``` - from_max (IntFloat): Input maximum. Default: ```100.0``` - to_min (IntFloat): Output minimum. Default: ```0.0``` - to_max (IntFloat): Output maximum. Default: ```100.0``` - offset (Int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - x = v_series(x) - from_min = v_float(from_min, 0.0, 0.0) - from_max = v_float(from_max, 100.0, 0.0) - to_min = v_float(to_min, -1.0, 0.0) - to_max = v_float(to_max, 1.0, 0.0) - offset = v_offset(offset) - - # Calculate - frange, trange = from_max - from_min, to_max - to_min - if frange <= 0 or trange <= 0: - return - result = to_min + (trange / frange) * (x.to_numpy() - from_min) - result = Series(result, index=x.index) - - # Offset - if offset != 0: - result = result.shift(offset) - - # Fill - if "fillna" in kwargs: - result.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - result.name = f"REMAP_{from_min}_{from_max}_{to_min}_{to_max}" - # result.name = f"{x.name}_{from_min}_{from_max}_{to_min}_{to_max}" # OR - - return result - - - -def strided_window(x: Array, length: Int) -> Array: - """Strided Window - - Creates a strided window view. - - Source: - * [numpy](https://numpy.org/devdocs/reference/generated/numpy.lib.stride_tricks.as_strided.html) - * [Issue #285](https://github.com/twopirllc/pandas-ta/issues/285) - - Parameters: - x (Array): Source - length (Int): Window period. - - Returns: - (Array): Numpy Array of Strided Window Arrays - - Warning: - Use if necessary, otherwise avoid when possible! - """ - from numpy.lib.stride_tricks import as_strided - strides = x.strides + (x.strides[-1],) - shape = x.shape[:-1] + (x.shape[-1] - length + 1, length) - return as_strided(x, shape=shape, strides=strides, writeable=False) - - - -def sum_signed_rolling_deltas( - open_: Series, close: Series, length: Int, exclusive: bool = True -) -> Series: - """Sum of Signed Rolling Series Deltas - - Calculates the sum of signed differences between the current closing bar - and a rolling window of preceding opening bars. This sum is then padded - to match the original series length. - - Parameters: - open_ (Series): ```open``` Series - close (Series): ```close``` Series - length (Int): Window length. Default: ```4``` - exclusive (bool): Exclusive rolling window. Inclusive rolling window - when ```False```. Default: ```True``` - - Returns: - (Series): 1 column - - Notes: Mode - **Exclusive**: Rolling window excludes the current bar in the - lookback period. - - **Inclusive**: Rolling window includes the current bar in the - lookback period. - - Example: - ```py - open_ = Series([95, 83, 71, 132, 129, 145, 133, 101, 68, 96]) - close = Series([100, 110, 140, 80, 90, 60, 50, 40, 90, 110]) - - result = sum_signed_rolling_deltas(close, open_, 4, exclusive=True) - expected_result = Series([np.nan, np.nan, np.nan, np.nan, 0.0, -4.0, -4.0, -4.0, -4.0, 0.0]) - np.allclose(result, expected_result, rtol=1e-6, equal_nan=True) - - result = sum_signed_rolling_deltas(close, open_, 4, exclusive=False) - expected_result = Series([np.nan, np.nan, np.nan, -1.0, 1.0, -3.0, -3.0, -3.0, -3.0, 1.0]) - np.allclose(result, expected_result, rtol=1e-6, equal_nan=True) - ``` - """ - length = v_pos_default(length, 4) - if not exclusive: - length -= 1 - - rolling_open = sliding_window_view(open_, window_shape=length)[:-1] - - close_broadcasted = broadcast_to( - close[length:].to_numpy()[:, newaxis], rolling_open.shape - ) - - signed_deltas = sign(close_broadcasted - rolling_open) - sum_signed_deltas = nansum(signed_deltas, axis=1).astype(float) - - return Series( - pad(sum_signed_deltas, (length, 0), mode="constant", constant_values=nan), - index=close.index, - ) - - -def symmetric_triangle( - n: Int = None, weighted: bool = False -) -> List[IntFloat]: - """Symmetric Triangle - - Creates a Symmetric Triangle of given length. - - Parameters: - n (Int): Array return size - weighted (bool): Return weighted. - - Returns: - (List[IntFloat]): List of Symmetric Triangle values. - - Example: - ```py - # Default - symt4 = ta.symmetric_triangle(4) - # symt4 = [1, 2, 2, 1] - - # Weighted - wsymt4 = ta.symmetric_triangle(4, weighted=True) - # wsymt4 = [0.16666667 0.33333333 0.33333333 0.16666667] - ``` - """ - n = int(fabs(n)) if n is not None else 2 - - triangle = None - if n == 2: - triangle = [1, 1] - - if n > 2: - if n % 2 == 0: - front = [i + 1 for i in range(0, mfloor(n / 2))] - triangle = front + front[::-1] - else: - front = [i + 1 for i in range(0, mfloor(0.5 * (n + 1)))] - triangle = front.copy() - front.pop() - triangle += front[::-1] - - if weighted and isinstance(triangle, list): - return triangle / sum(triangle) - - return triangle - - - -def weights(w: Array) -> Callable: - """Weights - - Prepares weights for the dot product - - Parameters: - w (Array): Input - - Returns: - (Callable): Weights function for dot product. - """ - def _dot(x): - return dot(w, x) - return _dot - - - -def zero(x: IntFloat) -> IntFloat: - """Zero - - Zeros inputs near zero. - - Parameters: - x (IntFloat): Value to attempt to zero - - Returns: - (IntFloat): ```0``` or ```x``` - """ - return 0 if abs(x) < sflt.epsilon else x - - - -# TESTING - - - -def df_error_analysis( - A: DataFrame, B: DataFrame, - plot: bool = False, triangular: bool = False, - method: str = "pearson", -) -> DataFrame: - """DataFrame Correlation Analysis - - Compares two DataFrames using both their difference and their correlations. - - Parameters: - A (DataFrame): DataFrame A - B (DataFrame): DataFrame B - plot (bool): Create a KDE plot of differences. Default: ```False``` - triangular (bool): Return a Triangular Correlation DataFrame. - Default: ```False``` - method (str): Correlation methods: ```"pearson"```, ```"kendall"```, - or ```"spearman"```. Default: ```"pearson"``` - - Returns: - (DataFrame): Correlation DataFrame or a KDE Difference plot - """ - _r_method = ["pearson", "kendall", "spearman"] - corr_method = method if method in _r_method else _r_method[0] - - # Find their differences and correlation - diff = A - B - result = A.corr(B, method=corr_method) - - # For plotting - if plot: - diff.hist() - if diff[diff > 0].any(): - diff.plot(kind="kde") - - if triangular: - return result.where(triu(ones(result.shape)).astype(bool)) - - return result diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/utils/_numba.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/utils/_numba.py deleted file mode 100644 index 9c0b25db..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/utils/_numba.py +++ /dev/null @@ -1,140 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import ( - append, - array, - empty_like, - finfo, - float64, - int64, - isnan, - nan, - roll, - zeros_like -) -from numba import njit -from pandas_ta._typing import Array, Int, IntFloat - -__all__ = [ - "nb_ffill", - "nb_idiff", - "nb_nonzero_range", - "nb_prenan", - "nb_prepend", - "nb_rolling", - "nb_shift", -] - - - -# Numba version of ffill() -@njit(cache=True) -def nb_ffill(x): - mask = isnan(x) - idx = zeros_like(mask, dtype=int64) - last_valid_idx = -1 - - m = mask.size - for i in range(m): - if not mask[i]: - last_valid_idx = i - idx[i] = last_valid_idx - return x[idx] - - -# Indexwise element difference by k indices of array x. -# Similar to Pandas Series/DataFrame diff() -@njit(cache=True) -def nb_idiff(x, k): - n, k = x.size, int(k) - result = zeros_like(x, dtype=float64) - - for i in range(k, n): - result[i] = x[i] - x[i - k] - result[:k] = nan - - return result - - -# Returns the difference of two series and adds epsilon to any zero values. -# This occurs commonly in crypto data when 'high' = 'low'.""" -@njit(cache=True) -def nb_nonzero_range(x, y): - diff = x - y - if diff.any() == 0: - diff += finfo(float64).eps - return diff - - -# Prepend n values, typically np.nan, to array x. -@njit(cache=True) -def nb_prenan(x, n, value = nan): - if n > 0: - x[:n - 1] = value - return x - return x - - -# Prepend n values, typically np.nan, to array x. -@njit(cache=True) -def nb_prepend(x, n, value = nan): - return append(array([value] * n), x) - -# Prepend n values, typically np.nan, to array x. -# @njit(cache=True) -# def nb_prepend2(x, n, value = nan): - # return concatenate(array([value] * n), x) - - -# Like Pandas Rolling Window. x.rolling(n).fn() -@njit(cache=True) -def nb_rolling(x, n, fn = None): - if fn is None: - return x - m = x.size - result = zeros_like(x, dtype=float) - if n <= 0: - return result # TODO: Handle negative rolling windows - - for i in range(0, m): - result[i] = fn(x[i:n + i]) - result = roll(result, n - 1) - result[:n - 1] = nan - return result - - -# np shift -# shift5 - preallocate empty array and assign slice by chrisaycock -# https://stackoverflow.com/questions/30399534/shift-elements-in-a-numpy-array -@njit(cache=True) -def nb_shift(x, n, value = nan): - result = empty_like(x) - if n > 0: - result[:n] = value - result[n:] = x[:-n] - elif n < 0: - result[n:] = value - result[:n] = x[-n:] - else: - result[:] = x - return result - - -# Uncategorized -# @njit(cache=True) -# def nb_roofing_filter(x: Array, n: Int, k: Int, pi: Float, sqrt2: Float): -# """Ehlers's Roofing Filter (INCOMPLETE) -# http://traders.com/documentation/feedbk_docs/2014/01/traderstips.html""" -# m, hp = x.size, np.copy(x) -# # a = exp(-pi * sqrt(2) / n) -# # b = 2 * a * cos(180 * sqrt(2) / n) -# rsqrt2 = 1 / np.sqrt2 -# a = (np.cos(rsqrt2 * 360 / n) + np.sin(rsqrt2 * 360 / n) - 1) -# a /= np.cos(rsqrt2 * 360 / n) -# b, c = 1 - a, (1 - a / 2) - -# for i in range(2, m): -# hp = c * c * (x[i] - 2 * x[i - 1] + x[i - 2]) \ -# + 2 * b * hp[i - 1] - b * b * hp[i - 2] - -# result = nb_ssf(hp, k, pi, rsqrt2) -# return result diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/utils/_signals.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/utils/_signals.py deleted file mode 100644 index c964d1d2..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/utils/_signals.py +++ /dev/null @@ -1,623 +0,0 @@ -# -*- coding: utf-8 -*- -from functools import partial - -from numpy import nan -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.utils._math import zero -from pandas_ta.utils._validate import ( - v_bool, - v_drift, - v_float, - v_int, - v_offset, - v_series -) - - - -__all__ = [ - "above", - "above_value", - "below", - "below_value", - "cross", - "cross_value", - "signals", - "tsignals", - "xsignals" -] - - - -def above( - x: Series, y: Series, asint: bool = True, offset: Int = None, **kwargs -) -> Series: - """Above - - Determines if each ```x``` value is above (or ```>=```) each ```y``` value. - - Parameters: - x (Series): ```x``` - y (Series): ```y``` - asint (bool): Returns as ```Int```. - offset (Int): Post shift. Default: ```0``` - - Returns: - (Series): State where ```x >= y```. - - Example: - ```py - x = Series([4, 2, 0, -1, 1]) - y = Series([1, 1, 1, 1, 1]) - - x_above_y = ta.above(x, y) - # x_above_y = Series([1, 1, 0, 0, 1]) - ``` - """ - return partial(_above_below, above=True)(x, y, asint=asint, offset=offset, **kwargs) - - -def above_value( - x: Series, value: IntFloat, asint: bool = True, - offset: Int = None, **kwargs -) -> Series: - """Above Value - - Determines if each ```x``` value is above (or ```>=```) a - constant ```value```. - - Parameters: - x (Series): ```x``` - value (IntFloat): Value to compare with ```x```. - asint (bool): Returns as ```Int```. - - Returns: - (Series): State where ```x >= y```. - - Example: - ```py - x = Series([4, 2, 0, -1, 1]) - x_above_1 = ta.above_value(x, 1) - # x_above_1 = Series([1, 1, 0, 0, 1]) - ``` - """ - if not isinstance(value, (int, float)): - print("[X] value is not a number") - return - y = Series(value, index=x.index, name=f"{value}".replace(".", "_")) - return partial(_above_below, above=True)(x, y, asint=asint, offset=offset, **kwargs) - - -def below( - x: Series, y: Series, asint: bool = True, offset: Int = None, **kwargs -) -> Series: - """Below - - Determines if each ```x``` value is below (or ```<=```) each ```y``` value. - - Parameters: - x (Series): ```x``` - y (Series): ```y``` - asint (bool): Returns as ```Int```. - offset (Int): Post shift. Default: ```0``` - - Returns: - (Series): State where ```x <= y```. - - Example: - ```py - x = Series([4, 2, 0, -1, 1]) - y = Series([1, 1, 1, 1, 1]) - - x_below_y = ta.below(x, y) - # x_below_y = Series([0, 0, 1, 1, 1]) - ``` - """ - return partial(_above_below, above=False)(x, y, asint=asint, offset=offset, **kwargs) - - -def below_value( - x: Series, value: IntFloat, asint: bool = True, - offset: Int = None, **kwargs -) -> Series: - """Below Value - - Determines if each ```x``` value is below (or ```<=```) a - constant ```value```. - - Parameters: - x (Series): ```x``` - value (IntFloat): Value to compare with ```x```. - asint (bool): Returns as ```Int```. - offset (Int): Post shift. Default: ```0``` - - Returns: - (Series): State where ```x <= y```. - - Example: - ```py - x = Series([4, 2, 0, -1, 1]) - x_below_1 = ta.below_value(x, 1) - # x_below_1 = Series([0, 0, 1, 1, 1]) - ``` - """ - if not isinstance(value, (int, float)): - print("[X] value is not a number") - return - y = Series(value, index=x.index, name=f"{value}".replace(".", "_")) - return partial(_above_below, above=False)(x, y, asint=asint, offset=offset, **kwargs) - - -def cross( - x: Series, y: Series, - above: bool = True, equal: bool = True, - asint: bool = True, offset: Int = None, - **kwargs: DictLike -) -> Series: - """Cross - - Determines where ```x``` crosses ```y```, either _above_ or _below_, - strictly (_equal_) or not. - - Parameters: - x (Series): ```x``` - y (Series): ```y``` - above (bool): Check above. Check below, set ```above=False``` - equal (bool): At least/most, ```=```, check. - asint (bool): Returns as ```Int```. - offset (Int): Post shift. Default: ```0``` - - Returns: - (Series): Values where ```x``` crosses ```y```. - - Example: - ```py - x = Series([4, 2, 0, -1, 1]) - y = Series([1, 1, 1, 1, 1]) - - # Cross Above Examples - x_xae_y = ta.cross(x, y, above=True, equal=True) - # x_xae_y = Series([0, 0, 0, 0, 1]) - - x_xa_y = ta.cross(x, y, above=True, equal=False) - # x_xa_y = Series([0, 0, 0, 0, 0]) - - # Cross Below Examples - x_xbe_y = ta.cross(x, y, above=False, equal=True) - # x_xbe_y = Series([0, 0, 1, 0, 1]) - - x_xb_y = ta.cross(x, y, above=False, equal=False) - # x_xb_y = Series([0, 0, 1, 0, 0]) - ``` - """ - # Validate - x = v_series(x) - y = v_series(y) - offset = v_offset(offset) - - x.apply(zero) - y.apply(zero) - - # Calculate - if above: - current = x >= y if equal else x > y - previous = x.shift(1) < y.shift(1) - else: - current = x <= y if equal else x < y - previous = x.shift(1) > y.shift(1) - - cross = current & previous - # ensure there is no cross on the first entry - cross.iloc[0] = False - - if asint: - cross = cross.astype(int) - - # Offset - if offset != 0: - cross = cross.shift(offset) - - # Name and Category - cross.name = f"{x.name}_{'XA' if above else 'XB'}_{y.name}" - cross.category = "signal" - - return cross - - -def cross_value( - x: Series, value: IntFloat, - above: bool = True, equal: bool = True, - asint: bool = True, offset: Int = None, - **kwargs -) -> Series: - """Cross Value - - Determines where ```x``` crosses a constant ```value```, either _above_ - or _below_, strictly (_equal_) or not. - - Parameters: - x (Series): ```x``` - value (IntFloat): Value to compare with ```x```. - above (bool): Check above. Check below, set ```above=False``` - equal (bool): At least/most, ```=```, check. - asint (bool): Returns as ```Int```. - offset (Int): Post shift. Default: ```0``` - - Returns: - (Series): Values where ```x``` crosses ```y```. - - Example: - ```py - x = Series([4, 2, 0, -1, 1]) - - # Cross Above Examples - x_xae_y = ta.cross_value(x, 1, above=True, equal=True) - # x_xae_y = Series([0, 0, 0, 0, 1]) - - x_xa_y = ta.cross_value(x, 1, above=True, equal=False) - # x_xa_y = Series([0, 0, 0, 0, 0]) - - # Cross Below Examples - x_xbe_y = ta.cross_value(x, 1, above=False, equal=True) - # x_xbe_y = Series([0, 0, 1, 0, 1]) - - x_xb_y = ta.cross_value(x, 1, above=False, equal=False) - # x_xb_y = Series([0, 0, 1, 0, 0]) - ``` - """ - y = Series(value, index=x.index, name=f"{value}".replace(".", "_")) - return cross(x, y, above, equal, asint, offset, **kwargs) - - - -def signals( - indicator: Series, xa: IntFloat = None, xb: IntFloat = None, - cross_values: bool = None, xseries: Series = None, - xseries_a: Series = None, xseries_b: Series = None, - cross_series: bool = None, offset: Int = None -) -> DataFrame: - """Signals - - Mulitfuncational signal checker that determines whether an - indicator crosses above/below value or Series. - - Parameters: - indicator (Series): Indicator to check for signal crossings. - cross_values (bool): Check if crossed value. - xseries (Series): Cross Series - xseries_a (Series): Cross Above Series - xseries_b (Series): Cross Below Series - cross_series (bool): Check if crossed ```xseries```. - - Other Parameters: - xa (IntFloat): Crossing above value. - xb (IntFloat): Crossing below value. - offset (Int): Post shift. Default: ```0``` - - Returns: - (DataFrame): 2 columns - - Note: - See sources of: ```er```, ```macd```, ```rsi```, and ```rsx``` - for examples of use. - """ - df = DataFrame() - - if xa is not None and isinstance(xa, (int, float)): - if cross_values: - xa_start = cross_value(indicator, xa, above=True, offset=offset) - xa_end = cross_value(indicator, xa, above=False, offset=offset) - - df[xa_start.name] = xa_start - df[xa_end.name] = xa_end - else: - xd_above = above_value(indicator, xa, offset=offset) - df[xd_above.name] = xd_above - - if xb is not None and isinstance(xb, (int, float)): - if cross_values: - xb_start = cross_value(indicator, xb, above=True, offset=offset) - xb_end = cross_value(indicator, xb, above=False, offset=offset) - - df[xb_start.name] = xb_start - df[xb_end.name] = xb_end - else: - xd_below = below_value(indicator, xb, offset=offset) - df[xd_below.name] = xd_below - - # xseries is the default value for both xseries_a and xseries_b - if xseries_a is None: - xseries_a = xseries - if xseries_b is None: - xseries_b = xseries - - if xseries_a is not None and v_series(xseries_a): - if cross_series: - xsa = cross(indicator, xseries_a, above=True, offset=offset) - else: - xsa = above(indicator, xseries_a, offset=offset) - - df[xsa.name] = xsa - - if xseries_b is not None and v_series(xseries_b): - if cross_series: - xsb = cross(indicator, xseries_b, above=False, offset=offset) - else: - xsb = below(indicator, xseries_b, offset=offset) - - df[xsb.name] = xsb - - return df - - -def _above_below( - x: Series, y: Series, - above: bool = True, asint: bool = True, - offset: Int = None, **kwargs -) -> Series: - """Above / Below - - Determines if ```x``` is above or below ```y```. - - Parameters: - x (Series): ```x``` - y (Series): ```y``` - above (bool): Above check. Below: ```above=False``` - equal (bool): At least/most, ```=```, check. - asint (bool): Returns as ```Int```. - offset (Int): Post shift. Default: ```0``` - - Returns: - (Series): Values where ```x``` values are above/below ```y``` values. - """ - # Verify - x = v_series(x) - y = v_series(y) - offset = v_offset(offset) - - x.apply(zero) - y.apply(zero) - - # Calculate - if above: - current = x >= y - else: - current = x <= y - - if asint: - current = current.astype(int) - - # Offset - if offset != 0: - current = current.shift(offset) - - # Name and Category - current.name = f"{x.name}_{'A' if above else 'B'}_{y.name}" - current.category = "signal" - - return current - - - -def tsignals( - trend: Series, asbool: bool = None, - trade_offset: Int = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Trend Signals - - This function creates Trend, Trades, Entries and Exit values per bar when - given a trend condition e.g. ```trend = close > sma(close, 50)```. - - Source: - * Kevin Johnson - - Parameters: - trend (Series): ```trend``` Series. Boolean or integer values of - ```0``` and ```1``` - asbool (bool): Return booleans. Default: ```False``` - trade_offset (value): Shift trade entries/exits with live: ```0``` and - backesting: ```1```. Default: ```0``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 4 columns - - Note: Column Detail - * Trends (trend: 1, no trend: 0) - * Trades (Enter: 1, Exit: -1, Otherwise: 0) - * Entries (entry: 1, nothing: 0) - * Exits (exit: 1, nothing: 0) - - Note: Details - A ```trend``` is a state or condition, that is as simple - as ```Close > MA``` or something more complex that has boolean - or integer (trend: 1, no trend: 0) values. - - Tip: VectorBT - * For backtesting, set ```trade_offset=1```. - * Setting ```asbool=True``` is useful for backtesting with vectorbt's - ```Portfolio.from_signal(close, entries, exits)``` method. - - Example: - These are two different outcomes for each (long/short) position and - depends on the source and it's behavior. - - Signals when ```Close > SMA50(Close)``` - - ta.tsignals(close > ta.sma(close, 50), asbool=False) - - Signals when ```EMA(Close, 8) > EMA(Close, 21)``` - - ta.tsignals(ta.ema(close, 8) > ta.ema(close, 21), asbool=True) - - Warning: - Check ALL outcomes BEFORE making an Issue - """ - # Validate - trend = v_series(trend) - if trend is None: - return - - asbool = v_bool(asbool, False) - trade_offset = v_int(trade_offset, 0) - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - trends = trend.astype(int) - trades = trends.diff(drift).shift(trade_offset).fillna(0).astype(int) - entries = (trades > 0).astype(int) - exits = (trades < 0).abs().astype(int) - - if asbool: - trends = trends.astype(bool) - entries = entries.astype(bool) - exits = exits.astype(bool) - - data = { - f"TS_Trends": trends, - f"TS_Trades": trades, - f"TS_Entries": entries, - f"TS_Exits": exits, - } - df = DataFrame(data, index=trends.index) - - # Offset - if offset != 0: - df = df.shift(offset) - - # Fill - if "fillna" in kwargs: - df.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - df.name = f"TS" - df.category = "trend" - - return df - - - -def xsignals( - source: Series, - xa: IntFloat | Series, - xb: IntFloat | Series, - above: bool = True, long: bool = True, - asbool: bool = None, trade_offset: Int = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Cross Signals - - This function creates Trend, Trades, Entries and Exits values per bar - for crossing events. - - Sources: - * Kevin Johnson - - Parameters: - source (Series): ```source``` Signal - xa (Series): Series the Signal crosses above if ```above=True``` - xb (Series): Series the Signal crosses below if ```above=True``` - above (bool): The ```source``` crossing; below is ```False```. - Default: ```True``` - long (bool): The ```source``` position; short is ```False```. - Default: ```True``` - offset (int): Post shift. Default: ```0``` - asbool (bool): Return booleans. Default: ```False``` - trade_offset (value): Shift trade entries/exits with live: ```0``` and - backesting: ```1```. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 4 columns - - Note: Column Detail - * Trends (trend: 1, no trend: 0) - * Trades (Enter: 1, Exit: -1, Otherwise: 0) - * Entries (entry: 1, nothing: 0) - * Exits (exit: 1, nothing: 0) - - Tip: VectorBT - * For backtesting, set ```trade_offset=1```. - * Setting ```asbool=True``` is useful for backtesting with vectorbt's - ```Portfolio.from_signal(close, entries, exits)``` method. - - Example: - These are two different outcomes for each (long/short) position and - depends on the source and it's behavior. - - rsi = df.ta.rsi() - - When RSI crosses above 20 and then below 80 in a long position: - - ta.xsignals(source=rsi, xa=20, xb=80, above=True, long=True) - # Simpler - # ta.xsignals(rsi, 20, 80, True, True) - - When RSI crosses below 20 and then above 80 in a long position: - - ta.xsignals(source=rsi, xa=20, xb=80, above=False, long=True) - # Simpler - # ta.xsignals(rsi, 20, 80, False, True) - - * Similarly, short positions (```long=False```) also differ depending - on ```above``` state. - - Warning: - Check ALL parameter combination outcomes BEFORE making an Issue. - """ - # Validate - source = v_series(source) - if source is None: - return - - offset = v_offset(offset) - - # Calculate - if above: - entries = cross_value(source, xa) - exits = -cross_value(source, xb, above=False) - else: - entries = cross_value(source, xa, above=False) - exits = -cross_value(source, xb) - trades = entries + exits - - # Modify trades to fill gaps for trends - trades.replace({0: nan}, inplace=True) - trades.ffill(limit_area="inside", inplace=True) # or trades.bfill(limit_area="inside", inplace=True) - trades.fillna(0, inplace=True) - - trends = (trades > 0).astype(int) - if not long: - trends = 1 - trends - - tskwargs = { - "asbool": asbool, - "trade_offset": trade_offset, - "offset": offset - } - df = tsignals(trends, **tskwargs) - - # Offset handled by tsignals - DataFrame({ - f"XS_LONG": df.TS_Trends, - f"XS_SHORT": 1 - df.TS_Trends - }) - - # Fill - if "fillna" in kwargs: - df.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - df.name = f"XS" - df.category = "trend" - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/utils/_study.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/utils/_study.py deleted file mode 100644 index 16d01e6c..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/utils/_study.py +++ /dev/null @@ -1,144 +0,0 @@ -# -*- coding: utf-8 -*- -from multiprocessing import cpu_count -from dataclasses import dataclass, field - -from pandas_ta._typing import Int, List -from pandas_ta.utils._time import get_time - -__all__ = [ - "Study", - "AllStudy", - "CommonStudy" -] - - - -# Study DataClass -@dataclass -class Study: - """Study DataClass - Class to name and group indicators for processing. - - Parameters: - name (str): Name. - ta (list of dicts): i.e [{"kind": "ema", "length", 50}] - cores (int): The number cores to use for multiprocessing. - Default: ```cpu_count()``` - description (str): Description of what the Study. Default: ```""``` - created (str): DateTime String at creation. - Default: Automatically generated. - - Returns: - (DataClass): The Study to be processed by ```df.ta.study()``` - - Example: All or Common Study - Run - ```py - # Run "All" - df.ta.study(ta.AllStudy, **kwargs) - - # Run "Common" - df.ta.study(ta.CommonStudy, **kwargs) - ``` - - Example: Custom Study - Create - ```py - DemoStudy = ta.Study( - name="Demo Study", - description="Example Study Group", - cores=0, # Usually faster than multiprocessing - ta = [ - {"kind": "sma", "length": 200}, - {"kind": "sma", "close": "volume", "length": 50}, - {"kind": "bbands", "length": 20}, - {"kind": "rsi"}, - {"kind": "macd", "fast": 8, "slow": 21}, - {"kind": "sma", "close": "volume", "length": 20, "prefix": "VOLUME"} - ] - ``` - - Run - ```py - df.ta.study(DemoStudy, **kwargs) - ``` - - Note: - * See [also](../getting-started/usage.md) the Pandas TA - "Study" Examples - * Case-insensitive "All" is reserved. - - Warning: Multiprocessing - **Not recommended** for: - - * Small sets of indicators - * Indicator chains - """ - name: str - ta: List = field(default_factory=list) - cores: Int = cpu_count() - description: str = "" - created: str = get_time(to_string=True) - - - def __post_init__(self): - if isinstance(self.cores, int) and self.cores >= 0 and self.cores <= cpu_count(): - self.cores = int(self.cores) - - req_args = ["[X] Study requires the following argument(s):"] - - if self._is_name(): - req_args.append( - ' - name. Must be a string. Example: "My TA". Note: "all" is reserved.') - - if self.ta is None: - self.ta = None - elif not self._is_ta(): - s = " - ta. Format is a list of dicts. Example: [{'kind': 'sma', 'length': 10}]" - s += "\n Check the indicator for the correct arguments if you receive this error." - req_args.append(s) - - if len(req_args) > 1: - [print(_) for _ in req_args] - return None - - - def _is_name(self): - return self.name is None or not isinstance(self.name, str) - - - def _is_ta(self): - if isinstance(self.ta, list) and self.total_ta() > 0: - # Check that all elements of the list are dicts. - # Does not check if the dicts values are valid indicator kwargs - # User must check indicator documentation for all indicators args. - return all([isinstance(_, dict) and len(_.keys()) > 0 for _ in self.ta]) - - return False - - - def total_ta(self): - return len(self.ta) if self.ta is not None else 0 - - - -# All Study -AllStudy = Study( - name="All", - description="All the indicators with their default settings. Pandas TA default.", - ta=None, -) - -# Default (Example) Study. -CommonStudy = Study( - name="Common Price and Volume SMAs", - description="Common Price SMAs: 10, 20, 50, 200 and Volume SMA: 20.", - cores=0, - ta=[ - {"kind": "sma", "length": 10}, - {"kind": "sma", "length": 20}, - {"kind": "sma", "length": 50}, - {"kind": "sma", "length": 200}, - {"kind": "sma", "close": "volume", "length": 20, "prefix": "VOL"} - ] -) diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/utils/_time.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/utils/_time.py deleted file mode 100644 index bff01f05..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/utils/_time.py +++ /dev/null @@ -1,152 +0,0 @@ -# -*- coding: utf-8 -*- -from datetime import datetime -from time import localtime, perf_counter - -from pandas import DataFrame, Series, Timestamp, to_datetime -from pandas_ta._typing import Float, MaybeSeriesFrame, Optional, Tuple -from pandas_ta.maps import EXCHANGE_TZ - -__all__ = [ - "df_dates", - "df_month_to_date", - "df_quarter_to_date", - "df_year_to_date", - "final_time", - "get_time", - "mtd", - "qtd", - "to_utc", - "total_time", - "unix_convert", - "ytd", -] - - - -def df_dates( - df: DataFrame, dates: Tuple[str, list] = None -) -> MaybeSeriesFrame: - """Yields the DataFrame with the given dates""" - if dates is None: - return None - if not isinstance(dates, list): - dates = [dates] - return df[df.index.isin(dates)] - - -def df_month_to_date(df: DataFrame) -> DataFrame: - """Yields the Month-to-Date (MTD) DataFrame""" - in_mtd = df.index >= Timestamp.now().strftime("%Y-%m-01") - if any(in_mtd): - return df[in_mtd] - return df - - -def df_quarter_to_date(df: DataFrame) -> DataFrame: - """Yields the Quarter-to-Date (QTD) DataFrame""" - now = Timestamp.now() - for m in [1, 4, 7, 10]: - if now.month <= m: - in_qtr = df.index >= datetime(now.year, m, 1).strftime("%Y-%m-01") - if any(in_qtr): - return df[in_qtr] - return df[df.index >= now.strftime("%Y-%m-01")] - - -def df_year_to_date(df: DataFrame) -> DataFrame: - """Yields the Year-to-Date (YTD) DataFrame""" - in_ytd = df.index >= Timestamp.now().strftime("%Y-01-01") - if any(in_ytd): - return df[in_ytd] - return df - - -def final_time(stime: Float) -> str: - """Human readable elapsed time. Calculates the final time elapsed since - stime and returns a string with microseconds and seconds.""" - time_diff = perf_counter() - stime - return f"{time_diff * 1000:2.4f} ms ({time_diff:2.4f} s)" - - -def get_time( - exchange: str = "NYSE", full: bool = True, to_string: bool = False -) -> Optional[str]: - """Returns Current Time, Day of the Year and Percentage, and the current - time of the selected Exchange.""" - tz = EXCHANGE_TZ["NYSE"] # Default is NYSE (Eastern Time Zone) - if isinstance(exchange, str): - exchange = exchange.upper() - tz = EXCHANGE_TZ[exchange] - - # today = Timestamp.utcnow() - today = Timestamp.now() - date = f"{today.day_name()} {today.month_name()} {today.day}, {today.year}" - - _today = today.timetuple() - exchange_time = f"{(_today.tm_hour + tz) % 24}:{_today.tm_min:02d}:{_today.tm_sec:02d}" - - if full: - lt = localtime() - local_ = f"Local: {lt.tm_hour}:{lt.tm_min:02d}:{lt.tm_sec:02d} {lt.tm_zone}" - doy = f"Day {today.dayofyear}/365 ({100 * round(today.dayofyear/365, 2):.2f}%)" - exchange_ = f"{exchange}: {exchange_time}" - - s = f"{date}, {exchange_}, {local_}, {doy}" - else: - s = f"{date}, {exchange}: {exchange_time}" - - return s if to_string else print(s) - - -def total_time(df: DataFrame, tf: str = "years") -> Float: - """Calculates the total time of a DataFrame. Difference of the Last and - First index. Options: 'months', 'weeks', 'days', 'hours', 'minutes' - and 'seconds'. Default: 'years'. - Useful for annualization.""" - time_diff = df.index[-1] - df.index[0] - TimeFrame = { - "years": time_diff.days / 365.242199074074074, # PR 602 - "months": time_diff.days / 30.417, - "weeks": time_diff.days / 7, - "days": time_diff.days, - "hours": time_diff.days * 24, - "minutes": time_diff.total_seconds() / 60, - "seconds": time_diff.total_seconds() - } - - if isinstance(tf, str) and tf in TimeFrame.keys(): - return TimeFrame[tf] - return TimeFrame["years"] - - -def to_utc(df: DataFrame) -> DataFrame: - """Either localizes the DataFrame Index to UTC or it applies tz_convert to - set the Index to UTC. - """ - if not df.empty: - try: - df.index = df.index.tz_localize("UTC") - except TypeError: - df.index = df.index.tz_convert("UTC") - return df - - -def unix_convert(s: int | Series) -> datetime | str: - """unix_convert - - Convert timestamps from Polygon to readable datetime strings. - - Parameters: - s (int | Series): The timestamp(s). An integer posix timestamp - or a Series of timestamps. - - Returns: - (datetime | str): Converted datetime - """ - return to_datetime(s, unit="ms") - - -# Aliases -mtd = df_month_to_date -qtd = df_quarter_to_date -ytd = df_year_to_date diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/utils/_validate.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/utils/_validate.py deleted file mode 100644 index 6a05bf78..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/utils/_validate.py +++ /dev/null @@ -1,202 +0,0 @@ -# -*- coding: utf-8 -*- -from functools import partial -from numpy import ndarray, zeros -from pandas import DataFrame, Series, isnull -from pandas.api.types import is_datetime64_any_dtype -from pandas_ta._typing import ( - Array, - Float, - Int, - IntFloat, - List, - MaybeSeriesFrame, - Optional, - SeriesFrame, - np_floating, - np_integer -) - -__all__ = [ - "v_array", - "v_ascending", - "v_bool", - "v_dataframe", - "v_datetime_ordered", - "v_drift", - "v_float", - "v_int", - "v_list", - "v_lowerbound", - "v_mamode", - "v_null", - "v_offset", - "v_percent", - "v_pos_default", - "v_scalar", - "v_series", - "v_str", - "v_talib", - "v_tradingview", - "v_upperbound" -] - - -def v_array(var: Array, default: Array = zeros(0)) -> Array: - """Returns zeros(0) if not a valid Array""" - if isinstance(var, ndarray) and var.size > 0: - return var - return default - - -def v_ascending(var: bool) -> bool: - """Returns True by default""" - return partial(v_bool, default=True)(var=var) - - -def v_bool(var: bool, default: bool = True) -> bool: - """Returns default=True if var is not a bool.""" - if isinstance(var, bool): - return bool(var) - return default - - -def v_dataframe(df: MaybeSeriesFrame) -> None: - """Returns None if df is not a DataFrame.""" - if isinstance(df, DataFrame) and df.size > 0: - return df - return None - - - -def v_datetime_ordered(df: SeriesFrame) -> bool: - if df.shape[0] < 2: - return False - if is_datetime64_any_dtype(df.index): - np_dt_index = df.index.to_numpy() - if np_dt_index[0] < np_dt_index[-1]: - return True - return False - - -def v_drift(var: Int) -> Int: - """Defaults to 1""" - return partial(v_int, default=1, ne=0)(var=var) - - -def v_float( - var: IntFloat, default: IntFloat, ne: Optional[IntFloat] = 0.0 -) -> Float: - """Returns the default if var is not equal to the ne value.""" - _types = (float, int, np_floating, np_integer) - if isinstance(ne, _types) and isinstance(var, _types): - if float(var) != float(ne): - return float(var) - return float(default) - - -def v_int(var: Int, default: Int, ne: Optional[Int] = 0) -> Int: - """Returns the default if var is not equal to the ne value.""" - if isinstance(var, int) and int(var) != int(ne): - return int(var) - if isinstance(var, np_integer) and var.item() != int(ne): - return var.item() - return int(default) - - -def v_list(var: List, default: List = []) -> List: - """Returns [] if not a valid list""" - if isinstance(var, list) and len(var) > 0: - return var - return default - - -def v_lowerbound( - var: IntFloat, bound: IntFloat = 0, - default: IntFloat = 0, strict: bool = True, complement: bool = False -) -> IntFloat: - """Returns the default if var(iable) not greater(equal) than bound.""" - var_type = None - if isinstance(var, (float, np_floating)): var_type = float - if isinstance(var, (int, np_integer)): var_type = int - - if var_type is None: - return default - - valid = False - if strict: - valid = var_type(var) > var_type(bound) - else: - valid = var_type(var) >= var_type(bound) - - if complement: valid = not valid - - if valid: - return var_type(var) - return default - - -def v_mamode(var: str, default: str) -> str: # Could be an alias. - return v_str(var, default) - - -def v_null(var: IntFloat, default: IntFloat) -> IntFloat: - """Returns the var if not null else returns the default""" - return default if isnull(var) else var - - -def v_offset(var: Int) -> Int: - """Defaults to 0""" - return partial(v_int, default=0, ne=0)(var=var) - - -def v_percent(x: IntFloat) -> bool: - if isinstance(x, (float, int, np_floating, np_integer)): - return x is not None and 0 <= x <= 100 - return False - - -def v_pos_default( - var: IntFloat, default: IntFloat = 0, strict: bool = True, complement: bool = False -) -> IntFloat: - return partial(v_lowerbound, bound=0) \ - (var=var, default=default, strict=strict, complement=complement) - - -def v_scalar(var: IntFloat, default: Optional[IntFloat] = 1) -> Float: - """Returns the default if var is not an IntFloat.""" - if isinstance(var, (float, int, np_floating, np_integer)): - return float(var) - return float(default) - - -def v_series(series: Series, length: Optional[IntFloat] = 0) -> Optional[Series]: - """Returns None if the series does not meet the required minimum length.""" - if series is not None and isinstance(series, Series): - if series.size >= v_pos_default(length, 0): - return series - return None - - -def v_str(var: str, default: str) -> str: - """"Returns the default value if var is not a empty str""" - if isinstance(var, str) and len(var) > 0: - return f"{var}" - return f"{default}" - - -def v_talib(var: bool) -> bool: - """Returns True by default""" - return partial(v_bool, default=True)(var=var) - - -def v_tradingview(var: bool) -> bool: - """Returns True by default""" - return partial(v_bool, default=True)(var=var) - - -def v_upperbound( - var: IntFloat, bound: IntFloat = 0, - default: IntFloat = 0, strict: bool = True -) -> IntFloat: - return partial(v_lowerbound, complement=True)\ - (var=var, bound=bound, default=default, strict=strict) diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/__init__.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/__init__.py deleted file mode 100644 index 8f804ca4..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/__init__.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -from .aberration import aberration -from .accbands import accbands -from .atr import atr -from .atrts import atrts -from .bbands import bbands -from .chandelier_exit import chandelier_exit -from .donchian import donchian -from .hwc import hwc -from .kc import kc -from .massi import massi -from .natr import natr -from .pdist import pdist -from .rvi import rvi -from .thermo import thermo -from .true_range import true_range -from .ui import ui - -__all__ = [ - "aberration", - "accbands", - "atr", - "atrts", - "bbands", - "chandelier_exit", - "donchian", - "hwc", - "kc", - "massi", - "natr", - "pdist", - "rvi", - "thermo", - "true_range", - "ui", -] diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/aberration.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/aberration.py deleted file mode 100644 index 6f78982e..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/aberration.py +++ /dev/null @@ -1,85 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.overlap import hlc3, sma -from pandas_ta.utils import v_offset, v_pos_default, v_series -from .atr import atr - - - -def aberration( - high: Series, low: Series, close: Series, - length: Int = None, atr_length: Int = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Aberration - - Similar to Keltner Channels. - - Sources: - * [Request #46](https://github.com/twopirllc/pandas-ta/issues/46) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - length (int): The period. Default: ```5``` - atr_length (int): ATR period. Default: ```15``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 4 columns - """ - # Validate - length = v_pos_default(length, 5) - atr_length = v_pos_default(atr_length, 15) - _length = max(atr_length, length) + 1 - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - - if high is None or low is None or close is None: - return - - offset = v_offset(offset) - - # Calculate - atr_ = atr(high=high, low=low, close=close, length=atr_length) - jg = hlc3(high=high, low=low, close=close) - - zg = sma(jg, length) - sg = zg + atr_ - xg = zg - atr_ - - # Offset - if offset != 0: - zg = zg.shift(offset) - sg = sg.shift(offset) - xg = xg.shift(offset) - atr_ = atr_.shift(offset) - - # Fill - if "fillna" in kwargs: - zg.fillna(kwargs["fillna"], inplace=True) - sg.fillna(kwargs["fillna"], inplace=True) - xg.fillna(kwargs["fillna"], inplace=True) - atr_.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = f"_{length}_{atr_length}" - zg.name = f"ABER_ZG{_props}" - sg.name = f"ABER_SG{_props}" - xg.name = f"ABER_XG{_props}" - atr_.name = f"ABER_ATR{_props}" - zg.category = sg.category = "volatility" - xg.category = atr_.category = zg.category - - data = {zg.name: zg, sg.name: sg, xg.name: xg, atr_.name: atr_} - df = DataFrame(data, index=close.index) - df.name = f"ABER{_props}" - df.category = zg.category - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/accbands.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/accbands.py deleted file mode 100644 index c11ac70f..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/accbands.py +++ /dev/null @@ -1,93 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.ma import ma -from pandas_ta.utils import ( - non_zero_range, - v_drift, - v_mamode, - v_offset, - v_pos_default, - v_series -) - - - -def accbands( - high: Series, low: Series, close: Series, length: Int = None, - c: IntFloat = None, drift: Int = None, mamode: str = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Acceleration Bands - - This indicator, by Price Headley, creates lower and upper bands centered - around a moving average based on a ratio of it's High-Low range. - - Sources: - * [tradingtechnologies](https://www.tradingtechnologies.com/help/x-study/technical-indicator-definitions/acceleration-bands-abands/) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - length (int): The period. Default: ```10``` - c (int): Multiplier. Default: ```4``` - mamode (str): See ```help(ta.ma)```. Default: ```"sma"``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 3 columns - """ - # Validate - length = v_pos_default(length, 20) - high = v_series(high, length) - low = v_series(low, length) - close = v_series(close, length) - - if high is None or low is None or close is None: - return - - c = v_pos_default(c, 4) - mamode = v_mamode(mamode, "sma") - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - high_low_range = non_zero_range(high, low) - hl_ratio = high_low_range / (high + low) - hl_ratio *= c - _lower = low * (1 - hl_ratio) - _upper = high * (1 + hl_ratio) - - lower = ma(mamode, _lower, length=length) - mid = ma(mamode, close, length=length) - upper = ma(mamode, _upper, length=length) - - # Offset - if offset != 0: - lower = lower.shift(offset) - mid = mid.shift(offset) - upper = upper.shift(offset) - - # Fill - if "fillna" in kwargs: - lower.fillna(kwargs["fillna"], inplace=True) - mid.fillna(kwargs["fillna"], inplace=True) - upper.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - lower.name = f"ACCBL_{length}" - mid.name = f"ACCBM_{length}" - upper.name = f"ACCBU_{length}" - mid.category = upper.category = lower.category = "volatility" - - data = {lower.name: lower, mid.name: mid, upper.name: upper} - df = DataFrame(data, index=close.index) - df.name = f"ACCBANDS_{length}" - df.category = mid.category - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/atr.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/atr.py deleted file mode 100644 index 397e2ad6..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/atr.py +++ /dev/null @@ -1,107 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import isnan, nan -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.ma import ma -from pandas_ta.maps import Imports -from pandas_ta.utils import ( - v_bool, - v_drift, - v_mamode, - v_offset, - v_pos_default, - v_series, - v_talib -) -from .true_range import true_range - - - -def atr( - high: Series, low: Series, close: Series, length: Int = None, - mamode: str = None, talib: bool = None, - prenan: bool = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Average True Range - - This indicator attempts to quantify volatility with a focus on gaps or - limit moves. - - Sources: - * [tradingview](https://www.tradingview.com/wiki/Average_True_Range_(ATR)) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - length (int): The period. Default: ```14``` - mamode (str): See ```help(ta.ma)```. Default: ```"rma"``` - talib (bool): If installed, use TA Lib. Default: ```True``` - prenan (bool): Sets initial values to ```np.nan``` based - on ```drift```. Default: ```False``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - percent (bool): Return as percent. Default: ```False``` - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 14) - _length = length + 1 - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - - if high is None or low is None or close is None: - return - - mamode = v_mamode(mamode, "rma") - mode_tal = v_talib(talib) - prenan = v_bool(prenan, False) - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import ATR - atr = ATR(high, low, close, length) - else: - tr = true_range( - high=high, low=low, close=close, - talib=mode_tal, prenan=prenan, drift=drift - ) - if all(isnan(tr)): - return # Emergency Break - - presma = kwargs.pop("presma", True) - if presma: - sma_nth = tr[0:length].mean() - tr[:length - 1] = nan - tr.iloc[length - 1] = sma_nth - atr = ma(mamode, tr, length=length, talib=mode_tal) - - if all(isnan(atr)): - return # Emergency Break - - percent = kwargs.pop("percent", False) - if percent: - atr *= 100 / close - - # Offset - if offset != 0: - atr = atr.shift(offset) - - # Fill - if "fillna" in kwargs: - atr.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - atr.name = f"ATR{mamode[0]}{'p' if percent else ''}_{length}" - atr.category = "volatility" - - return atr diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/atrts.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/atrts.py deleted file mode 100644 index ea880287..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/atrts.py +++ /dev/null @@ -1,140 +0,0 @@ -# -*- coding: utf-8 -*- -from numba import njit -from numpy import isnan, nan, uintc, zeros_like -from pandas import Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.ma import ma as _ma -from pandas_ta.maps import Imports -from pandas_ta.utils import ( - v_drift, - v_mamode, - v_offset, - v_pos_default, - v_series, - v_talib -) -from pandas_ta.volatility import atr - - - -@njit(cache=True) -def nb_atrts(x, ma, atr_, length, ma_length): - m = x.size - k = max(length, ma_length) - - result = x.copy() - up = zeros_like(x, dtype=uintc) - dn = zeros_like(x, dtype=uintc) - - expn = x > ma - up[expn], dn[~expn] = 1, 1 - up[:k], dn[:k] = 0, 0 - result[:k] = nan - - for i in range(k, m): - pr = result[i - 1] - if up[i]: - result[i] = x[i] - atr_[i] - if result[i] < pr: - result[i] = pr - if dn[i]: - result[i] = x[i] + atr_[i] - if result[i] > pr: - result[i] = pr - - long, short = result * up, result * dn - long[long == 0], short[short == 0] = nan, nan - - return result, long, short - - -def atrts( - high: Series, low: Series, close: Series, length: Int = None, - ma_length: Int = None, k: IntFloat = None, - mamode: str = None, talib: bool = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """ATR Trailing Stop - - This indicator attempts to identify exits for long and short positions. - To determine trend, it uses a moving average with a scalable ATR. - - Sources: - * [motivewave](https://www.motivewave.com/studies/atr_trailing_stops.htm) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - length (int): The period. Default: ```14``` - ma_length (int): MA Length. Default: ```20``` - k (int): ATR multiplier. Default: ```3``` - mamode (str): See ```help(ta.ma)```. Default: ```"ema"``` - talib (bool): If installed, use TA Lib. Default: ```True``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - percent (bool): Return as percent. Default: ```False``` - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 14) - ma_length = v_pos_default(ma_length, 20) - _length = length + ma_length - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - - if high is None or low is None or close is None: - return - - k = v_pos_default(k, 3.0) - mamode = v_mamode(mamode, "ema") - mode_tal = v_talib(talib) - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import ATR - atr_ = ATR(high, low, close, length) - else: - atr_ = atr( - high=high, low=low, close=close, length=length, - mamode=mamode, drift=drift, talib=mode_tal, - offset=offset, **kwargs - ) - - if all(isnan(atr_)): - return # Emergency Break - - atr_ *= k - ma_ = _ma(mamode, close, length=ma_length, talib=mode_tal) - - np_close, np_ma, np_atr = close.to_numpy(), ma_.to_numpy(), atr_.to_numpy() - np_atrts_, _, _ = nb_atrts(np_close, np_ma, np_atr, length, ma_length) - - percent = kwargs.pop("percent", False) - if percent: - np_atrts_ *= 100 / np_close - - atrts = Series(np_atrts_, index=close.index) - - # Offset - if offset != 0: - atrts = atrts.shift(offset) - - # Fill - if "fillna" in kwargs: - atrts.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = f"ATRTS{mamode[0]}{'p' if percent else ''}" - atrts.name = f"{_props}_{length}_{ma_length}_{k}" - atrts.category = "volatility" - - return atrts diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/bbands.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/bbands.py deleted file mode 100644 index aa235360..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/bbands.py +++ /dev/null @@ -1,124 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.ma import ma -from pandas_ta.maps import Imports -from pandas_ta.statistics import stdev -from pandas_ta.utils import ( - non_zero_range, - tal_ma, - v_mamode, - v_offset, - v_pos_default, - v_series, - v_talib -) - - - -def bbands( - close: Series, length: Int = None, - lower_std: IntFloat = None, upper_std: IntFloat = None, - ddof: Int = None, mamode: str = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Bollinger Bands - - This indicator, by John Bollinger, attempts to quantify volatility by - creating lower and upper bands centered around a moving average. - - Sources: - * [tradingview](https://www.tradingview.com/wiki/Bollinger_Bands_(BB)) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```5``` - lower_std (IntFloat): Lower standard deviation. Default: ```2.0``` - upper_std (IntFloat): Upper standard deviation. Default: ```2.0``` - ddof (int): Degrees of Freedom to use. Default: ```0``` - mamode (str): See ```help(ta.ma)```. Default: ```"sma"``` - talib (bool): If installed, use TA Lib. Default: ```True``` - ddof (int): By default, uses Pandas ```ddof=1```. - For Numpy calculation, use ```0```. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 5 columns - - Note: - * TA Lib does not have a ```ddof``` parameter. - * The divisor used in calculations is: ```N - ddof```, where ```N``` - is the number of elements. To use ```ddof```, set ```talib=False```. - """ - # Validate - length = v_pos_default(length, 5) - close = v_series(close, length) - - if close is None: - return - - lower_std = v_pos_default(lower_std, 2.0) - upper_std = v_pos_default(upper_std, 2.0) - ddof = int(ddof) if isinstance(ddof, int) and 0 <= ddof < length else 1 - mamode = v_mamode(mamode, "sma") - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import BBANDS - upper, mid, lower = BBANDS(close, length, upper_std, lower_std, tal_ma(mamode)) - else: - std_dev = stdev(close=close, length=length, ddof=ddof, talib=mode_tal) - lower_deviations = lower_std * std_dev - upper_deviations = upper_std * std_dev - - mid = ma(mamode, close, length=length, talib=mode_tal, **kwargs) - lower = mid - lower_deviations - upper = mid + upper_deviations - - ulr = non_zero_range(upper, lower) - bandwidth = 100 * ulr / mid - percent = non_zero_range(close, lower) / ulr - - # Offset - if offset != 0: - lower = lower.shift(offset) - mid = mid.shift(offset) - upper = upper.shift(offset) - bandwidth = bandwidth.shift(offset) - percent = percent.shift(offset) - - # Fill - if "fillna" in kwargs: - lower.fillna(kwargs["fillna"], inplace=True) - mid.fillna(kwargs["fillna"], inplace=True) - upper.fillna(kwargs["fillna"], inplace=True) - bandwidth.fillna(kwargs["fillna"], inplace=True) - percent.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = f"_{length}_{lower_std}_{upper_std}" - lower.name = f"BBL{_props}" - mid.name = f"BBM{_props}" - upper.name = f"BBU{_props}" - bandwidth.name = f"BBB{_props}" - percent.name = f"BBP{_props}" - upper.category = lower.category = "volatility" - mid.category = bandwidth.category = upper.category - - data = { - lower.name: lower, - mid.name: mid, - upper.name: upper, - bandwidth.name: bandwidth, - percent.name: percent - } - df = DataFrame(data, index=close.index) - df.name = f"BBANDS{_props}" - df.category = mid.category - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/chandelier_exit.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/chandelier_exit.py deleted file mode 100644 index 84433bfe..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/chandelier_exit.py +++ /dev/null @@ -1,127 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import isnan, nan -from pandas import Series, DataFrame -from pandas_ta.volatility import atr -from pandas_ta._typing import Int, IntFloat, DictLike -from pandas_ta.utils import ( - v_bool, - v_drift, - v_mamode, - v_pos_default, - v_offset, - v_series, - v_talib -) - - - -def chandelier_exit( - high: Series, low: Series, close: Series, - high_length: Int = None, low_length: Int = None, - atr_length: Int = None, multiplier: IntFloat = None, - mamode: str = None, talib: bool = None, use_close: bool = None, - drift: Int = None, offset: Int = None, **kwargs: DictLike -): - """Chandelier Exit - - This indicator attempts to identify trailing stop-losses based on ATR. - - Sources: - * [stockcharts](https://school.stockcharts.com/doku.php?id=technical_indicators:chandelier_exit) - * [tradingview](https://in.tradingview.com/scripts/chandelier/) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - high_length (int): Highest high period. Default: ```22``` - low_length (int): Lowest low period. Default: ```22``` - atr_length (int) : ATR length. Default: ```14``` - multiplier (float): Lower & Upper Bands scalar. Default: ```2.0``` - mamode (str): See ```help(ta.ma)```. Default: ```"rma"``` - talib (bool): If installed, use TA Lib. Default: ```True``` - use_close (bool): Use ```max(high_length, low_length)``` for - the ```close```. Default: ```False``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 3 columns - """ - # Validate - atr_length = v_pos_default(atr_length, 14) - high_length = v_pos_default(high_length, 22) - low_length = v_pos_default(low_length, 22) - roll_length = max(high_length, low_length) - _length = max(atr_length, roll_length) + 1 - - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - - if high is None or low is None or close is None: - return - - multiplier = v_pos_default(multiplier, 2.0) - mamode = v_mamode(mamode, "rma") - mode_tal = v_talib(talib) - use_close = v_bool(use_close, False) - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - atr_ = atr( - high=high, low=low, close=close, length=atr_length, - mamode=mamode, talib=mode_tal, drift=drift, offset=offset - ) - if atr_ is None or all(isnan(atr_)): - return - - atr_mult = atr_ * multiplier - - if use_close: - long = close.rolling(roll_length, min_periods=1).max() - atr_mult - short = close.rolling(roll_length, min_periods=1).min() + atr_mult - else: - long = high.rolling(high_length, min_periods=1).max() - atr_mult - short = low.rolling(low_length, min_periods=1).min() + atr_mult - - uptrend = (close > long.shift(drift)).astype(int) - downtrend = -(close < short.shift(drift)).astype(int) - - direction = uptrend + downtrend - if direction.iloc[0] == 0: - direction.iloc[0] = 1 - direction = direction.replace(0, nan).ffill() - - # Offset - if offset != 0: - long = long.shift(offset) - short = short.shift(offset) - direction = direction.shift(offset) - - # Fill - if "fillna" in kwargs: - long.fillna(kwargs["fillna"], inplace=True) - short.fillna(kwargs["fillna"], inplace=True) - direction.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _name = "CHDLREXT" - _props = f"_{high_length}_{low_length}_{atr_length}_{multiplier}" - if use_close: - _props = f"_CLOSE_{_props}" - - data = { - f"{_name}l{_props}": long, - f"{_name}s{_props}": short, - f"{_name}d{_props}": direction - } - df = DataFrame(data, index=close.index) - df.name = f"{_name}{_props}" - df.category = "volatility" - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/donchian.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/donchian.py deleted file mode 100644 index 3355f408..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/donchian.py +++ /dev/null @@ -1,77 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import v_offset, v_pos_default, v_series - - - -def donchian( - high: Series, low: Series, - lower_length: Int = None, upper_length: Int = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Donchian Channels - - This indicator attempt to quantify volatility similarily to - Bollinger Bands and Keltner Channels. - - Sources: - * [tradingview](https://www.tradingview.com/wiki/Donchian_Channels_(DC)) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - lower_length (int): Lower period. Default: ```20``` - upper_length (int): Upper period. Default: ```20``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 3 columns - """ - # Validate - lower_length = v_pos_default(lower_length, 20) - upper_length = v_pos_default(upper_length, 20) - lmin_periods = int(kwargs.pop("lmin_periods", lower_length)) - umin_periods = int(kwargs.pop("umin_periods", upper_length)) - - _length = max(lower_length, lmin_periods, upper_length, umin_periods) - high = v_series(high, _length) - low = v_series(low, _length) - - if high is None or low is None: - return - - offset = v_offset(offset) - - # Calculate - lower = low.rolling(lower_length, min_periods=lmin_periods).min() - upper = high.rolling(upper_length, min_periods=umin_periods).max() - mid = 0.5 * (lower + upper) - - # Fill - if "fillna" in kwargs: - lower.fillna(kwargs["fillna"], inplace=True) - mid.fillna(kwargs["fillna"], inplace=True) - upper.fillna(kwargs["fillna"], inplace=True) - - # Offset - if offset != 0: - lower = lower.shift(offset) - mid = mid.shift(offset) - upper = upper.shift(offset) - - # Name and Category - lower.name = f"DCL_{lower_length}_{upper_length}" - mid.name = f"DCM_{lower_length}_{upper_length}" - upper.name = f"DCU_{lower_length}_{upper_length}" - mid.category = upper.category = lower.category = "volatility" - - data = {lower.name: lower, mid.name: mid, upper.name: upper} - df = DataFrame(data, index=high.index) - df.name = f"DC_{lower_length}_{upper_length}" - df.category = mid.category - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/hwc.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/hwc.py deleted file mode 100644 index a450dc0f..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/hwc.py +++ /dev/null @@ -1,142 +0,0 @@ -# -*- coding: utf-8 -*- -from sys import float_info as sflt -from numpy import sqrt -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.utils import v_bool, v_offset, v_pos_default, v_series - - - -def hwc( - close: Series, scalar: IntFloat = None, channels: bool = None, - na: IntFloat = None, nb: IntFloat = None, - nc: IntFloat = None, nd: IntFloat = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Holt-Winter Channel - - This indicator creates a three-parameter moving average using the - "Holt-Winters" method. - - Sources: - * [rengel8](https://github.com/rengel8) (2021-08-11) based on the - implementation from "MetaTrader 5" - * [mql5](https://www.mql5.com/en/code/20857) - - Parameters: - close (Series): ```close``` Series - scalar (float): Channel scalar. Default: ```1``` - channels (bool): Return width and percentage columns. - Default: ```True``` - na (float): Smoothed series in range ```[0, 1]```. Default: ```0.2``` - nb (float): Trend value in range ```[0, 1]```. Default: ```0.1``` - nc (float): Seasonality value in range ```[0, 1]```. Default: ```0.1``` - nd (float): Channel value in range ```[0, 1]```. Default: ```0.1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 3 columns - """ - # Validate - close = v_series(close, 1) - scalar = v_pos_default(scalar, 1) - channels = v_bool(channels, True) - na = v_pos_default(na, 0.2) - nb = v_pos_default(nb, 0.1) - nc = v_pos_default(nc, 0.1) - nd = v_pos_default(nd, 0.1) - offset = v_offset(offset) - - if close is None: - return - - # Calculate Result - last_a = last_v = last_var = 0 - last_f = last_price = last_result = close.iloc[0] - lower, result, upper = [], [], [] - chan_pct_width, chan_width = [], [] - - m = close.size - for i in range(m): - F = (1.0 - na) * (last_f + last_v + 0.5 * last_a) + na * close.iloc[i] - V = (1.0 - nb) * (last_v + last_a) + nb * (F - last_f) - A = (1.0 - nc) * last_a + nc * (V - last_v) - result.append((F + V + 0.5 * A)) - - var = (1.0 - nd) * last_var + \ - nd * (last_price - last_result) * (last_price - last_result) - stddev = sqrt(last_var) - upper.append(result[i] + scalar * stddev) - lower.append(result[i] - scalar * stddev) - - if channels: - # channel width - chan_width.append(upper[i] - lower[i]) - # channel percentage price position - chan_pct_width.append( - (close.iloc[i] - lower[i]) / (upper[i] - lower[i] + sflt.epsilon) - ) - - # update values - last_price = close.iloc[i] - last_a = A - last_f = F - last_v = V - last_var = var - last_result = result[i] - - # Aggregate - hwc = Series(result, index=close.index) - hwc_upper = Series(upper, index=close.index) - hwc_lower = Series(lower, index=close.index) - if channels: - hwc_width = Series(chan_width, index=close.index) - hwc_pctwidth = Series(chan_pct_width, index=close.index) - - # Offset - if offset != 0: - hwc = hwc.shift(offset) - hwc_upper = hwc_upper.shift(offset) - hwc_lower = hwc_lower.shift(offset) - if channels: - hwc_width = hwc_width.shift(offset) - hwc_pctwidth = hwc_pctwidth.shift(offset) - - # Fill - if "fillna" in kwargs: - hwc.fillna(kwargs["fillna"], inplace=True) - hwc_upper.fillna(kwargs["fillna"], inplace=True) - hwc_lower.fillna(kwargs["fillna"], inplace=True) - if channels: - hwc_width.fillna(kwargs["fillna"], inplace=True) - hwc_pctwidth.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = f"_{scalar}" - hwc.name = f"HWM{_props}" - hwc_upper.name = f"HWU{_props}" - hwc_lower.name = f"HWL{_props}" - hwc.category = hwc_upper.category = hwc_lower.category = "volatility" - - if channels: - data = { - hwc.name: hwc, - hwc_lower.name: hwc_lower, - hwc_upper.name: hwc_upper, - f"HWW{_props}": hwc_width, - f"HWPCT{_props}": hwc_pctwidth - } - else: - data = { - hwc.name: hwc, - hwc_lower.name: hwc_lower, - hwc_upper.name: hwc_upper - } - df = DataFrame(data, index=close.index) - df.name = f"HWC_{scalar}" - df.category = hwc.category - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/kc.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/kc.py deleted file mode 100644 index 366c7622..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/kc.py +++ /dev/null @@ -1,95 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.ma import ma -from pandas_ta.utils import ( - high_low_range, - v_bool, - v_mamode, - v_offset, - v_pos_default, - v_series -) -from .true_range import true_range - - - -def kc( - high: Series, low: Series, close: Series, - length: Int = None, scalar: IntFloat = None, - tr: bool = None, mamode: str = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Keltner Channels - - This indicator attempts to identify volatility similarily to - Bollinger Bands and Donchian Channels. - - Sources: - * [tradingview](https://www.tradingview.com/wiki/Keltner_Channels_(KC)) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - length (int): The period. Default: ```20``` - scalar (float): Band scalar. Default: ```2``` - mamode (str): See ```help(ta.ma)```. Default: ```"ema"``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - tr (bool): Use True Range calculation. Otherwise use ```high - low``` - for range computation. Default: ```True``` - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 3 columns - """ - # Validate - length = v_pos_default(length, 20) - _length = length + 1 - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - - if high is None or low is None or close is None: - return - - scalar = v_pos_default(scalar, 2) - tr = v_bool(tr, True) - mamode = v_mamode(mamode, "ema") - offset = v_offset(offset) - - # Calculate - range_ = true_range(high, low, close) if tr else high_low_range(high, low) - basis = ma(mamode, close, length=length) - band = ma(mamode, range_, length=length) - - lower = basis - scalar * band - upper = basis + scalar * band - - # Offset - if offset != 0: - lower = lower.shift(offset) - basis = basis.shift(offset) - upper = upper.shift(offset) - - # Fill - if "fillna" in kwargs: - lower.fillna(kwargs["fillna"], inplace=True) - basis.fillna(kwargs["fillna"], inplace=True) - upper.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = f"{mamode.lower()[0] if len(mamode) else ''}_{length}_{scalar}" - lower.name = f"KCL{_props}" - basis.name = f"KCB{_props}" - upper.name = f"KCU{_props}" - basis.category = upper.category = lower.category = "volatility" - - data = {lower.name: lower, basis.name: basis, upper.name: upper} - df = DataFrame(data, index=close.index) - df.name = f"KC{_props}" - df.category = basis.category - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/massi.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/massi.py deleted file mode 100644 index 3a86b65b..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/massi.py +++ /dev/null @@ -1,77 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import isnan -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.overlap import ema -from pandas_ta.utils import non_zero_range, v_offset, v_pos_default, v_series - - - -def massi( - high: Series, low: Series, fast: Int = None, slow: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Mass Index - - This indicator attempts to use a High-Low Range to identify trend - reversals based on range expansions. - - Sources: - * [stockcharts](https://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:mass_index) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - fast (int): Fast period. Default: ```9``` - slow (int): Slow period. Default: ```25``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - fast = v_pos_default(fast, 9) - slow = v_pos_default(slow, 25) - if slow < fast: - fast, slow = slow, fast - _length = 2 * max(fast, slow) - min(fast, slow) - high = v_series(high, _length) - low = v_series(low, _length) - - if high is None or low is None: - return - - offset = v_offset(offset) - if "length" in kwargs: - kwargs.pop("length") - - # Calculate - high_low_range = non_zero_range(high, low) - hl_ema1 = ema(close=high_low_range, length=fast, **kwargs) - if all(isnan(hl_ema1)): - return # Emergency Break - hl_ema2 = ema(close=hl_ema1, length=fast, **kwargs) - if all(isnan(hl_ema2)): - return # Emergency Break - - hl_ratio = hl_ema1 / hl_ema2 - massi = hl_ratio.rolling(slow, min_periods=slow).sum() - if all(isnan(massi)): - return # Emergency Break - - # Offset - if offset != 0: - massi = massi.shift(offset) - - # Fill - if "fillna" in kwargs: - massi.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - massi.name = f"MASSI_{fast}_{slow}" - massi.category = "volatility" - - return massi diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/natr.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/natr.py deleted file mode 100644 index f59f9880..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/natr.py +++ /dev/null @@ -1,97 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.maps import Imports -from pandas_ta.utils import ( - v_bool, - v_drift, - v_mamode, - v_offset, - v_pos_default, - v_scalar, - v_series, - v_talib -) -from pandas_ta.volatility import atr - - - -def natr( - high: Series, low: Series, close: Series, - length: Int = None, scalar: IntFloat = None, mamode: str = None, - talib: bool = None, prenan: bool = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Normalized Average True Range - - This indicator applies a normalizer to Average True Range. - - Sources: - * [tradingtechnologies](https://www.tradingtechnologies.com/help/x-study/technical-indicator-definitions/normalized-average-true-range-natr/) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - length (int): The period. Default: ```20``` - scalar (float): Scalar. Default: ```100``` - mamode (str): See ```help(ta.ma)```. Default: ```"ema"``` - talib (bool): If installed, use TA Lib. Default: ```True``` - prenan (bool): Sets initial values to ```np.nan``` based - on ```drift```. Default: ```False``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Warning: - TA-Lib Correlation: ```np.float64(0.9506743353852364)``` - - Tip: - Corrective contributions welcome! - """ - # Validate - length = v_pos_default(length, 14) - _length = length + 1 - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - - if high is None or low is None or close is None: - return - - scalar = v_scalar(scalar, 100) - mamode = v_mamode(mamode, "ema") - mode_tal = v_talib(talib) - prenan = v_bool(prenan, False) - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import NATR - natr = NATR(high, low, close, length) - else: - natr = (scalar / close) * \ - atr( - high=high, low=low, close=close, length=length, - mamode=mamode, drift=drift, talib=mode_tal, - prenan=prenan, offset=offset, **kwargs - ) - - # Offset - if offset != 0: - natr = natr.shift(offset) - - # Fill - if "fillna" in kwargs: - natr.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - natr.name = f"NATR_{length}" - natr.category = "volatility" - - return natr diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/pdist.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/pdist.py deleted file mode 100644 index f4193288..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/pdist.py +++ /dev/null @@ -1,67 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import isnan -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import non_zero_range, v_drift, v_offset, v_series - - - -def pdist( - open_: Series, high: Series, low: Series, close: Series, - drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Price Distance - - This indicator attempts to quantify the magnitude covered by - price movements. - - Sources: - * [prorealcode](https://www.prorealcode.com/prorealtime-indicators/pricedistance/) - - Parameters: - open_ (Series): ```open``` Series - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - drift = v_drift(drift) - open_ = v_series(open_) - high = v_series(high) - low = v_series(low) - close = v_series(close) - offset = v_offset(offset) - - # Calculate - pdist = 2 * non_zero_range(high, low) - if all(isnan(pdist)): - return # Emergency Break - - pdist += non_zero_range(open_, close.shift(drift)).abs() - pdist -= non_zero_range(close, open_).abs() - - if all(isnan(pdist)): - return # Emergency Break - - # Offset - if offset != 0: - pdist = pdist.shift(offset) - - # Fill - if "fillna" in kwargs: - pdist.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - pdist.name = "PDIST" - pdist.category = "volatility" - - return pdist diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/rvi.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/rvi.py deleted file mode 100644 index 1f58af32..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/rvi.py +++ /dev/null @@ -1,117 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import isnan -from pandas import Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.ma import ma -from pandas_ta.statistics import stdev -from pandas_ta.utils import ( - unsigned_differences, - v_bool, - v_drift, - v_mamode, - v_offset, - v_pos_default, - v_series -) - - - -def _rvi(source, length, scalar, mode, drift): - std = stdev(source, length) - pos, neg = unsigned_differences(source, drift) - - pos_std = pos * std - neg_std = neg * std - - pos_avg = ma(mode, pos_std, length=length) - neg_avg = ma(mode, neg_std, length=length) - - result = scalar * pos_avg / (pos_avg + neg_avg) - return result - - -def rvi( - close: Series, high: Series = None, low: Series = None, - length: Int = None, scalar: IntFloat = None, - refined: bool = None, thirds: bool = None, - mamode: str = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Relative Volatility Index - - This indicator attempts to quantify volatility using standard deviation. - - Sources: - * [motivewave](https://www.motivewave.com/studies/relative_volatility_index.htm) - * [tradingview A](https://www.tradingview.com/script/mLZJqxKn-Relative-Volatility-Index/) - * [tradingview B](https://www.tradingview.com/support/solutions/43000594684-relative-volatility-index/) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - length (int): The period. Default: ```14``` - scalar (float): Bands scalar. Default: ```100``` - refined (bool): Use 'refined' calculation which is the average of - RVI(high) and RVI(low) instead of RVI(close). Default: ```False``` - thirds (bool): Average of ```high```, ```low``` and ```close```. - Default: ```False``` - mamode (str): See ```help(ta.ma)```. Default: ```"ema"``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 3 columns - """ - # Validate - length = v_pos_default(length, 14) - close = v_series(close, length + 2) - - if close is None: - return - - scalar = v_pos_default(scalar, 100) - refined = v_bool(refined, False) - thirds = v_bool(thirds, False) - mamode = v_mamode(mamode, "ema") - drift = v_drift(drift) - offset = v_offset(offset) - - if refined or thirds: - high = v_series(high) - low = v_series(low) - - # Calculate - _mode = "" - if refined: - high_rvi = _rvi(high, length, scalar, mamode, drift) - low_rvi = _rvi(low, length, scalar, mamode, drift) - rvi = 0.5 * (high_rvi + low_rvi) - _mode = "r" - elif thirds: - high_rvi = _rvi(high, length, scalar, mamode, drift) - low_rvi = _rvi(low, length, scalar, mamode, drift) - close_rvi = _rvi(close, length, scalar, mamode, drift) - rvi = (high_rvi + low_rvi + close_rvi) / 3.0 - _mode = "t" - else: - rvi = _rvi(close, length, scalar, mamode, drift) - - if all(isnan(rvi)): - return # Emergency Break - - # Offset - if offset != 0: - rvi = rvi.shift(offset) - - # Fill - if "fillna" in kwargs: - rvi.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - rvi.name = f"RVI{_mode}_{length}" - rvi.category = "volatility" - - return rvi diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/thermo.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/thermo.py deleted file mode 100644 index e44bcdbf..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/thermo.py +++ /dev/null @@ -1,111 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.ma import ma -from pandas_ta.utils import ( - v_bool, - v_drift, - v_mamode, - v_offset, - v_pos_default, - v_series -) - - - -def thermo( - high: Series, low: Series, length: Int = None, - long: Int = None, short: Int = None, - mamode: str = None, asint: bool = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Elders Thermometer - - This indicator, by Dr Alexander Elder, attempts to quantify volatility. - - Sources: - * [motivewave](https://www.motivewave.com/studies/elders_thermometer.htm) - * [tradingview](https://www.tradingview.com/script/HqvTuEMW-Elder-s-Market-Thermometer-LazyBear/) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - length (int): The period. Default: ```20``` - long (int): Buy factor. Default: ```2``` - short (float): Sell factor. Default: ```0.5``` - mamode (str): See ```help(ta.ma)```. Default: ```"ema"``` - asint (int): Returns as int. Default: ```True``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 4 columns - """ - # Validate - length = v_pos_default(length, 20) - high = v_series(high, length + 1) - low = v_series(low, length + 1) - - if high is None or low is None: - return - - long = v_pos_default(long, 2) - short = v_pos_default(short, 0.5) - mamode = v_mamode(mamode, "ema") - asint = v_bool(asint, True) - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - thermoL = (low.shift(drift) - low).abs() - thermoH = (high - high.shift(drift)).abs() - - thermo = thermoL - thermo = thermo.where(thermoH < thermoL, thermoH) - thermo.index = high.index - - thermo_ma = ma(mamode, thermo, length=length) - thermo_long = thermo < (thermo_ma * long) - thermo_short = thermo > (thermo_ma * short) - - if asint: - thermo_long = thermo_long.astype(int) - thermo_short = thermo_short.astype(int) - - # Offset - if offset != 0: - thermo = thermo.shift(offset) - thermo_ma = thermo_ma.shift(offset) - thermo_long = thermo_long.shift(offset) - thermo_short = thermo_short.shift(offset) - - # Fill - if "fillna" in kwargs: - thermo.fillna(kwargs["fillna"], inplace=True) - thermo_ma.fillna(kwargs["fillna"], inplace=True) - thermo_long.fillna(kwargs["fillna"], inplace=True) - thermo_short.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = f"_{length}_{long}_{short}" - thermo.name = f"THERMO{_props}" - thermo_ma.name = f"THERMOma{_props}" - thermo_long.name = f"THERMOl{_props}" - thermo_short.name = f"THERMOs{_props}" - thermo.category = thermo_ma.category = "volatility" - thermo_long.category = thermo_short.category = thermo.category - - data = { - thermo.name: thermo, - thermo_ma.name: thermo_ma, - thermo_long.name: thermo_long, - thermo_short.name: thermo_short - } - df = DataFrame(data, index=high.index) - df.name = f"THERMO{_props}" - df.category = thermo.category - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/true_range.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/true_range.py deleted file mode 100644 index daac99cb..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/true_range.py +++ /dev/null @@ -1,94 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import isnan, nan -from pandas import Series, concat -from pandas_ta._typing import DictLike, Int -from pandas_ta.maps import Imports -from pandas_ta.utils import ( - non_zero_range, - v_bool, - v_drift, - v_offset, - v_series, - v_talib -) - - - -def true_range( - high: Series, low: Series, close: Series, - talib: bool = None, prenan: bool = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """True Range - - This indicator attempts to quantify a High-Low range including potential - gap scenarios. - - Sources: - * [macroption](https://www.macroption.com/true-range/) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - talib (bool): If installed, use TA Lib. Default: ```True``` - prenan (bool): Sets initial values to ```nan``` based - on ```drift```. Default: ```False``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Warning: - TA-Lib Correlation: ```np.float64(0.9999999999999999)``` - - Tip: - Corrective contributions welcome! - """ - # Validate - _length = 1 - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - - if high is None or low is None or close is None: - return - - mode_tal = v_talib(talib) - prenan = v_bool(prenan, False) - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import TRANGE - true_range = TRANGE(high, low, close) - else: - hl_range = non_zero_range(high, low) - pc = close.shift(drift) - ranges = [hl_range, high - pc, pc - low] - true_range = concat(ranges, axis=1) - true_range = true_range.abs().max(axis=1) - if prenan: - true_range.iloc[:drift] = nan - - if all(isnan(true_range)): - return # Emergency Break - - # Offset - if offset != 0: - true_range = true_range.shift(offset) - - # Fill - if "fillna" in kwargs: - true_range.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - true_range.name = f"TRUERANGE_{drift}" - true_range.category = "volatility" - - return true_range diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/ui.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/ui.py deleted file mode 100644 index 494bca8b..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volatility/ui.py +++ /dev/null @@ -1,73 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import sqrt -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.overlap import sma -from pandas_ta.utils import v_offset, v_pos_default, v_series - - - -def ui( - close: Series, length: Int = None, scalar: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Ulcer Index - - This indicator, by Peter Martin, attempts to quantify downside volatility - with a Quadratic Mean. - - Sources: - * [tangotools](http://www.tangotools.com/ui/ui.htm) - * [tradingtechnologies](https://library.tradingtechnologies.com/trade/chrt-ti-ulcer-index.html) - * [wikipedia](https://en.wikipedia.org/wiki/Ulcer_index) - - Parameters: - close (Series): ```close``` Series - length (int): The period. Default: ```14``` - scalar (float): Bands scalar. Default: ```100``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - everget (value): Use Evergets' TradingView SMA. - Default: ```False``` - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 14) - scalar = v_pos_default(scalar, 100) - close = v_series(close, 2 * length - 1) - - if close is None: - return - - offset = v_offset(offset) - - # Calculate - highest_close = close.rolling(length).max() - downside = scalar * (close - highest_close) / highest_close - d2 = downside * downside - - everget = kwargs.pop("everget", False) - if everget: - # Everget uses SMA instead of SUM for calculation - _ui = sma(d2, length) - else: - _ui = d2.rolling(length).sum() - ui = sqrt(_ui / length) - - # Offset - if offset != 0: - ui = ui.shift(offset) - - # Fill - if "fillna" in kwargs: - ui.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - ui.name = f"UI{'' if not everget else 'e'}_{length}" - ui.category = "volatility" - - return ui diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/__init__.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/__init__.py deleted file mode 100644 index 6f6575e9..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/__init__.py +++ /dev/null @@ -1,44 +0,0 @@ -# -*- coding: utf-8 -*- -from .ad import ad -from .adosc import adosc -from .aobv import aobv -from .cmf import cmf -from .efi import efi -from .eom import eom -from .kvo import kvo -from .mfi import mfi -from .nvi import nvi -from .obv import obv -from .pvi import pvi -from .pvo import pvo -from .pvol import pvol -from .pvr import pvr -from .pvt import pvt -from .tsv import tsv -from .vhm import vhm -from .vp import vp -from .vwap import vwap -from .vwma import vwma - -__all__ = [ - "ad", - "adosc", - "aobv", - "cmf", - "efi", - "eom", - "kvo", - "mfi", - "nvi", - "obv", - "pvi", - "pvo", - "pvol", - "pvr", - "pvt", - "tsv", - "vhm", - "vp", - "vwap", - "vwma", -] diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/ad.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/ad.py deleted file mode 100644 index e7f4a678..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/ad.py +++ /dev/null @@ -1,72 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.maps import Imports -from pandas_ta.utils import non_zero_range, v_offset, v_series, v_talib - - - -def ad( - high: Series, low: Series, close: Series, volume: Series, - open_: Series = None, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Accumulation/Distribution - - This indicator attempts to quantify accumulation/distribution from a - relative position within it's High-Low range and volume. - - Sources: - * [tradingtechnologies](https://www.tradingtechnologies.com/help/x-study/technical-indicator-definitions/accumulationdistribution-ad/) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - volume (Series): ```volume``` Series - open_ (Series): Optional ```open``` Series - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - high = v_series(high) - low = v_series(low) - close = v_series(close) - volume = v_series(volume) - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal and volume.size: - from talib import AD - ad = AD(high, low, close, volume) - else: - if open_ is not None: - open_ = v_series(open_) - ad = non_zero_range(close, open_) # AD with Open - else: - ad = 2 * close - (high + low) # AD with High, Low, Close - - high_low_range = non_zero_range(high, low) - ad *= volume / high_low_range - ad = ad.cumsum() - - # Offset - if offset != 0: - ad = ad.shift(offset) - - # Fill - if "fillna" in kwargs: - ad.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - ad.name = "AD" if open_ is None else "ADo" - ad.category = "volume" - - return ad diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/adosc.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/adosc.py deleted file mode 100644 index f7dccd47..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/adosc.py +++ /dev/null @@ -1,95 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.maps import Imports -from pandas_ta.overlap import ema -from pandas_ta.utils import v_offset, v_pos_default, v_series, v_talib -from pandas_ta.volume import ad - - - -def adosc( - high: Series, low: Series, close: Series, volume: Series, - open_: Series = None, fast: Int = None, slow: Int = None, - talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Accumulation/Distribution Oscillator - - This indicator is an AD oscillator. It is interpreted similarly - to MACD and APO. - - Sources: - * [investopedia](https://www.investopedia.com/articles/active-trading/031914/understanding-chaikin-oscillator.asp) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - open_ (Series): ```open``` Series - volume (Series): ```volume``` Series - fast (int): Fast MA period. Default: ```12``` - slow (int): Slow MA period. Default: ```26``` - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Note: - Also known as Chaikin Oscillator - - Warning: - TA-Lib Correlation: ```np.float64(0.9989721423605135)``` - - Tip: - Corrective contributions welcome! - """ - # Validate - fast = v_pos_default(fast, 3) - slow = v_pos_default(slow, 10) - _length = max(fast, slow) - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - volume = v_series(volume, _length) - - if high is None or low is None or close is None or volume is None: - return - - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import ADOSC - adosc = ADOSC(high, low, close, volume, fast, slow) - else: - # remove length so it doesn't override ema length - if "length" in kwargs: - kwargs.pop("length") - - ad_ = ad( - high=high, low=low, close=close, volume=volume, - open_=open_, talib=mode_tal - ) - fast_ad = ema(close=ad_, length=fast, **kwargs, talib=mode_tal) - slow_ad = ema(close=ad_, length=slow, **kwargs, talib=mode_tal) - adosc = fast_ad - slow_ad - - # Offset - if offset != 0: - adosc = adosc.shift(offset) - - # Fill - if "fillna" in kwargs: - adosc.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - adosc.name = f"ADOSC_{fast}_{slow}" - adosc.category = "volume" - - return adosc diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/aobv.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/aobv.py deleted file mode 100644 index f850c05c..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/aobv.py +++ /dev/null @@ -1,113 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.ma import ma -from pandas_ta.trend.long_run import long_run -from pandas_ta.trend.short_run import short_run -from pandas_ta.utils import v_mamode, v_offset, v_pos_default, v_series -from .obv import obv - - - -def aobv( - close: Series, volume: Series, fast: Int = None, slow: Int = None, - max_lookback: Int = None, min_lookback: Int = None, - mamode: str = None, run_length: Int = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Archer On Balance Volume - - This indicator, by Kevin Johnson, attempts to identify OBV trends using - two moving averages. It also attempts to identify if the moving averages - are in a long_run or short_run. Finally, it also calculates the rolling - maximum and minimum of OBV. - - Sources: - * Kevin Johnson - * [tradingview](https://www.tradingview.com/script/Co1ksara-Trade-Archer-On-balance-Volume-Moving-Averages-v1/) - - Parameters: - close (Series): ```close``` Series - volume (Series): ```volume``` Series - fast (int): Fast MA period. Default: ```4``` - slow (int): Slow MA period. Default: ```12``` - max_lookback (int): Maximum OBV period. Default: ```2``` - min_lookback (int): Minimum OBV period. Default: ```2``` - run_length (int): Long and short run period. Default: ```2``` - mamode (str): See ```help(ta.ma)```. Default: ```"ema"``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 6 columns - - Note: - * [long_run](../api/trend.md/#src.pandas_ta.trend.long_run.long_run) - * [short_run](../api/trend.md/#src.pandas_ta.trend.short_run.short_run) - """ - # Validate - fast = v_pos_default(fast, 4) - slow = v_pos_default(slow, 12) - min_lookback = v_pos_default(min_lookback, 2) - max_lookback = v_pos_default(max_lookback, 2) - - if slow < fast: - fast, slow = slow, fast - _length = max(max_lookback, min_lookback) + slow - - close = v_series(close, _length) - volume = v_series(volume, _length) - - if close is None or volume is None: - return - - mamode = v_mamode(mamode, "ema") - run_length = v_pos_default(run_length, 2) - offset = v_offset(offset) - # remove length so it doesn't override ema length - if "length" in kwargs: - kwargs.pop("length") - - # Calculate - obv_ = obv(close=close, volume=volume, **kwargs) - maf = ma(mamode, obv_, length=fast, **kwargs) - mas = ma(mamode, obv_, length=slow, **kwargs) - - obv_long = long_run(maf, mas, length=run_length) - obv_short = short_run(maf, mas, length=run_length) - - # Offset - if offset != 0: - obv_ = obv_.shift(offset) - maf = maf.shift(offset) - mas = mas.shift(offset) - obv_long = obv_long.shift(offset) - obv_short = obv_short.shift(offset) - - # Fill - if "fillna" in kwargs: - obv_.fillna(kwargs["fillna"], inplace=True) - maf.fillna(kwargs["fillna"], inplace=True) - mas.fillna(kwargs["fillna"], inplace=True) - obv_long.fillna(kwargs["fillna"], inplace=True) - obv_short.fillna(kwargs["fillna"], inplace=True) - - _mode = mamode.lower()[0] if len(mamode) else "" - data = { - obv_.name: obv_, - f"OBV_min_{min_lookback}": obv_.rolling(min_lookback).min(), - f"OBV_max_{max_lookback}": obv_.rolling(max_lookback).max(), - f"OBV{_mode}_{fast}": maf, - f"OBV{_mode}_{slow}": mas, - f"AOBV_LR_{run_length}": obv_long, - f"AOBV_SR_{run_length}": obv_short - } - df = DataFrame(data, index=close.index) - - # Name and Category - df.name = f"AOBV{_mode}_{fast}_{slow}_{min_lookback}_{max_lookback}_{run_length}" - df.category = "volume" - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/cmf.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/cmf.py deleted file mode 100644 index 2c83b4b3..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/cmf.py +++ /dev/null @@ -1,79 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import non_zero_range, v_offset, v_pos_default, v_series - - - -def cmf( - high: Series, low: Series, close: Series, volume: Series, - open_: Series = None, length: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Chaikin Money Flow - - This indicator attempts to quantify money flow. - - Sources: - * [stockcharts](https://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:chaikin_money_flow_cmf) - * [tradingview](https://www.tradingview.com/wiki/Chaikin_Money_Flow_(CMF)) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - volume (Series): ```volume``` Series - length (int): The period. Default: ```20``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - open_ (Series): Optional ```open``` Series. Default: ```None``` - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Note: - Commonly used with Accumulation/Distribution [ad](volume.md/#src.pandas_ta.volume.ad.ad) - """ - # Validate - length = v_pos_default(length, 20) - if "min_periods" in kwargs and kwargs["min_periods"] is not None: - min_periods = int(kwargs["min_periods"]) - else: - min_periods = length - _length = max(length, min_periods) - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - volume = v_series(volume, _length) - - if high is None or low is None or close is None or volume is None: - return - - offset = v_offset(offset) - - # Calculate - if open_ is not None: - open_ = v_series(open_) - ad = non_zero_range(close, open_) # AD with Open - else: - ad = 2 * close - (high + low) # AD with High, Low, Close - - ad *= volume / non_zero_range(high, low) - cmf = ad.rolling(length, min_periods=min_periods).sum() \ - / volume.rolling(length, min_periods=min_periods).sum() - - # Offset - if offset != 0: - cmf = cmf.shift(offset) - - # Fill - if "fillna" in kwargs: - cmf.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - cmf.name = f"CMF_{length}" - cmf.category = "volume" - - return cmf diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/efi.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/efi.py deleted file mode 100644 index 314007fe..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/efi.py +++ /dev/null @@ -1,71 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.ma import ma -from pandas_ta.utils import ( - v_drift, - v_mamode, - v_offset, - v_pos_default, - v_series -) - - - -def efi( - close: Series, volume: Series, length: Int = None, - mamode: str = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Elder's Force Index - - This indicator attempts to quantify movement magnitude as well as - potential reversals and price corrections. - - Sources: - * [motivewave](https://www.motivewave.com/studies/elders_force_index.htm) - * [tradingview](https://www.tradingview.com/wiki/Elder%27s_Force_Index_(EFI)) - - Parameters: - close (Series): ```close``` Series - volume (Series): ```volume``` Series - length (int): The period. Default: ```13``` - mamode (str): See ```help(ta.ma)```. Default: ```"ema"``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 13) - close = v_series(close, length) - volume = v_series(volume, length) - - if close is None or volume is None: - return - - mamode = v_mamode(mamode, "ema") - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - pv_diff = close.diff(drift) * volume - efi = ma(mamode, pv_diff, length=length) - - # Offset - if offset != 0: - efi = efi.shift(offset) - - # Fill - if "fillna" in kwargs: - efi.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - efi.name = f"EFI_{length}" - efi.category = "volume" - - return efi diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/eom.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/eom.py deleted file mode 100644 index 31dd49ed..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/eom.py +++ /dev/null @@ -1,82 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.overlap import hl2, sma -from pandas_ta.utils import ( - non_zero_range, - v_drift, - v_pos_default, - v_offset, - v_series -) - - - -def eom( - high: Series, low: Series, close: Series, volume: Series, - length: Int = None, divisor: IntFloat= None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Ease of Movement - - This indicator is an oscillator that attempts to quantify the relationship - with HLC and volume. - - Sources: - * [motivewave](https://www.motivewave.com/studies/ease_of_movement.htm) - * [stockcharts](https://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:ease_of_movement_emv) - * [tradingview](https://www.tradingview.com/wiki/Ease_of_Movement_(EOM)) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - volume (Series): ```volume``` Series - length (int): The period. Default: ```14``` - divisor (float): Divisor. Default: ```100_000_000``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 14) - _length = length + 1 - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - volume = v_series(volume, _length) - - if high is None or low is None or close is None or volume is None: - return - - divisor = v_pos_default(divisor, 100_000_000) - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - hl_range = non_zero_range(high, low) - distance = hl2(high=high, low=low) - distance -= hl2(high=high.shift(drift), low=low.shift(drift)) - box_ratio = volume / divisor - box_ratio /= hl_range - eom = distance / box_ratio - eom = sma(eom, length=length) - - # Offset - if offset != 0: - eom = eom.shift(offset) - - # Fill - if "fillna" in kwargs: - eom.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - eom.name = f"EOM_{length}_{divisor}" - eom.category = "volume" - - return eom diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/kvo.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/kvo.py deleted file mode 100644 index 83c41057..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/kvo.py +++ /dev/null @@ -1,100 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import isnan -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.ma import ma -from pandas_ta.overlap import hlc3 -from pandas_ta.utils import ( - signed_series, - v_drift, - v_mamode, - v_offset, - v_pos_default, - v_series -) - - - -def kvo( - high: Series, low: Series, close: Series, volume: Series, - fast: Int = None, slow: Int = None, signal: Int = None, - mamode: str = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Klinger Volume Oscillator - - This indicator, by Stephen J. Klinger., attempts to predict - price reversals. - - Sources: - * [daytrading](https://www.daytrading.com/klinger-volume-oscillator) - * [investopedia](https://www.investopedia.com/terms/k/klingeroscillator.asp) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - volume (Series): ```volume``` Series - fast (int): Fast MA period. Default: ```34``` - slow (int): Slow MA period. Default: ```55``` - signal (int): Signal period. Default: ```13``` - mamode (str): See ```help(ta.ma)```. Default: ```"ema"``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 2 columns - """ - # Validate - fast = v_pos_default(fast, 34) - slow = v_pos_default(slow, 55) - signal = v_pos_default(signal, 13) - _length = max(fast, slow) + signal - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - volume = v_series(volume, _length) - - if high is None or low is None or close is None or volume is None: - return - - mamode = v_mamode(mamode, "ema") - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - signed_volume = volume * signed_series(hlc3(high, low, close), -1) - sv = signed_volume.loc[signed_volume.first_valid_index():, ] - - kvo = ma(mamode, sv, length=fast) - ma(mamode, sv, length=slow) - if kvo is None or all(isnan(kvo.to_numpy())): - return # Emergency Break - - kvo_signal = ma(mamode, kvo.loc[kvo.first_valid_index():, ], length=signal) - if kvo_signal is None or all(isnan(kvo_signal.to_numpy())): - return # Emergency Break - - # Offset - if offset != 0: - kvo = kvo.shift(offset) - kvo_signal = kvo_signal.shift(offset) - - # Fill - if "fillna" in kwargs: - kvo.fillna(kwargs["fillna"], inplace=True) - kvo_signal.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = f"_{fast}_{slow}_{signal}" - kvo.name = f"KVO{_props}" - kvo_signal.name = f"KVOs{_props}" - kvo.category = kvo_signal.category = "volume" - - data = {kvo.name: kvo, kvo_signal.name: kvo_signal} - df = DataFrame(data, index=close.index) - df.name = f"KVO{_props}" - df.category = kvo.category - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/mfi.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/mfi.py deleted file mode 100644 index 927943a2..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/mfi.py +++ /dev/null @@ -1,97 +0,0 @@ -# -*- coding: utf-8 -*- -from sys import float_info as sflt -from numpy import convolve, maximum, nan, ones, roll, where -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.maps import Imports -from pandas_ta.utils import ( - v_drift, - v_offset, - v_pos_default, - v_series, - v_talib -) - - - -def mfi( - high: Series, low: Series, close: Series, volume: Series, - length: Int = None, talib: bool = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Money Flow Index - - This indicator is an oscillator that attempts to quantify buying and - selling pressure. - - Sources: - * [tradingview](https://www.tradingview.com/wiki/Money_Flow_(MFI)) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - volume (Series): ```volume``` Series - length (int): The period. Default: ```14``` - talib (bool): If installed, use TA Lib. Default: ```True``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Warning: - TA-Lib Correlation: ```np.float64(0.9959302104966524)``` - - Tip: - Corrective contributions welcome! - """ - # Validate - length = v_pos_default(length, 14) - _length = length + 1 - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - volume = v_series(volume, _length) - - if high is None or low is None or close is None or volume is None: - return - - mode_tal = v_talib(talib) - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import MFI - mfi = MFI(high, low, close, volume, length) - else: - m, _ones = close.size, ones(length) - - tp = (high.to_numpy() + low.to_numpy() + close.to_numpy()) / 3.0 - smf = tp * volume.to_numpy() * where(tp > roll(tp, shift=drift), 1, -1) - - pos, neg = maximum(smf, 0), maximum(-smf, 0) - avg_gain, avg_loss = convolve(pos, _ones)[:m], convolve(neg, _ones)[:m] - - _mfi = (100.0 * avg_gain) / (avg_gain + avg_loss + sflt.epsilon) - _mfi[:length] = nan - - mfi = Series(_mfi, index=close.index) - - # Offset - if offset != 0: - mfi = mfi.shift(offset) - - # Fill - if "fillna" in kwargs: - mfi.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - mfi.name = f"MFI_{length}" - mfi.category = "volume" - - return mfi diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/nvi.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/nvi.py deleted file mode 100644 index 19678912..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/nvi.py +++ /dev/null @@ -1,68 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.momentum import roc -from pandas_ta.utils import signed_series, v_offset, v_pos_default, v_series - - - -def nvi( - close: Series, volume: Series, length: Int = None, initial: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Negative Volume Index - - This indicator attempts to identify where smart money is active. - - Sources: - * [motivewave](https://www.motivewave.com/studies/negative_volume_index.htm) - * [stockcharts](https://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:negative_volume_inde) - - Parameters: - close (Series): ```close``` Series - volume (Series): ```volume``` Series - length (int): The period. Default: ```13``` - initial (int): Initial value. Default: ```1000``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Note: - Commonly paired with [pvi](volume.md/#src.pandas_ta.volume.pvi.pvi) - """ - # Validate - length = v_pos_default(length, 1) - close = v_series(close, length + 1) - volume = v_series(volume, length + 1) - - if close is None or volume is None: - return - - initial = v_pos_default(initial, 1000) - offset = v_offset(offset) - - # Calculate - roc_ = roc(close=close, length=length) - signed_volume = signed_series(volume, 1) - nvi = signed_volume[signed_volume < 0].abs() * roc_ - nvi.fillna(0, inplace=True) - nvi.iloc[0] = initial - nvi = nvi.cumsum() - - # Offset - if offset != 0: - nvi = nvi.shift(offset) - - # Fill - if "fillna" in kwargs: - nvi.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - nvi.name = f"NVI_{length}" - nvi.category = "volume" - - return nvi diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/obv.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/obv.py deleted file mode 100644 index 3f60057e..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/obv.py +++ /dev/null @@ -1,65 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.maps import Imports -from pandas_ta.utils import signed_series, v_offset, v_series, v_talib - - - -def obv( - close: Series, volume: Series, talib: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """On Balance Volume - - This indicator attempts to quantify buying and selling pressure. - - Sources: - * [motivewave](https://www.motivewave.com/studies/on_balance_volume.htm) - * [tradingtechnologies](https://www.tradingtechnologies.com/help/x-study/technical-indicator-definitions/on-balance-volume-obv/) - * [tradingview](https://www.tradingview.com/wiki/On_Balance_Volume_(OBV)) - - Parameters: - close (Series): ```close``` Series - volume (Series): ```volume``` Series - talib (bool): If installed, use TA Lib. Default: ```True``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - _length = 1 - close = v_series(close, _length) - volume = v_series(volume, _length) - - if close is None or volume is None: - return - - mode_tal = v_talib(talib) - offset = v_offset(offset) - - # Calculate - if Imports["talib"] and mode_tal: - from talib import OBV - obv = OBV(close, volume) - else: - sv = signed_series(close, initial=1) * volume - obv = sv.cumsum() - - # Offset - if offset != 0: - obv = obv.shift(offset) - - # Fill - if "fillna" in kwargs: - obv.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - obv.name = f"OBV" - obv.category = "volume" - - return obv diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/pvi.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/pvi.py deleted file mode 100644 index 522529b2..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/pvi.py +++ /dev/null @@ -1,111 +0,0 @@ -# -*- coding: utf-8 -*- -from numba import njit -from numpy import float64, zeros_like -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.ma import ma -from pandas_ta.utils import ( - v_bool, - v_mamode, - v_offset, - v_pos_default, - v_series -) - - -@njit(cache=True) -def nb_pvi(np_close, np_volume, initial): - result = zeros_like(np_close, dtype=float64) - result[0] = initial - - m = np_close.size - for i in range(1, m): - if np_volume[i] > np_volume[i - 1]: - result[i] = result[i - i] * (np_close[i] / np_close[i - 1]) - else: - result[i] = result[i - i] - - return result - - - -def pvi( - close: Series, volume: Series, length: Int = None, initial: Int = None, - mamode: str = None, overlay: bool = None, offset: Int = None, - **kwargs: DictLike -) -> DataFrame: - """Positive Volume Index - - This indicator attempts to identify where smart money is active. - - Sources: - * [investopedia](https://www.investopedia.com/terms/p/pvi.asp) - * [sierrachart](https://www.sierrachart.com/index.php?page=doc/StudiesReference.php&ID=101) - - Parameters: - close (Series): ```close``` Series - volume (Series): ```volume``` Series - length (int): The period. Default: ```255``` - initial (int): Initial value. Default: ```100``` - mamode (str): See ```help(ta.ma)```. Default: ```"ema"``` - overlay (bool): Overlay ```initial```. Default: ```False``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 2 columns - - Note: - Commonly paired with [nvi](volume.md/#src.pandas_ta.volume.nvi.nvi) - """ - # Validate - length = v_pos_default(length, 255) - close = v_series(close, length + 1) - volume = v_series(volume, length + 1) - - if close is None or volume is None: - return - - mamode = v_mamode(mamode, "ema") - overlay = v_bool(overlay, False) - if overlay: - initial = close.iloc[0] - initial = v_pos_default(initial, 100) - offset = v_offset(offset) - - # Calculate - np_close, np_volume = close.to_numpy(), volume.to_numpy() - _pvi = nb_pvi(np_close, np_volume, initial) - - pvi = Series(_pvi, index=close.index) - pvi_ma = ma(mamode, pvi, length=length) - - # Offset - if offset != 0: - pvi = pvi.shift(offset) - pvi_ma = pvi_ma.shift(offset) - - # Fill - if "fillna" in kwargs: - pvi.fillna(kwargs["fillna"], inplace=True) - pvi_ma.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _mode = mamode.lower()[0] if len(mamode) else "" - _props = f"{_mode}_{length}" - pvi.name = f"PVI" - pvi_ma.name = f"PVI{_props}" - pvi.category = pvi_ma.category = "volume" - - data = { pvi.name: pvi} - if np_close.size > length + 1: - data[pvi_ma.name] = pvi_ma - df = DataFrame(data, index=close.index) - - # Name and Category - df.name = pvi.name - df.category = pvi.category - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/pvo.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/pvo.py deleted file mode 100644 index 52df1424..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/pvo.py +++ /dev/null @@ -1,81 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int, IntFloat -from pandas_ta.overlap import ema -from pandas_ta.utils import v_offset, v_pos_default, v_scalar, v_series - - - -def pvo( - volume: Series, fast: Int = None, slow: Int = None, - signal: Int = None, scalar: IntFloat = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Percentage Volume Oscillator - - This indicator is a volume momentum oscillator. - - Sources: - * [fmlabs](https://www.fmlabs.com/reference/default.htm?url=PVO.htm) - - Parameters: - volume (Series): ```volume``` Series - fast (int): Fast MA period. Default: ```12``` - slow (int): Slow MA period. Default: ```26``` - signal (int): Signal period. Default: ```9``` - scalar (float): Scalar. Default: ```100``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 3 columns - """ - # Validate - fast = v_pos_default(fast, 12) - slow = v_pos_default(slow, 26) - signal = v_pos_default(signal, 9) - if slow < fast: - fast, slow = slow, fast - volume = v_series(volume, max(fast, slow, signal)) - - if volume is None: - return - - scalar = v_scalar(scalar, 100) - offset = v_offset(offset) - - # Calculate - fastma = ema(volume, length=fast) - slowma = ema(volume, length=slow) - pvo = scalar * (fastma - slowma) / slowma - - signalma = ema(pvo, length=signal) - histogram = pvo - signalma - - # Offset - if offset != 0: - pvo = pvo.shift(offset) - histogram = histogram.shift(offset) - signalma = signalma.shift(offset) - - # Fill - if "fillna" in kwargs: - pvo.fillna(kwargs["fillna"], inplace=True) - histogram.fillna(kwargs["fillna"], inplace=True) - signalma.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = f"_{fast}_{slow}_{signal}" - pvo.name = f"PVO{_props}" - histogram.name = f"PVOh{_props}" - signalma.name = f"PVOs{_props}" - pvo.category = histogram.category = signalma.category = "momentum" - - data = {pvo.name: pvo, histogram.name: histogram, signalma.name: signalma} - df = DataFrame(data, index=volume.index) - df.name = pvo.name - df.category = pvo.category - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/pvol.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/pvol.py deleted file mode 100644 index 87e65d7b..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/pvol.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import signed_series, v_bool, v_offset, v_series - - - -def pvol( - close: Series, volume: Series, signed: bool = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Price-Volume - - This indicator returns the product of Price & Volume (Price * Volume). - - Parameters: - close (Series): ```close``` Series - volume (Series): ```volume``` Series - signed (bool): Return with signs. Default: ```False``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - close = v_series(close) - volume = v_series(volume) - signed = v_bool(signed, False) - offset = v_offset(offset) - - # Calculate - pvol = close * volume - if signed: - pvol *= signed_series(close, 1) - - # Offset - if offset != 0: - pvol = pvol.shift(offset) - - # Fill - if "fillna" in kwargs: - pvol.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - pvol.name = f"PVOL" - pvol.category = "volume" - - return pvol diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/pvr.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/pvr.py deleted file mode 100644 index 30060cb5..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/pvr.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import nan -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import v_drift, v_series - - - -def pvr( - close: Series, volume: Series, - drift: Int = None, **kwargs: DictLike -) -> Series: - """Price Volume Rank - - This indicator, by Anthony J. Macek, is a simple rank computation with - close and volume values. - - Sources: - * Anthony J. Macek, June, 1994 issue of Technical Analysis of - Stocks & Commodities (TASC) Magazine - * [fmlabs](https://www.fmlabs.com/reference/default.htm?url=PVrank.htm) - - Parameters: - close (Series): ```close``` Series - volume (Series): ```volume``` Series - drift (int): Difference amount. Default: ```1``` - - Returns: - (Series): 1 column - - Note: Signals - - Buy < 2.5 - - Sell > 2.5 - """ - # Validate - drift = v_drift(drift) - close = v_series(close, drift) - volume = v_series(volume, drift) - - if close is None or volume is None: - return - - # Calculate - close_diff = close.diff(drift).fillna(0) - volume_diff = volume.diff(drift).fillna(0) - - pvr = Series(nan, index=close.index) - - pvr.loc[(close_diff >= 0) & (volume_diff >= 0)] = 1 - pvr.loc[(close_diff >= 0) & (volume_diff < 0)] = 2 - pvr.loc[(close_diff < 0) & (volume_diff >= 0)] = 3 - pvr.loc[(close_diff < 0) & (volume_diff < 0)] = 4 - - # Name and Category - pvr.name = f"PVR" - pvr.category = "volume" - - return pvr diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/pvt.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/pvt.py deleted file mode 100644 index 5eb43ed3..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/pvt.py +++ /dev/null @@ -1,59 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.momentum import roc -from pandas_ta.utils import v_drift, v_offset, v_series - - - -def pvt( - close: Series, volume: Series, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Price-Volume Trend - - This indicator attempts to quantify money flow. - - Sources: - * [tradingview](https://www.tradingview.com/wiki/Price_Volume_Trend_(PVT)) - - Parameters: - close (Series): ```close``` Series - volume (Series): ```volume``` Series - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - drift = v_drift(drift) - _drift = drift + 1 - close = v_series(close, _drift) - volume = v_series(volume, _drift) - - if close is None or volume is None: - return - - offset = v_offset(offset) - - # Calculate - pv = roc(close=close, length=drift) * volume - pvt = pv.cumsum() - - # Offset - if offset != 0: - pvt = pvt.shift(offset) - - # Fill - if "fillna" in kwargs: - pvt.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - pvt.name = f"PVT" - pvt.category = "volume" - - return pvt diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/tsv.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/tsv.py deleted file mode 100644 index 322ec695..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/tsv.py +++ /dev/null @@ -1,104 +0,0 @@ -# -*- coding: utf-8 -*- -from numpy import isnan -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.ma import ma -from pandas_ta.utils import ( - signed_series, - v_drift, - v_mamode, - v_pos_default, - v_offset, - v_series, - zero -) - - - -def tsv( - close: Series, volume: Series, - length: Int = None, signal: Int = None, - mamode: str = None, drift: Int = None, - offset: Int = None, **kwargs: DictLike -) -> DataFrame: - """Time Segmented Value - - This indicator, by Worden Brothers Inc., attempts to quantify the amount - of money flowing at various time segments of price and time; similar to - On Balance Volume. - - Sources: - * [tc2000](https://help.tc2000.com/m/69404/l/747088-time-segmented-volume) - * [tradingview](https://www.tradingview.com/script/6GR4ht9X-Time-Segmented-Volume/) - * [usethinkscript](https://usethinkscript.com/threads/time-segmented-volume-for-thinkorswim.519/) - - Parameters: - close (Series): ```close``` Series - volume (Series): ```volume``` Series - length (int): The period. Default: ```18``` - signal (int): Signal period. Default: ```10``` - mamode (str): See ```help(ta.ma)```. Default: ```"sma"``` - drift (int): Difference amount. Default: ```1``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 3 columns - - Note: - * The zero line is called the baseline. - * Entries and exits signals occur when crossing the baseline. - """ - # Validate - length = v_pos_default(length, 18) - signal = v_pos_default(signal, 10) - _length = max(length, signal) + 1 - close = v_series(close, _length) - - if close is None: - return - - mamode = v_mamode(mamode, "sma") - drift = v_drift(drift) - offset = v_offset(offset) - - # Calculate - signed_volume = volume * signed_series(close, 1) # > 0 - signed_volume[signed_volume < 0] = -signed_volume # < 0 - signed_volume.apply(zero) # ~ 0 - cvd = signed_volume * close.diff(drift) - - tsv = cvd.rolling(length).sum() - if all(isnan(tsv)): - return # Emergency Break - - signal_ = ma(mamode, tsv, length=signal) - ratio = tsv / signal_ - - # Offset - if offset != 0: - tsv = tsv.shift(offset) - signal_ = signal.shift(offset) - ratio = ratio.shift(offset) - - # Fill - if "fillna" in kwargs: - tsv.fillna(kwargs["fillna"], inplace=True) - signal_.fillna(kwargs["fillna"], inplace=True) - ratio.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = f"_{length}_{signal}" - tsv.name = f"TSV{_props}" - signal_.name = f"TSVs{_props}" - ratio.name = f"TSVr{_props}" - tsv.category = signal_.category = ratio.category = "volume" - - data = {tsv.name: tsv, signal_.name: signal_, ratio.name: ratio} - df = DataFrame(data, index=close.index) - df.name = f"TSV{_props}" - df.category = tsv.category - - return df diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/vhm.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/vhm.py deleted file mode 100644 index 1e039b5a..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/vhm.py +++ /dev/null @@ -1,76 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from statistics import pstdev -from pandas_ta._typing import DictLike, Int -from pandas_ta.ma import ma -from pandas_ta.utils import ( - v_mamode, - v_offset, - v_pos_default, - v_series -) - - - -def vhm( - volume: Series, length: Int = None, std_length = None, - mamode: str = None, offset: Int = None, **kwargs: DictLike - ) -> Series: - """Volume Heatmap - - This indicator attempts to quantify volume trend strength of - specified length. - - Sources: - * [tradingview](https://www.tradingview.com/script/unWex8N4-Heatmap-Volume-xdecow/) - - Parameters: - volume (Series): ```volume``` Series - length (int): The period. Default: ```610``` - std_length (int): Standard devation. Default: ```610``` - mamode (str): Mean MA. See ```help(ta.ma)```. Default: ```"sma"``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - - Note: Signals - - Extremely Cold: ```vhm <= -0.5``` - - Cold: ```-0.5 < vhm <= 1.0``` - - Medium: ```1.0 < vhm <= 2.5``` - - Hot: ```2.5 < vhm <= 4.0``` - - Extremely Hot: ```vhm >= 4``` - """ - # Validate - length = v_pos_default(length, 610) - std_length = v_pos_default(std_length, length) - _length = max(length, std_length) - volume = v_series(volume, _length) - - if volume is None: - return - - mamode = v_mamode(mamode, "sma") - offset = v_offset(offset) - - # Calculate - mu = ma(mamode, volume, length=length) - vhm = (volume - mu) / pstdev(volume, std_length) - - # Offset - if offset != 0: - vhm = vhm.shift(offset) - - # Fill - if "fillna" in kwargs: - vhm.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - _props = f"VHM_{length}" - vhm.name = _props if length == std_length else f"{_props}_{std_length}" - vhm.category = "volume" - - return vhm diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/vp.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/vp.py deleted file mode 100644 index 52083bb3..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/vp.py +++ /dev/null @@ -1,128 +0,0 @@ -# -*- coding: utf-8 -*- -from warnings import simplefilter -from numpy import array_split, mean, sum -from pandas import DataFrame, Series, concat, cut -from pandas_ta._typing import DictLike, Int -from pandas_ta.utils import signed_series, v_bool, v_pos_default, v_series - - - -def vp( - close: Series, volume: Series, - width: Int = None, sort: bool = None, - **kwargs: DictLike -) -> DataFrame: - """Volume Profile - - This indicator attempts to quantify volume across binned price ranges of - certain width. - - Sources: - * [ranchodinero](http://www.ranchodinero.com/volume-tpo-essentials/) - * [stockcharts](https://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:volume_by_price) - * [tradingtechnologies](https://www.tradingtechnologies.com/blog/2013/05/15/volume-at-price/) - * [tradingview](https://www.tradingview.com/wiki/Volume_Profile) - - Parameters: - close (Series): ```close``` Series - volume (Series): ```volume``` Series - width (int): Source distrubution count. Default: ```10``` - sort (value): Sort ```close``` before splitting into ranges. - Default: ```False``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (DataFrame): 5 columns - - Note: - * By default, sorts by date index or chronological. - * Value Area is not calculated. - - Warning: - **Volume Profile** not a Time ```Series```. It is a volume distribution - snapshot for an arbitrary ```DateTime``` Index and thus can not be - concatenated onto the existing ```DataFrame```. - - """ - # Validate - width = v_pos_default(width, 10) - close = v_series(close, width) - volume = v_series(volume, width) - - if close is None or volume is None: - return - - sort = v_bool(sort, False) - - # Calculate - signed_price = signed_series(close, 1) - pos_volume = volume * signed_price[signed_price > 0] - pos_volume.name = volume.name - neg_volume = -volume * signed_price[signed_price < 0] - neg_volume.name = volume.name - neut_volume = volume + signed_price[signed_price == 0] - neut_volume.name = volume.name - vp = concat([close, pos_volume, neg_volume, neut_volume], axis=1) - - close_col = f"{vp.columns[0]}" - high_price_col = f"high_{close_col}" - low_price_col = f"low_{close_col}" - mean_price_col = f"mean_{close_col}" - - volume_col = f"{vp.columns[1]}" - pos_volume_col = f"pos_{volume_col}" - neg_volume_col = f"neg_{volume_col}" - neut_volume_col = f"neut_{volume_col}" - total_volume_col = f"total_{volume_col}" - vp.columns = [close_col, pos_volume_col, neg_volume_col, neut_volume_col] - - simplefilter(action="ignore", category=FutureWarning) - # sort: Sort by close before splitting into ranges. Default: False - # If False, it sorts by date index or chronological versus by price - if sort: - vp[mean_price_col] = vp[close_col] - - vpdf = vp.groupby( - cut(vp[close_col], width, include_lowest=True, precision=2), - observed=False - ).agg({ - mean_price_col: mean, - pos_volume_col: sum, - neg_volume_col: sum, - neut_volume_col: sum - }) - - vpdf[low_price_col] = [x.left for x in vpdf.index] - vpdf[high_price_col] = [x.right for x in vpdf.index] - vpdf = vpdf.reset_index(drop=True) - - vpdf = vpdf[[ - low_price_col, mean_price_col, high_price_col, - pos_volume_col, neg_volume_col, neut_volume_col - ]] - else: - vp_ranges = array_split(vp, width) - result = list({ - low_price_col: r[close_col].min(), - mean_price_col: r[close_col].mean(), - high_price_col: r[close_col].max(), - pos_volume_col: r[pos_volume_col].sum(), - neg_volume_col: r[neg_volume_col].sum(), - neut_volume_col: r[neut_volume_col].sum(), - } for r in vp_ranges) - - vpdf = DataFrame(result) - - vpdf[total_volume_col] = vpdf[pos_volume_col] + vpdf[neg_volume_col] - - # Fill - if "fillna" in kwargs: - vpdf.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - vpdf.name = f"VP_{width}" - vpdf.category = "volume" - - return vpdf diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/vwap.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/vwap.py deleted file mode 100644 index b6ca3d4c..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/vwap.py +++ /dev/null @@ -1,120 +0,0 @@ -# -*- coding: utf-8 -*- -from warnings import simplefilter -from pandas import DataFrame, Series -from pandas_ta._typing import DictLike, Int, List -from pandas_ta.overlap import hlc3 -from pandas_ta.utils import v_datetime_ordered, v_list, v_offset, v_series - - - -def vwap( - high: Series, low: Series, close: Series, volume: Series, - anchor: str = None, bands: List = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Volume Weighted Average Price - - This indicator computes the Volume Weighted Average Price. - - Sources: - * [tradingview](https://www.tradingview.com/wiki/Volume_Weighted_Average_Price_(VWAP)) - * [Trading Technologies](https://www.tradingtechnologies.com/help/x-study/technical-indicator-definitions/volume-weighted-average-price-vwap/) - * [Stockcharts](https://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:vwap_intraday) - * [Sierra Chart](https://www.sierrachart.com/index.php?page=doc/StudiesReference.php&ID=108&Name=Volume_Weighted_Average_Price_-_VWAP_-_with_Standard_Deviation_Lines) - - Parameters: - high (Series): ```high``` Series - low (Series): ```low``` Series - close (Series): ```close``` Series - volume (Series): ```volume``` Series - anchor (str): VWAP Anchor. Default: ```"D"```. - bands (list): List of positive ```IntFloat``` deviations. - Default: ```[]``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series | pd.DataFrame): ```DataFrame``` when ```bands``` is set. - Default: ```Series``` - - Note: - * Commonly used with intraday charts to identify general direction. - * Depending on the index values, it will implement various - [Timeseries Offset Aliases](https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#timeseries-offset-aliases) - - Tip: - * Negative bands are computed automatically. - """ - # Validate - _length = 1 - high = v_series(high, _length) - low = v_series(low, _length) - close = v_series(close, _length) - volume = v_series(volume, _length) - - if high is None or low is None or close is None or volume is None: - return - - bands = v_list(bands) - offset = v_offset(offset) - - if anchor and isinstance(anchor, str) and len(anchor) >= 1: - anchor = anchor.upper() - else: - anchor = "D" - - typical_price = hlc3(high=high, low=low, close=close) - if not v_datetime_ordered(volume) or \ - not v_datetime_ordered(typical_price): - print("[!] VWAP requires an ordered DatetimeIndex.") - return - - # Calculate - _props = f"VWAP_{anchor}" - wp = typical_price * volume - simplefilter(action="ignore", category=UserWarning) - vwap = wp.groupby(wp.index.to_period(anchor)).cumsum() \ - / volume.groupby(volume.index.to_period(anchor)).cumsum() - - if bands and len(bands): - # Calculate vwap stdev bands - vwap_var = volume * (typical_price - vwap) ** 2 - vwap_var_sum = vwap_var \ - .groupby(vwap_var.index.to_period(anchor)).cumsum() - vwap_volume_sum = volume \ - .groupby(volume.index.to_period(anchor)).cumsum() - std_volume_weighted = (vwap_var_sum / vwap_volume_sum) ** 0.5 - - # Name and Category - vwap.name = _props - vwap.category = "overlap" - - if bands: - df = DataFrame({vwap.name: vwap}, index=close.index) - for i in bands: - df[f"{_props}_L_{i}"] = vwap - i * std_volume_weighted - df[f"{_props}_U_{i}"] = vwap + i * std_volume_weighted - df[f"{_props}_L_{i}"].name = df[f"{_props}_U_{i}"].name = _props - df[f"{_props}_L_{i}"].category = "overlap" - df[f"{_props}_U_{i}"].category = "overlap" - df.name = _props - df.category = "overlap" - - # Offset - if offset != 0: - if bands and not df.empty: - df = df.shift(offset) - vwap = vwap.shift(offset) - - # Fill - if "fillna" in kwargs: - if bands and not df.empty: - df.fillna(kwargs["fillna"], inplace=True) - else: - vwap.fillna(kwargs["fillna"], inplace=True) - - if bands and not df.empty: - return df - return vwap diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/vwma.py b/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/vwma.py deleted file mode 100644 index d1fad3c4..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/src/pandas_ta/volume/vwma.py +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series -from pandas_ta._typing import DictLike, Int -from pandas_ta.overlap import sma -from pandas_ta.utils import v_offset, v_pos_default, v_series - - - -def vwma( - close: Series, volume: Series, length: Int = None, - offset: Int = None, **kwargs: DictLike -) -> Series: - """Volume Weighted Moving Average - - Computes a weighted average using price and volume. - - Sources: - * [motivewave](https://www.motivewave.com/studies/volume_weighted_moving_average.htm) - - Parameters: - close (Series): ```close``` Series - volume (Series): ```volume``` Series - length (int): The period. Default: ```10``` - offset (int): Post shift. Default: ```0``` - - Other Parameters: - fillna (value): ```pd.DataFrame.fillna(value)``` - - Returns: - (Series): 1 column - """ - # Validate - length = v_pos_default(length, 10) - close = v_series(close, length) - volume = v_series(volume, length) - - if close is None or volume is None: - return - - offset = v_offset(offset) - - # Calculate - pv = close * volume - vwma = sma(close=pv, length=length) / sma(close=volume, length=length) - - # Offset - if offset != 0: - vwma = vwma.shift(offset) - - # Fill - if "fillna" in kwargs: - vwma.fillna(kwargs["fillna"], inplace=True) - - # Name and Category - vwma.name = f"VWMA_{length}" - vwma.category = "overlap" - - return vwma diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/__init__.py b/temp_pandas_ta/pandas_ta-0.4.71b0/tests/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/config.py b/temp_pandas_ta/pandas_ta-0.4.71b0/tests/config.py deleted file mode 100644 index 893e14a3..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/config.py +++ /dev/null @@ -1,96 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from pathlib import Path - -from numpy import array -from pandas import DataFrame, DatetimeIndex, read_csv - -import pandas_ta -from pandas_ta._typing import DictLike, IntFloat - - - -sample_adx_data = read_csv( - f"data/ADX_D.csv", index_col=0, - parse_dates=True, date_format="%f" -) - -ALERT: str = f"[!]" -INFO: str = f"[i]" -TEST: str = f"[T]" - -CORRELATION: str = "corr" # "sem" -CORRELATION_THRESHOLD: IntFloat = 0.99 # Less than 0.99 is undesirable -VERBOSE: bool = False - -welles_wilder_df = DataFrame({ - "open": array([50, 50.7, 51.7, 52.5, 53.6, 54.4, 52.9, 52]), - "high": array([51.2, 51.8, 52.9, 53.7, 54.8, 54.4, 53.2, 52.7]), - "low": array([49.8, 50.3, 51.7, 52.3, 53.5, 52.9, 52, 52]), - "close": array([50.9, 51.5, 52.8, 53.5, 54.7, 53, 52, 52.2]) -}) - - -def error_analysis( - df: DataFrame, kind: str, msg: str, - icon: str = INFO, newline: bool = True -): - if VERBOSE: - s = f"{icon} {df.name}['{kind}']: {msg}" - if newline: - s = f"\n{s}" - print(s) - - -def load(**kwargs: DictLike): - kwargs.setdefault("ticker", "SPY") - kwargs.setdefault("fpath", "data/TEST_D.csv") - kwargs.setdefault("interval", "d") - - kwargs.setdefault("index_col", 0) - kwargs.setdefault("parse_dates", True) - - kwargs.setdefault("verbose", False) - - print(f"\n{TEST} Pandas TA on {datetime.datetime.now()}") - fpath = Path(kwargs["fpath"]) - - df = read_csv( - fpath, - index_col=kwargs["index_col"], - parse_dates=kwargs["parse_dates"], - ) - - kwargs.setdefault("n", None) - if isinstance(kwargs["n"], int): - if kwargs["n"] > 0: - df = df[:kwargs["n"]] - elif kwargs['n'] < 0: - df = df[kwargs["n"]:] - - df.columns = df.columns.str.lower() - if kwargs["verbose"]: - print(f"{INFO} Loading {kwargs['ticker']}{df.shape} from {fpath}") - print(f"{INFO} From {df.index[0]} to {df.index[-1]}\n{df}\n") - return df - -_tdpy = pandas_ta.RATE["TRADING_DAYS_PER_YEAR"] -# At least 90 (88 with trix with default values) bars/rows/observations are -# needed to test All indicators individually and within the DataFrame -# extension. A larger sample may be required because of the Unstable Period -sample_data = load( - fpath="data/TEST_D.csv", - n = [ - -2 * _tdpy, -_tdpy, - -200, -89, 0, 89, 200, - _tdpy, 2 * _tdpy - ][4], - verbose=VERBOSE - ) - - -# Example multiindex download code -# _df = DataFrame() -# tickers =["spy", "mint"] -# data = {t:_df.ta.ticker(t, period="1y", timed=True) for t in tickers if len(t) > 1} -# assets = concat(data, names=["ticker", "datetime"], verify_integrity=True) diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/conftest.py b/temp_pandas_ta/pandas_ta-0.4.71b0/tests/conftest.py deleted file mode 100644 index de5bf5f7..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/conftest.py +++ /dev/null @@ -1,155 +0,0 @@ -# -*- coding: utf-8 -*- -import sys -sys.dont_write_bytecode = True - -from os import system as os_system - -import pytest -import pandas_ta as ta - -from pandas import read_csv - - - -TEST_ROWS = 200 -TEST_CSV = [f"data/TEST_D.csv", f"data/ALT_D.csv"][0] - -BEEP = False -PLAY_BEEP = f"osascript -e beep" - - - -@pytest.fixture(name="df", scope="function") -def testdf(): - """Yields a truncated df from TEST_CSV file""" - df = read_csv(TEST_CSV, index_col=0, parse_dates=True) - df.columns = df.columns.str.lower() - df.drop(columns=["dividends", "stock splits", "vwap"], errors="ignore", inplace=True) - df = df.iloc[:,:5] - # print(f"{df.columns=}") - - n = df.shape[0] - if n < TEST_ROWS: - print(f"{n=} {TEST_ROWS=}") - yield df.iloc[:TEST_ROWS] - - del df - if BEEP: os_system(PLAY_BEEP) - - -@pytest.fixture(scope="function") -def all_study(): - """Returns the All Study""" - return ta.AllStudy - - -@pytest.fixture(scope="function") -def common_study(): - """Returns the Common Study""" - return ta.CommonStudy - - -@pytest.fixture(scope="function") -def custom_study_a(): - """Returns a Custom Study with a chained/composed indicator: 'ema(CUMLOGRET_1, 5)'. - This Study only works when cores=0. When using mulptiprocessing (cores > 0), - the multiprocesser might miss the results of the indicator - 'CUMLOGRET_1 = log_return(cumulative=True)' - """ - _ta = [ - {"kind": "cdl_pattern", "name": "tristar"}, # 1 - {"kind": "rsi"}, # 1 - {"kind": "macd"}, # 3 - {"kind": "sma", "length": 50}, # 1 - {"kind": "trix"}, # 2 - {"kind": "bbands", "length": 20}, # 5 - {"kind": "log_return", "cumulative": True}, # 1 - {"kind": "ema", "close": "CUMLOGRET_1", "length": 5, "suffix": "CLR"} # 1 - ] - return ta.Study( - name="Commons with Cumulative Log Return EMA Chain", - ta=_ta, - # cores=0, - description="Common indicators with specific lengths and a chained indicator" - ) - - -@pytest.fixture(scope="function") -def custom_study_b(): - """Returns a Custom Study that allows setting indicator values by - parameter index as a tuple instead of using a named parameter""" - _ta = [ - {"kind": "ema", "params": (5,)}, # 1 - {"kind": "fisher", "params": (13, 7)} # 2 - ] - return ta.Study( - name="Custom Args Tuple", - ta=_ta, - description="Allow for easy filling in indicator arguments by argument placement" - ) - - -@pytest.fixture(scope="function") -def custom_study_c(): - """Returns a Custom Study that makes it easy to rename individual - indicator resultant column names""" - return ta.Study( - name="Custom Col Numbers Tuple", - ta=[{"kind": "bbands", "col_names": ("LB", "MB", "UB", "BW", "BP")}], - description="Allow for easy renaming of resultant columns" - ) - - -@pytest.fixture(scope="function") -def custom_study_d(): - """Returns a Custom Study that makes it easily return individual - indicator resultant columns by column number (col_numbers) as a tuple""" - return ta.Study( - name="Custom Col Numbers Tuple", - ta=[ - {"kind": "macd", "col_numbers": (1,)}, # macd histogram - {"kind": "bbands", "col_numbers": (0,2)} # bbands lower and upper - ], - description="Allow for easy selection of resultant columns" - ) - - -@pytest.fixture(scope="function") -def custom_study_e(): - """Returns a Custom Study that has non default indicator parameters and - an example of indicator composition/chaining: 'ema(CUMLOGRET_1, 5)'""" - _ta = [ - {"kind": "amat", "fast": 20, "slow": 50 }, # 2 - {"kind": "log_return", "cumulative": True}, # 1 - {"kind": "ema", "close": "CUMLOGRET_1", "length": 5} # 1 - ] - - return ta.Study( - name="AMAT Log Returns", - ta=_ta, - cores=0, - description="AMAT Log Returns" - ) - - -@pytest.fixture(scope="function") -def custom_study_f(): - """ - Scaling Study. Chained Indicators are unsupported. - """ - _ta = [ - {"kind": "ichimoku"}, - {"kind": "sma", "close": "volume", "length": 20, "prefix": "VOLUME"}, - {"kind": "sma", "length": 10}, - {"kind": "rsi"}, - {"kind": "macd"}, - {"kind": "bbands", "length": 20}, - {"kind": "cci"}, - {"kind": "uo"}, - ] - return ta.Study( - name="Scaling Study", - ta=_ta, - cores=0, - description="Example Scaling Group" - ) diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_indicator_candle.py b/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_indicator_candle.py deleted file mode 100644 index 88c1631b..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_indicator_candle.py +++ /dev/null @@ -1,87 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series -import pandas.testing as pdt -import talib as tal - -import pandas_ta as ta - -from .config import CORRELATION, CORRELATION_THRESHOLD, error_analysis - - - -# TA Lib style Tests -def test_cdl_doji(df): - result = ta.cdl_doji(df.open, df.high, df.low, df.close) - assert isinstance(result, Series) - assert result.name == "CDL_DOJI_10_0.1" - - try: - expected = tal.CDLDOJI(df.open, df.high, df.low, df.close) - pdt.assert_series_equal(result, expected, check_names=False, check_dtype=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - -def test_cdl_inside(df): - result = ta.cdl_inside(df.open, df.high, df.low, df.close) - assert isinstance(result, Series) - assert result.name == "CDL_INSIDE" - - result = ta.cdl_inside(df.open, df.high, df.low, df.close, asbool=True) - assert isinstance(result, Series) - assert result.name == "CDL_INSIDE" - - -def test_cdl_pattern(df): - result = ta.cdl_pattern(df.open, df.high, df.low, df.close, name="all") - assert isinstance(result, DataFrame) - assert len(result.columns) == len(ta.CDL_PATTERN_NAMES) - - result = ta.cdl_pattern(df.open, df.high, df.low, df.close, name="doji") - assert isinstance(result, DataFrame) - - result = ta.cdl_pattern(df.open, df.high, df.low, df.close, name=["doji", "inside"]) - assert isinstance(result, DataFrame) - - -def test_cdl_z(df): - result = ta.cdl_z(df.open, df.high, df.low, df.close) - assert isinstance(result, DataFrame) - assert result.name == "CDL_Z_30_1" - - -def test_ha(df): - result = ta.ha(df.open, df.high, df.low, df.close) - assert isinstance(result, DataFrame) - assert result.name == "Heikin-Ashi" - - - -# DataFrame Extension Tests -def test_ext_cdl_doji(df): - df.ta.cdl_pattern("doji", append=True) - assert df.columns[-1] == "CDL_DOJI_10_0.1" - - -def test_ext_cdl_inside(df): - df.ta.cdl_pattern("inside", append=True) - assert df.columns[-1] == "CDL_INSIDE" - - -def test_ext_cdl_z(df): - df.ta.cdl_z(append=True) - assert list(df.columns[-4:]) == [ - "open_Z_30_1", "high_Z_30_1", "low_Z_30_1", "close_Z_30_1" - ] - - -def test_ext_ha(df): - df.ta.ha(append=True) - assert list(df.columns[-4:]) == [ - "HA_open", "HA_high", "HA_low", "HA_close" - ] diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_indicator_cycles.py b/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_indicator_cycles.py deleted file mode 100644 index 8f15fffd..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_indicator_cycles.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import Series - -import pandas_ta as ta - - - -# TA Lib style Tests -def test_ebsw(df): - result = ta.ebsw(df.close) - assert isinstance(result, Series) - assert result.name == "EBSW_40_10" - - -def test_reflex(df): - result = ta.reflex(df.close) - assert isinstance(result, Series) - assert result.name == "REFLEX_20_20_0.04" - - - -# DataFrame Extension Tests -def test_ext_ebsw(df): - df.ta.ebsw(append=True) - assert df.columns[-1] == "EBSW_40_10" - - -def test_ext_reflex(df): - df.ta.reflex(append=True) - assert df.columns[-1] == "REFLEX_20_20_0.04" diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_indicator_momentum.py b/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_indicator_momentum.py deleted file mode 100644 index dde84698..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_indicator_momentum.py +++ /dev/null @@ -1,845 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series, concat -import pandas.testing as pdt -from pytest import mark -import talib as tal - -import pandas_ta as ta - -from .config import CORRELATION, CORRELATION_THRESHOLD, error_analysis - - - -# TA Lib style Tests -def test_ao(df): - result = ta.ao(df.high, df.low) - assert isinstance(result, Series) - assert result.name == "AO_5_34" - - -def test_apo(df): - result = ta.apo(df.close, talib=False) - assert isinstance(result, Series) - assert result.name == "APO_12_26" - - try: - expected = tal.APO(df.close) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - assert corr > CORRELATION_THRESHOLD - print(f"{corr=}") - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.apo(df.close) - assert isinstance(result, Series) - assert result.name == "APO_12_26" - - -def test_bias(df): - result = ta.bias(df.close) - assert isinstance(result, Series) - assert result.name == "BIAS_SMA_26" - - -def test_bop(df): - result = ta.bop(df.open, df.high, df.low, df.close, talib=False) - assert isinstance(result, Series) - assert result.name == "BOP" - - try: - expected = tal.BOP(df.open, df.high, df.low, df.close) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - assert corr > CORRELATION_THRESHOLD - print(f"{corr=}") - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.bop(df.open, df.high, df.low, df.close) - assert isinstance(result, Series) - assert result.name == "BOP" - - -def test_brar(df): - result = ta.brar(df.open, df.high, df.low, df.close) - assert isinstance(result, DataFrame) - assert result.name == "BRAR_26" - - -def test_cci(df): - result = ta.cci(df.high, df.low, df.close, talib=False) - assert isinstance(result, Series) - assert result.name == "CCI_14_0.015" - - try: - expected = tal.CCI(df.high, df.low, df.close) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - assert corr > CORRELATION_THRESHOLD - print(f"{corr=}") - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.cci(df.high, df.low, df.close) - assert isinstance(result, Series) - assert result.name == "CCI_14_0.015" - - -def test_cfo(df): - result = ta.cfo(df.close) - assert isinstance(result, Series) - assert result.name == "CFO_9" - - -def test_cg(df): - result = ta.cg(df.close) - assert isinstance(result, Series) - assert result.name == "CG_10" - - -def test_cmo(df): - result = ta.cmo(df.close, talib=False) - assert isinstance(result, Series) - assert result.name == "CMO_14" - - try: - expected = tal.CMO(df.close) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - assert corr > CORRELATION_THRESHOLD - print(f"{corr=}") - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.cmo(df.close) - assert isinstance(result, Series) - assert result.name == "CMO_14" - - -def test_coppock(df): - result = ta.coppock(df.close) - assert isinstance(result, Series) - assert result.name == "COPC_11_14_10" - - -def test_crsi(df): - result = ta.crsi(df.close) - assert isinstance(result, Series) - assert result.name == "CRSI_3_2_100" - - -def test_cti(df): - result = ta.cti(df.close) - assert isinstance(result, Series) - assert result.name == "CTI_12" - - -def test_dm(df): - result = ta.dm(df.high, df.low, talib=False) - assert isinstance(result, DataFrame) - assert result.name == "DM_14" - - try: - expected_pos = tal.PLUS_DM(df.high, df.low) - expected_neg = tal.MINUS_DM(df.high, df.low) - expecteddf = DataFrame({"DMP_14": expected_pos, "DMN_14": expected_neg}) - pdt.assert_frame_equal(result, expecteddf) - except AssertionError: - try: - dmp_corr = ta.utils.df_error_analysis(result.iloc[:, 0], expecteddf.iloc[:, 0]) - assert dmp_corr > CORRELATION_THRESHOLD - print(f"{dmp_corr=}") - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - try: - dmn_corr = ta.utils.df_error_analysis(result.iloc[:, 1], expecteddf.iloc[:, 1]) - assert dmn_corr > CORRELATION_THRESHOLD - print(f"{dmn_corr=}") - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.dm(df.high, df.low) - assert isinstance(result, DataFrame) - assert result.name == "DM_14" - - -def test_er(df): - result = ta.er(df.close) - assert isinstance(result, Series) - assert result.name == "ER_10" - - -def test_eri(df): - result = ta.eri(df.high, df.low, df.close) - assert isinstance(result, DataFrame) - assert result.name == "ERI_13" - - -def test_exhc(df): - result = ta.exhc(df.close) - assert isinstance(result, DataFrame) - assert result.name == "EXHCa" - - result = ta.exhc(df.close, show_all=False) - assert isinstance(result, DataFrame) - assert result.name == "EXHC" - - -def test_fisher(df): - result = ta.fisher(df.high, df.low) - assert isinstance(result, DataFrame) - assert result.name == "FISHERT_9_1" - - -def test_inertia(df): - result = ta.inertia(df.close) - assert isinstance(result, Series) - assert result.name == "INERTIA_20_14" - - result = ta.inertia(df.close, df.high, df.low, refined=True) - assert isinstance(result, Series) - assert result.name == "INERTIAr_20_14" - - result = ta.inertia(df.close, df.high, df.low, thirds=True) - assert isinstance(result, Series) - assert result.name == "INERTIAt_20_14" - - -def test_kdj(df): - result = ta.kdj(df.high, df.low, df.close) - assert isinstance(result, DataFrame) - assert result.name == "KDJ_9_3" - - -def test_kst(df): - result = ta.kst(df.close) - assert isinstance(result, DataFrame) - assert result.name == "KST_10_15_20_30_10_10_10_15_9" - - -def test_macd(df): - result = ta.macd(df.close, talib=False) - assert isinstance(result, DataFrame) - assert result.name == "MACD_12_26_9" - - try: - expected = tal.MACD(df.close) - expecteddf = DataFrame({ - "MACDh_12_26_9": expected[2], - "MACDs_12_26_9": expected[1], - "MACD_12_26_9": expected[0] - }) - pdt.assert_frame_equal(result, expecteddf) - except AssertionError: - try: - macd_corr = ta.utils.df_error_analysis(result, expected) - print(f"{macd_corr=}") - assert macd_corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result.iloc[:, 0], CORRELATION, ex) - - try: - history_corr = ta.utils.df_error_analysis(result, expected) - print(f"{history_corr=}") - assert history_corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result.iloc[:, 1], CORRELATION, ex) - - try: - signal_corr = ta.utils.df_error_analysis(result, expected) - print(f"{signal_corr=}") - assert signal_corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result.iloc[:, 2], CORRELATION, ex) - - result = ta.macd(df.close) - assert isinstance(result, DataFrame) - assert result.name == "MACD_12_26_9" - - result = ta.macd(df.close, asmode=True) - assert isinstance(result, DataFrame) - assert result.name == "MACDAS_12_26_9" - - -def test_mom(df): - result = ta.mom(df.close, talib=False) - assert isinstance(result, Series) - assert result.name == "MOM_10" - - try: - expected = tal.MOM(df.close) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.mom(df.close) - assert isinstance(result, Series) - assert result.name == "MOM_10" - - -def test_pgo(df): - result = ta.pgo(df.high, df.low, df.close, asmode=True) - assert isinstance(result, Series) - assert result.name == "PGO_14" - - -def test_ppo(df): - result = ta.ppo(df.close, talib=False) - assert isinstance(result, DataFrame) - assert result.name == "PPO_12_26_9" - - try: - expected = tal.PPO(df.close) - pdt.assert_series_equal(result.iloc[:,0], expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.ppo(df.close) - assert isinstance(result, DataFrame) - assert result.name == "PPO_12_26_9" - - -def test_psl(df): - result = ta.psl(df.close, asmode=True) - assert isinstance(result, Series) - assert result.name == "PSL_12" - - -def test_qqe(df): - result = ta.qqe(df.close, asmode=True) - assert isinstance(result, DataFrame) - assert result.name == "QQE_14_5_4.236" - - -def test_roc(df): - result = ta.roc(df.close, talib=False) - assert isinstance(result, Series) - assert result.name == "ROC_10" - - try: - expected = tal.ROC(df.close) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.roc(df.close) - assert isinstance(result, Series) - assert result.name == "ROC_10" - - -def test_rsi(df): - result = ta.rsi(df.close, talib=False) - assert isinstance(result, Series) - assert result.name == "RSI_14" - - try: - expected = tal.RSI(df.close) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.rsi(df.close) - assert isinstance(result, Series) - assert result.name == "RSI_14" - - -def test_rsx(df): - result = ta.rsx(df.close) - assert isinstance(result, Series) - assert result.name == "RSX_14" - - -def test_rvgi(df): - result = ta.rvgi(df.open, df.high, df.low, df.close) - assert isinstance(result, DataFrame) - assert result.name == "RVGI_14_4" - - -def test_slope(df): - result = ta.slope(df.close) - assert isinstance(result, Series) - assert result.name == "SLOPE_1" - - result = ta.slope(df.close, as_angle=True) - assert isinstance(result, Series) - assert result.name == "ANGLEr_1" - - result = ta.slope(df.close, as_angle=True, to_degrees=True) - assert isinstance(result, Series) - assert result.name == "ANGLEd_1" - - -def test_smc(df): - result = ta.smc(df.open, df.high, df.low, df.close) - assert isinstance(result, DataFrame) - assert result.name == "SMC_14_50_20_5" - - -def test_smi(df): - result = ta.smi(df.close) - assert isinstance(result, DataFrame) - assert result.name == "SMI_5_20_5_1.0" - - result = ta.smi(df.close, scalar=10) - assert isinstance(result, DataFrame) - assert result.name == "SMI_5_20_5_10.0" - - -def test_squeeze(df): - result = ta.squeeze(df.high, df.low, df.close) - assert isinstance(result, DataFrame) - assert result.name == "SQZ_20_2.0_20_1.5" - - result = ta.squeeze(df.high, df.low, df.close, tr=False) - assert isinstance(result, DataFrame) - assert result.name == "SQZhlr_20_2.0_20_1.5" - - result = ta.squeeze(df.high, df.low, df.close, lazybear=True) - assert isinstance(result, DataFrame) - assert result.name == "SQZ_20_2.0_20_1.5_LB" - - result = ta.squeeze(df.high, df.low, df.close, tr=False, lazybear=True) - assert isinstance(result, DataFrame) - assert result.name == "SQZhlr_20_2.0_20_1.5_LB" - - -def test_squeeze_pro(df): - result = ta.squeeze_pro(df.high, df.low, df.close) - assert isinstance(result, DataFrame) - assert result.name == "SQZPRO_20_2.0_20_2.0_1.5_1.0" - - result = ta.squeeze_pro(df.high, df.low, df.close, tr=False) - assert isinstance(result, DataFrame) - assert result.name == "SQZPROhlr_20_2.0_20_2.0_1.5_1.0" - - result = ta.squeeze_pro(df.high, df.low, df.close, 20, 2, 20, 1, 2, 3) - assert isinstance(result, DataFrame) - assert result.name == "SQZPRO_20_2_20_3.0_2.0_1.0" - - result = ta.squeeze_pro(df.high, df.low, df.close, 20, 2, 20, 1, 2, 3, tr=False) - assert isinstance(result, DataFrame) - assert result.name == "SQZPROhlr_20_2_20_3.0_2.0_1.0" - - -def test_stc(df): - result = ta.stc(df.close) - assert isinstance(result, DataFrame) - assert result.name == "STC_10_12_26_0.5" - - -def test_stoch(df): - result = ta.stoch(df.high, df.low, df.close, talib=False) - assert isinstance(result, DataFrame) - assert result.name == "STOCH_14_3_3" - - try: - expected = tal.STOCH(df.high, df.low, df.close, 14, 3, 0, 3, 0) - expecteddf = DataFrame({"STOCHk_14_3_0_3_0": expected[0], "STOCHd_14_3_0_3": expected[1]}) - pdt.assert_frame_equal(result, expecteddf) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.stoch(df.high, df.low, df.close) - assert isinstance(result, DataFrame) - assert result.name == "STOCH_14_3_3" - - -def test_stochf(df): - result = ta.stochf(df.high, df.low, df.close, talib=False) - assert isinstance(result, DataFrame) - assert result.name == "STOCHF_14_3" - - try: - expected = tal.STOCHF(df.high, df.low, df.close, 14, 3, 0) - expecteddf = DataFrame({"STOCHFk_14_3_0": expected[0], "STOCHFd_14_3_0": expected[1]}) - pdt.assert_frame_equal(result, expecteddf) - except AssertionError: - try: - stochk_corr = ta.utils.df_error_analysis(result.iloc[:, 0], expected.iloc[:, 0]) - print(f"{stochk_corr=}") - assert stochk_corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result.iloc[:, 0], CORRELATION, ex) - - try: - stochd_corr = ta.utils.df_error_analysis(result.iloc[:, 1], expected.iloc[:, 1]) - print(f"{stochd_corr=}") - assert stochd_corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result.iloc[:, 1], CORRELATION, ex) - - result = ta.stochf(df.high, df.low, df.close) - assert isinstance(result, DataFrame) - assert result.name == "STOCHF_14_3" - - -def test_stochrsi(df): - # TV Correlation - result = ta.stochrsi(df.close, talib=False) - assert isinstance(result, DataFrame) - assert result.name == "STOCHRSI_14_14_3_3" - - try: - expected = tal.STOCHRSI(df.close, 14, 14, 3, 0) - expecteddf = DataFrame({ - "STOCHRSIk_14_14_0_3": expected[0], - "STOCHRSId_14_14_3_0": expected[1] - }) - pdt.assert_frame_equal(result, expecteddf) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result.iloc[:, 0], expecteddf.iloc[:, 1]) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result.iloc[:, 0], CORRELATION, ex, newline=False) - - -def test_tmo(df): - result = ta.tmo(df.open, df.close) - assert isinstance(result, DataFrame) - assert result.name == "TMO_14_5_3" - - result = ta.tmo(df.open, df.close, compute_momentum=True) - assert isinstance(result, DataFrame) - assert result.name == "TMO_14_5_3" - - -def test_trix(df): - result = ta.trix(df.close) - assert isinstance(result, DataFrame) - assert result.name == "TRIX_30_9" - - -def test_tsi(df): - result = ta.tsi(df.close) - assert isinstance(result, DataFrame) - assert result.name == "TSI_13_25_13" - - -def test_uo(df): - result = ta.uo(df.high, df.low, df.close, talib=False) - assert isinstance(result, Series) - assert result.name == "UO_7_14_28" - - try: - expected = tal.ULTOSC(df.high, df.low, df.close) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.uo(df.high, df.low, df.close) - assert isinstance(result, Series) - assert result.name == "UO_7_14_28" - - -def test_willr(df): - result = ta.willr(df.high, df.low, df.close, talib=False) - assert isinstance(result, Series) - assert result.name == "WILLR_14" - - try: - expected = tal.WILLR(df.high, df.low, df.close) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.willr(df.high, df.low, df.close) - assert isinstance(result, Series) - assert result.name == "WILLR_14" - - - -# DataFrame Extension Tests -def test_ext_ao(df): - df.ta.ao(append=True) - assert df.columns[-1] == "AO_5_34" - - -def test_ext_apo(df): - df.ta.apo(append=True) - assert df.columns[-1] == "APO_12_26" - - -def test_ext_bias(df): - df.ta.bias(append=True) - assert df.columns[-1] == "BIAS_SMA_26" - - -def test_ext_bop(df): - df.ta.bop(append=True) - assert df.columns[-1] == "BOP" - - -def test_ext_brar(df): - df.ta.brar(append=True) - assert df.columns[-1] == "BR_26" - - -def test_ext_cci(df): - df.ta.cci(append=True) - assert df.columns[-1] == "CCI_14_0.015" - - -def test_ext_cfo(df): - df.ta.cfo(append=True) - assert df.columns[-1] == "CFO_9" - - -def test_ext_cg(df): - df.ta.cg(append=True) - assert df.columns[-1] == "CG_10" - - -def test_ext_cmo(df): - df.ta.cmo(append=True) - assert df.columns[-1] == "CMO_14" - - -def test_ext_coppock(df): - df.ta.coppock(append=True) - assert df.columns[-1] == "COPC_11_14_10" - - -def test_ext_crsi(df): - df.ta.crsi(append=True) - assert df.columns[-1] == "CRSI_3_2_100" - - -def test_ext_crsi(df): - df.ta.crsi(append=True) - assert df.columns[-1] == "CRSI_3_2_100" - - -def test_ext_cti(df): - df.ta.cti(append=True) - assert df.columns[-1] == "CTI_12" - - -def test_ext_dm(df): - df.ta.dm(append=True) - assert list(df.columns[-2:]) == ["DMP_14", "DMN_14"] - - -def test_ext_er(df): - df.ta.er(append=True) - assert df.columns[-1] == "ER_10" - - -def test_ext_eri(df): - df.ta.eri(append=True) - assert list(df.columns[-2:]) == ["BULLP_13", "BEARP_13"] - - -def test_ext_exhc(df): - df.ta.exhc(append=True) - assert list(df.columns[-2:]) == ["EXHC_DNa", "EXHC_UPa"] - - -def test_ext_fisher(df): - df.ta.fisher(append=True) - assert list(df.columns[-2:]) == ["FISHERT_9_1", "FISHERTs_9_1"] - - -def test_ext_inertia(df): - df.ta.inertia(append=True) - assert df.columns[-1] == "INERTIA_20_14" - - -def test_ext_kdj(df): - df.ta.kdj(append=True) - assert list(df.columns[-3:]) == ["K_9_3", "D_9_3", "J_9_3"] - - -def test_ext_kst(df): - df.ta.kst(append=True) - assert list(df.columns[-2:]) == ["KST_10_15_20_30_10_10_10_15", "KSTs_9"] - - -def test_ext_macd(df): - df.ta.macd(append=True) - columns = ["MACD_12_26_9", "MACDh_12_26_9", "MACDs_12_26_9"] - assert list(df.columns[-3:]) == columns - - -def test_ext_mom(df): - df.ta.mom(append=True) - assert df.columns[-1] == "MOM_10" - - -def test_ext_pgo(df): - df.ta.pgo(append=True) - assert df.columns[-1] == "PGO_14" - - -def test_ext_ppo(df): - df.ta.ppo(append=True) - assert list(df.columns[-3:]) == [ - "PPO_12_26_9", "PPOh_12_26_9", "PPOs_12_26_9" - ] - - -def test_ext_psl(df): - df.ta.psl(append=True) - assert df.columns[-1] == "PSL_12" - - -def test_ext_qqe(df): - df.ta.qqe(append=True) - columns = [ - "QQE_14_5_4.236", "QQE_14_5_4.236_RSIMA", - "QQEl_14_5_4.236", "QQEs_14_5_4.236" - ] - assert list(df.columns[-4:]) == columns - - -def test_ext_roc(df): - df.ta.roc(append=True) - assert df.columns[-1] == "ROC_10" - - -def test_ext_rsi(df): - df.ta.rsi(append=True) - assert df.columns[-1] == "RSI_14" - - -def test_ext_rsx(df): - df.ta.rsx(append=True) - assert df.columns[-1] == "RSX_14" - - -def test_ext_rvgi(df): - df.ta.rvgi(append=True) - assert list(df.columns[-2:]) == ["RVGI_14_4", "RVGIs_14_4"] - - -def test_ext_slope(df): - df.ta.slope(append=True) - assert df.columns[-1] == "SLOPE_1" - - -def test_ext_smc(df): - df.ta.smc(append=True) - columns = [ - "SMChv_14_50_20_5", - "SMCbf_14_50_20_5", "SMCbi_14_50_20_5", "SMCbp_14_50_20_5", - "SMCtf_14_50_20_5", "SMCti_14_50_20_5", "SMCtp_14_50_20_5" - ] - assert list(df.columns[-7:]) == columns - - -def test_ext_smi(df): - df.ta.smi(append=True) - columns = ["SMI_5_20_5_1.0", "SMIs_5_20_5_1.0", "SMIo_5_20_5_1.0"] - assert list(df.columns[-3:]) == columns - - -def test_ext_squeeze(df): - df.ta.squeeze(append=True) - columns = ["SQZ_20_2.0_20_1.5", "SQZ_ON", "SQZ_OFF", "SQZ_NO"] - assert list(df.columns[-4:]) == columns - - -def test_ext_squeeze_pro(df): - df.ta.squeeze_pro(append=True) - columns = [ - "SQZPRO_ON_NORMAL", "SQZPRO_ON_NARROW", "SQZPRO_OFF", "SQZPRO_NO" - ] - assert list(df.columns[-4:]) == columns - - -def test_ext_stc(df): - df.ta.stc(append=True) - columns = [ - "STC_10_12_26_0.5", "STCmacd_10_12_26_0.5", "STCstoch_10_12_26_0.5" - ] - assert list(df.columns[-3:]) == columns - - -def test_ext_stoch(df): - df.ta.stoch(append=True) - columns = ["STOCHk_14_3_3", "STOCHd_14_3_3", "STOCHh_14_3_3"] - assert list(df.columns[-3:]) == columns - - -def test_ext_stochf(df): - df.ta.stochf(append=True) - assert list(df.columns[-2:]) == ["STOCHFk_14_3", "STOCHFd_14_3"] - - -def test_ext_stochrsi(df): - df.ta.stochrsi(append=True) - assert list(df.columns[-2:]) == [ - "STOCHRSIk_14_14_3_3", "STOCHRSId_14_14_3_3" - ] - - -def test_ext_tmo(df): - df.ta.tmo(append=True) - columns = ["TMO_14_5_3", "TMOs_14_5_3", "TMOM_14_5_3", "TMOMs_14_5_3"] - assert list(df.columns[-4:]) == columns - - -def test_ext_trix(df): - df.ta.trix(append=True) - assert list(df.columns[-2:]) == ["TRIX_30_9", "TRIXs_30_9"] - - -def test_ext_tsi(df): - df.ta.tsi(append=True) - assert list(df.columns[-2:]) == ["TSI_13_25_13", "TSIs_13_25_13"] - - -def test_ext_uo(df): - df.ta.uo(append=True) - assert df.columns[-1] == "UO_7_14_28" - - -def test_ext_willr(df): - df.ta.willr(append=True) - assert df.columns[-1] == "WILLR_14" diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_indicator_overlap.py b/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_indicator_overlap.py deleted file mode 100644 index 2077711c..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_indicator_overlap.py +++ /dev/null @@ -1,779 +0,0 @@ -# -*- coding: utf-8 -*- -import numpy as np -from pandas import DataFrame, Series -import pandas.testing as pdt -from pytest import mark -import talib as tal - -import pandas_ta as ta - -from .config import CORRELATION, CORRELATION_THRESHOLD, error_analysis - - - -# TA Lib style Tests -def test_alligator(df): - result = ta.alligator(df.high, df.low) - assert isinstance(result, DataFrame) - assert result.name == "AG_13_8_5" - - -def test_alma(df): - result = ta.alma(df.close) - assert isinstance(result, Series) - assert result.name == "ALMA_9_6.0_0.85" - - -def test_dema(df): - result = ta.dema(df.close, talib=False) - assert isinstance(result, Series) - assert result.name == "DEMA_10" - - try: - expected = tal.DEMA(df.close, 10) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.dema(df.close) - assert isinstance(result, Series) - assert result.name == "DEMA_10" - - -def test_ema(df): - result = ta.ema(df.close, talib=False, presma=True) - assert isinstance(result, Series) - assert result.name == "EMA_10" - - try: - expected = tal.EMA(df.close, 10) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.ema(df.close, talib=True) - assert isinstance(result, Series) - assert result.name == "EMA_10" - - result = ta.ema(df.close, talib=True, presma=False, adjust=False) - assert isinstance(result, Series) - assert result.name == "EMA_10" - - result = ta.ema(df.close, talib=True, presma=False, adjust=True) - assert isinstance(result, Series) - assert result.name == "EMA_10" - - result = ta.ema(df.close, talib=True, presma=True, adjust=True) - assert isinstance(result, Series) - assert result.name == "EMA_10" - - -def test_fwma(df): - result = ta.fwma(df.close) - assert isinstance(result, Series) - assert result.name == "FWMA_10" - - -def test_hilo(df): - result = ta.hilo(df.high, df.low, df.close) - assert isinstance(result, DataFrame) - assert result.name == "HILO_13_21" - - -def test_hl2(df): - result = ta.hl2(df.high, df.low) - assert isinstance(result, Series) - assert result.name == "HL2" - - -def test_hlc3(df): - result = ta.hlc3(df.high, df.low, df.close, talib=False) - assert isinstance(result, Series) - assert result.name == "HLC3" - - try: - expected = tal.TYPPRICE(df.high, df.low, df.close) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.hlc3(df.high, df.low, df.close) - assert isinstance(result, Series) - assert result.name == "HLC3" - - -def test_hma(df): - result = ta.hma(df.close) - assert isinstance(result, Series) - assert result.name == "HMA_10" - - result = ta.hma(df.close, mamode="ema") - assert isinstance(result, Series) - assert result.name == "HMAe_10" - - result = ta.hma(df.close, mamode="sma") - assert isinstance(result, Series) - assert result.name == "HMAs_10" - - -def test_hwma(df): - result = ta.hwma(df.close) - assert isinstance(result, Series) - assert result.name == "HWMA_0.2_0.1_0.1" - - -def test_ichimoku(df): - result_ichimoku, result_span = ta.ichimoku(df.high, df.low, df.close) - assert isinstance(result_ichimoku, DataFrame) - assert isinstance(result_span, DataFrame) - assert result_ichimoku.name == "ICHIMOKU_9_26_52" - assert result_span.name == "ICHISPAN_9_26" - - -def test_jma(df): - result = ta.jma(df.close) - assert isinstance(result, Series) - assert result.name == "JMA_7_0.0" - - -def test_kama(df): - result = ta.kama(df.close) - assert isinstance(result, Series) - assert result.name == "KAMA_10_2_30" - - -def test_linreg(df): - result = ta.linreg(df.close, talib=False) - assert isinstance(result, Series) - assert result.name == "LINREG_14" - - try: - expected = tal.LINEARREG(df.close) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.linreg(df.close, talib=True) - assert isinstance(result, Series) - assert result.name == "LINREG_14" - - -def test_linreg_angle(df): - result = ta.linreg(df.close, angle=True, talib=False) - assert isinstance(result, Series) - assert result.name == "LINREGa_14" - - try: - expected = tal.LINEARREG_ANGLE(df.close) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.linreg(df.close, angle=True, talib=True) - assert isinstance(result, Series) - assert result.name == "LINREGa_14" - - -def test_linreg_intercept(df): - result = ta.linreg(df.close, intercept=True, talib=False) - assert isinstance(result, Series) - assert result.name == "LINREGb_14" - - try: - expected = tal.LINEARREG_INTERCEPT(df.close) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.linreg(df.close, intercept=True, talib=True) - assert isinstance(result, Series) - assert result.name == "LINREGb_14" - - -def test_linreg_r(df): - result = ta.linreg(df.close, r=True) - assert isinstance(result, Series) - assert result.name == "LINREGr_14" - - -def test_linreg_slope(df): - result = ta.linreg(df.close, slope=True, talib=False) - assert isinstance(result, Series) - assert result.name == "LINREGm_14" - - try: - expected = tal.LINEARREG_SLOPE(df.close) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.linreg(df.close, slope=True, talib=True) - assert isinstance(result, Series) - assert result.name == "LINREGm_14" - - -@mark.parametrize("kind,name", [ - ("dema", "DEMA_10"), ("ema", "EMA_10"), ("fwma", "FWMA_10"), - ("hma", "HMA_10"), ("linreg", "LINREG_14"), ("midpoint", "MIDPOINT_2"), - ("pwma", "PWMA_10"), ("rma", "RMA_10"), ("sinwma", "SINWMA_14"), - ("sma", "SMA_10"), ("ssf", "SSF_20"), ("swma", "SWMA_10"), - ("t3", "T3_10_0.7"), ("tema", "TEMA_10"), ("trima", "TRIMA_10"), - ("vidya", "VIDYA_14"), ("wma", "WMA_10") -]) -def test_ma(df, kind, name): -# def test_ma(df): - result = ta.ma() - assert isinstance(result, list) - assert len(result) > 0 - - result = ta.ma(kind, df.close) - assert isinstance(result, Series) - assert result.name == name - - -def test_mama(df): - result = ta.mama(df.close, talib=False) - assert isinstance(result, DataFrame) - assert result.name == "MAMA_0.5_0.05" - - try: - expected = tal.MAMA(df.close) - expecteddf = DataFrame({ - "MAMA_0.5_0.05": expected[0], - "FAMA_0.5_0.05": expected[1] - }) - pdt.assert_frame_equal(result, expecteddf) - except AssertionError: - try: - mama_corr = ta.utils.df_error_analysis(result.iloc[:, 0], expecteddf.iloc[:, 0]) - assert mama_corr > CORRELATION_THRESHOLD - print(f"{mama_corr=}") - except Exception as ex: - error_analysis(result.iloc[:, 0], CORRELATION, ex) - - try: - fama_corr = ta.utils.df_error_analysis(result.iloc[:, 1], expecteddf.iloc[:, 1]) - assert fama_corr > CORRELATION_THRESHOLD - print(f"{fama_corr=}") - except Exception as ex: - error_analysis(result.iloc[:, 1], CORRELATION, ex) - - result = ta.mama(df.close) - assert isinstance(result, DataFrame) - assert result.name == "MAMA_0.5_0.05" - - -def test_mcgd(df): - result = ta.mcgd(df.close) - assert isinstance(result, Series) - assert result.name == "MCGD_10" - - -def test_midpoint(df): - result = ta.midpoint(df.close, talib=False) - assert isinstance(result, Series) - assert result.name == "MIDPOINT_2" - - try: - expected = tal.MIDPOINT(df.close, 2) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.midpoint(df.close) - assert isinstance(result, Series) - assert result.name == "MIDPOINT_2" - - -def test_midprice(df): - result = ta.midprice(df.high, df.low, talib=False) - assert isinstance(result, Series) - assert result.name == "MIDPRICE_2" - - try: - expected = tal.MIDPRICE(df.high, df.low, 2) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.midprice(df.high, df.low) - assert isinstance(result, Series) - assert result.name == "MIDPRICE_2" - - -def test_ohlc4(df): - result = ta.ohlc4(df.open, df.high, df.low, df.close) - assert isinstance(result, Series) - assert result.name == "OHLC4" - - -@mark.parametrize("method,name,columns", [ - (None, "PIVOTS_TRAD_D", 9), ("camarilla", "PIVOTS_CAMA_D", 9), - ("classic", "PIVOTS_CLAS_D", 9), ("demark", "PIVOTS_DEMA_D", 3), - ("fibonacci", "PIVOTS_FIBO_D", 7), ("traditional", "PIVOTS_TRAD_D", 9), - ("woodie", "PIVOTS_WOOD_D", 9) -]) -def test_pivots(df, method, name, columns): - result = ta.pivots(df.open, df.high, df.low, df.close, method=method) - assert isinstance(result, DataFrame) - assert result.name == name - assert result.columns.size == columns - - -def test_pwma(df): - result = ta.pwma(df.close) - assert isinstance(result, Series) - assert result.name == "PWMA_10" - - -def test_rma(df): - result = ta.rma(df.close) - assert isinstance(result, Series) - assert result.name == "RMA_10" - - -def test_sinwma(df): - result = ta.sinwma(df.close) - assert isinstance(result, Series) - assert result.name == "SINWMA_14" - - -def test_sma(df): - result = ta.sma(df.close, talib=False) - assert isinstance(result, Series) - assert result.name == "SMA_10" - - try: - expected = tal.SMA(df.close, 10) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.sma(df.close, talib=True) - assert isinstance(result, Series) - assert result.name == "SMA_10" - - -def test_smma(df): - result = ta.smma(df.close) - assert isinstance(result, Series) - assert result.name == "SMMA_7" - - -def test_ssf(df): - result = ta.ssf(df.close) - assert isinstance(result, Series) - assert result.name == "SSF_20" - - result = ta.ssf(df.close, pi=np.pi, sqrt2=np.sqrt(2), everget=True) - assert isinstance(result, Series) - assert result.name == "SSFe_20" - - -def test_ssf3(df): - result = ta.ssf3(df.close) - assert isinstance(result, Series) - assert result.name == "SSF3_20" - - -def test_supertrend(df): - result = ta.supertrend(df.high, df.low, df.close) - assert isinstance(result, DataFrame) - assert result.name == "SUPERT_7_3.0" - - -def test_swma(df): - result = ta.swma(df.close) - assert isinstance(result, Series) - assert result.name == "SWMA_10" - - -def test_t3(df): - result = ta.t3(df.close, talib=False) - assert isinstance(result, Series) - assert result.name == "T3_10_0.7" - - try: - expected = tal.T3(df.close, 10) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.t3(df.close, talib=True) - assert isinstance(result, Series) - assert result.name == "T3_10_0.7" - - -def test_tema(df): - result = ta.tema(df.close, talib=False) - assert isinstance(result, Series) - assert result.name == "TEMA_10" - - try: - expected = tal.TEMA(df.close, 10) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.tema(df.close, talib=True) - assert isinstance(result, Series) - assert result.name == "TEMA_10" - - -def test_trima(df): - result = ta.trima(df.close, talib=False) - assert isinstance(result, Series) - assert result.name == "TRIMA_10" - - try: - expected = tal.TRIMA(df.close, 10) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.trima(df.close, talib=True) - assert isinstance(result, Series) - assert result.name == "TRIMA_10" - - -def test_tsf(df): - result = ta.linreg(df.close, tsf=True, talib=False) - assert isinstance(result, Series) - assert result.name == "LINREG_14" - - try: - expected = tal.TSF(df.close) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.linreg(df.close, tsf=True, talib=True) - assert isinstance(result, Series) - assert result.name == "LINREG_14" - - -def test_vidya(df): - result = ta.vidya(df.close, talib=False) - assert isinstance(result, Series) - assert result.name == "VIDYA_14" - - try: - expected = ta.vidya(df.close, talib=True) - assert isinstance(expected, Series) - assert expected.name == "VIDYA_14" - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - -def test_wcp(df): - result = ta.wcp(df.high, df.low, df.close, talib=False) - assert isinstance(result, Series) - assert result.name == "WCP" - - try: - expected = tal.WCLPRICE(df.high, df.low, df.close) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.wcp(df.high, df.low, df.close, talib=True) - assert isinstance(result, Series) - assert result.name == "WCP" - - -def test_wma(df): - result = ta.wma(df.close, talib=False) - assert isinstance(result, Series) - assert result.name == "WMA_10" - - try: - expected = tal.WMA(df.close, 10) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.wma(df.close, talib=True) - assert isinstance(result, Series) - assert result.name == "WMA_10" - - -def test_zlma(df): - result = ta.zlma(df.close, df.volume) - assert isinstance(result, Series) - assert result.name == "ZL_EMA_10" - - - -# DataFrame Extension Tests -def test_ext_alligator(df): - df.ta.alligator(append=True) - assert list(df.columns[-3:]) == [ - "AGj_13_8_5", "AGt_13_8_5", "AGl_13_8_5" - ] - - -def test_ext_alma(df): - df.ta.alma(append=True) - assert df.columns[-1] == "ALMA_9_6.0_0.85" - - -def test_ext_dema(df): - df.ta.dema(append=True) - assert df.columns[-1] == "DEMA_10" - - -def test_ext_ema(df): - df.ta.ema(append=True) - assert df.columns[-1] == "EMA_10" - - -def test_ext_fwma(df): - df.ta.fwma(append=True) - assert df.columns[-1] == "FWMA_10" - - -def test_ext_hilo(df): - df.ta.hilo(append=True) - assert list(df.columns[-3:]) == [ - "HILO_13_21", "HILOl_13_21", "HILOs_13_21" - ] - - -def test_ext_hl2(df): - df.ta.hl2(append=True) - assert df.columns[-1] == "HL2" - - -def test_ext_hlc3(df): - df.ta.hlc3(append=True) - assert df.columns[-1] == "HLC3" - - -def test_ext_hma(df): - df.ta.hma(append=True) - assert df.columns[-1] == "HMA_10" - - -def test_ext_hwma(df): - df.ta.hwma(append=True) - assert df.columns[-1] == "HWMA_0.2_0.1_0.1" - - -def test_ext_ichimoku(df): - df.ta.ichimoku(append=True) - columns = ["ISA_9", "ISB_26", "ITS_9", "IKS_26", "ICS_26"] - assert list(df.columns[-5:]) == columns - - -def test_ext_jma(df): - df.ta.jma(append=True) - assert df.columns[-1] == "JMA_7_0.0" - - -def test_ext_kama(df): - df.ta.kama(append=True) - assert df.columns[-1] == "KAMA_10_2_30" - - -def test_ext_linreg(df): - df.ta.linreg(append=True) - assert df.columns[-1] == "LINREG_14" - - -def test_ext_mama(df): - df.ta.mama(append=True) - assert list(df.columns[-2:]) == ["MAMA_0.5_0.05", "FAMA_0.5_0.05"] - - -def test_ext_mcgd(df): - df.ta.mcgd(append=True) - assert df.columns[-1] == "MCGD_10" - - -def test_ext_midpoint(df): - df.ta.midpoint(append=True) - assert df.columns[-1] == "MIDPOINT_2" - - -def test_ext_midprice(df): - df.ta.midprice(append=True) - assert df.columns[-1] == "MIDPRICE_2" - - -def test_ext_ohlc4(df): - df.ta.ohlc4(append=True) - assert df.columns[-1] == "OHLC4" - - -def test_ext_pivots(df): - df.ta.pivots(append=True) - assert len(df.columns[-9:]) == 9 - - -def test_ext_pwma(df): - df.ta.pwma(append=True) - assert df.columns[-1] == "PWMA_10" - - -def test_ext_rma(df): - df.ta.rma(append=True) - assert df.columns[-1] == "RMA_10" - - -def test_ext_sinwma(df): - df.ta.sinwma(append=True) - assert df.columns[-1] == "SINWMA_14" - - -def test_ext_sma(df): - df.ta.sma(append=True) - assert df.columns[-1] == "SMA_10" - - -def test_ext_smma(df): - df.ta.smma(append=True) - assert df.columns[-1] == "SMMA_7" - - -def test_ext_ssf(df): - df.ta.ssf(append=True) - assert df.columns[-1] == "SSF_20" - - -def test_ext_ssf3(df): - df.ta.ssf3(append=True) - assert df.columns[-1] == "SSF3_20" - - -def test_ext_supertrend(df): - df.ta.supertrend(append=True) - columns = [ - "SUPERT_7_3.0", "SUPERTd_7_3.0", "SUPERTl_7_3.0", "SUPERTs_7_3.0" - ] - assert list(df.columns[-4:]) == columns - - -def test_ext_swma(df): - df.ta.swma(append=True) - assert df.columns[-1] == "SWMA_10" - - -def test_ext_t3(df): - df.ta.t3(append=True) - assert df.columns[-1] == "T3_10_0.7" - - -def test_ext_tema(df): - df.ta.tema(append=True) - assert df.columns[-1] == "TEMA_10" - - -def test_ext_trima(df): - df.ta.trima(append=True) - assert df.columns[-1] == "TRIMA_10" - - -def test_ext_vidya(df): - df.ta.vidya(append=True) - assert df.columns[-1] == "VIDYA_14" - - -def test_ext_wcp(df): - df.ta.wcp(append=True) - assert df.columns[-1] == "WCP" - - -def test_ext_wma(df): - df.ta.wma(append=True) - assert df.columns[-1] == "WMA_10" - - -def test_ext_zlma(df): - df.ta.zlma(append=True) - assert df.columns[-1] == "ZL_EMA_10" diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_indicator_performance.py b/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_indicator_performance.py deleted file mode 100644 index 6ee86a39..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_indicator_performance.py +++ /dev/null @@ -1,43 +0,0 @@ -# -*- coding: utf-8 -*- -import pandas_ta as ta - - - -# TA Lib style Tests -def test_drawdown(df): - result = ta.drawdown(df.close) - assert result.name == "DD" - - -def test_log_return(df): - result = ta.log_return(df.close) - assert result.name == "LOGRET_1" - - result = ta.log_return(df.close, cumulative=True) - assert result.name == "CUMLOGRET_1" - - -def test_percent_return(df): - result = ta.percent_return(df.close, cumulative=False) - assert result.name == "PCTRET_1" - - result = ta.percent_return(df.close, cumulative=True) - assert result.name == "CUMPCTRET_1" - - - -# DataFrame Extension Tests -def test_ext_log_return(df): - df.ta.log_return(append=True) - assert df.columns[-1] == "LOGRET_1" - - df.ta.log_return(cumulative=True, append=True) - assert df.columns[-1] == "CUMLOGRET_1" - - -def test_ext_percent_return(df): - df.ta.percent_return(append=True) - assert df.columns[-1] == "PCTRET_1" - - df.ta.percent_return(cumulative=True, append=True) - assert df.columns[-1] == "CUMPCTRET_1" diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_indicator_statistics.py b/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_indicator_statistics.py deleted file mode 100644 index 42b588b1..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_indicator_statistics.py +++ /dev/null @@ -1,161 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series -import pandas.testing as pdt -from pytest import mark -import talib as tal - -import pandas_ta as ta - -from .config import CORRELATION, CORRELATION_THRESHOLD, error_analysis - - - -# TA Lib style Tests -def test_entropy(df): - result = ta.entropy(df.close) - assert isinstance(result, Series) - assert result.name == "ENTP_10" - - -def test_kurtosis(df): - result = ta.kurtosis(df.close) - assert isinstance(result, Series) - assert result.name == "KURT_30" - - -def test_mad(df): - result = ta.mad(df.close) - assert isinstance(result, Series) - assert result.name == "MAD_30" - - -def test_median(df): - result = ta.median(df.close) - assert isinstance(result, Series) - assert result.name == "MEDIAN_30" - - -def test_quantile(df): - result = ta.quantile(df.close) - assert isinstance(result, Series) - assert result.name == "QTL_30_0.5" - - -def test_skew(df): - result = ta.skew(df.close) - assert isinstance(result, Series) - assert result.name == "SKEW_30" - - -def test_stdev(df): - result = ta.stdev(df.close, talib=False, ddof=0) - assert isinstance(result, Series) - assert result.name == "STDEV_30" - - try: - expected = tal.STDDEV(df.close, 30) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - -@mark.parametrize("length,stds,name,columns", [ - (None, None, "TOS_STDEVALL", 7), - (30, None, "TOS_STDEVALL_30", 7), - (30, [1, 2], "TOS_STDEVALL_30", 5), -]) -def test_tos_stdevall(df, length, stds, name, columns): - result = ta.tos_stdevall(df.close, length=length, stds=stds) - assert isinstance(result, DataFrame) - assert result.name == name - assert len(result.columns) == columns - - -def test_variance(df): - result = ta.variance(df.close, talib=False, ddof=0) - assert isinstance(result, Series) - assert result.name == "VAR_30" - - try: - expected = tal.VAR(df.close, 30) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.variance(df.close) - assert isinstance(result, Series) - assert result.name == "VAR_30" - - -def test_zscore(df): - result = ta.zscore(df.close) - assert isinstance(result, Series) - assert result.name == "ZS_30" - - - -# DataFrame Extension Tests -def test_ext_entropy(df): - df.ta.entropy(append=True) - assert df.columns[-1] == "ENTP_10" - - -def test_ext_kurtosis(df): - df.ta.kurtosis(append=True) - assert df.columns[-1] == "KURT_30" - - -def test_ext_mad(df): - df.ta.mad(append=True) - assert df.columns[-1] == "MAD_30" - - -def test_ext_median(df): - df.ta.median(append=True) - assert df.columns[-1] == "MEDIAN_30" - - -def test_ext_quantile(df): - df.ta.quantile(append=True) - assert df.columns[-1] == "QTL_30_0.5" - - -def test_ext_skew(df): - df.ta.skew(append=True) - assert df.columns[-1] == "SKEW_30" - - -def test_ext_stdev(df): - df.ta.stdev(append=True) - assert df.columns[-1] == "STDEV_30" - - -def test_ext_tos_stdevall(df): - df.ta.tos_stdevall(append=True) - columns = [ - "TOS_STDEVALL_LR", - "TOS_STDEVALL_L_1", "TOS_STDEVALL_U_1", - "TOS_STDEVALL_L_2", "TOS_STDEVALL_U_2", - "TOS_STDEVALL_L_3", "TOS_STDEVALL_U_3" - ] - assert list(df.columns[-7:]) == columns - - -def test_ext_variance(df): - df.ta.variance(append=True) - assert df.columns[-1] == "VAR_30" - - -def test_ext_zscore(df): - df.ta.zscore(append=True) - assert df.columns[-1] == "ZS_30" diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_indicator_trend.py b/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_indicator_trend.py deleted file mode 100644 index 76660452..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_indicator_trend.py +++ /dev/null @@ -1,436 +0,0 @@ -# -*- coding: utf-8 -*- -import numpy as np -from pandas import DataFrame, Series, read_csv -import pandas.testing as pdt -import talib as tal - -import pandas_ta as ta - -from .config import CORRELATION, CORRELATION_THRESHOLD, error_analysis - - - -sample_adx_data = read_csv( - f"data/ADX_D.csv", - index_col=0, - parse_dates=True, - # date_format="%f" - date_format="%m/%d/%Y %I:%M:%S `%p" -) - -expected_tv_adx = DataFrame({ - "ADX_14": [ - None, None, None, None, None, None, - None, None, None, None, None, None, - None, None, 9.874338, 10.408195, 10.799274, - ], - "DMP_14": [ - None, 13.686598, 14.247809, 13.436449, 17.946530, 17.193874, - 19.214901, 17.860325, 16.899406, 16.207983, 15.998908, 15.202702, - 14.621306, 14.303707, 13.451093, 12.932243, 12.840198 - ], - "DMN_14": [ - None, 21.954010, 21.055379, 23.102292, 21.120552, 20.234781, - 18.827331, 19.298744, 19.029033, 18.250478, 17.414460, 16.772558, - 16.131126, 15.780731, 19.097781, 18.361121, 17.689287 - ] -}) - - -# TA Lib style Tests -def test_adx(df): - result = ta.adx(df.high, df.low, df.close, talib=False) - assert isinstance(result, DataFrame) - assert result.name == "ADX_14" - assert len(result.columns) == 4 - - try: - expected = tal.ADX(df.high, df.low, df.close) - pdt.assert_series_equal(result.iloc[0], expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.adx(df.high, df.low, df.close) - assert isinstance(result, DataFrame) - assert result.name == "ADX_14" - - # TV Test - df = sample_adx_data - result = ta.adx(df.high, df.low, df.close, tvmode=True) - assert isinstance(result, DataFrame) - assert result.name == "ADX_14" - - result = result.iloc[13:] - result.drop(result.columns[1], axis=1, inplace=True) - result.reset_index(drop=True, inplace=True) - pdt.assert_frame_equal(result, expected_tv_adx) - - -def test_alphatrend(df): - result = ta.alphatrend(df.open, df.high, df.low, df.close) - assert isinstance(result, DataFrame) - assert result.name == "ALPHAT_14_1_50" - - -def test_amat(df): - result = ta.amat(df.close) - assert isinstance(result, DataFrame) - assert result.name == "AMATe_8_21_2" - - -def test_aroon(df): - result = ta.aroon(df.high, df.low, talib=False) - assert isinstance(result, DataFrame) - assert result.name == "AROON_14" - - try: - expected = tal.AROON(df.high, df.low) - expecteddf = DataFrame({"AROOND_14": expected[0], "AROONU_14": expected[1]}) - pdt.assert_frame_equal(result, expecteddf) - except AssertionError: - try: - aroond_corr = ta.utils.df_error_analysis(result.iloc[:, 0], expected.iloc[:, 0]) - print(f"{aroond_corr=}") - assert aroond_corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result.iloc[:, 0], CORRELATION, ex) - - try: - aroonu_corr = ta.utils.df_error_analysis(result.iloc[:, 1], expected.iloc[:, 1]) - print(f"{aroonu_corr=}") - assert aroonu_corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result.iloc[:, 1], CORRELATION, ex) - - result = ta.aroon(df.high, df.low) - assert isinstance(result, DataFrame) - assert result.name == "AROON_14" - - -def test_aroon_osc(df): - result = ta.aroon(df.high, df.low, talib=False) - assert isinstance(result, DataFrame) - assert result.name == "AROON_14" - - try: - expected = tal.AROONOSC(df.high, df.low) - pdt.assert_series_equal(result.iloc[:, 2], expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected.iloc[:, 2]) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - -def test_chop(df): - result = ta.chop(df.high, df.low, df.close, ln=False) - assert isinstance(result, Series) - assert result.name == "CHOP_14_1_100.0" - - result = ta.chop(df.high, df.low, df.close, ln=True) - assert isinstance(result, Series) - assert result.name == "CHOPln_14_1_100.0" - - -def test_cksp(df): - result = ta.cksp(df.high, df.low, df.close, tvmode=False) - assert isinstance(result, DataFrame) - assert result.name == "CKSP_10_3_20" - - result = ta.cksp(df.high, df.low, df.close, tvmode=True) - assert isinstance(result, DataFrame) - assert result.name == "CKSP_10_1_9" - - -def test_decay(df): - result = ta.decay(df.close) - assert isinstance(result, Series) - assert result.name == "LDECAY_1" - - result = ta.decay(df.close, mode="exp") - assert isinstance(result, Series) - assert result.name == "EXPDECAY_1" - - tulip = Series([0, 0, 0, 1, 0, 0, 0, 1, 0, 0]) - expected = Series([0, 0, 0, 1, 0.75, 0.5, 0.25, 1, 0.75, 0.5]) - result = ta.decay(tulip, length=4, mode="linear") - assert isinstance(result, Series) - assert result.name == "LDECAY_4" - pdt.assert_series_equal(result, expected, check_names=False) - - -def test_decreasing(df): - result = ta.decreasing(df.close) - assert isinstance(result, Series) - assert result.name == "DEC_1" - - result = ta.decreasing(df.close, length=3, strict=True) - assert isinstance(result, Series) - assert result.name == "SDEC_3" - - -def test_dpo(df): - result = ta.dpo(df.close) - assert isinstance(result, Series) - assert result.name == "DPO_20" - - -def test_ht_trendline(df): - result = ta.ht_trendline(df.close, talib=False) - assert isinstance(result, Series) - assert result.name == "HT_TL" - - try: - expected = tal.HT_TRENDLINE(df.close) - corr = ta.utils.df_error_analysis(result, expected) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.ht_trendline(df.close) - assert isinstance(result, Series) - assert result.name == "HT_TL" - - -def test_increasing(df): - result = ta.increasing(df.close) - assert isinstance(result, Series) - assert result.name == "INC_1" - - result = ta.increasing(df.close, length=3, strict=True) - assert isinstance(result, Series) - assert result.name == "SINC_3" - - -def test_long_run(df): - result = ta.long_run(df.open, df.close) - assert isinstance(result, Series) - assert result.name == "LR_2" - - -def test_psar(df): - result = ta.psar(df.high, df.low, talib=False) - assert isinstance(result, DataFrame) - assert result.name == "PSAR_0.02_0.2" - - # Combine Long and Short SAR"s into one SAR value - psar = result[result.columns[:2]].fillna(0) - psar = psar[psar.columns[0]] + psar[psar.columns[1]] - psar.iloc[0] = np.nan - psar.name = result.name - - try: - expected = tal.SAR(df.high, df.low) - pdt.assert_series_equal(psar, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(psar, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - -def test_qstick(df): - result = ta.qstick(df.open, df.close) - assert isinstance(result, Series) - assert result.name == "QS_10" - - -def test_rwi(df): - result = ta.rwi(df.high, df.low, df.close) - assert isinstance(result, DataFrame) - assert result.name == "RWI_14" - - -def test_short_run(df): - result = ta.short_run(df.close, df.open) - assert isinstance(result, Series) - assert result.name == "SR_2" - - -def test_trendflex(df): - result = ta.trendflex(df.close) - assert isinstance(result, Series) - assert result.name == "TRENDFLEX_20_20_0.04" - - -def test_vhf(df): - result = ta.vhf(df.high, df.low, df.close) - assert isinstance(result, Series) - assert result.name == "VHF_28" - - -def test_vortex(df): - result = ta.vortex(df.high, df.low, df.close) - assert isinstance(result, DataFrame) - assert result.name == "VTX_14" - - -def test_zigzag(df): - result = ta.zigzag(df.high, df.low) - assert isinstance(result, DataFrame) - assert result.name == "ZIGZAG_5.0%_10" - - result = ta.zigzag(df.high, df.low, df.close) - assert isinstance(result, DataFrame) - assert result.name == "ZIGZAG_5.0%_10" - - notna = result.iloc[:,0].notna() - high_pivotsdf = result[notna & (result["ZIGZAGs_5.0%_10"]==1)] - assert isinstance(high_pivotsdf, DataFrame) - assert high_pivotsdf.shape[0] == 1 - - low_pivotsdf = result[notna & (result["ZIGZAGs_5.0%_10"]==-1)] - assert isinstance(low_pivotsdf, DataFrame) - assert low_pivotsdf.shape[0] == 1 - - all_pivotsdf = result[notna] - assert isinstance(all_pivotsdf, DataFrame) - total_length = low_pivotsdf.shape[0] + high_pivotsdf.shape[0] - assert all_pivotsdf.shape[0] == total_length - - - -# DataFrame Extension Tests -def test_ext_adx(df): - df.ta.adx(append=True) - assert list(df.columns[-4:]) == [ - "ADX_14", "ADXR_14_2", "DMP_14", "DMN_14" - ] - - -def test_ext_alphatrend(df): - df.ta.alphatrend(append=True) - assert list(df.columns[-2:]) == ["ALPHAT_14_1_50", "ALPHATl_14_1_50_2"] - - -def test_ext_amat(df): - df.ta.amat(append=True) - assert list(df.columns[-2:]) == ["AMATe_LR_8_21_2", "AMATe_SR_8_21_2"] - - -def test_ext_aroon(df): - df.ta.aroon(append=True) - assert list(df.columns[-3:]) == ["AROOND_14", "AROONU_14", "AROONOSC_14"] - - -def test_ext_chop(df): - df.ta.chop(ln=False, append=True) - assert df.columns[-1] == "CHOP_14_1_100.0" - - df.ta.chop(ln=True, append=True) - assert df.columns[-1] == "CHOPln_14_1_100.0" - - -def test_ext_cksp(df): - df.ta.cksp(tvmode=False, append=True) - assert list(df.columns[-2:]) == ["CKSPl_10_3_20", "CKSPs_10_3_20"] - - df.ta.cksp(tvmode=True, append=True) - assert list(df.columns[-2:]) == ["CKSPl_10_1_9", "CKSPs_10_1_9"] - - -def test_ext_decay(df): - df.ta.decay(append=True) - assert df.columns[-1] == "LDECAY_1" - - df.ta.decay(mode="exp", append=True) - assert df.columns[-1] == "EXPDECAY_1" - - -def test_ext_decreasing(df): - df.ta.decreasing(append=True) - assert df.columns[-1] == "DEC_1" - - df.ta.decreasing(length=3, strict=True, append=True) - assert df.columns[-1] == "SDEC_3" - - -def test_ext_dpo(df): - df.ta.dpo(append=True) - assert df.columns[-1] == "DPO_20" - - -def test_ext_ht_trendline(df): - df.ta.ht_trendline(append=True) - assert df.columns[-1] == "HT_TL" - - -def test_ext_increasing(df): - df.ta.increasing(append=True) - assert df.columns[-1] == "INC_1" - - df.ta.increasing(length=3, strict=True, append=True) - assert df.columns[-1] == "SINC_3" - - -def test_ext_long_run(df): - result = df.ta.long_run(append=True) - assert df.shape == result.shape - - fast, slow = df.ta.ema(8), df.ta.ema(21) - df.ta.long_run(fast, slow, append=True) - assert df.columns[-1] == "LR_2" - - -def test_ext_psar(df): - df.ta.psar(append=True) - expected = [ - "PSARl_0.02_0.2", "PSARs_0.02_0.2", - "PSARaf_0.02_0.2", "PSARr_0.02_0.2" - ] - assert list(df.columns[-4:]) == expected - - -def test_ext_qstick(df): - df.ta.qstick(append=True) - assert df.columns[-1] == "QS_10" - - -def test_ext_rwi(df): - df.ta.rwi(append=True) - assert list(df.columns[-2:]) == ["RWIh_14", "RWIl_14"] - - -def test_ext_short_run(df): - result = df.ta.short_run(append=True) - assert df.shape == result.shape - - fast, slow = df.ta.ema(8), df.ta.ema(21) - df.ta.short_run(fast, slow, append=True) - assert df.columns[-1] == "SR_2" - - -def test_ext_trendflex(df): - df.ta.trendflex(append=True) - assert df.columns[-1] == "TRENDFLEX_20_20_0.04" - - -def test_ext_vhf(df): - df.ta.vhf(append=True) - assert df.columns[-1] == "VHF_28" - - -def test_ext_vortex(df): - df.ta.vortex(append=True) - assert list(df.columns[-2:]) == ["VTXP_14", "VTXM_14"] - - -def test_ext_zigzag(df): - df.ta.zigzag(append=True) - assert list(df.columns[-3:]) == [ - "ZIGZAGs_5.0%_10", "ZIGZAGv_5.0%_10", "ZIGZAGd_5.0%_10" - ] diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_indicator_volatility.py b/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_indicator_volatility.py deleted file mode 100644 index af3b7f7e..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_indicator_volatility.py +++ /dev/null @@ -1,332 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series -import pandas.testing as pdt -import talib as tal - -import pandas_ta as ta - -from .config import CORRELATION, CORRELATION_THRESHOLD, error_analysis - - - -# TA Lib style Tests -def test_aberration(df): - result = ta.aberration(df.high, df.low, df.close) - assert isinstance(result, DataFrame) - assert result.name == "ABER_5_15" - - -def test_accbands(df): - result = ta.accbands(df.high, df.low, df.close) - assert isinstance(result, DataFrame) - assert result.name == "ACCBANDS_20" - - -def test_atr(df): - result = ta.atr(df.high, df.low, df.close, talib=False, prenan=True) - assert isinstance(result, Series) - assert result.name == "ATRr_14" - - try: - expected = tal.ATR(df.high, df.low, df.close) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.atr(df.high, df.low, df.close, df.volume) - assert isinstance(result, Series) - assert result.name == "ATRr_14" - - -def test_atrts(df): - result = ta.atrts(df.high, df.low, df.close, talib=False) - assert isinstance(result, Series) - assert result.name == "ATRTSe_14_20_3.0" - - -def test_bbands(df): - result = ta.bbands(df.close, talib=False) - assert isinstance(result, DataFrame) - assert result.name == "BBANDS_5_2.0_2.0" - - try: - expected = tal.BBANDS(df.close) - expecteddf = DataFrame({ - "BBL_5_2.0_2.0": expected[2], - "BBM_5_2.0_2.0": expected[1], - "BBU_5_2.0_2.0": expected[0] - }) - pdt.assert_frame_equal(result, expecteddf) - except AssertionError: - try: - bbl_corr = ta.utils.df_error_analysis(result, expected) - print(f"{bbl_corr=}") - assert bbl_corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result.iloc[:, 0], CORRELATION, ex) - - try: - bbm_corr = ta.utils.df_error_analysis(result, expected) - print(f"{bbm_corr=}") - assert bbm_corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result.iloc[:, 1], CORRELATION, ex) - - try: - bbu_corr = ta.utils.df_error_analysis(result, expected) - print(f"{bbu_corr=}") - assert bbu_corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result.iloc[:, 2], CORRELATION, ex) - - result = ta.bbands(df.close, ddof=0) - assert isinstance(result, DataFrame) - assert result.name == "BBANDS_5_2.0_2.0" - - result = ta.bbands(df.close, ddof=1) - assert isinstance(result, DataFrame) - assert result.name == "BBANDS_5_2.0_2.0" - - result = ta.bbands(df.close, lower_std=3, upper_std=5) - assert isinstance(result, DataFrame) - assert result.name == "BBANDS_5_3_5" - - -def test_chandelier_exit(df): - result = ta.chandelier_exit(df.high, df.low, df.close, talib=False) - assert isinstance(result, DataFrame) - assert result.name == "CHDLREXT_22_22_14_2.0" - - -def test_donchian(df): - result = ta.donchian(df.high, df.low) - assert isinstance(result, DataFrame) - assert result.name == "DC_20_20" - - result = ta.donchian(df.high, df.low, lower_length=10, upper_length=5) - assert isinstance(result, DataFrame) - assert result.name == "DC_10_5" - - -def test_hwc(df): - result = ta.hwc(df.close, channels=True) - assert isinstance(result, DataFrame) - assert result.name == "HWC_1" - - result = ta.hwc(df.close, channels=False) - assert isinstance(result, DataFrame) - assert result.name == "HWC_1" - - -def test_kc(df): - result = ta.kc(df.high, df.low, df.close) - assert isinstance(result, DataFrame) - assert result.name == "KCe_20_2" - - result = ta.kc(df.high, df.low, df.close, mamode="sma") - assert isinstance(result, DataFrame) - assert result.name == "KCs_20_2" - - -def test_massi(df): - result = ta.massi(df.high, df.low) - assert isinstance(result, Series) - assert result.name == "MASSI_9_25" - - -def test_natr(df): - result = ta.natr(df.high, df.low, df.close, talib=False, prenan=True) - assert isinstance(result, Series) - assert result.name == "NATR_14" - - try: - expected = tal.NATR(df.high, df.low, df.close) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.natr(df.high, df.low, df.close, df.volume) - assert isinstance(result, Series) - assert result.name == "NATR_14" - - -def test_pdist(df): - result = ta.pdist(df.open, df.high, df.low, df.close) - assert isinstance(result, Series) - assert result.name == "PDIST" - - -def test_rvi(df): - result = ta.rvi(df.close) - assert isinstance(result, Series) - assert result.name == "RVI_14" - - result = ta.rvi(df.close, df.high, df.low, refined=True) - assert isinstance(result, Series) - assert result.name == "RVIr_14" - - result = ta.rvi(df.close, df.high, df.low, thirds=True) - assert isinstance(result, Series) - assert result.name == "RVIt_14" - - -def test_thermo(df): - result = ta.thermo(df.high, df.low) - assert isinstance(result, DataFrame) - assert result.name == "THERMO_20_2_0.5" - - -def test_true_range(df): - result = ta.true_range(df.high, df.low, df.close, talib=False) - assert isinstance(result, Series) - assert result.name == "TRUERANGE_1" - - try: - expected = tal.TRANGE(df.high, df.low, df.close) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.true_range(df.high, df.low, df.close) - assert isinstance(result, Series) - assert result.name == "TRUERANGE_1" - - -def test_ui(df): - result = ta.ui(df.close) - assert isinstance(result, Series) - assert result.name == "UI_14" - - result = ta.ui(df.close, everget=True) - assert isinstance(result, Series) - assert result.name == "UIe_14" - - - -# DataFrame Extension Tests -def test_ext_aberration(df): - df.ta.aberration(append=True) - columns = [ - "ABER_ZG_5_15", "ABER_SG_5_15", "ABER_XG_5_15", "ABER_ATR_5_15" - ] - assert list(df.columns[-4:]) == columns - - -def test_ext_accbands(df): - df.ta.accbands(append=True) - assert list(df.columns[-3:]) == ["ACCBL_20", "ACCBM_20", "ACCBU_20"] - - -def test_ext_atr(df): - df.ta.atr(append=True) - assert df.columns[-1] == "ATRr_14" - - -def test_ext_atrts(df): - df.ta.atrts(append=True) - assert df.columns[-1] == "ATRTSe_14_20_3.0" - - -def test_ext_bbands(df): - df.ta.bbands(append=True) - columns = [ - "BBL_5_2.0_2.0", "BBM_5_2.0_2.0", - "BBU_5_2.0_2.0", "BBB_5_2.0_2.0", "BBP_5_2.0_2.0" - ] - assert list(df.columns[-5:]) == columns - - result = df.ta.bbands(lower_std=3, upper_std=5) - assert isinstance(result, DataFrame) - assert result.name == "BBANDS_5_3_5" - columns = ["BBL_5_3_5", "BBM_5_3_5", "BBU_5_3_5", "BBB_5_3_5", "BBP_5_3_5"] - assert list(result.columns) == columns - - -def test_ext_chandelier_exit(df): - df.ta.chandelier_exit(append=True) - columns = [ - "CHDLREXTl_22_22_14_2.0", - "CHDLREXTs_22_22_14_2.0", - "CHDLREXTd_22_22_14_2.0" - ] - assert list(df.columns[-3:]) == columns - - -def test_ext_donchian(df): - df.ta.donchian(append=True) - assert list(df.columns[-3:]) == ["DCL_20_20", "DCM_20_20", "DCU_20_20"] - - -def test_ext_hwc(df): - df.ta.hwc(append=True) - assert list(df.columns[-5:]) == [ - "HWM_1", "HWL_1", "HWU_1", "HWW_1", "HWPCT_1" - ] - - -def test_ext_kc(df): - df.ta.kc(append=True) - assert list(df.columns[-3:]) == ["KCLe_20_2", "KCBe_20_2", "KCUe_20_2"] - - -def test_ext_massi(df): - df.ta.massi(append=True) - assert df.columns[-1] == "MASSI_9_25" - - -def test_ext_natr(df): - df.ta.natr(append=True) - assert df.columns[-1] == "NATR_14" - - -def test_ext_pdist(df): - df.ta.pdist(append=True) - assert df.columns[-1] == "PDIST" - - -def test_ext_rvi(df): - df.ta.rvi(append=True) - assert df.columns[-1] == "RVI_14" - - df.ta.rvi(refined=True, append=True) - assert df.columns[-1] == "RVIr_14" - - df.ta.rvi(thirds=True, append=True) - assert df.columns[-1] == "RVIt_14" - - -def test_ext_thermo(df): - df.ta.thermo(append=True) - columns = [ - "THERMO_20_2_0.5", "THERMOma_20_2_0.5", - "THERMOl_20_2_0.5", "THERMOs_20_2_0.5" - ] - assert list(df.columns[-4:]) == columns - - -def test_ext_true_range(df): - df.ta.true_range(append=True) - assert df.columns[-1] == "TRUERANGE_1" - - -def test_ext_ui(df): - df.ta.ui(append=True) - assert df.columns[-1] == "UI_14" - - df.ta.ui(everget=True, append=True) - assert df.columns[-1] == "UIe_14" diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_indicator_volume.py b/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_indicator_volume.py deleted file mode 100644 index d239f344..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_indicator_volume.py +++ /dev/null @@ -1,324 +0,0 @@ -# -*- coding: utf-8 -*- -from pandas import DataFrame, Series -import pandas.testing as pdt -from pytest import mark -import talib as tal - -import pandas_ta as ta - -from .config import CORRELATION, CORRELATION_THRESHOLD, error_analysis - - - -# TA Lib style Tests -def test_ad(df): - result = ta.ad(df.high, df.low, df.close, df.volume, talib=False) - assert isinstance(result, Series) - assert result.name == "AD" - - try: - expected = tal.AD(df.high, df.low, df.close, df.volume) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.ad(df.high, df.low, df.close, df.volume) - assert isinstance(result, Series) - assert result.name == "AD" - - -def test_ad_open(df): - result = ta.ad(df.high, df.low, df.close, df.volume, df.open) - assert isinstance(result, Series) - assert result.name == "ADo" - - -def test_adosc(df): - result = ta.adosc(df.high, df.low, df.close, df.volume, talib=False) - assert isinstance(result, Series) - assert result.name == "ADOSC_3_10" - - try: - expected = tal.ADOSC(df.high, df.low, df.close, df.volume) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.adosc(df.high, df.low, df.close, df.volume) - assert isinstance(result, Series) - assert result.name == "ADOSC_3_10" - - -def test_aobv(df): - result = ta.aobv(df.close, df.volume) - assert isinstance(result, DataFrame) - assert result.name == "AOBVe_4_12_2_2_2" - - -def test_cmf(df): - result = ta.cmf(df.high, df.low, df.close, df.volume) - assert isinstance(result, Series) - assert result.name == "CMF_20" - - -def test_efi(df): - result = ta.efi(df.close, df.volume) - assert isinstance(result, Series) - assert result.name == "EFI_13" - - -def test_eom(df): - result = ta.eom(df.high, df.low, df.close, df.volume) - assert isinstance(result, Series) - assert result.name == "EOM_14_100000000" - - -def test_kvo(df): - result = ta.kvo(df.high, df.low, df.close, df.volume) - assert isinstance(result, DataFrame) - assert result.name == "KVO_34_55_13" - - -def test_mfi(df): - result = ta.mfi(df.high, df.low, df.close, df.volume, talib=False) - assert isinstance(result, Series) - assert result.name == "MFI_14" - - try: - expected = tal.MFI(df.high, df.low, df.close, df.volume) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.mfi(df.high, df.low, df.close, df.volume) - assert isinstance(result, Series) - assert result.name == "MFI_14" - - -def test_nvi(df): - result = ta.nvi(df.close, df.volume) - assert isinstance(result, Series) - assert result.name == "NVI_1" - - -def test_obv(df): - result = ta.obv(df.close, df.volume, talib=False) - assert isinstance(result, Series) - assert result.name == "OBV" - - try: - expected = tal.OBV(df.close, df.volume) - pdt.assert_series_equal(result, expected, check_names=False) - except AssertionError: - try: - corr = ta.utils.df_error_analysis(result, expected) - print(f"{corr=}") - assert corr > CORRELATION_THRESHOLD - except Exception as ex: - error_analysis(result, CORRELATION, ex) - - result = ta.obv(df.close, df.volume) - assert isinstance(result, Series) - assert result.name == "OBV" - - -def test_pvi(df): - result = ta.pvi(df.close, df.volume, length=10) - assert isinstance(result, DataFrame) - assert result.name == "PVI" - - result = ta.pvi(df.close, df.volume, length=10, overlay=True) - assert isinstance(result, DataFrame) - assert df.close.iloc[0] == result.iloc[0,0] - - -def test_pvo(df): - result = ta.pvo(df.volume) - assert isinstance(result, DataFrame) - assert result.name == "PVO_12_26_9" - - -def test_pvol(df): - result = ta.pvol(df.close, df.volume) - assert isinstance(result, Series) - assert result.name == "PVOL" - - -def test_pvr(df): - result = ta.pvr(df.close, df.volume) - assert isinstance(result, Series) - assert result.name == "PVR" - - -def test_pvt(df): - result = ta.pvt(df.close, df.volume) - assert isinstance(result, Series) - assert result.name == "PVT" - - -def test_tsv(df): - result = ta.tsv(df.close, df.volume) - assert isinstance(result, DataFrame) - assert result.name == "TSV_18_10" - - -def test_vhm(df): - result = ta.vhm(df.volume, 30, 30) - assert isinstance(result, Series) - assert result.name == "VHM_30" - - result = ta.vhm(df.volume, 10, 20) - assert isinstance(result, Series) - assert result.name == "VHM_10_20" - - -def test_vp(df): - result = ta.vp(df.close, df.volume) - assert isinstance(result, DataFrame) - assert result.name == "VP_10" - - result = ta.vp(df.close, df.volume, sort=True) - assert isinstance(result, DataFrame) - assert result.name == "VP_10" - - -@mark.parametrize("bands,dtype", [ - (None, Series), ([1], DataFrame), ([-1, 1], DataFrame), - ([1, 2, 4, 8], DataFrame), ([1, 2.5, 4.13], DataFrame), -]) -def test_vwap(df, bands, dtype): - result = ta.vwap(df.high, df.low, df.close, df.volume, bands=bands) - assert isinstance(result, dtype) - assert result.name == "VWAP_D" - - -def test_vwma(df): - result = ta.vwma(df.close, df.volume) - assert isinstance(result, Series) - assert result.name == "VWMA_10" - - - - -# DataFrame Extension Tests -def test_ext_ad(df): - df.ta.ad(talib=False, append=True) - assert df.columns[-1] == "AD" - - df.ta.ad(open_=df.open, append=True) - assert df.columns[-1] == "ADo" - - -def test_ext_adosc(df): - df.ta.adosc(append=True) - assert df.columns[-1] == "ADOSC_3_10" - - -def test_ext_aobv(df): - df.ta.aobv(append=True) - columns = [ - "OBV", "OBV_min_2", "OBV_max_2", "OBVe_4", - "OBVe_12", "AOBV_LR_2", "AOBV_SR_2" - ] - assert list(df.columns[-7:]) == columns - - -def test_ext_cmf(df): - df.ta.cmf(append=True) - assert df.columns[-1] == "CMF_20" - - -def test_ext_efi(df): - df.ta.efi(append=True) - assert df.columns[-1] == "EFI_13" - - -def test_ext_eom(df): - df.ta.eom(append=True) - assert df.columns[-1] == "EOM_14_100000000" - - -def test_ext_kvo(df): - df.ta.kvo(append=True) - assert list(df.columns[-2:]) == ["KVO_34_55_13", "KVOs_34_55_13"] - - -def test_ext_mfi(df): - df.ta.mfi(append=True) - assert df.columns[-1] == "MFI_14" - - -def test_ext_nvi(df): - df.ta.nvi(append=True) - assert df.columns[-1] == "NVI_1" - - -def test_ext_obv(df): - df.ta.obv(append=True) - assert df.columns[-1] == "OBV" - - -def test_ext_pvi(df): - df.ta.pvi(length=10, append=True) - assert list(df.columns[-2:]) == ["PVI", "PVIe_10"] - - -def test_ext_pvo(df): - df.ta.pvo(append=True) - assert list(df.columns[-3:]) == [ - "PVO_12_26_9", "PVOh_12_26_9", "PVOs_12_26_9" - ] - - -def test_ext_pvol(df): - df.ta.pvol(append=True) - assert df.columns[-1] == "PVOL" - - -def test_ext_pvr(df): - df.ta.pvr(append=True) - assert df.columns[-1] == "PVR" - - -def test_ext_pvt(df): - df.ta.pvt(append=True) - assert df.columns[-1] == "PVT" - - -def test_ext_tsv(df): - df.ta.tsv(append=True) - assert list(df.columns[-3:]) == ["TSV_18_10", "TSVs_18_10", "TSVr_18_10"] - - -def test_ext_vhm(df): - df.ta.vhm(length=30, slength=30, append=True) - assert df.columns[-1] == "VHM_30" - - -# Volume Profile can not be appended to the df - - -def test_ext_vwap(df): - df.ta.vwap(append=True) - assert df.columns[-1] == "VWAP_D" - - -def test_ext_vwma(df): - df.ta.vwma(append=True) - # print(f"\n{df.columns=}\n") - assert df.columns[-1] == "VWMA_10" diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_numba.py b/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_numba.py deleted file mode 100644 index ba7692eb..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_numba.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- -import numpy as np -from pytest import mark - -import pandas_ta as ta - - - -@mark.parametrize("array,n,result", [ - (np.ones(5), 2, np.array([np.nan, 1.0, 1.0, 1.0, 1.0])), - (np.ones(5), -2, np.ones(5)) -]) -def test_nb_prenan(array, n, result): - np.testing.assert_array_equal(ta.nb_prenan(array, n), result) - - -@mark.parametrize("array,n,result", [ - (np.ones(5), 2, np.array([np.nan, np.nan, 1.0, 1.0, 1.0, 1.0, 1.0])), - (np.ones(5), -2, np.ones(5)) -]) -def test_nb_prepend(array, n, result): - np.testing.assert_array_equal(ta.nb_prepend(array, n), result) - - -@mark.parametrize("array,n,fn,result", [(np.ones(5), 2, None, np.ones(5))]) -def test_nb_rolling(array, n, fn, result): - np.testing.assert_array_equal(ta.nb_rolling(array, n, fn), result) - - -@mark.parametrize("array,n,result", [ - (np.ones(5), 2, np.array([np.nan, np.nan, 1.0, 1.0, 1.0])), - (np.ones(5), -2, np.array([1.0, 1.0, 1.0, np.nan, np.nan])) -]) -def test_nb_shift(array, n, result): - np.testing.assert_array_equal(ta.nb_shift(array, n), result) diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_studies.py b/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_studies.py deleted file mode 100644 index 17dbf544..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_studies.py +++ /dev/null @@ -1,125 +0,0 @@ -# -*- coding: utf-8 -*- -from multiprocessing import cpu_count - -from pandas import DataFrame -import pytest - -import pandas_ta as ta - -categories = DataFrame().ta.categories() + \ -[pytest.param(ta.CommonStudy, id="common"), pytest.param(ta.AllStudy, id="all")] - -# +/- when adding/removing indicators -ALL_COLUMNS = 329 - - - -def test_all_study_props(all_study): - s = all_study - assert s.name == "All" - assert isinstance(s.description, str) - assert s.total_ta() == 0 # Only 'study' that is None - assert len(s.created) > 0 - assert s.cores == cpu_count() - - -def test_common_study_props(common_study): - s = common_study - assert s.name == "Common Price and Volume SMAs" - assert isinstance(s.description, str) - assert s.total_ta() == 5 - assert len(s.created) > 0 - assert s.cores == 0 - - -@pytest.mark.parametrize("category,columns", [ - ("candle", 70), ("cycle", 2), ("momentum", 85), ("overlap", 56), - ("performance", 2), ("statistics", 16), ("trend", 33), - ("volatility", 38), ("volume", 27), - pytest.param(ta.AllStudy, ALL_COLUMNS, id=f"all-{ALL_COLUMNS}"), - pytest.param(ta.CommonStudy, 5, id="common-5"), -]) -def test_study_category_columns(df, category, columns): - initial_columns = df.shape[1] - df.ta.study(category, cores=0) - assert df.shape[1] == initial_columns + columns - - -@pytest.mark.parametrize("talib", [False, True]) -@pytest.mark.parametrize("category", categories) -def test_study_category_talib(df, category, talib): - initial_columns = df.shape[1] - df.ta.study(category, cores=0, talib=talib) - assert df.shape[1] > initial_columns - - -@pytest.mark.parametrize("talib", [False, True]) -def test_study_custom_a_talib(df, custom_study_a, talib): - initial_columns = df.shape[1] - df.ta.study(custom_study_a, cores=0, talib=talib) - assert df.shape[1] > initial_columns - - -@pytest.mark.parametrize("talib", [False, True]) -def test_study_custom_b_talib(df, custom_study_b, talib): - initial_columns = df.shape[1] - df.ta.study(custom_study_b, cores=0, talib=talib) - assert df.shape[1] - initial_columns == 3 - - -@pytest.mark.parametrize("talib", [False, True]) -def test_study_custom_c_talib(df, custom_study_c, talib): - initial_columns = df.shape[1] - df.ta.study(custom_study_c, cores=0, talib=talib) - assert df.shape[1] - initial_columns == 5 - - -@pytest.mark.parametrize("talib", [False, True]) -def test_study_custom_d_talib(df, custom_study_d, talib): - initial_columns = df.shape[1] - df.ta.study(custom_study_d, cores=0, talib=talib) - assert df.shape[1] - initial_columns == 3 - - -@pytest.mark.parametrize("talib", [False, True]) -def test_study_custom_e_talib(df, custom_study_e, talib): - initial_columns = df.shape[1] - df.ta.study(custom_study_e, cores=0, talib=talib) - df.ta.tsignals(trend=df["AMATe_LR_20_50_2"], append=True) - assert df.shape[1] - initial_columns == 8 - - -@pytest.mark.parametrize("talib", [False, True]) -def test_study_all_multirun_talib(df, all_study, talib): - new_columns = 617 # +/- when adding/removing indicators - initial_columns = df.shape[1] - df.ta.study(all_study, length=10, cores=0, talib=talib) - df.ta.study(all_study, length=50, cores=0, talib=talib) - df.ta.study(all_study, fast=5, slow=10, cores=0, talib=talib) - - assert df.shape[1] == new_columns + initial_columns - - -# Note: As expected, it will print a VWAP datetime ordered index warning -# when less than 2 rows -@pytest.mark.parametrize("talib", [False, True]) -def test_study_all_incremental_rows_talib(df, all_study, talib): - MAX_ROWS = 77 - df = df.iloc[:MAX_ROWS] # Trim for this test - - for i in range(0, MAX_ROWS): - _df = df.iloc[:i] - _df.ta.study(all_study, cores=0, talib=talib) - # Break when max columns reached - if _df.shape[1] - df.shape[1] == ALL_COLUMNS: - assert _df.shape[1] > df.shape[1] - break - - -@pytest.mark.parametrize("talib", [False, True]) -@pytest.mark.parametrize("category", categories) -def test_study_mp_category_talib(df, category, talib): - cores = cpu_count() - 2 - initial_columns = df.shape[1] - df.ta.study(category, cores=cores, talib=talib) - assert df.shape[1] > initial_columns diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_utils.py b/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_utils.py deleted file mode 100644 index dddc8d0b..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/tests/test_utils.py +++ /dev/null @@ -1,439 +0,0 @@ -# -*- coding: utf-8 -*- -from sys import platform as sys_platform - -import numpy as np -from pandas import DataFrame, Series -from pandas.api.types import is_datetime64_ns_dtype -from pytest import mark, param - -from tests.conftest import all_study, common_study - -import pandas_ta as ta - -CROSS_E1 = { - "zero": [0, 0], - "a": [0, 1], - "b": [1, 0], - "c": [1, 1], - "crossed": [0, 1], -} -crosseddf = DataFrame(CROSS_E1) - -SCALARS = [ - np.ones(0), np.ones(1), np.array([1, 2]), np.array([1.5, 2.5]), - np.array([2, 3, 4]), np.array([0.01, 0.1, 10, 100]), - np.array([-10, -1, 10]) -] - - -def test_above(): - result = ta.utils.above(crosseddf["a"], crosseddf["zero"]) - assert isinstance(result, Series) - assert result.name == "a_A_zero" - np.testing.assert_array_equal(result, crosseddf["c"]) - - result = ta.utils.above(crosseddf["zero"], crosseddf["a"]) - assert isinstance(result, Series) - assert result.name == "zero_A_a" - np.testing.assert_array_equal(result, crosseddf["b"]) - - - -def test_above_value(): - result = ta.utils.above_value(crosseddf["a"], 0) - assert isinstance(result, Series) - assert result.name == "a_A_0" - np.testing.assert_array_equal(result, crosseddf["c"]) - - result = ta.utils.above_value(crosseddf["a"], crosseddf["zero"]) - assert result is None - - - -def test_add_df_prefix(df): - result = df.ta.hl2(prefix="pre") - assert result.name == "pre_HL2" - - result = df.ta.hl2(suffix="suf") - assert result.name == "HL2_suf" - - result = df.ta.hl2(prefix="pre", suffix="suf") - assert result.name == "pre_HL2_suf" - - result = df.ta.hl2(prefix=1, suffix=2) - assert result.name == "1_HL2_2" - - result = df.ta.macd(prefix="pre", suffix="suf") - for col in result.columns: - assert col.startswith("pre_") and col.endswith("_suf") - - - -def test_baseline_ohlc(df): - result = df.ta.baseline() - print(f"\n{result}\n") - # assert result.name == "pre_HL2" - - - -def test_below(): - result = ta.utils.below(crosseddf["zero"], crosseddf["a"]) - assert isinstance(result, Series) - assert result.name == "zero_B_a" - np.testing.assert_array_equal(result, crosseddf["c"]) - - result = ta.utils.below(crosseddf["zero"], crosseddf["a"]) - assert isinstance(result, Series) - assert result.name == "zero_B_a" - np.testing.assert_array_equal(result, crosseddf["c"]) - - - -def test_below_value(): - result = ta.utils.below_value(crosseddf["a"], 0) - assert isinstance(result, Series) - assert result.name == "a_B_0" - np.testing.assert_array_equal(result, crosseddf["b"]) - - result = ta.utils.below_value(crosseddf["a"], crosseddf["zero"]) - assert result is None - - - -def test_combination(): - assert ta.utils.combination() != None - - assert ta.utils.combination() == 1 - assert ta.utils.combination(r=-1) == 1 - - assert ta.utils.combination(n=10, r=4, repetition=False) == 210 - assert ta.utils.combination(n=10, r=4, repetition=True) == 715 - - - -def test_cross_above(): - result = ta.utils.cross(crosseddf["a"], crosseddf["b"]) - assert isinstance(result, Series) - np.testing.assert_array_equal(result, crosseddf["crossed"]) - - result = ta.utils.cross(crosseddf["a"], crosseddf["b"], above=True) - assert isinstance(result, Series) - np.testing.assert_array_equal(result, crosseddf["crossed"]) - - result = ta.utils.cross(crosseddf["a"], crosseddf["b"], equal=False) - assert isinstance(result, Series) - np.testing.assert_array_equal(result, crosseddf["crossed"]) - - - -def test_cross_below(): - result = ta.utils.cross(crosseddf["b"], crosseddf["a"], above=False) - assert isinstance(result, Series) - np.testing.assert_array_equal(result, crosseddf["crossed"]) - - result = ta.utils.cross(crosseddf["b"], crosseddf["a"], above=False, equal=False) - assert isinstance(result, Series) - np.testing.assert_array_equal(result, crosseddf["crossed"]) - - # result = ta.utils.cross(crosseddf["a"], crosseddf["b"], above=False) - # assert result[0] == 0 - - - -def test_cube(df): - result = ta.cube(Series([100, 50, 0, 25, 0, 60])) - assert result.name == "CUBE_3.0_-1" - - - -def test_datetime_ordered(df): - # Test if datetime64 index and ordered - # result = df.ta.datetime_ordered() - # assert result is True - assert df.ta.datetime_ordered() is True - - # Test if not ordered - original = df.copy() - original.ta.reverse() - result = original.ta.datetime_ordered() - assert result is False - - # Test a non-datetime64 index - original = df.copy() - original.reset_index(inplace=True) - result = original.ta.datetime_ordered() - assert result is False - - - -def test_df_dates(df): - result = ta.utils.df_dates(df) - assert result is None - - - -def test_fibonacci(): - np.testing.assert_array_equal(ta.utils.fibonacci(0, False), np.array([1, 1])) - np.testing.assert_array_equal(ta.utils.fibonacci(5, False), np.array([1, 1, 2, 3, 5])) - - assert isinstance(ta.utils.fibonacci(2, False), np.ndarray) - - - -def test_fibonacci_weighted(): - np.testing.assert_array_equal(ta.utils.fibonacci(0, True), np.array([0.5, 0.5])) - np.testing.assert_allclose(ta.utils.fibonacci(5, True), np.array([1 / 12, 1 / 12, 1 / 6, 1 / 4, 5 / 12])) - - assert isinstance(ta.utils.fibonacci(2, True), np.ndarray) - - - -def test_geometric_mean(df): - returns = ta.percent_return(df.close) - result = ta.utils.geometric_mean(returns) - assert isinstance(result, (float, int)) - - result = ta.utils.geometric_mean(Series([12, 14, 11, 8])) - assert isinstance(result, float) - - result = ta.utils.geometric_mean(Series([100, 50, 0, 25, 0, 60])) - assert isinstance(result, float) - - series = Series([0, 1, 2, 3]) - result = ta.utils.geometric_mean(series) - assert isinstance(result, float) - - result = ta.utils.geometric_mean(-series) - assert isinstance(result, int) - assert result == 0 - - - -def test_ifisher(): - result = ta.ifisher(Series([1, 2, 3, 4, 5, 6, 7, 4, 2, 1, 3])) - assert result.name == "INVFISHER_1.0" - - - -# def test_linear_regression(): -# x = Series([1, 2, 3, 4, 5]) -# y = Series([1.8, 2.1, 2.7, 3.2, 4]) - -# result = ta.utils.linear_regression(x, y) -# assert isinstance(result, dict) -# assert isinstance(result["a"], float) -# assert isinstance(result["b"], float) -# assert isinstance(result["r"], float) -# assert isinstance(result["t"], float) -# assert isinstance(result["line"], Series) - - - -def test_log_geometric_mean(df): - returns = ta.percent_return(df.close) - result = ta.utils.log_geometric_mean(returns) - assert isinstance(result, float) - - result = ta.utils.log_geometric_mean(Series([12, 14, 11, 8])) - assert isinstance(result, float) - - result = ta.utils.log_geometric_mean(Series([100, 50, 0, 25, 0, 60])) - assert isinstance(result, float) - - series = Series([0, 1, 2, 3]) - result = ta.utils.log_geometric_mean(series) - assert isinstance(result, float) - - result = ta.utils.log_geometric_mean(-series) - assert isinstance(result, int) - assert result == 0 - - - -def test_reverse(df): - original = df.copy() - df.ta.reverse() - - # Check if first and last time are reversed - assert df.index[-1] == original.index[0] - assert df.index[0] == original.index[-1] - - - -def test_pascals_triangle(): - assert ta.utils.pascals_triangle(inverse=True) is None - - array = np.array([1]) - np.testing.assert_array_equal(ta.utils.pascals_triangle(), array) - np.testing.assert_array_equal(ta.utils.pascals_triangle(weighted=True), array) - np.testing.assert_array_equal(ta.utils.pascals_triangle(weighted=True, inverse=True), np.array([0])) - - - -@mark.parametrize("value", [-5, -1, 0, 1, 5]) -def test_pascals_triangle_n(value): - array = ta.utils.pascals_triangle(n=value) - array_w = array / np.sum(array) - array_iw = 1 - array_w - np.testing.assert_array_equal(ta.utils.pascals_triangle(n=value), array) - np.testing.assert_array_equal(ta.utils.pascals_triangle(n=value, weighted=True), array_w) - np.testing.assert_array_equal(ta.utils.pascals_triangle(n=value, weighted=True, inverse=True), array_iw) - - - -@mark.parametrize("value", [param(None, marks=mark.xfail), "NYSE", "NZSX", "SSE"]) -def test_get_time_(value): - print(f"{value=}") - result = ta.utils.get_time(value, to_string=True) - assert isinstance(result, str) - assert value in result - - - -@mark.parametrize("array,degree,result", [ - ([1], 1, 1), ([1, 1], 1, 2), ([1, 0, -1], 1, 0), - ([1, 0, 1], 1, 2), ([1, 1, 1], 1, 3) -]) -def test_hpoly(array, degree, result): - assert ta.utils.hpoly(array, degree) == result - - - -def test_remap(): - result = ta.remap(Series([100, 50, 0, 25, 0, 60])) - assert result.name == "REMAP_0.0_100.0_-1.0_1.0" - - - -def test_signals(df): - _ = df.ta.er(signal_indicators=True) - assert _.shape[1] > 0 - - _ = df.ta.macd(signal_indicators=True) - assert _.shape[1] > 0 - - _ = df.ta.rsi(signal_indicators=True) - assert _.shape[1] > 0 - - _ = df.ta.rsx(signal_indicators=True) - assert _.shape[1] > 0 - - - -def test_symmetric_triangle(): - np.testing.assert_array_equal(ta.utils.symmetric_triangle(), np.array([1,1])) - np.testing.assert_array_equal(ta.utils.symmetric_triangle(weighted=True), np.array([0.5, 0.5])) - - - -@mark.parametrize("value", [2, 3, 10]) -def test_symmetric_triangle_n(value): - array = ta.utils.symmetric_triangle(n=value) - array_w = array / np.sum(array) - np.testing.assert_array_equal(ta.utils.symmetric_triangle(n=value), array) - np.testing.assert_array_equal(ta.utils.symmetric_triangle(n=value, weighted=True), array_w) - - - -@mark.parametrize("value,result", [ - ("sma", 0), ("Sma", 0), ("ema", 1), ("wma", 2), ("dema", 3), ("tema", 4), - ("trima", 5), ("kama", 6), ("mama", 7), ("t3", 8) -]) -def test_tal_ma(value, result): - assert ta.utils.tal_ma(value) == result - - - -def test_to_utc(df): - result = ta.utils.to_utc(df) - assert is_datetime64_ns_dtype(result.index) - # assert is_datetime64tz_dtype(result.index) # Depreciation Warning but no mention in 2.2 docs - - - -def test_version(): - assert isinstance(ta.version, str) - print(f"{ta.version=}") - - - -def test_v_drift_type(): - _instances = [0, None, "", [], {}, np.int8(5), np.int16(5), np.int32(5), np.int64(5)] - for _ in _instances: - assert isinstance(ta.utils.v_drift(_), int) - - - -@mark.parametrize("value,result", [ - (-1.1, 1), (0, 1), (1.1, 1), (5, 5), - (np.int64(-1.1), -1), (np.int64(0), 1), - (np.int64(1.1), 1), (np.int64(5), 5) -]) -def test_v_drift_value(value, result): - assert ta.utils.v_drift(value) == result - - - -@mark.parametrize("value", [None, "", [], {}, -1.1, -1, 0.0, 0, 0.1, 1.0, 1]) -@mark.parametrize("strict", [False, True]) -def test_v_lowerbound_type(value, strict): - assert isinstance(ta.v_lowerbound(value, strict=strict), (float, int)) - - - -@mark.parametrize("value,result", [ - (-1.1, 0), (-1, 0), (0.0, 0), (0, 0), (0.1, 0.1), (1.0, 1.0), (1, 1), -]) -def test_v_lowerbound_value_strict(value, result): - assert ta.utils.v_lowerbound(value) == result - - - -@mark.parametrize("value,result", [ - (-1.1, 0), (-1, 0), (0.0, 0), (0, 0), (0.1, 0.1), (1.0, 1), (1, 1), -]) -def test_v_lowerbound_value_strict_false(value, result): - assert ta.utils.v_lowerbound(value, strict=False) == result - - - -@mark.parametrize("value", [ - 0, None, "", [], {}, np.int8(5), np.int16(5), np.int32(5), np.int64(5) -]) -def test_v_offset_types(value): - assert isinstance(ta.utils.v_offset(value), int) - - - -@mark.parametrize("value,result", [ - (None, 0), (-1.1, 0), (-1, -1), (0, 0), (1.1, 0), (1, 1), (2, 2), - (np.int64(-1), -1), (np.int64(0), 0), (np.int64(1.1), 1), - (np.int64(1), 1), (np.int64(2), 2), (np.int64(-1.1), -1), - (np.int64(1.1), 1), -]) -def test_v_offset_value(value,result): - assert ta.utils.v_offset(value) == result - - - -@mark.parametrize("value", [None, "", [], {}, -1.1, -1, 0.0, 0, 0.1, 1.0, 1]) -@mark.parametrize("strict", [False, True]) -def test_v_upperbound_value_strict(value, strict): - assert isinstance(ta.utils.v_upperbound(value, strict=strict), (float, int)) - - - -@mark.parametrize("value,result", [ - (-0.0000000000000001, 0), (0.0000000000000001, 0), (0, 0), (0.0, 0), - param(-0.000000000000001, 0, marks=mark.xfail), param(1, 0, marks=mark.xfail) -]) -def test_zero(value, result): - assert ta.utils.zero(value) == result - - - -@mark.parametrize("talib", [False, True]) -@mark.parametrize("verbose", [False, True]) -def test_indicator_speed_talib_verbose(df, talib, verbose): - resultdf = ta.speed_test(df, talib=talib, verbose=verbose) - assert isinstance(resultdf, DataFrame) diff --git a/temp_pandas_ta/pandas_ta-0.4.71b0/uv.lock b/temp_pandas_ta/pandas_ta-0.4.71b0/uv.lock deleted file mode 100644 index 37c26654..00000000 --- a/temp_pandas_ta/pandas_ta-0.4.71b0/uv.lock +++ /dev/null @@ -1,2591 +0,0 @@ -version = 1 -revision = 2 -requires-python = ">=3.12" -resolution-markers = [ - "python_full_version >= '3.14'", - "python_full_version < '3.14'", -] - -[[package]] -name = "anyio" -version = "4.10.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "idna" }, - { name = "sniffio" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f1/b4/636b3b65173d3ce9a38ef5f0522789614e590dab6a8d505340a4efe4c567/anyio-4.10.0.tar.gz", hash = "sha256:3f3fae35c96039744587aa5b8371e7e8e603c0702999535961dd336026973ba6", size = 213252, upload-time = "2025-08-04T08:54:26.451Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6f/12/e5e0282d673bb9746bacfb6e2dba8719989d3660cdb2ea79aee9a9651afb/anyio-4.10.0-py3-none-any.whl", hash = "sha256:60e474ac86736bbfd6f210f7a61218939c318f43f9972497381f1c5e930ed3d1", size = 107213, upload-time = "2025-08-04T08:54:24.882Z" }, -] - -[[package]] -name = "appnope" -version = "0.1.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170, upload-time = "2024-02-06T09:43:11.258Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321, upload-time = "2024-02-06T09:43:09.663Z" }, -] - -[[package]] -name = "argon2-cffi" -version = "25.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "argon2-cffi-bindings", version = "21.2.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.14'" }, - { name = "argon2-cffi-bindings", version = "25.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.14'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/0e/89/ce5af8a7d472a67cc819d5d998aa8c82c5d860608c4db9f46f1162d7dab9/argon2_cffi-25.1.0.tar.gz", hash = "sha256:694ae5cc8a42f4c4e2bf2ca0e64e51e23a040c6a517a85074683d3959e1346c1", size = 45706, upload-time = "2025-06-03T06:55:32.073Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4f/d3/a8b22fa575b297cd6e3e3b0155c7e25db170edf1c74783d6a31a2490b8d9/argon2_cffi-25.1.0-py3-none-any.whl", hash = "sha256:fdc8b074db390fccb6eb4a3604ae7231f219aa669a2652e0f20e16ba513d5741", size = 14657, upload-time = "2025-06-03T06:55:30.804Z" }, -] - -[[package]] -name = "argon2-cffi-bindings" -version = "21.2.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14'", -] -dependencies = [ - { name = "cffi", marker = "python_full_version >= '3.14'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b9/e9/184b8ccce6683b0aa2fbb7ba5683ea4b9c5763f1356347f1312c32e3c66e/argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3", size = 1779911, upload-time = "2021-12-01T08:52:55.68Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/13/838ce2620025e9666aa8f686431f67a29052241692a3dd1ae9d3692a89d3/argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367", size = 29658, upload-time = "2021-12-01T09:09:17.016Z" }, - { url = "https://files.pythonhosted.org/packages/b3/02/f7f7bb6b6af6031edb11037639c697b912e1dea2db94d436e681aea2f495/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d", size = 80583, upload-time = "2021-12-01T09:09:19.546Z" }, - { url = "https://files.pythonhosted.org/packages/ec/f7/378254e6dd7ae6f31fe40c8649eea7d4832a42243acaf0f1fff9083b2bed/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae", size = 86168, upload-time = "2021-12-01T09:09:21.445Z" }, - { url = "https://files.pythonhosted.org/packages/74/f6/4a34a37a98311ed73bb80efe422fed95f2ac25a4cacc5ae1d7ae6a144505/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c", size = 82709, upload-time = "2021-12-01T09:09:18.182Z" }, - { url = "https://files.pythonhosted.org/packages/74/2b/73d767bfdaab25484f7e7901379d5f8793cccbb86c6e0cbc4c1b96f63896/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86", size = 83613, upload-time = "2021-12-01T09:09:22.741Z" }, - { url = "https://files.pythonhosted.org/packages/4f/fd/37f86deef67ff57c76f137a67181949c2d408077e2e3dd70c6c42912c9bf/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f", size = 84583, upload-time = "2021-12-01T09:09:24.177Z" }, - { url = "https://files.pythonhosted.org/packages/6f/52/5a60085a3dae8fded8327a4f564223029f5f54b0cb0455a31131b5363a01/argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e", size = 88475, upload-time = "2021-12-01T09:09:26.673Z" }, - { url = "https://files.pythonhosted.org/packages/8b/95/143cd64feb24a15fa4b189a3e1e7efbaeeb00f39a51e99b26fc62fbacabd/argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082", size = 27698, upload-time = "2021-12-01T09:09:27.87Z" }, - { url = "https://files.pythonhosted.org/packages/37/2c/e34e47c7dee97ba6f01a6203e0383e15b60fb85d78ac9a15cd066f6fe28b/argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f", size = 30817, upload-time = "2021-12-01T09:09:30.267Z" }, - { url = "https://files.pythonhosted.org/packages/5a/e4/bf8034d25edaa495da3c8a3405627d2e35758e44ff6eaa7948092646fdcc/argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93", size = 53104, upload-time = "2021-12-01T09:09:31.335Z" }, -] - -[[package]] -name = "argon2-cffi-bindings" -version = "25.1.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.14'", -] -dependencies = [ - { name = "cffi", marker = "python_full_version < '3.14'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5c/2d/db8af0df73c1cf454f71b2bbe5e356b8c1f8041c979f505b3d3186e520a9/argon2_cffi_bindings-25.1.0.tar.gz", hash = "sha256:b957f3e6ea4d55d820e40ff76f450952807013d361a65d7f28acc0acbf29229d", size = 1783441, upload-time = "2025-07-30T10:02:05.147Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/60/97/3c0a35f46e52108d4707c44b95cfe2afcafc50800b5450c197454569b776/argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:3d3f05610594151994ca9ccb3c771115bdb4daef161976a266f0dd8aa9996b8f", size = 54393, upload-time = "2025-07-30T10:01:40.97Z" }, - { url = "https://files.pythonhosted.org/packages/9d/f4/98bbd6ee89febd4f212696f13c03ca302b8552e7dbf9c8efa11ea4a388c3/argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8b8efee945193e667a396cbc7b4fb7d357297d6234d30a489905d96caabde56b", size = 29328, upload-time = "2025-07-30T10:01:41.916Z" }, - { url = "https://files.pythonhosted.org/packages/43/24/90a01c0ef12ac91a6be05969f29944643bc1e5e461155ae6559befa8f00b/argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3c6702abc36bf3ccba3f802b799505def420a1b7039862014a65db3205967f5a", size = 31269, upload-time = "2025-07-30T10:01:42.716Z" }, - { url = "https://files.pythonhosted.org/packages/d4/d3/942aa10782b2697eee7af5e12eeff5ebb325ccfb86dd8abda54174e377e4/argon2_cffi_bindings-25.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a1c70058c6ab1e352304ac7e3b52554daadacd8d453c1752e547c76e9c99ac44", size = 86558, upload-time = "2025-07-30T10:01:43.943Z" }, - { url = "https://files.pythonhosted.org/packages/0d/82/b484f702fec5536e71836fc2dbc8c5267b3f6e78d2d539b4eaa6f0db8bf8/argon2_cffi_bindings-25.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e2fd3bfbff3c5d74fef31a722f729bf93500910db650c925c2d6ef879a7e51cb", size = 92364, upload-time = "2025-07-30T10:01:44.887Z" }, - { url = "https://files.pythonhosted.org/packages/c9/c1/a606ff83b3f1735f3759ad0f2cd9e038a0ad11a3de3b6c673aa41c24bb7b/argon2_cffi_bindings-25.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c4f9665de60b1b0e99bcd6be4f17d90339698ce954cfd8d9cf4f91c995165a92", size = 85637, upload-time = "2025-07-30T10:01:46.225Z" }, - { url = "https://files.pythonhosted.org/packages/44/b4/678503f12aceb0262f84fa201f6027ed77d71c5019ae03b399b97caa2f19/argon2_cffi_bindings-25.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ba92837e4a9aa6a508c8d2d7883ed5a8f6c308c89a4790e1e447a220deb79a85", size = 91934, upload-time = "2025-07-30T10:01:47.203Z" }, - { url = "https://files.pythonhosted.org/packages/f0/c7/f36bd08ef9bd9f0a9cff9428406651f5937ce27b6c5b07b92d41f91ae541/argon2_cffi_bindings-25.1.0-cp314-cp314t-win32.whl", hash = "sha256:84a461d4d84ae1295871329b346a97f68eade8c53b6ed9a7ca2d7467f3c8ff6f", size = 28158, upload-time = "2025-07-30T10:01:48.341Z" }, - { url = "https://files.pythonhosted.org/packages/b3/80/0106a7448abb24a2c467bf7d527fe5413b7fdfa4ad6d6a96a43a62ef3988/argon2_cffi_bindings-25.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b55aec3565b65f56455eebc9b9f34130440404f27fe21c3b375bf1ea4d8fbae6", size = 32597, upload-time = "2025-07-30T10:01:49.112Z" }, - { url = "https://files.pythonhosted.org/packages/05/b8/d663c9caea07e9180b2cb662772865230715cbd573ba3b5e81793d580316/argon2_cffi_bindings-25.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:87c33a52407e4c41f3b70a9c2d3f6056d88b10dad7695be708c5021673f55623", size = 28231, upload-time = "2025-07-30T10:01:49.92Z" }, - { url = "https://files.pythonhosted.org/packages/1d/57/96b8b9f93166147826da5f90376e784a10582dd39a393c99bb62cfcf52f0/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:aecba1723ae35330a008418a91ea6cfcedf6d31e5fbaa056a166462ff066d500", size = 54121, upload-time = "2025-07-30T10:01:50.815Z" }, - { url = "https://files.pythonhosted.org/packages/0a/08/a9bebdb2e0e602dde230bdde8021b29f71f7841bd54801bcfd514acb5dcf/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2630b6240b495dfab90aebe159ff784d08ea999aa4b0d17efa734055a07d2f44", size = 29177, upload-time = "2025-07-30T10:01:51.681Z" }, - { url = "https://files.pythonhosted.org/packages/b6/02/d297943bcacf05e4f2a94ab6f462831dc20158614e5d067c35d4e63b9acb/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:7aef0c91e2c0fbca6fc68e7555aa60ef7008a739cbe045541e438373bc54d2b0", size = 31090, upload-time = "2025-07-30T10:01:53.184Z" }, - { url = "https://files.pythonhosted.org/packages/c1/93/44365f3d75053e53893ec6d733e4a5e3147502663554b4d864587c7828a7/argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e021e87faa76ae0d413b619fe2b65ab9a037f24c60a1e6cc43457ae20de6dc6", size = 81246, upload-time = "2025-07-30T10:01:54.145Z" }, - { url = "https://files.pythonhosted.org/packages/09/52/94108adfdd6e2ddf58be64f959a0b9c7d4ef2fa71086c38356d22dc501ea/argon2_cffi_bindings-25.1.0-cp39-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d3e924cfc503018a714f94a49a149fdc0b644eaead5d1f089330399134fa028a", size = 87126, upload-time = "2025-07-30T10:01:55.074Z" }, - { url = "https://files.pythonhosted.org/packages/72/70/7a2993a12b0ffa2a9271259b79cc616e2389ed1a4d93842fac5a1f923ffd/argon2_cffi_bindings-25.1.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c87b72589133f0346a1cb8d5ecca4b933e3c9b64656c9d175270a000e73b288d", size = 80343, upload-time = "2025-07-30T10:01:56.007Z" }, - { url = "https://files.pythonhosted.org/packages/78/9a/4e5157d893ffc712b74dbd868c7f62365618266982b64accab26bab01edc/argon2_cffi_bindings-25.1.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1db89609c06afa1a214a69a462ea741cf735b29a57530478c06eb81dd403de99", size = 86777, upload-time = "2025-07-30T10:01:56.943Z" }, - { url = "https://files.pythonhosted.org/packages/74/cd/15777dfde1c29d96de7f18edf4cc94c385646852e7c7b0320aa91ccca583/argon2_cffi_bindings-25.1.0-cp39-abi3-win32.whl", hash = "sha256:473bcb5f82924b1becbb637b63303ec8d10e84c8d241119419897a26116515d2", size = 27180, upload-time = "2025-07-30T10:01:57.759Z" }, - { url = "https://files.pythonhosted.org/packages/e2/c6/a759ece8f1829d1f162261226fbfd2c6832b3ff7657384045286d2afa384/argon2_cffi_bindings-25.1.0-cp39-abi3-win_amd64.whl", hash = "sha256:a98cd7d17e9f7ce244c0803cad3c23a7d379c301ba618a5fa76a67d116618b98", size = 31715, upload-time = "2025-07-30T10:01:58.56Z" }, - { url = "https://files.pythonhosted.org/packages/42/b9/f8d6fa329ab25128b7e98fd83a3cb34d9db5b059a9847eddb840a0af45dd/argon2_cffi_bindings-25.1.0-cp39-abi3-win_arm64.whl", hash = "sha256:b0fdbcf513833809c882823f98dc2f931cf659d9a1429616ac3adebb49f5db94", size = 27149, upload-time = "2025-07-30T10:01:59.329Z" }, -] - -[[package]] -name = "arrow" -version = "1.3.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "python-dateutil" }, - { name = "types-python-dateutil" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/2e/00/0f6e8fcdb23ea632c866620cc872729ff43ed91d284c866b515c6342b173/arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85", size = 131960, upload-time = "2023-09-30T22:11:18.25Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/ed/e97229a566617f2ae958a6b13e7cc0f585470eac730a73e9e82c32a3cdd2/arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80", size = 66419, upload-time = "2023-09-30T22:11:16.072Z" }, -] - -[[package]] -name = "asttokens" -version = "3.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978, upload-time = "2024-11-30T04:30:14.439Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918, upload-time = "2024-11-30T04:30:10.946Z" }, -] - -[[package]] -name = "async-lru" -version = "2.0.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/4d/71ec4d3939dc755264f680f6c2b4906423a304c3d18e96853f0a595dfe97/async_lru-2.0.5.tar.gz", hash = "sha256:481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb", size = 10380, upload-time = "2025-03-16T17:25:36.919Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/03/49/d10027df9fce941cb8184e78a02857af36360d33e1721df81c5ed2179a1a/async_lru-2.0.5-py3-none-any.whl", hash = "sha256:ab95404d8d2605310d345932697371a5f40def0487c03d6d0ad9138de52c9943", size = 6069, upload-time = "2025-03-16T17:25:35.422Z" }, -] - -[[package]] -name = "attrs" -version = "25.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/1367933a8532ee6ff8d63537de4f1177af4bff9f3e829baf7331f595bb24/attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b", size = 812032, upload-time = "2025-03-13T11:10:22.779Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815, upload-time = "2025-03-13T11:10:21.14Z" }, -] - -[[package]] -name = "babel" -version = "2.17.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852, upload-time = "2025-02-01T15:17:41.026Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537, upload-time = "2025-02-01T15:17:37.39Z" }, -] - -[[package]] -name = "backrefs" -version = "5.9" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/eb/a7/312f673df6a79003279e1f55619abbe7daebbb87c17c976ddc0345c04c7b/backrefs-5.9.tar.gz", hash = "sha256:808548cb708d66b82ee231f962cb36faaf4f2baab032f2fbb783e9c2fdddaa59", size = 5765857, upload-time = "2025-06-22T19:34:13.97Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/19/4d/798dc1f30468134906575156c089c492cf79b5a5fd373f07fe26c4d046bf/backrefs-5.9-py310-none-any.whl", hash = "sha256:db8e8ba0e9de81fcd635f440deab5ae5f2591b54ac1ebe0550a2ca063488cd9f", size = 380267, upload-time = "2025-06-22T19:34:05.252Z" }, - { url = "https://files.pythonhosted.org/packages/55/07/f0b3375bf0d06014e9787797e6b7cc02b38ac9ff9726ccfe834d94e9991e/backrefs-5.9-py311-none-any.whl", hash = "sha256:6907635edebbe9b2dc3de3a2befff44d74f30a4562adbb8b36f21252ea19c5cf", size = 392072, upload-time = "2025-06-22T19:34:06.743Z" }, - { url = "https://files.pythonhosted.org/packages/9d/12/4f345407259dd60a0997107758ba3f221cf89a9b5a0f8ed5b961aef97253/backrefs-5.9-py312-none-any.whl", hash = "sha256:7fdf9771f63e6028d7fee7e0c497c81abda597ea45d6b8f89e8ad76994f5befa", size = 397947, upload-time = "2025-06-22T19:34:08.172Z" }, - { url = "https://files.pythonhosted.org/packages/10/bf/fa31834dc27a7f05e5290eae47c82690edc3a7b37d58f7fb35a1bdbf355b/backrefs-5.9-py313-none-any.whl", hash = "sha256:cc37b19fa219e93ff825ed1fed8879e47b4d89aa7a1884860e2db64ccd7c676b", size = 399843, upload-time = "2025-06-22T19:34:09.68Z" }, - { url = "https://files.pythonhosted.org/packages/fc/24/b29af34b2c9c41645a9f4ff117bae860291780d73880f449e0b5d948c070/backrefs-5.9-py314-none-any.whl", hash = "sha256:df5e169836cc8acb5e440ebae9aad4bf9d15e226d3bad049cf3f6a5c20cc8dc9", size = 411762, upload-time = "2025-06-22T19:34:11.037Z" }, - { url = "https://files.pythonhosted.org/packages/41/ff/392bff89415399a979be4a65357a41d92729ae8580a66073d8ec8d810f98/backrefs-5.9-py39-none-any.whl", hash = "sha256:f48ee18f6252b8f5777a22a00a09a85de0ca931658f1dd96d4406a34f3748c60", size = 380265, upload-time = "2025-06-22T19:34:12.405Z" }, -] - -[[package]] -name = "beautifulsoup4" -version = "4.13.5" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "soupsieve" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/85/2e/3e5079847e653b1f6dc647aa24549d68c6addb4c595cc0d902d1b19308ad/beautifulsoup4-4.13.5.tar.gz", hash = "sha256:5e70131382930e7c3de33450a2f54a63d5e4b19386eab43a5b34d594268f3695", size = 622954, upload-time = "2025-08-24T14:06:13.168Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/eb/f4151e0c7377a6e08a38108609ba5cede57986802757848688aeedd1b9e8/beautifulsoup4-4.13.5-py3-none-any.whl", hash = "sha256:642085eaa22233aceadff9c69651bc51e8bf3f874fb6d7104ece2beb24b47c4a", size = 105113, upload-time = "2025-08-24T14:06:14.884Z" }, -] - -[[package]] -name = "bleach" -version = "6.2.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "webencodings" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/76/9a/0e33f5054c54d349ea62c277191c020c2d6ef1d65ab2cb1993f91ec846d1/bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f", size = 203083, upload-time = "2024-10-29T18:30:40.477Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fc/55/96142937f66150805c25c4d0f31ee4132fd33497753400734f9dfdcbdc66/bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e", size = 163406, upload-time = "2024-10-29T18:30:38.186Z" }, -] - -[package.optional-dependencies] -css = [ - { name = "tinycss2" }, -] - -[[package]] -name = "bokeh" -version = "3.7.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "contourpy" }, - { name = "jinja2" }, - { name = "narwhals" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "pandas" }, - { name = "pillow" }, - { name = "pyyaml" }, - { name = "tornado", marker = "sys_platform != 'emscripten'" }, - { name = "xyzservices" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/75/18/12d0d6024177ad18ba65deffc363046d0cbafe116f8b964a9efa85d2800f/bokeh-3.7.3.tar.gz", hash = "sha256:70a89a9f797b103d5ee6ad15fb7944adda115cf0da996ed0b75cfba61cb12f2b", size = 6366610, upload-time = "2025-05-12T12:13:29.318Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/91/48/08b2382e739236aa3360b7976360ba3e0c043b6234e25951c18c1eb6fa06/bokeh-3.7.3-py3-none-any.whl", hash = "sha256:b0e79dd737f088865212e4fdcb0f3b95d087f0f088bf8ca186a300ab1641e2c7", size = 7031447, upload-time = "2025-05-12T12:13:27.47Z" }, -] - -[[package]] -name = "bracex" -version = "2.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/63/9a/fec38644694abfaaeca2798b58e276a8e61de49e2e37494ace423395febc/bracex-2.6.tar.gz", hash = "sha256:98f1347cd77e22ee8d967a30ad4e310b233f7754dbf31ff3fceb76145ba47dc7", size = 26642, upload-time = "2025-06-22T19:12:31.254Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9d/2a/9186535ce58db529927f6cf5990a849aa9e052eea3e2cfefe20b9e1802da/bracex-2.6-py3-none-any.whl", hash = "sha256:0b0049264e7340b3ec782b5cb99beb325f36c3782a32e36e876452fd49a09952", size = 11508, upload-time = "2025-06-22T19:12:29.781Z" }, -] - -[[package]] -name = "certifi" -version = "2025.8.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/dc/67/960ebe6bf230a96cda2e0abcf73af550ec4f090005363542f0765df162e0/certifi-2025.8.3.tar.gz", hash = "sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407", size = 162386, upload-time = "2025-08-03T03:07:47.08Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/48/1549795ba7742c948d2ad169c1c8cdbae65bc450d6cd753d124b17c8cd32/certifi-2025.8.3-py3-none-any.whl", hash = "sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5", size = 161216, upload-time = "2025-08-03T03:07:45.777Z" }, -] - -[[package]] -name = "cffi" -version = "1.17.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pycparser" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621, upload-time = "2024-09-04T20:45:21.852Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178, upload-time = "2024-09-04T20:44:12.232Z" }, - { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840, upload-time = "2024-09-04T20:44:13.739Z" }, - { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803, upload-time = "2024-09-04T20:44:15.231Z" }, - { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850, upload-time = "2024-09-04T20:44:17.188Z" }, - { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729, upload-time = "2024-09-04T20:44:18.688Z" }, - { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256, upload-time = "2024-09-04T20:44:20.248Z" }, - { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424, upload-time = "2024-09-04T20:44:21.673Z" }, - { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568, upload-time = "2024-09-04T20:44:23.245Z" }, - { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736, upload-time = "2024-09-04T20:44:24.757Z" }, - { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448, upload-time = "2024-09-04T20:44:26.208Z" }, - { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976, upload-time = "2024-09-04T20:44:27.578Z" }, - { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989, upload-time = "2024-09-04T20:44:28.956Z" }, - { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802, upload-time = "2024-09-04T20:44:30.289Z" }, - { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792, upload-time = "2024-09-04T20:44:32.01Z" }, - { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893, upload-time = "2024-09-04T20:44:33.606Z" }, - { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810, upload-time = "2024-09-04T20:44:35.191Z" }, - { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200, upload-time = "2024-09-04T20:44:36.743Z" }, - { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447, upload-time = "2024-09-04T20:44:38.492Z" }, - { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358, upload-time = "2024-09-04T20:44:40.046Z" }, - { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469, upload-time = "2024-09-04T20:44:41.616Z" }, - { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475, upload-time = "2024-09-04T20:44:43.733Z" }, - { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009, upload-time = "2024-09-04T20:44:45.309Z" }, -] - -[[package]] -name = "charset-normalizer" -version = "3.4.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/83/2d/5fd176ceb9b2fc619e63405525573493ca23441330fcdaee6bef9460e924/charset_normalizer-3.4.3.tar.gz", hash = "sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14", size = 122371, upload-time = "2025-08-09T07:57:28.46Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/5e/14c94999e418d9b87682734589404a25854d5f5d0408df68bc15b6ff54bb/charset_normalizer-3.4.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1", size = 205655, upload-time = "2025-08-09T07:56:08.475Z" }, - { url = "https://files.pythonhosted.org/packages/7d/a8/c6ec5d389672521f644505a257f50544c074cf5fc292d5390331cd6fc9c3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884", size = 146223, upload-time = "2025-08-09T07:56:09.708Z" }, - { url = "https://files.pythonhosted.org/packages/fc/eb/a2ffb08547f4e1e5415fb69eb7db25932c52a52bed371429648db4d84fb1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018", size = 159366, upload-time = "2025-08-09T07:56:11.326Z" }, - { url = "https://files.pythonhosted.org/packages/82/10/0fd19f20c624b278dddaf83b8464dcddc2456cb4b02bb902a6da126b87a1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392", size = 157104, upload-time = "2025-08-09T07:56:13.014Z" }, - { url = "https://files.pythonhosted.org/packages/16/ab/0233c3231af734f5dfcf0844aa9582d5a1466c985bbed6cedab85af9bfe3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f", size = 151830, upload-time = "2025-08-09T07:56:14.428Z" }, - { url = "https://files.pythonhosted.org/packages/ae/02/e29e22b4e02839a0e4a06557b1999d0a47db3567e82989b5bb21f3fbbd9f/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154", size = 148854, upload-time = "2025-08-09T07:56:16.051Z" }, - { url = "https://files.pythonhosted.org/packages/05/6b/e2539a0a4be302b481e8cafb5af8792da8093b486885a1ae4d15d452bcec/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491", size = 160670, upload-time = "2025-08-09T07:56:17.314Z" }, - { url = "https://files.pythonhosted.org/packages/31/e7/883ee5676a2ef217a40ce0bffcc3d0dfbf9e64cbcfbdf822c52981c3304b/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93", size = 158501, upload-time = "2025-08-09T07:56:18.641Z" }, - { url = "https://files.pythonhosted.org/packages/c1/35/6525b21aa0db614cf8b5792d232021dca3df7f90a1944db934efa5d20bb1/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f", size = 153173, upload-time = "2025-08-09T07:56:20.289Z" }, - { url = "https://files.pythonhosted.org/packages/50/ee/f4704bad8201de513fdc8aac1cabc87e38c5818c93857140e06e772b5892/charset_normalizer-3.4.3-cp312-cp312-win32.whl", hash = "sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37", size = 99822, upload-time = "2025-08-09T07:56:21.551Z" }, - { url = "https://files.pythonhosted.org/packages/39/f5/3b3836ca6064d0992c58c7561c6b6eee1b3892e9665d650c803bd5614522/charset_normalizer-3.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc", size = 107543, upload-time = "2025-08-09T07:56:23.115Z" }, - { url = "https://files.pythonhosted.org/packages/65/ca/2135ac97709b400c7654b4b764daf5c5567c2da45a30cdd20f9eefe2d658/charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe", size = 205326, upload-time = "2025-08-09T07:56:24.721Z" }, - { url = "https://files.pythonhosted.org/packages/71/11/98a04c3c97dd34e49c7d247083af03645ca3730809a5509443f3c37f7c99/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8", size = 146008, upload-time = "2025-08-09T07:56:26.004Z" }, - { url = "https://files.pythonhosted.org/packages/60/f5/4659a4cb3c4ec146bec80c32d8bb16033752574c20b1252ee842a95d1a1e/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9", size = 159196, upload-time = "2025-08-09T07:56:27.25Z" }, - { url = "https://files.pythonhosted.org/packages/86/9e/f552f7a00611f168b9a5865a1414179b2c6de8235a4fa40189f6f79a1753/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31", size = 156819, upload-time = "2025-08-09T07:56:28.515Z" }, - { url = "https://files.pythonhosted.org/packages/7e/95/42aa2156235cbc8fa61208aded06ef46111c4d3f0de233107b3f38631803/charset_normalizer-3.4.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f", size = 151350, upload-time = "2025-08-09T07:56:29.716Z" }, - { url = "https://files.pythonhosted.org/packages/c2/a9/3865b02c56f300a6f94fc631ef54f0a8a29da74fb45a773dfd3dcd380af7/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927", size = 148644, upload-time = "2025-08-09T07:56:30.984Z" }, - { url = "https://files.pythonhosted.org/packages/77/d9/cbcf1a2a5c7d7856f11e7ac2d782aec12bdfea60d104e60e0aa1c97849dc/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9", size = 160468, upload-time = "2025-08-09T07:56:32.252Z" }, - { url = "https://files.pythonhosted.org/packages/f6/42/6f45efee8697b89fda4d50580f292b8f7f9306cb2971d4b53f8914e4d890/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5", size = 158187, upload-time = "2025-08-09T07:56:33.481Z" }, - { url = "https://files.pythonhosted.org/packages/70/99/f1c3bdcfaa9c45b3ce96f70b14f070411366fa19549c1d4832c935d8e2c3/charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc", size = 152699, upload-time = "2025-08-09T07:56:34.739Z" }, - { url = "https://files.pythonhosted.org/packages/a3/ad/b0081f2f99a4b194bcbb1934ef3b12aa4d9702ced80a37026b7607c72e58/charset_normalizer-3.4.3-cp313-cp313-win32.whl", hash = "sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce", size = 99580, upload-time = "2025-08-09T07:56:35.981Z" }, - { url = "https://files.pythonhosted.org/packages/9a/8f/ae790790c7b64f925e5c953b924aaa42a243fb778fed9e41f147b2a5715a/charset_normalizer-3.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef", size = 107366, upload-time = "2025-08-09T07:56:37.339Z" }, - { url = "https://files.pythonhosted.org/packages/8e/91/b5a06ad970ddc7a0e513112d40113e834638f4ca1120eb727a249fb2715e/charset_normalizer-3.4.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15", size = 204342, upload-time = "2025-08-09T07:56:38.687Z" }, - { url = "https://files.pythonhosted.org/packages/ce/ec/1edc30a377f0a02689342f214455c3f6c2fbedd896a1d2f856c002fc3062/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db", size = 145995, upload-time = "2025-08-09T07:56:40.048Z" }, - { url = "https://files.pythonhosted.org/packages/17/e5/5e67ab85e6d22b04641acb5399c8684f4d37caf7558a53859f0283a650e9/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d", size = 158640, upload-time = "2025-08-09T07:56:41.311Z" }, - { url = "https://files.pythonhosted.org/packages/f1/e5/38421987f6c697ee3722981289d554957c4be652f963d71c5e46a262e135/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096", size = 156636, upload-time = "2025-08-09T07:56:43.195Z" }, - { url = "https://files.pythonhosted.org/packages/a0/e4/5a075de8daa3ec0745a9a3b54467e0c2967daaaf2cec04c845f73493e9a1/charset_normalizer-3.4.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa", size = 150939, upload-time = "2025-08-09T07:56:44.819Z" }, - { url = "https://files.pythonhosted.org/packages/02/f7/3611b32318b30974131db62b4043f335861d4d9b49adc6d57c1149cc49d4/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049", size = 148580, upload-time = "2025-08-09T07:56:46.684Z" }, - { url = "https://files.pythonhosted.org/packages/7e/61/19b36f4bd67f2793ab6a99b979b4e4f3d8fc754cbdffb805335df4337126/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0", size = 159870, upload-time = "2025-08-09T07:56:47.941Z" }, - { url = "https://files.pythonhosted.org/packages/06/57/84722eefdd338c04cf3030ada66889298eaedf3e7a30a624201e0cbe424a/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92", size = 157797, upload-time = "2025-08-09T07:56:49.756Z" }, - { url = "https://files.pythonhosted.org/packages/72/2a/aff5dd112b2f14bcc3462c312dce5445806bfc8ab3a7328555da95330e4b/charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16", size = 152224, upload-time = "2025-08-09T07:56:51.369Z" }, - { url = "https://files.pythonhosted.org/packages/b7/8c/9839225320046ed279c6e839d51f028342eb77c91c89b8ef2549f951f3ec/charset_normalizer-3.4.3-cp314-cp314-win32.whl", hash = "sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce", size = 100086, upload-time = "2025-08-09T07:56:52.722Z" }, - { url = "https://files.pythonhosted.org/packages/ee/7a/36fbcf646e41f710ce0a563c1c9a343c6edf9be80786edeb15b6f62e17db/charset_normalizer-3.4.3-cp314-cp314-win_amd64.whl", hash = "sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c", size = 107400, upload-time = "2025-08-09T07:56:55.172Z" }, - { url = "https://files.pythonhosted.org/packages/8a/1f/f041989e93b001bc4e44bb1669ccdcf54d3f00e628229a85b08d330615c5/charset_normalizer-3.4.3-py3-none-any.whl", hash = "sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a", size = 53175, upload-time = "2025-08-09T07:57:26.864Z" }, -] - -[[package]] -name = "click" -version = "8.2.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/60/6c/8ca2efa64cf75a977a0d7fac081354553ebe483345c734fb6b6515d96bbc/click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202", size = 286342, upload-time = "2025-05-20T23:19:49.832Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b", size = 102215, upload-time = "2025-05-20T23:19:47.796Z" }, -] - -[[package]] -name = "colorama" -version = "0.4.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, -] - -[[package]] -name = "comm" -version = "0.2.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4c/13/7d740c5849255756bc17888787313b61fd38a0a8304fc4f073dfc46122aa/comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971", size = 6319, upload-time = "2025-07-25T14:02:04.452Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417", size = 7294, upload-time = "2025-07-25T14:02:02.896Z" }, -] - -[[package]] -name = "contourpy" -version = "1.3.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174, upload-time = "2025-07-26T12:03:12.549Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/be/45/adfee365d9ea3d853550b2e735f9d66366701c65db7855cd07621732ccfc/contourpy-1.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b08a32ea2f8e42cf1d4be3169a98dd4be32bafe4f22b6c4cb4ba810fa9e5d2cb", size = 293419, upload-time = "2025-07-26T12:01:21.16Z" }, - { url = "https://files.pythonhosted.org/packages/53/3e/405b59cfa13021a56bba395a6b3aca8cec012b45bf177b0eaf7a202cde2c/contourpy-1.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:556dba8fb6f5d8742f2923fe9457dbdd51e1049c4a43fd3986a0b14a1d815fc6", size = 273979, upload-time = "2025-07-26T12:01:22.448Z" }, - { url = "https://files.pythonhosted.org/packages/d4/1c/a12359b9b2ca3a845e8f7f9ac08bdf776114eb931392fcad91743e2ea17b/contourpy-1.3.3-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92d9abc807cf7d0e047b95ca5d957cf4792fcd04e920ca70d48add15c1a90ea7", size = 332653, upload-time = "2025-07-26T12:01:24.155Z" }, - { url = "https://files.pythonhosted.org/packages/63/12/897aeebfb475b7748ea67b61e045accdfcf0d971f8a588b67108ed7f5512/contourpy-1.3.3-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b2e8faa0ed68cb29af51edd8e24798bb661eac3bd9f65420c1887b6ca89987c8", size = 379536, upload-time = "2025-07-26T12:01:25.91Z" }, - { url = "https://files.pythonhosted.org/packages/43/8a/a8c584b82deb248930ce069e71576fc09bd7174bbd35183b7943fb1064fd/contourpy-1.3.3-cp312-cp312-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:626d60935cf668e70a5ce6ff184fd713e9683fb458898e4249b63be9e28286ea", size = 384397, upload-time = "2025-07-26T12:01:27.152Z" }, - { url = "https://files.pythonhosted.org/packages/cc/8f/ec6289987824b29529d0dfda0d74a07cec60e54b9c92f3c9da4c0ac732de/contourpy-1.3.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4d00e655fcef08aba35ec9610536bfe90267d7ab5ba944f7032549c55a146da1", size = 362601, upload-time = "2025-07-26T12:01:28.808Z" }, - { url = "https://files.pythonhosted.org/packages/05/0a/a3fe3be3ee2dceb3e615ebb4df97ae6f3828aa915d3e10549ce016302bd1/contourpy-1.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:451e71b5a7d597379ef572de31eeb909a87246974d960049a9848c3bc6c41bf7", size = 1331288, upload-time = "2025-07-26T12:01:31.198Z" }, - { url = "https://files.pythonhosted.org/packages/33/1d/acad9bd4e97f13f3e2b18a3977fe1b4a37ecf3d38d815333980c6c72e963/contourpy-1.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:459c1f020cd59fcfe6650180678a9993932d80d44ccde1fa1868977438f0b411", size = 1403386, upload-time = "2025-07-26T12:01:33.947Z" }, - { url = "https://files.pythonhosted.org/packages/cf/8f/5847f44a7fddf859704217a99a23a4f6417b10e5ab1256a179264561540e/contourpy-1.3.3-cp312-cp312-win32.whl", hash = "sha256:023b44101dfe49d7d53932be418477dba359649246075c996866106da069af69", size = 185018, upload-time = "2025-07-26T12:01:35.64Z" }, - { url = "https://files.pythonhosted.org/packages/19/e8/6026ed58a64563186a9ee3f29f41261fd1828f527dd93d33b60feca63352/contourpy-1.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:8153b8bfc11e1e4d75bcb0bff1db232f9e10b274e0929de9d608027e0d34ff8b", size = 226567, upload-time = "2025-07-26T12:01:36.804Z" }, - { url = "https://files.pythonhosted.org/packages/d1/e2/f05240d2c39a1ed228d8328a78b6f44cd695f7ef47beb3e684cf93604f86/contourpy-1.3.3-cp312-cp312-win_arm64.whl", hash = "sha256:07ce5ed73ecdc4a03ffe3e1b3e3c1166db35ae7584be76f65dbbe28a7791b0cc", size = 193655, upload-time = "2025-07-26T12:01:37.999Z" }, - { url = "https://files.pythonhosted.org/packages/68/35/0167aad910bbdb9599272bd96d01a9ec6852f36b9455cf2ca67bd4cc2d23/contourpy-1.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:177fb367556747a686509d6fef71d221a4b198a3905fe824430e5ea0fda54eb5", size = 293257, upload-time = "2025-07-26T12:01:39.367Z" }, - { url = "https://files.pythonhosted.org/packages/96/e4/7adcd9c8362745b2210728f209bfbcf7d91ba868a2c5f40d8b58f54c509b/contourpy-1.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d002b6f00d73d69333dac9d0b8d5e84d9724ff9ef044fd63c5986e62b7c9e1b1", size = 274034, upload-time = "2025-07-26T12:01:40.645Z" }, - { url = "https://files.pythonhosted.org/packages/73/23/90e31ceeed1de63058a02cb04b12f2de4b40e3bef5e082a7c18d9c8ae281/contourpy-1.3.3-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:348ac1f5d4f1d66d3322420f01d42e43122f43616e0f194fc1c9f5d830c5b286", size = 334672, upload-time = "2025-07-26T12:01:41.942Z" }, - { url = "https://files.pythonhosted.org/packages/ed/93/b43d8acbe67392e659e1d984700e79eb67e2acb2bd7f62012b583a7f1b55/contourpy-1.3.3-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:655456777ff65c2c548b7c454af9c6f33f16c8884f11083244b5819cc214f1b5", size = 381234, upload-time = "2025-07-26T12:01:43.499Z" }, - { url = "https://files.pythonhosted.org/packages/46/3b/bec82a3ea06f66711520f75a40c8fc0b113b2a75edb36aa633eb11c4f50f/contourpy-1.3.3-cp313-cp313-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:644a6853d15b2512d67881586bd03f462c7ab755db95f16f14d7e238f2852c67", size = 385169, upload-time = "2025-07-26T12:01:45.219Z" }, - { url = "https://files.pythonhosted.org/packages/4b/32/e0f13a1c5b0f8572d0ec6ae2f6c677b7991fafd95da523159c19eff0696a/contourpy-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4debd64f124ca62069f313a9cb86656ff087786016d76927ae2cf37846b006c9", size = 362859, upload-time = "2025-07-26T12:01:46.519Z" }, - { url = "https://files.pythonhosted.org/packages/33/71/e2a7945b7de4e58af42d708a219f3b2f4cff7386e6b6ab0a0fa0033c49a9/contourpy-1.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a15459b0f4615b00bbd1e91f1b9e19b7e63aea7483d03d804186f278c0af2659", size = 1332062, upload-time = "2025-07-26T12:01:48.964Z" }, - { url = "https://files.pythonhosted.org/packages/12/fc/4e87ac754220ccc0e807284f88e943d6d43b43843614f0a8afa469801db0/contourpy-1.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ca0fdcd73925568ca027e0b17ab07aad764be4706d0a925b89227e447d9737b7", size = 1403932, upload-time = "2025-07-26T12:01:51.979Z" }, - { url = "https://files.pythonhosted.org/packages/a6/2e/adc197a37443f934594112222ac1aa7dc9a98faf9c3842884df9a9d8751d/contourpy-1.3.3-cp313-cp313-win32.whl", hash = "sha256:b20c7c9a3bf701366556e1b1984ed2d0cedf999903c51311417cf5f591d8c78d", size = 185024, upload-time = "2025-07-26T12:01:53.245Z" }, - { url = "https://files.pythonhosted.org/packages/18/0b/0098c214843213759692cc638fce7de5c289200a830e5035d1791d7a2338/contourpy-1.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:1cadd8b8969f060ba45ed7c1b714fe69185812ab43bd6b86a9123fe8f99c3263", size = 226578, upload-time = "2025-07-26T12:01:54.422Z" }, - { url = "https://files.pythonhosted.org/packages/8a/9a/2f6024a0c5995243cd63afdeb3651c984f0d2bc727fd98066d40e141ad73/contourpy-1.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:fd914713266421b7536de2bfa8181aa8c699432b6763a0ea64195ebe28bff6a9", size = 193524, upload-time = "2025-07-26T12:01:55.73Z" }, - { url = "https://files.pythonhosted.org/packages/c0/b3/f8a1a86bd3298513f500e5b1f5fd92b69896449f6cab6a146a5d52715479/contourpy-1.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:88df9880d507169449d434c293467418b9f6cbe82edd19284aa0409e7fdb933d", size = 306730, upload-time = "2025-07-26T12:01:57.051Z" }, - { url = "https://files.pythonhosted.org/packages/3f/11/4780db94ae62fc0c2053909b65dc3246bd7cecfc4f8a20d957ad43aa4ad8/contourpy-1.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d06bb1f751ba5d417047db62bca3c8fde202b8c11fb50742ab3ab962c81e8216", size = 287897, upload-time = "2025-07-26T12:01:58.663Z" }, - { url = "https://files.pythonhosted.org/packages/ae/15/e59f5f3ffdd6f3d4daa3e47114c53daabcb18574a26c21f03dc9e4e42ff0/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e4e6b05a45525357e382909a4c1600444e2a45b4795163d3b22669285591c1ae", size = 326751, upload-time = "2025-07-26T12:02:00.343Z" }, - { url = "https://files.pythonhosted.org/packages/0f/81/03b45cfad088e4770b1dcf72ea78d3802d04200009fb364d18a493857210/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ab3074b48c4e2cf1a960e6bbeb7f04566bf36b1861d5c9d4d8ac04b82e38ba20", size = 375486, upload-time = "2025-07-26T12:02:02.128Z" }, - { url = "https://files.pythonhosted.org/packages/0c/ba/49923366492ffbdd4486e970d421b289a670ae8cf539c1ea9a09822b371a/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c3d53c796f8647d6deb1abe867daeb66dcc8a97e8455efa729516b997b8ed99", size = 388106, upload-time = "2025-07-26T12:02:03.615Z" }, - { url = "https://files.pythonhosted.org/packages/9f/52/5b00ea89525f8f143651f9f03a0df371d3cbd2fccd21ca9b768c7a6500c2/contourpy-1.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50ed930df7289ff2a8d7afeb9603f8289e5704755c7e5c3bbd929c90c817164b", size = 352548, upload-time = "2025-07-26T12:02:05.165Z" }, - { url = "https://files.pythonhosted.org/packages/32/1d/a209ec1a3a3452d490f6b14dd92e72280c99ae3d1e73da74f8277d4ee08f/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4feffb6537d64b84877da813a5c30f1422ea5739566abf0bd18065ac040e120a", size = 1322297, upload-time = "2025-07-26T12:02:07.379Z" }, - { url = "https://files.pythonhosted.org/packages/bc/9e/46f0e8ebdd884ca0e8877e46a3f4e633f6c9c8c4f3f6e72be3fe075994aa/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2b7e9480ffe2b0cd2e787e4df64270e3a0440d9db8dc823312e2c940c167df7e", size = 1391023, upload-time = "2025-07-26T12:02:10.171Z" }, - { url = "https://files.pythonhosted.org/packages/b9/70/f308384a3ae9cd2209e0849f33c913f658d3326900d0ff5d378d6a1422d2/contourpy-1.3.3-cp313-cp313t-win32.whl", hash = "sha256:283edd842a01e3dcd435b1c5116798d661378d83d36d337b8dde1d16a5fc9ba3", size = 196157, upload-time = "2025-07-26T12:02:11.488Z" }, - { url = "https://files.pythonhosted.org/packages/b2/dd/880f890a6663b84d9e34a6f88cded89d78f0091e0045a284427cb6b18521/contourpy-1.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:87acf5963fc2b34825e5b6b048f40e3635dd547f590b04d2ab317c2619ef7ae8", size = 240570, upload-time = "2025-07-26T12:02:12.754Z" }, - { url = "https://files.pythonhosted.org/packages/80/99/2adc7d8ffead633234817ef8e9a87115c8a11927a94478f6bb3d3f4d4f7d/contourpy-1.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:3c30273eb2a55024ff31ba7d052dde990d7d8e5450f4bbb6e913558b3d6c2301", size = 199713, upload-time = "2025-07-26T12:02:14.4Z" }, - { url = "https://files.pythonhosted.org/packages/72/8b/4546f3ab60f78c514ffb7d01a0bd743f90de36f0019d1be84d0a708a580a/contourpy-1.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fde6c716d51c04b1c25d0b90364d0be954624a0ee9d60e23e850e8d48353d07a", size = 292189, upload-time = "2025-07-26T12:02:16.095Z" }, - { url = "https://files.pythonhosted.org/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:cbedb772ed74ff5be440fa8eee9bd49f64f6e3fc09436d9c7d8f1c287b121d77", size = 273251, upload-time = "2025-07-26T12:02:17.524Z" }, - { url = "https://files.pythonhosted.org/packages/b1/71/f93e1e9471d189f79d0ce2497007731c1e6bf9ef6d1d61b911430c3db4e5/contourpy-1.3.3-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22e9b1bd7a9b1d652cd77388465dc358dafcd2e217d35552424aa4f996f524f5", size = 335810, upload-time = "2025-07-26T12:02:18.9Z" }, - { url = "https://files.pythonhosted.org/packages/91/f9/e35f4c1c93f9275d4e38681a80506b5510e9327350c51f8d4a5a724d178c/contourpy-1.3.3-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a22738912262aa3e254e4f3cb079a95a67132fc5a063890e224393596902f5a4", size = 382871, upload-time = "2025-07-26T12:02:20.418Z" }, - { url = "https://files.pythonhosted.org/packages/b5/71/47b512f936f66a0a900d81c396a7e60d73419868fba959c61efed7a8ab46/contourpy-1.3.3-cp314-cp314-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:afe5a512f31ee6bd7d0dda52ec9864c984ca3d66664444f2d72e0dc4eb832e36", size = 386264, upload-time = "2025-07-26T12:02:21.916Z" }, - { url = "https://files.pythonhosted.org/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f64836de09927cba6f79dcd00fdd7d5329f3fccc633468507079c829ca4db4e3", size = 363819, upload-time = "2025-07-26T12:02:23.759Z" }, - { url = "https://files.pythonhosted.org/packages/3e/a6/0b185d4cc480ee494945cde102cb0149ae830b5fa17bf855b95f2e70ad13/contourpy-1.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1fd43c3be4c8e5fd6e4f2baeae35ae18176cf2e5cced681cca908addf1cdd53b", size = 1333650, upload-time = "2025-07-26T12:02:26.181Z" }, - { url = "https://files.pythonhosted.org/packages/43/d7/afdc95580ca56f30fbcd3060250f66cedbde69b4547028863abd8aa3b47e/contourpy-1.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6afc576f7b33cf00996e5c1102dc2a8f7cc89e39c0b55df93a0b78c1bd992b36", size = 1404833, upload-time = "2025-07-26T12:02:28.782Z" }, - { url = "https://files.pythonhosted.org/packages/e2/e2/366af18a6d386f41132a48f033cbd2102e9b0cf6345d35ff0826cd984566/contourpy-1.3.3-cp314-cp314-win32.whl", hash = "sha256:66c8a43a4f7b8df8b71ee1840e4211a3c8d93b214b213f590e18a1beca458f7d", size = 189692, upload-time = "2025-07-26T12:02:30.128Z" }, - { url = "https://files.pythonhosted.org/packages/7d/c2/57f54b03d0f22d4044b8afb9ca0e184f8b1afd57b4f735c2fa70883dc601/contourpy-1.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:cf9022ef053f2694e31d630feaacb21ea24224be1c3ad0520b13d844274614fd", size = 232424, upload-time = "2025-07-26T12:02:31.395Z" }, - { url = "https://files.pythonhosted.org/packages/18/79/a9416650df9b525737ab521aa181ccc42d56016d2123ddcb7b58e926a42c/contourpy-1.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:95b181891b4c71de4bb404c6621e7e2390745f887f2a026b2d99e92c17892339", size = 198300, upload-time = "2025-07-26T12:02:32.956Z" }, - { url = "https://files.pythonhosted.org/packages/1f/42/38c159a7d0f2b7b9c04c64ab317042bb6952b713ba875c1681529a2932fe/contourpy-1.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:33c82d0138c0a062380332c861387650c82e4cf1747aaa6938b9b6516762e772", size = 306769, upload-time = "2025-07-26T12:02:34.2Z" }, - { url = "https://files.pythonhosted.org/packages/c3/6c/26a8205f24bca10974e77460de68d3d7c63e282e23782f1239f226fcae6f/contourpy-1.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ea37e7b45949df430fe649e5de8351c423430046a2af20b1c1961cae3afcda77", size = 287892, upload-time = "2025-07-26T12:02:35.807Z" }, - { url = "https://files.pythonhosted.org/packages/66/06/8a475c8ab718ebfd7925661747dbb3c3ee9c82ac834ccb3570be49d129f4/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d304906ecc71672e9c89e87c4675dc5c2645e1f4269a5063b99b0bb29f232d13", size = 326748, upload-time = "2025-07-26T12:02:37.193Z" }, - { url = "https://files.pythonhosted.org/packages/b4/a3/c5ca9f010a44c223f098fccd8b158bb1cb287378a31ac141f04730dc49be/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca658cd1a680a5c9ea96dc61cdbae1e85c8f25849843aa799dfd3cb370ad4fbe", size = 375554, upload-time = "2025-07-26T12:02:38.894Z" }, - { url = "https://files.pythonhosted.org/packages/80/5b/68bd33ae63fac658a4145088c1e894405e07584a316738710b636c6d0333/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ab2fd90904c503739a75b7c8c5c01160130ba67944a7b77bbf36ef8054576e7f", size = 388118, upload-time = "2025-07-26T12:02:40.642Z" }, - { url = "https://files.pythonhosted.org/packages/40/52/4c285a6435940ae25d7410a6c36bda5145839bc3f0beb20c707cda18b9d2/contourpy-1.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7301b89040075c30e5768810bc96a8e8d78085b47d8be6e4c3f5a0b4ed478a0", size = 352555, upload-time = "2025-07-26T12:02:42.25Z" }, - { url = "https://files.pythonhosted.org/packages/24/ee/3e81e1dd174f5c7fefe50e85d0892de05ca4e26ef1c9a59c2a57e43b865a/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2a2a8b627d5cc6b7c41a4beff6c5ad5eb848c88255fda4a8745f7e901b32d8e4", size = 1322295, upload-time = "2025-07-26T12:02:44.668Z" }, - { url = "https://files.pythonhosted.org/packages/3c/b2/6d913d4d04e14379de429057cd169e5e00f6c2af3bb13e1710bcbdb5da12/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:fd6ec6be509c787f1caf6b247f0b1ca598bef13f4ddeaa126b7658215529ba0f", size = 1391027, upload-time = "2025-07-26T12:02:47.09Z" }, - { url = "https://files.pythonhosted.org/packages/93/8a/68a4ec5c55a2971213d29a9374913f7e9f18581945a7a31d1a39b5d2dfe5/contourpy-1.3.3-cp314-cp314t-win32.whl", hash = "sha256:e74a9a0f5e3fff48fb5a7f2fd2b9b70a3fe014a67522f79b7cca4c0c7e43c9ae", size = 202428, upload-time = "2025-07-26T12:02:48.691Z" }, - { url = "https://files.pythonhosted.org/packages/fa/96/fd9f641ffedc4fa3ace923af73b9d07e869496c9cc7a459103e6e978992f/contourpy-1.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:13b68d6a62db8eafaebb8039218921399baf6e47bf85006fd8529f2a08ef33fc", size = 250331, upload-time = "2025-07-26T12:02:50.137Z" }, - { url = "https://files.pythonhosted.org/packages/ae/8c/469afb6465b853afff216f9528ffda78a915ff880ed58813ba4faf4ba0b6/contourpy-1.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b7448cb5a725bb1e35ce88771b86fba35ef418952474492cf7c764059933ff8b", size = 203831, upload-time = "2025-07-26T12:02:51.449Z" }, -] - -[[package]] -name = "cryptography" -version = "45.0.6" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d6/0d/d13399c94234ee8f3df384819dc67e0c5ce215fb751d567a55a1f4b028c7/cryptography-45.0.6.tar.gz", hash = "sha256:5c966c732cf6e4a276ce83b6e4c729edda2df6929083a952cc7da973c539c719", size = 744949, upload-time = "2025-08-05T23:59:27.93Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8c/29/2793d178d0eda1ca4a09a7c4e09a5185e75738cc6d526433e8663b460ea6/cryptography-45.0.6-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:048e7ad9e08cf4c0ab07ff7f36cc3115924e22e2266e034450a890d9e312dd74", size = 7042702, upload-time = "2025-08-05T23:58:23.464Z" }, - { url = "https://files.pythonhosted.org/packages/b3/b6/cabd07410f222f32c8d55486c464f432808abaa1f12af9afcbe8f2f19030/cryptography-45.0.6-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:44647c5d796f5fc042bbc6d61307d04bf29bccb74d188f18051b635f20a9c75f", size = 4206483, upload-time = "2025-08-05T23:58:27.132Z" }, - { url = "https://files.pythonhosted.org/packages/8b/9e/f9c7d36a38b1cfeb1cc74849aabe9bf817990f7603ff6eb485e0d70e0b27/cryptography-45.0.6-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e40b80ecf35ec265c452eea0ba94c9587ca763e739b8e559c128d23bff7ebbbf", size = 4429679, upload-time = "2025-08-05T23:58:29.152Z" }, - { url = "https://files.pythonhosted.org/packages/9c/2a/4434c17eb32ef30b254b9e8b9830cee4e516f08b47fdd291c5b1255b8101/cryptography-45.0.6-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:00e8724bdad672d75e6f069b27970883179bd472cd24a63f6e620ca7e41cc0c5", size = 4210553, upload-time = "2025-08-05T23:58:30.596Z" }, - { url = "https://files.pythonhosted.org/packages/ef/1d/09a5df8e0c4b7970f5d1f3aff1b640df6d4be28a64cae970d56c6cf1c772/cryptography-45.0.6-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7a3085d1b319d35296176af31c90338eeb2ddac8104661df79f80e1d9787b8b2", size = 3894499, upload-time = "2025-08-05T23:58:32.03Z" }, - { url = "https://files.pythonhosted.org/packages/79/62/120842ab20d9150a9d3a6bdc07fe2870384e82f5266d41c53b08a3a96b34/cryptography-45.0.6-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1b7fa6a1c1188c7ee32e47590d16a5a0646270921f8020efc9a511648e1b2e08", size = 4458484, upload-time = "2025-08-05T23:58:33.526Z" }, - { url = "https://files.pythonhosted.org/packages/fd/80/1bc3634d45ddfed0871bfba52cf8f1ad724761662a0c792b97a951fb1b30/cryptography-45.0.6-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:275ba5cc0d9e320cd70f8e7b96d9e59903c815ca579ab96c1e37278d231fc402", size = 4210281, upload-time = "2025-08-05T23:58:35.445Z" }, - { url = "https://files.pythonhosted.org/packages/7d/fe/ffb12c2d83d0ee625f124880a1f023b5878f79da92e64c37962bbbe35f3f/cryptography-45.0.6-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:f4028f29a9f38a2025abedb2e409973709c660d44319c61762202206ed577c42", size = 4456890, upload-time = "2025-08-05T23:58:36.923Z" }, - { url = "https://files.pythonhosted.org/packages/8c/8e/b3f3fe0dc82c77a0deb5f493b23311e09193f2268b77196ec0f7a36e3f3e/cryptography-45.0.6-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ee411a1b977f40bd075392c80c10b58025ee5c6b47a822a33c1198598a7a5f05", size = 4333247, upload-time = "2025-08-05T23:58:38.781Z" }, - { url = "https://files.pythonhosted.org/packages/b3/a6/c3ef2ab9e334da27a1d7b56af4a2417d77e7806b2e0f90d6267ce120d2e4/cryptography-45.0.6-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:e2a21a8eda2d86bb604934b6b37691585bd095c1f788530c1fcefc53a82b3453", size = 4565045, upload-time = "2025-08-05T23:58:40.415Z" }, - { url = "https://files.pythonhosted.org/packages/31/c3/77722446b13fa71dddd820a5faab4ce6db49e7e0bf8312ef4192a3f78e2f/cryptography-45.0.6-cp311-abi3-win32.whl", hash = "sha256:d063341378d7ee9c91f9d23b431a3502fc8bfacd54ef0a27baa72a0843b29159", size = 2928923, upload-time = "2025-08-05T23:58:41.919Z" }, - { url = "https://files.pythonhosted.org/packages/38/63/a025c3225188a811b82932a4dcc8457a26c3729d81578ccecbcce2cb784e/cryptography-45.0.6-cp311-abi3-win_amd64.whl", hash = "sha256:833dc32dfc1e39b7376a87b9a6a4288a10aae234631268486558920029b086ec", size = 3403805, upload-time = "2025-08-05T23:58:43.792Z" }, - { url = "https://files.pythonhosted.org/packages/5b/af/bcfbea93a30809f126d51c074ee0fac5bd9d57d068edf56c2a73abedbea4/cryptography-45.0.6-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:3436128a60a5e5490603ab2adbabc8763613f638513ffa7d311c900a8349a2a0", size = 7020111, upload-time = "2025-08-05T23:58:45.316Z" }, - { url = "https://files.pythonhosted.org/packages/98/c6/ea5173689e014f1a8470899cd5beeb358e22bb3cf5a876060f9d1ca78af4/cryptography-45.0.6-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0d9ef57b6768d9fa58e92f4947cea96ade1233c0e236db22ba44748ffedca394", size = 4198169, upload-time = "2025-08-05T23:58:47.121Z" }, - { url = "https://files.pythonhosted.org/packages/ba/73/b12995edc0c7e2311ffb57ebd3b351f6b268fed37d93bfc6f9856e01c473/cryptography-45.0.6-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ea3c42f2016a5bbf71825537c2ad753f2870191134933196bee408aac397b3d9", size = 4421273, upload-time = "2025-08-05T23:58:48.557Z" }, - { url = "https://files.pythonhosted.org/packages/f7/6e/286894f6f71926bc0da67408c853dd9ba953f662dcb70993a59fd499f111/cryptography-45.0.6-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:20ae4906a13716139d6d762ceb3e0e7e110f7955f3bc3876e3a07f5daadec5f3", size = 4199211, upload-time = "2025-08-05T23:58:50.139Z" }, - { url = "https://files.pythonhosted.org/packages/de/34/a7f55e39b9623c5cb571d77a6a90387fe557908ffc44f6872f26ca8ae270/cryptography-45.0.6-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2dac5ec199038b8e131365e2324c03d20e97fe214af051d20c49db129844e8b3", size = 3883732, upload-time = "2025-08-05T23:58:52.253Z" }, - { url = "https://files.pythonhosted.org/packages/f9/b9/c6d32edbcba0cd9f5df90f29ed46a65c4631c4fbe11187feb9169c6ff506/cryptography-45.0.6-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:18f878a34b90d688982e43f4b700408b478102dd58b3e39de21b5ebf6509c301", size = 4450655, upload-time = "2025-08-05T23:58:53.848Z" }, - { url = "https://files.pythonhosted.org/packages/77/2d/09b097adfdee0227cfd4c699b3375a842080f065bab9014248933497c3f9/cryptography-45.0.6-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:5bd6020c80c5b2b2242d6c48487d7b85700f5e0038e67b29d706f98440d66eb5", size = 4198956, upload-time = "2025-08-05T23:58:55.209Z" }, - { url = "https://files.pythonhosted.org/packages/55/66/061ec6689207d54effdff535bbdf85cc380d32dd5377173085812565cf38/cryptography-45.0.6-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:eccddbd986e43014263eda489abbddfbc287af5cddfd690477993dbb31e31016", size = 4449859, upload-time = "2025-08-05T23:58:56.639Z" }, - { url = "https://files.pythonhosted.org/packages/41/ff/e7d5a2ad2d035e5a2af116e1a3adb4d8fcd0be92a18032917a089c6e5028/cryptography-45.0.6-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:550ae02148206beb722cfe4ef0933f9352bab26b087af00e48fdfb9ade35c5b3", size = 4320254, upload-time = "2025-08-05T23:58:58.833Z" }, - { url = "https://files.pythonhosted.org/packages/82/27/092d311af22095d288f4db89fcaebadfb2f28944f3d790a4cf51fe5ddaeb/cryptography-45.0.6-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5b64e668fc3528e77efa51ca70fadcd6610e8ab231e3e06ae2bab3b31c2b8ed9", size = 4554815, upload-time = "2025-08-05T23:59:00.283Z" }, - { url = "https://files.pythonhosted.org/packages/7e/01/aa2f4940262d588a8fdf4edabe4cda45854d00ebc6eaac12568b3a491a16/cryptography-45.0.6-cp37-abi3-win32.whl", hash = "sha256:780c40fb751c7d2b0c6786ceee6b6f871e86e8718a8ff4bc35073ac353c7cd02", size = 2912147, upload-time = "2025-08-05T23:59:01.716Z" }, - { url = "https://files.pythonhosted.org/packages/0a/bc/16e0276078c2de3ceef6b5a34b965f4436215efac45313df90d55f0ba2d2/cryptography-45.0.6-cp37-abi3-win_amd64.whl", hash = "sha256:20d15aed3ee522faac1a39fbfdfee25d17b1284bafd808e1640a74846d7c4d1b", size = 3390459, upload-time = "2025-08-05T23:59:03.358Z" }, -] - -[[package]] -name = "csscompressor" -version = "0.9.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f1/2a/8c3ac3d8bc94e6de8d7ae270bb5bc437b210bb9d6d9e46630c98f4abd20c/csscompressor-0.9.5.tar.gz", hash = "sha256:afa22badbcf3120a4f392e4d22f9fff485c044a1feda4a950ecc5eba9dd31a05", size = 237808, upload-time = "2017-11-26T21:13:08.238Z" } - -[[package]] -name = "curl-cffi" -version = "0.13.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "cffi" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/4e/3d/f39ca1f8fdf14408888e7c25e15eed63eac5f47926e206fb93300d28378c/curl_cffi-0.13.0.tar.gz", hash = "sha256:62ecd90a382bd5023750e3606e0aa7cb1a3a8ba41c14270b8e5e149ebf72c5ca", size = 151303, upload-time = "2025-08-06T13:05:42.988Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/19/d1/acabfd460f1de26cad882e5ef344d9adde1507034528cb6f5698a2e6a2f1/curl_cffi-0.13.0-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:434cadbe8df2f08b2fc2c16dff2779fb40b984af99c06aa700af898e185bb9db", size = 5686337, upload-time = "2025-08-06T13:05:28.985Z" }, - { url = "https://files.pythonhosted.org/packages/2c/1c/cdb4fb2d16a0e9de068e0e5bc02094e105ce58a687ff30b4c6f88e25a057/curl_cffi-0.13.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:59afa877a9ae09efa04646a7d068eeea48915a95d9add0a29854e7781679fcd7", size = 2994613, upload-time = "2025-08-06T13:05:31.027Z" }, - { url = "https://files.pythonhosted.org/packages/04/3e/fdf617c1ec18c3038b77065d484d7517bb30f8fb8847224eb1f601a4e8bc/curl_cffi-0.13.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d06ed389e45a7ca97b17c275dbedd3d6524560270e675c720e93a2018a766076", size = 7931353, upload-time = "2025-08-06T13:05:32.273Z" }, - { url = "https://files.pythonhosted.org/packages/3d/10/6f30c05d251cf03ddc2b9fd19880f3cab8c193255e733444a2df03b18944/curl_cffi-0.13.0-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4e0de45ab3b7a835c72bd53640c2347415111b43421b5c7a1a0b18deae2e541", size = 7486378, upload-time = "2025-08-06T13:05:33.672Z" }, - { url = "https://files.pythonhosted.org/packages/77/81/5bdb7dd0d669a817397b2e92193559bf66c3807f5848a48ad10cf02bf6c7/curl_cffi-0.13.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8eb4083371bbb94e9470d782de235fb5268bf43520de020c9e5e6be8f395443f", size = 8328585, upload-time = "2025-08-06T13:05:35.28Z" }, - { url = "https://files.pythonhosted.org/packages/ce/c1/df5c6b4cfad41c08442e0f727e449f4fb5a05f8aa564d1acac29062e9e8e/curl_cffi-0.13.0-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:28911b526e8cd4aa0e5e38401bfe6887e8093907272f1f67ca22e6beb2933a51", size = 8739831, upload-time = "2025-08-06T13:05:37.078Z" }, - { url = "https://files.pythonhosted.org/packages/1a/91/6dd1910a212f2e8eafe57877bcf97748eb24849e1511a266687546066b8a/curl_cffi-0.13.0-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6d433ffcb455ab01dd0d7bde47109083aa38b59863aa183d29c668ae4c96bf8e", size = 8711908, upload-time = "2025-08-06T13:05:38.741Z" }, - { url = "https://files.pythonhosted.org/packages/6d/e4/15a253f9b4bf8d008c31e176c162d2704a7e0c5e24d35942f759df107b68/curl_cffi-0.13.0-cp39-abi3-win_amd64.whl", hash = "sha256:66a6b75ce971de9af64f1b6812e275f60b88880577bac47ef1fa19694fa21cd3", size = 1614510, upload-time = "2025-08-06T13:05:40.451Z" }, - { url = "https://files.pythonhosted.org/packages/f9/0f/9c5275f17ad6ff5be70edb8e0120fdc184a658c9577ca426d4230f654beb/curl_cffi-0.13.0-cp39-abi3-win_arm64.whl", hash = "sha256:d438a3b45244e874794bc4081dc1e356d2bb926dcc7021e5a8fef2e2105ef1d8", size = 1365753, upload-time = "2025-08-06T13:05:41.879Z" }, -] - -[[package]] -name = "cycler" -version = "0.12.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615, upload-time = "2023-10-07T05:32:18.335Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" }, -] - -[[package]] -name = "debugpy" -version = "1.8.16" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ca/d4/722d0bcc7986172ac2ef3c979ad56a1030e3afd44ced136d45f8142b1f4a/debugpy-1.8.16.tar.gz", hash = "sha256:31e69a1feb1cf6b51efbed3f6c9b0ef03bc46ff050679c4be7ea6d2e23540870", size = 1643809, upload-time = "2025-08-06T18:00:02.647Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/61/fb/0387c0e108d842c902801bc65ccc53e5b91d8c169702a9bbf4f7efcedf0c/debugpy-1.8.16-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:b202e2843e32e80b3b584bcebfe0e65e0392920dc70df11b2bfe1afcb7a085e4", size = 2511822, upload-time = "2025-08-06T18:00:18.526Z" }, - { url = "https://files.pythonhosted.org/packages/37/44/19e02745cae22bf96440141f94e15a69a1afaa3a64ddfc38004668fcdebf/debugpy-1.8.16-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64473c4a306ba11a99fe0bb14622ba4fbd943eb004847d9b69b107bde45aa9ea", size = 4230135, upload-time = "2025-08-06T18:00:19.997Z" }, - { url = "https://files.pythonhosted.org/packages/f3/0b/19b1ba5ee4412f303475a2c7ad5858efb99c90eae5ec627aa6275c439957/debugpy-1.8.16-cp312-cp312-win32.whl", hash = "sha256:833a61ed446426e38b0dd8be3e9d45ae285d424f5bf6cd5b2b559c8f12305508", size = 5281271, upload-time = "2025-08-06T18:00:21.281Z" }, - { url = "https://files.pythonhosted.org/packages/b1/e0/bc62e2dc141de53bd03e2c7cb9d7011de2e65e8bdcdaa26703e4d28656ba/debugpy-1.8.16-cp312-cp312-win_amd64.whl", hash = "sha256:75f204684581e9ef3dc2f67687c3c8c183fde2d6675ab131d94084baf8084121", size = 5323149, upload-time = "2025-08-06T18:00:23.033Z" }, - { url = "https://files.pythonhosted.org/packages/62/66/607ab45cc79e60624df386e233ab64a6d8d39ea02e7f80e19c1d451345bb/debugpy-1.8.16-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:85df3adb1de5258dca910ae0bb185e48c98801ec15018a263a92bb06be1c8787", size = 2496157, upload-time = "2025-08-06T18:00:24.361Z" }, - { url = "https://files.pythonhosted.org/packages/4d/a0/c95baae08a75bceabb79868d663a0736655e427ab9c81fb848da29edaeac/debugpy-1.8.16-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bee89e948bc236a5c43c4214ac62d28b29388453f5fd328d739035e205365f0b", size = 4222491, upload-time = "2025-08-06T18:00:25.806Z" }, - { url = "https://files.pythonhosted.org/packages/5b/2f/1c8db6ddd8a257c3cd2c46413b267f1d5fa3df910401c899513ce30392d6/debugpy-1.8.16-cp313-cp313-win32.whl", hash = "sha256:cf358066650439847ec5ff3dae1da98b5461ea5da0173d93d5e10f477c94609a", size = 5281126, upload-time = "2025-08-06T18:00:27.207Z" }, - { url = "https://files.pythonhosted.org/packages/d3/ba/c3e154ab307366d6c5a9c1b68de04914e2ce7fa2f50d578311d8cc5074b2/debugpy-1.8.16-cp313-cp313-win_amd64.whl", hash = "sha256:b5aea1083f6f50023e8509399d7dc6535a351cc9f2e8827d1e093175e4d9fa4c", size = 5323094, upload-time = "2025-08-06T18:00:29.03Z" }, - { url = "https://files.pythonhosted.org/packages/52/57/ecc9ae29fa5b2d90107cd1d9bf8ed19aacb74b2264d986ae9d44fe9bdf87/debugpy-1.8.16-py2.py3-none-any.whl", hash = "sha256:19c9521962475b87da6f673514f7fd610328757ec993bf7ec0d8c96f9a325f9e", size = 5287700, upload-time = "2025-08-06T18:00:42.333Z" }, -] - -[[package]] -name = "decorator" -version = "5.2.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711, upload-time = "2025-02-24T04:41:34.073Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190, upload-time = "2025-02-24T04:41:32.565Z" }, -] - -[[package]] -name = "defusedxml" -version = "0.7.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520, upload-time = "2021-03-08T10:59:26.269Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604, upload-time = "2021-03-08T10:59:24.45Z" }, -] - -[[package]] -name = "executing" -version = "2.2.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/91/50/a9d80c47ff289c611ff12e63f7c5d13942c65d68125160cefd768c73e6e4/executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755", size = 978693, upload-time = "2025-01-22T15:41:29.403Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", size = 26702, upload-time = "2025-01-22T15:41:25.929Z" }, -] - -[[package]] -name = "fastjsonschema" -version = "2.21.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/b5/23b216d9d985a956623b6bd12d4086b60f0059b27799f23016af04a74ea1/fastjsonschema-2.21.2.tar.gz", hash = "sha256:b1eb43748041c880796cd077f1a07c3d94e93ae84bba5ed36800a33554ae05de", size = 374130, upload-time = "2025-08-14T18:49:36.666Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl", hash = "sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463", size = 24024, upload-time = "2025-08-14T18:49:34.776Z" }, -] - -[[package]] -name = "flatten-dict" -version = "0.4.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "six" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/89/c6/5fe21639369f2ea609c964e20870b5c6c98a134ef12af848a7776ddbabe3/flatten-dict-0.4.2.tar.gz", hash = "sha256:506a96b6e6f805b81ae46a0f9f31290beb5fa79ded9d80dbe1b7fa236ab43076", size = 10362, upload-time = "2021-08-08T09:56:51.455Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/f5/ee39c6e92acc742c052f137b47c210cd0a1b72dcd3f98495528bb4d27761/flatten_dict-0.4.2-py2.py3-none-any.whl", hash = "sha256:7e245b20c4c718981212210eec4284a330c9f713e632e98765560e05421e48ad", size = 9656, upload-time = "2021-08-08T09:56:54.313Z" }, -] - -[[package]] -name = "fonttools" -version = "4.59.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/11/7f/29c9c3fe4246f6ad96fee52b88d0dc3a863c7563b0afc959e36d78b965dc/fonttools-4.59.1.tar.gz", hash = "sha256:74995b402ad09822a4c8002438e54940d9f1ecda898d2bb057729d7da983e4cb", size = 3534394, upload-time = "2025-08-14T16:28:14.266Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ac/fe/6e069cc4cb8881d164a9bd956e9df555bc62d3eb36f6282e43440200009c/fonttools-4.59.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:43ab814bbba5f02a93a152ee61a04182bb5809bd2bc3609f7822e12c53ae2c91", size = 2769172, upload-time = "2025-08-14T16:26:45.729Z" }, - { url = "https://files.pythonhosted.org/packages/b9/98/ec4e03f748fefa0dd72d9d95235aff6fef16601267f4a2340f0e16b9330f/fonttools-4.59.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4f04c3ffbfa0baafcbc550657cf83657034eb63304d27b05cff1653b448ccff6", size = 2337281, upload-time = "2025-08-14T16:26:47.921Z" }, - { url = "https://files.pythonhosted.org/packages/8b/b1/890360a7e3d04a30ba50b267aca2783f4c1364363797e892e78a4f036076/fonttools-4.59.1-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d601b153e51a5a6221f0d4ec077b6bfc6ac35bfe6c19aeaa233d8990b2b71726", size = 4909215, upload-time = "2025-08-14T16:26:49.682Z" }, - { url = "https://files.pythonhosted.org/packages/8a/ec/2490599550d6c9c97a44c1e36ef4de52d6acf742359eaa385735e30c05c4/fonttools-4.59.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c735e385e30278c54f43a0d056736942023c9043f84ee1021eff9fd616d17693", size = 4951958, upload-time = "2025-08-14T16:26:51.616Z" }, - { url = "https://files.pythonhosted.org/packages/d1/40/bd053f6f7634234a9b9805ff8ae4f32df4f2168bee23cafd1271ba9915a9/fonttools-4.59.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1017413cdc8555dce7ee23720da490282ab7ec1cf022af90a241f33f9a49afc4", size = 4894738, upload-time = "2025-08-14T16:26:53.836Z" }, - { url = "https://files.pythonhosted.org/packages/ac/a1/3cd12a010d288325a7cfcf298a84825f0f9c29b01dee1baba64edfe89257/fonttools-4.59.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5c6d8d773470a5107052874341ed3c487c16ecd179976d81afed89dea5cd7406", size = 5045983, upload-time = "2025-08-14T16:26:56.153Z" }, - { url = "https://files.pythonhosted.org/packages/a2/af/8a2c3f6619cc43cf87951405337cc8460d08a4e717bb05eaa94b335d11dc/fonttools-4.59.1-cp312-cp312-win32.whl", hash = "sha256:2a2d0d33307f6ad3a2086a95dd607c202ea8852fa9fb52af9b48811154d1428a", size = 2203407, upload-time = "2025-08-14T16:26:58.165Z" }, - { url = "https://files.pythonhosted.org/packages/8e/f2/a19b874ddbd3ebcf11d7e25188ef9ac3f68b9219c62263acb34aca8cde05/fonttools-4.59.1-cp312-cp312-win_amd64.whl", hash = "sha256:0b9e4fa7eaf046ed6ac470f6033d52c052481ff7a6e0a92373d14f556f298dc0", size = 2251561, upload-time = "2025-08-14T16:27:00.646Z" }, - { url = "https://files.pythonhosted.org/packages/19/5e/94a4d7f36c36e82f6a81e0064d148542e0ad3e6cf51fc5461ca128f3658d/fonttools-4.59.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:89d9957b54246c6251345297dddf77a84d2c19df96af30d2de24093bbdf0528b", size = 2760192, upload-time = "2025-08-14T16:27:03.024Z" }, - { url = "https://files.pythonhosted.org/packages/ee/a5/f50712fc33ef9d06953c660cefaf8c8fe4b8bc74fa21f44ee5e4f9739439/fonttools-4.59.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8156b11c0d5405810d216f53907bd0f8b982aa5f1e7e3127ab3be1a4062154ff", size = 2332694, upload-time = "2025-08-14T16:27:04.883Z" }, - { url = "https://files.pythonhosted.org/packages/e9/a2/5a9fc21c354bf8613215ce233ab0d933bd17d5ff4c29693636551adbc7b3/fonttools-4.59.1-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8387876a8011caec52d327d5e5bca705d9399ec4b17afb8b431ec50d47c17d23", size = 4889254, upload-time = "2025-08-14T16:27:07.02Z" }, - { url = "https://files.pythonhosted.org/packages/2d/e5/54a6dc811eba018d022ca2e8bd6f2969291f9586ccf9a22a05fc55f91250/fonttools-4.59.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb13823a74b3a9204a8ed76d3d6d5ec12e64cc5bc44914eb9ff1cdac04facd43", size = 4949109, upload-time = "2025-08-14T16:27:09.3Z" }, - { url = "https://files.pythonhosted.org/packages/db/15/b05c72a248a95bea0fd05fbd95acdf0742945942143fcf961343b7a3663a/fonttools-4.59.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e1ca10da138c300f768bb68e40e5b20b6ecfbd95f91aac4cc15010b6b9d65455", size = 4888428, upload-time = "2025-08-14T16:27:11.514Z" }, - { url = "https://files.pythonhosted.org/packages/63/71/c7d6840f858d695adc0c4371ec45e3fb1c8e060b276ba944e2800495aca4/fonttools-4.59.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2beb5bfc4887a3130f8625349605a3a45fe345655ce6031d1bac11017454b943", size = 5032668, upload-time = "2025-08-14T16:27:13.872Z" }, - { url = "https://files.pythonhosted.org/packages/90/54/57be4aca6f1312e2bc4d811200dd822325794e05bdb26eeff0976edca651/fonttools-4.59.1-cp313-cp313-win32.whl", hash = "sha256:419f16d750d78e6d704bfe97b48bba2f73b15c9418f817d0cb8a9ca87a5b94bf", size = 2201832, upload-time = "2025-08-14T16:27:16.126Z" }, - { url = "https://files.pythonhosted.org/packages/fc/1f/1899a6175a5f900ed8730a0d64f53ca1b596ed7609bfda033cf659114258/fonttools-4.59.1-cp313-cp313-win_amd64.whl", hash = "sha256:c536f8a852e8d3fa71dde1ec03892aee50be59f7154b533f0bf3c1174cfd5126", size = 2250673, upload-time = "2025-08-14T16:27:18.033Z" }, - { url = "https://files.pythonhosted.org/packages/15/07/f6ba82c22f118d9985c37fea65d8d715ca71300d78b6c6e90874dc59f11d/fonttools-4.59.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:d5c3bfdc9663f3d4b565f9cb3b8c1efb3e178186435b45105bde7328cfddd7fe", size = 2758606, upload-time = "2025-08-14T16:27:20.064Z" }, - { url = "https://files.pythonhosted.org/packages/3a/81/84aa3d0ce27b0112c28b67b637ff7a47cf401cf5fbfee6476e4bc9777580/fonttools-4.59.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ea03f1da0d722fe3c2278a05957e6550175571a4894fbf9d178ceef4a3783d2b", size = 2330187, upload-time = "2025-08-14T16:27:22.42Z" }, - { url = "https://files.pythonhosted.org/packages/17/41/b3ba43f78afb321e2e50232c87304c8d0f5ab39b64389b8286cc39cdb824/fonttools-4.59.1-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:57a3708ca6bfccb790f585fa6d8f29432ec329618a09ff94c16bcb3c55994643", size = 4832020, upload-time = "2025-08-14T16:27:24.214Z" }, - { url = "https://files.pythonhosted.org/packages/67/b1/3af871c7fb325a68938e7ce544ca48bfd2c6bb7b357f3c8252933b29100a/fonttools-4.59.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:729367c91eb1ee84e61a733acc485065a00590618ca31c438e7dd4d600c01486", size = 4930687, upload-time = "2025-08-14T16:27:26.484Z" }, - { url = "https://files.pythonhosted.org/packages/c5/4f/299fc44646b30d9ef03ffaa78b109c7bd32121f0d8f10009ee73ac4514bc/fonttools-4.59.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8f8ef66ac6db450193ed150e10b3b45dde7aded10c5d279968bc63368027f62b", size = 4875794, upload-time = "2025-08-14T16:27:28.887Z" }, - { url = "https://files.pythonhosted.org/packages/90/cf/a0a3d763ab58f5f81ceff104ddb662fd9da94248694862b9c6cbd509fdd5/fonttools-4.59.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:075f745d539a998cd92cb84c339a82e53e49114ec62aaea8307c80d3ad3aef3a", size = 4985780, upload-time = "2025-08-14T16:27:30.858Z" }, - { url = "https://files.pythonhosted.org/packages/72/c5/ba76511aaae143d89c29cd32ce30bafb61c477e8759a1590b8483f8065f8/fonttools-4.59.1-cp314-cp314-win32.whl", hash = "sha256:c2b0597522d4c5bb18aa5cf258746a2d4a90f25878cbe865e4d35526abd1b9fc", size = 2205610, upload-time = "2025-08-14T16:27:32.578Z" }, - { url = "https://files.pythonhosted.org/packages/a9/65/b250e69d6caf35bc65cddbf608be0662d741c248f2e7503ab01081fc267e/fonttools-4.59.1-cp314-cp314-win_amd64.whl", hash = "sha256:e9ad4ce044e3236f0814c906ccce8647046cc557539661e35211faadf76f283b", size = 2255376, upload-time = "2025-08-14T16:27:34.653Z" }, - { url = "https://files.pythonhosted.org/packages/11/f3/0bc63a23ac0f8175e23d82f85d6ee693fbd849de7ad739f0a3622182ad29/fonttools-4.59.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:652159e8214eb4856e8387ebcd6b6bd336ee258cbeb639c8be52005b122b9609", size = 2826546, upload-time = "2025-08-14T16:27:36.783Z" }, - { url = "https://files.pythonhosted.org/packages/e9/46/a3968205590e068fdf60e926be329a207782576cb584d3b7dcd2d2844957/fonttools-4.59.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:43d177cd0e847ea026fedd9f099dc917da136ed8792d142298a252836390c478", size = 2359771, upload-time = "2025-08-14T16:27:39.678Z" }, - { url = "https://files.pythonhosted.org/packages/b8/ff/d14b4c283879e8cb57862d9624a34fe6522b6fcdd46ccbfc58900958794a/fonttools-4.59.1-cp314-cp314t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e54437651e1440ee53a95e6ceb6ee440b67a3d348c76f45f4f48de1a5ecab019", size = 4831575, upload-time = "2025-08-14T16:27:41.885Z" }, - { url = "https://files.pythonhosted.org/packages/9c/04/a277d9a584a49d98ca12d3b2c6663bdf333ae97aaa83bd0cdabf7c5a6c84/fonttools-4.59.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6065fdec8ff44c32a483fd44abe5bcdb40dd5e2571a5034b555348f2b3a52cea", size = 5069962, upload-time = "2025-08-14T16:27:44.284Z" }, - { url = "https://files.pythonhosted.org/packages/16/6f/3d2ae69d96c4cdee6dfe7598ca5519a1514487700ca3d7c49c5a1ad65308/fonttools-4.59.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42052b56d176f8b315fbc09259439c013c0cb2109df72447148aeda677599612", size = 4942926, upload-time = "2025-08-14T16:27:46.523Z" }, - { url = "https://files.pythonhosted.org/packages/0c/d3/c17379e0048d03ce26b38e4ab0e9a98280395b00529e093fe2d663ac0658/fonttools-4.59.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:bcd52eaa5c4c593ae9f447c1d13e7e4a00ca21d755645efa660b6999425b3c88", size = 4958678, upload-time = "2025-08-14T16:27:48.555Z" }, - { url = "https://files.pythonhosted.org/packages/8c/3f/c5543a1540abdfb4d375e3ebeb84de365ab9b153ec14cb7db05f537dd1e7/fonttools-4.59.1-cp314-cp314t-win32.whl", hash = "sha256:02e4fdf27c550dded10fe038a5981c29f81cb9bc649ff2eaa48e80dab8998f97", size = 2266706, upload-time = "2025-08-14T16:27:50.556Z" }, - { url = "https://files.pythonhosted.org/packages/3e/99/85bff6e674226bc8402f983e365f07e76d990e7220ba72bcc738fef52391/fonttools-4.59.1-cp314-cp314t-win_amd64.whl", hash = "sha256:412a5fd6345872a7c249dac5bcce380393f40c1c316ac07f447bc17d51900922", size = 2329994, upload-time = "2025-08-14T16:27:52.36Z" }, - { url = "https://files.pythonhosted.org/packages/0f/64/9d606e66d498917cd7a2ff24f558010d42d6fd4576d9dd57f0bd98333f5a/fonttools-4.59.1-py3-none-any.whl", hash = "sha256:647db657073672a8330608970a984d51573557f328030566521bc03415535042", size = 1130094, upload-time = "2025-08-14T16:28:12.048Z" }, -] - -[[package]] -name = "fqdn" -version = "1.5.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/30/3e/a80a8c077fd798951169626cde3e239adeba7dab75deb3555716415bd9b0/fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f", size = 6015, upload-time = "2021-03-11T07:16:29.08Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014", size = 9121, upload-time = "2021-03-11T07:16:28.351Z" }, -] - -[[package]] -name = "frozendict" -version = "2.4.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bb/59/19eb300ba28e7547538bdf603f1c6c34793240a90e1a7b61b65d8517e35e/frozendict-2.4.6.tar.gz", hash = "sha256:df7cd16470fbd26fc4969a208efadc46319334eb97def1ddf48919b351192b8e", size = 316416, upload-time = "2024-10-13T12:15:32.449Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/13/d9839089b900fa7b479cce495d62110cddc4bd5630a04d8469916c0e79c5/frozendict-2.4.6-py311-none-any.whl", hash = "sha256:d065db6a44db2e2375c23eac816f1a022feb2fa98cbb50df44a9e83700accbea", size = 16148, upload-time = "2024-10-13T12:15:26.839Z" }, - { url = "https://files.pythonhosted.org/packages/ba/d0/d482c39cee2ab2978a892558cf130681d4574ea208e162da8958b31e9250/frozendict-2.4.6-py312-none-any.whl", hash = "sha256:49344abe90fb75f0f9fdefe6d4ef6d4894e640fadab71f11009d52ad97f370b9", size = 16146, upload-time = "2024-10-13T12:15:28.16Z" }, - { url = "https://files.pythonhosted.org/packages/a5/8e/b6bf6a0de482d7d7d7a2aaac8fdc4a4d0bb24a809f5ddd422aa7060eb3d2/frozendict-2.4.6-py313-none-any.whl", hash = "sha256:7134a2bb95d4a16556bb5f2b9736dceb6ea848fa5b6f3f6c2d6dba93b44b4757", size = 16146, upload-time = "2024-10-13T12:15:29.495Z" }, -] - -[[package]] -name = "ghp-import" -version = "2.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "python-dateutil" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943, upload-time = "2022-05-02T15:47:16.11Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034, upload-time = "2022-05-02T15:47:14.552Z" }, -] - -[[package]] -name = "griffe" -version = "1.12.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/81/ca/29f36e00c74844ae50d139cf5a8b1751887b2f4d5023af65d460268ad7aa/griffe-1.12.1.tar.gz", hash = "sha256:29f5a6114c0aeda7d9c86a570f736883f8a2c5b38b57323d56b3d1c000565567", size = 411863, upload-time = "2025-08-14T21:08:15.38Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/13/f2/4fab6c3e5bcaf38a44cc8a974d2752eaad4c129e45d6533d926a30edd133/griffe-1.12.1-py3-none-any.whl", hash = "sha256:2d7c12334de00089c31905424a00abcfd931b45b8b516967f224133903d302cc", size = 138940, upload-time = "2025-08-14T21:08:13.382Z" }, -] - -[[package]] -name = "h11" -version = "0.16.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, -] - -[[package]] -name = "hjson" -version = "3.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/82/e5/0b56d723a76ca67abadbf7fb71609fb0ea7e6926e94fcca6c65a85b36a0e/hjson-3.1.0.tar.gz", hash = "sha256:55af475a27cf83a7969c808399d7bccdec8fb836a07ddbd574587593b9cdcf75", size = 40541, upload-time = "2022-08-13T02:53:01.919Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1f/7f/13cd798d180af4bf4c0ceddeefba2b864a63c71645abc0308b768d67bb81/hjson-3.1.0-py3-none-any.whl", hash = "sha256:65713cdcf13214fb554eb8b4ef803419733f4f5e551047c9b711098ab7186b89", size = 54018, upload-time = "2022-08-13T02:52:59.899Z" }, -] - -[[package]] -name = "htmlmin2" -version = "0.1.13" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/be/31/a76f4bfa885f93b8167cb4c85cf32b54d1f64384d0b897d45bc6d19b7b45/htmlmin2-0.1.13-py3-none-any.whl", hash = "sha256:75609f2a42e64f7ce57dbff28a39890363bde9e7e5885db633317efbdf8c79a2", size = 34486, upload-time = "2023-03-14T21:28:30.388Z" }, -] - -[[package]] -name = "httpcore" -version = "1.0.9" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "h11" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, -] - -[[package]] -name = "httpx" -version = "0.28.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio" }, - { name = "certifi" }, - { name = "httpcore" }, - { name = "idna" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, -] - -[[package]] -name = "idna" -version = "3.10" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490, upload-time = "2024-09-15T18:07:39.745Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload-time = "2024-09-15T18:07:37.964Z" }, -] - -[[package]] -name = "iniconfig" -version = "2.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload-time = "2025-03-19T20:09:59.721Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" }, -] - -[[package]] -name = "ipykernel" -version = "6.30.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "appnope", marker = "sys_platform == 'darwin'" }, - { name = "comm" }, - { name = "debugpy" }, - { name = "ipython" }, - { name = "jupyter-client" }, - { name = "jupyter-core" }, - { name = "matplotlib-inline" }, - { name = "nest-asyncio" }, - { name = "packaging" }, - { name = "psutil" }, - { name = "pyzmq" }, - { name = "tornado" }, - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/bb/76/11082e338e0daadc89c8ff866185de11daf67d181901038f9e139d109761/ipykernel-6.30.1.tar.gz", hash = "sha256:6abb270161896402e76b91394fcdce5d1be5d45f456671e5080572f8505be39b", size = 166260, upload-time = "2025-08-04T15:47:35.018Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fc/c7/b445faca8deb954fe536abebff4ece5b097b923de482b26e78448c89d1dd/ipykernel-6.30.1-py3-none-any.whl", hash = "sha256:aa6b9fb93dca949069d8b85b6c79b2518e32ac583ae9c7d37c51d119e18b3fb4", size = 117484, upload-time = "2025-08-04T15:47:32.622Z" }, -] - -[[package]] -name = "ipython" -version = "9.4.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "decorator" }, - { name = "ipython-pygments-lexers" }, - { name = "jedi" }, - { name = "matplotlib-inline" }, - { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "prompt-toolkit" }, - { name = "pygments" }, - { name = "stack-data" }, - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/54/80/406f9e3bde1c1fd9bf5a0be9d090f8ae623e401b7670d8f6fdf2ab679891/ipython-9.4.0.tar.gz", hash = "sha256:c033c6d4e7914c3d9768aabe76bbe87ba1dc66a92a05db6bfa1125d81f2ee270", size = 4385338, upload-time = "2025-07-01T11:11:30.606Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/63/f8/0031ee2b906a15a33d6bfc12dd09c3dfa966b3cb5b284ecfb7549e6ac3c4/ipython-9.4.0-py3-none-any.whl", hash = "sha256:25850f025a446d9b359e8d296ba175a36aedd32e83ca9b5060430fe16801f066", size = 611021, upload-time = "2025-07-01T11:11:27.85Z" }, -] - -[[package]] -name = "ipython-pygments-lexers" -version = "1.1.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pygments" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393, upload-time = "2025-01-17T11:24:34.505Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074, upload-time = "2025-01-17T11:24:33.271Z" }, -] - -[[package]] -name = "isoduration" -version = "20.11.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "arrow" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/7c/1a/3c8edc664e06e6bd06cce40c6b22da5f1429aa4224d0c590f3be21c91ead/isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9", size = 11649, upload-time = "2020-11-01T11:00:00.312Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042", size = 11321, upload-time = "2020-11-01T10:59:58.02Z" }, -] - -[[package]] -name = "jedi" -version = "0.19.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "parso" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287, upload-time = "2024-11-11T01:41:42.873Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278, upload-time = "2024-11-11T01:41:40.175Z" }, -] - -[[package]] -name = "jinja2" -version = "3.1.6" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "markupsafe" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, -] - -[[package]] -name = "jsmin" -version = "3.0.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5e/73/e01e4c5e11ad0494f4407a3f623ad4d87714909f50b17a06ed121034ff6e/jsmin-3.0.1.tar.gz", hash = "sha256:c0959a121ef94542e807a674142606f7e90214a2b3d1eb17300244bbb5cc2bfc", size = 13925, upload-time = "2022-01-16T20:35:59.13Z" } - -[[package]] -name = "json5" -version = "0.12.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/12/ae/929aee9619e9eba9015207a9d2c1c54db18311da7eb4dcf6d41ad6f0eb67/json5-0.12.1.tar.gz", hash = "sha256:b2743e77b3242f8d03c143dd975a6ec7c52e2f2afe76ed934e53503dd4ad4990", size = 52191, upload-time = "2025-08-12T19:47:42.583Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/85/e2/05328bd2621be49a6fed9e3030b1e51a2d04537d3f816d211b9cc53c5262/json5-0.12.1-py3-none-any.whl", hash = "sha256:d9c9b3bc34a5f54d43c35e11ef7cb87d8bdd098c6ace87117a7b7e83e705c1d5", size = 36119, upload-time = "2025-08-12T19:47:41.131Z" }, -] - -[[package]] -name = "jsonpointer" -version = "3.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6a/0a/eebeb1fa92507ea94016a2a790b93c2ae41a7e18778f85471dc54475ed25/jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef", size = 9114, upload-time = "2024-06-10T19:24:42.462Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942", size = 7595, upload-time = "2024-06-10T19:24:40.698Z" }, -] - -[[package]] -name = "jsonschema" -version = "4.25.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "attrs" }, - { name = "jsonschema-specifications" }, - { name = "referencing" }, - { name = "rpds-py" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/74/69/f7185de793a29082a9f3c7728268ffb31cb5095131a9c139a74078e27336/jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85", size = 357342, upload-time = "2025-08-18T17:03:50.038Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63", size = 90040, upload-time = "2025-08-18T17:03:48.373Z" }, -] - -[package.optional-dependencies] -format-nongpl = [ - { name = "fqdn" }, - { name = "idna" }, - { name = "isoduration" }, - { name = "jsonpointer" }, - { name = "rfc3339-validator" }, - { name = "rfc3986-validator" }, - { name = "rfc3987-syntax" }, - { name = "uri-template" }, - { name = "webcolors" }, -] - -[[package]] -name = "jsonschema-specifications" -version = "2025.4.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "referencing" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/bf/ce/46fbd9c8119cfc3581ee5643ea49464d168028cfb5caff5fc0596d0cf914/jsonschema_specifications-2025.4.1.tar.gz", hash = "sha256:630159c9f4dbea161a6a2205c3011cc4f18ff381b189fff48bb39b9bf26ae608", size = 15513, upload-time = "2025-04-23T12:34:07.418Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/01/0e/b27cdbaccf30b890c40ed1da9fd4a3593a5cf94dae54fb34f8a4b74fcd3f/jsonschema_specifications-2025.4.1-py3-none-any.whl", hash = "sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af", size = 18437, upload-time = "2025-04-23T12:34:05.422Z" }, -] - -[[package]] -name = "jupyter-client" -version = "8.6.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jupyter-core" }, - { name = "python-dateutil" }, - { name = "pyzmq" }, - { name = "tornado" }, - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019, upload-time = "2024-09-17T10:44:17.613Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105, upload-time = "2024-09-17T10:44:15.218Z" }, -] - -[[package]] -name = "jupyter-core" -version = "5.8.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "platformdirs" }, - { name = "pywin32", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'win32'" }, - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/99/1b/72906d554acfeb588332eaaa6f61577705e9ec752ddb486f302dafa292d9/jupyter_core-5.8.1.tar.gz", hash = "sha256:0a5f9706f70e64786b75acba995988915ebd4601c8a52e534a40b51c95f59941", size = 88923, upload-time = "2025-05-27T07:38:16.655Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/57/6bffd4b20b88da3800c5d691e0337761576ee688eb01299eae865689d2df/jupyter_core-5.8.1-py3-none-any.whl", hash = "sha256:c28d268fc90fb53f1338ded2eb410704c5449a358406e8a948b75706e24863d0", size = 28880, upload-time = "2025-05-27T07:38:15.137Z" }, -] - -[[package]] -name = "jupyter-events" -version = "0.12.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jsonschema", extra = ["format-nongpl"] }, - { name = "packaging" }, - { name = "python-json-logger" }, - { name = "pyyaml" }, - { name = "referencing" }, - { name = "rfc3339-validator" }, - { name = "rfc3986-validator" }, - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9d/c3/306d090461e4cf3cd91eceaff84bede12a8e52cd821c2d20c9a4fd728385/jupyter_events-0.12.0.tar.gz", hash = "sha256:fc3fce98865f6784c9cd0a56a20644fc6098f21c8c33834a8d9fe383c17e554b", size = 62196, upload-time = "2025-02-03T17:23:41.485Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/48/577993f1f99c552f18a0428731a755e06171f9902fa118c379eb7c04ea22/jupyter_events-0.12.0-py3-none-any.whl", hash = "sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb", size = 19430, upload-time = "2025-02-03T17:23:38.643Z" }, -] - -[[package]] -name = "jupyter-lsp" -version = "2.2.6" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jupyter-server" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/28/3d/40bdb41b665d3302390ed1356cebd5917c10769d1f190ee4ca595900840e/jupyter_lsp-2.2.6.tar.gz", hash = "sha256:0566bd9bb04fd9e6774a937ed01522b555ba78be37bebef787c8ab22de4c0361", size = 48948, upload-time = "2025-07-18T21:35:19.885Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/47/7c/12f68daf85b469b4896d5e4a629baa33c806d61de75ac5b39d8ef27ec4a2/jupyter_lsp-2.2.6-py3-none-any.whl", hash = "sha256:283783752bf0b459ee7fa88effa72104d87dd343b82d5c06cf113ef755b15b6d", size = 69371, upload-time = "2025-07-18T21:35:16.585Z" }, -] - -[[package]] -name = "jupyter-server" -version = "2.17.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio" }, - { name = "argon2-cffi" }, - { name = "jinja2" }, - { name = "jupyter-client" }, - { name = "jupyter-core" }, - { name = "jupyter-events" }, - { name = "jupyter-server-terminals" }, - { name = "nbconvert" }, - { name = "nbformat" }, - { name = "packaging" }, - { name = "prometheus-client" }, - { name = "pywinpty", marker = "os_name == 'nt'" }, - { name = "pyzmq" }, - { name = "send2trash" }, - { name = "terminado" }, - { name = "tornado" }, - { name = "traitlets" }, - { name = "websocket-client" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5b/ac/e040ec363d7b6b1f11304cc9f209dac4517ece5d5e01821366b924a64a50/jupyter_server-2.17.0.tar.gz", hash = "sha256:c38ea898566964c888b4772ae1ed58eca84592e88251d2cfc4d171f81f7e99d5", size = 731949, upload-time = "2025-08-21T14:42:54.042Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/92/80/a24767e6ca280f5a49525d987bf3e4d7552bf67c8be07e8ccf20271f8568/jupyter_server-2.17.0-py3-none-any.whl", hash = "sha256:e8cb9c7db4251f51ed307e329b81b72ccf2056ff82d50524debde1ee1870e13f", size = 388221, upload-time = "2025-08-21T14:42:52.034Z" }, -] - -[[package]] -name = "jupyter-server-terminals" -version = "0.5.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pywinpty", marker = "os_name == 'nt'" }, - { name = "terminado" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/fc/d5/562469734f476159e99a55426d697cbf8e7eb5efe89fb0e0b4f83a3d3459/jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269", size = 31430, upload-time = "2024-03-12T14:37:03.049Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/07/2d/2b32cdbe8d2a602f697a649798554e4f072115438e92249624e532e8aca6/jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa", size = 13656, upload-time = "2024-03-12T14:37:00.708Z" }, -] - -[[package]] -name = "jupyterlab" -version = "4.4.6" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "async-lru" }, - { name = "httpx" }, - { name = "ipykernel" }, - { name = "jinja2" }, - { name = "jupyter-core" }, - { name = "jupyter-lsp" }, - { name = "jupyter-server" }, - { name = "jupyterlab-server" }, - { name = "notebook-shim" }, - { name = "packaging" }, - { name = "setuptools" }, - { name = "tornado" }, - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/1e/5c/14f0852233d60d30bf0f22a817d6c20ac555d73526cc915274f97c07a2b9/jupyterlab-4.4.6.tar.gz", hash = "sha256:e0b720ff5392846bdbc01745f32f29f4d001c071a4bff94d8b516ba89b5a4157", size = 23040936, upload-time = "2025-08-15T11:44:15.915Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/53/38/6182d63f39428821e705e86fba61704fc69769a24ca5a9578c2c04986c9a/jupyterlab-4.4.6-py3-none-any.whl", hash = "sha256:e877e930f46dde2e3ee9da36a935c6cd4fdb15aa7440519d0fde696f9fadb833", size = 12268564, upload-time = "2025-08-15T11:44:11.42Z" }, -] - -[[package]] -name = "jupyterlab-pygments" -version = "0.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/90/51/9187be60d989df97f5f0aba133fa54e7300f17616e065d1ada7d7646b6d6/jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d", size = 512900, upload-time = "2023-11-23T09:26:37.44Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b1/dd/ead9d8ea85bf202d90cc513b533f9c363121c7792674f78e0d8a854b63b4/jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780", size = 15884, upload-time = "2023-11-23T09:26:34.325Z" }, -] - -[[package]] -name = "jupyterlab-server" -version = "2.27.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "babel" }, - { name = "jinja2" }, - { name = "json5" }, - { name = "jsonschema" }, - { name = "jupyter-server" }, - { name = "packaging" }, - { name = "requests" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/0a/c9/a883ce65eb27905ce77ace410d83587c82ea64dc85a48d1f7ed52bcfa68d/jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4", size = 76173, upload-time = "2024-07-16T17:02:04.149Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/54/09/2032e7d15c544a0e3cd831c51d77a8ca57f7555b2e1b2922142eddb02a84/jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4", size = 59700, upload-time = "2024-07-16T17:02:01.115Z" }, -] - -[[package]] -name = "kiwisolver" -version = "1.4.9" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5c/3c/85844f1b0feb11ee581ac23fe5fce65cd049a200c1446708cc1b7f922875/kiwisolver-1.4.9.tar.gz", hash = "sha256:c3b22c26c6fd6811b0ae8363b95ca8ce4ea3c202d3d0975b2914310ceb1bcc4d", size = 97564, upload-time = "2025-08-10T21:27:49.279Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/86/c9/13573a747838aeb1c76e3267620daa054f4152444d1f3d1a2324b78255b5/kiwisolver-1.4.9-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:ac5a486ac389dddcc5bef4f365b6ae3ffff2c433324fb38dd35e3fab7c957999", size = 123686, upload-time = "2025-08-10T21:26:10.034Z" }, - { url = "https://files.pythonhosted.org/packages/51/ea/2ecf727927f103ffd1739271ca19c424d0e65ea473fbaeea1c014aea93f6/kiwisolver-1.4.9-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f2ba92255faa7309d06fe44c3a4a97efe1c8d640c2a79a5ef728b685762a6fd2", size = 66460, upload-time = "2025-08-10T21:26:11.083Z" }, - { url = "https://files.pythonhosted.org/packages/5b/5a/51f5464373ce2aeb5194508298a508b6f21d3867f499556263c64c621914/kiwisolver-1.4.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4a2899935e724dd1074cb568ce7ac0dce28b2cd6ab539c8e001a8578eb106d14", size = 64952, upload-time = "2025-08-10T21:26:12.058Z" }, - { url = "https://files.pythonhosted.org/packages/70/90/6d240beb0f24b74371762873e9b7f499f1e02166a2d9c5801f4dbf8fa12e/kiwisolver-1.4.9-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f6008a4919fdbc0b0097089f67a1eb55d950ed7e90ce2cc3e640abadd2757a04", size = 1474756, upload-time = "2025-08-10T21:26:13.096Z" }, - { url = "https://files.pythonhosted.org/packages/12/42/f36816eaf465220f683fb711efdd1bbf7a7005a2473d0e4ed421389bd26c/kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:67bb8b474b4181770f926f7b7d2f8c0248cbcb78b660fdd41a47054b28d2a752", size = 1276404, upload-time = "2025-08-10T21:26:14.457Z" }, - { url = "https://files.pythonhosted.org/packages/2e/64/bc2de94800adc830c476dce44e9b40fd0809cddeef1fde9fcf0f73da301f/kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2327a4a30d3ee07d2fbe2e7933e8a37c591663b96ce42a00bc67461a87d7df77", size = 1294410, upload-time = "2025-08-10T21:26:15.73Z" }, - { url = "https://files.pythonhosted.org/packages/5f/42/2dc82330a70aa8e55b6d395b11018045e58d0bb00834502bf11509f79091/kiwisolver-1.4.9-cp312-cp312-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7a08b491ec91b1d5053ac177afe5290adacf1f0f6307d771ccac5de30592d198", size = 1343631, upload-time = "2025-08-10T21:26:17.045Z" }, - { url = "https://files.pythonhosted.org/packages/22/fd/f4c67a6ed1aab149ec5a8a401c323cee7a1cbe364381bb6c9c0d564e0e20/kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d8fc5c867c22b828001b6a38d2eaeb88160bf5783c6cb4a5e440efc981ce286d", size = 2224963, upload-time = "2025-08-10T21:26:18.737Z" }, - { url = "https://files.pythonhosted.org/packages/45/aa/76720bd4cb3713314677d9ec94dcc21ced3f1baf4830adde5bb9b2430a5f/kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:3b3115b2581ea35bb6d1f24a4c90af37e5d9b49dcff267eeed14c3893c5b86ab", size = 2321295, upload-time = "2025-08-10T21:26:20.11Z" }, - { url = "https://files.pythonhosted.org/packages/80/19/d3ec0d9ab711242f56ae0dc2fc5d70e298bb4a1f9dfab44c027668c673a1/kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:858e4c22fb075920b96a291928cb7dea5644e94c0ee4fcd5af7e865655e4ccf2", size = 2487987, upload-time = "2025-08-10T21:26:21.49Z" }, - { url = "https://files.pythonhosted.org/packages/39/e9/61e4813b2c97e86b6fdbd4dd824bf72d28bcd8d4849b8084a357bc0dd64d/kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ed0fecd28cc62c54b262e3736f8bb2512d8dcfdc2bcf08be5f47f96bf405b145", size = 2291817, upload-time = "2025-08-10T21:26:22.812Z" }, - { url = "https://files.pythonhosted.org/packages/a0/41/85d82b0291db7504da3c2defe35c9a8a5c9803a730f297bd823d11d5fb77/kiwisolver-1.4.9-cp312-cp312-win_amd64.whl", hash = "sha256:f68208a520c3d86ea51acf688a3e3002615a7f0238002cccc17affecc86a8a54", size = 73895, upload-time = "2025-08-10T21:26:24.37Z" }, - { url = "https://files.pythonhosted.org/packages/e2/92/5f3068cf15ee5cb624a0c7596e67e2a0bb2adee33f71c379054a491d07da/kiwisolver-1.4.9-cp312-cp312-win_arm64.whl", hash = "sha256:2c1a4f57df73965f3f14df20b80ee29e6a7930a57d2d9e8491a25f676e197c60", size = 64992, upload-time = "2025-08-10T21:26:25.732Z" }, - { url = "https://files.pythonhosted.org/packages/31/c1/c2686cda909742ab66c7388e9a1a8521a59eb89f8bcfbee28fc980d07e24/kiwisolver-1.4.9-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a5d0432ccf1c7ab14f9949eec60c5d1f924f17c037e9f8b33352fa05799359b8", size = 123681, upload-time = "2025-08-10T21:26:26.725Z" }, - { url = "https://files.pythonhosted.org/packages/ca/f0/f44f50c9f5b1a1860261092e3bc91ecdc9acda848a8b8c6abfda4a24dd5c/kiwisolver-1.4.9-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efb3a45b35622bb6c16dbfab491a8f5a391fe0e9d45ef32f4df85658232ca0e2", size = 66464, upload-time = "2025-08-10T21:26:27.733Z" }, - { url = "https://files.pythonhosted.org/packages/2d/7a/9d90a151f558e29c3936b8a47ac770235f436f2120aca41a6d5f3d62ae8d/kiwisolver-1.4.9-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1a12cf6398e8a0a001a059747a1cbf24705e18fe413bc22de7b3d15c67cffe3f", size = 64961, upload-time = "2025-08-10T21:26:28.729Z" }, - { url = "https://files.pythonhosted.org/packages/e9/e9/f218a2cb3a9ffbe324ca29a9e399fa2d2866d7f348ec3a88df87fc248fc5/kiwisolver-1.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b67e6efbf68e077dd71d1a6b37e43e1a99d0bff1a3d51867d45ee8908b931098", size = 1474607, upload-time = "2025-08-10T21:26:29.798Z" }, - { url = "https://files.pythonhosted.org/packages/d9/28/aac26d4c882f14de59041636292bc838db8961373825df23b8eeb807e198/kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5656aa670507437af0207645273ccdfee4f14bacd7f7c67a4306d0dcaeaf6eed", size = 1276546, upload-time = "2025-08-10T21:26:31.401Z" }, - { url = "https://files.pythonhosted.org/packages/8b/ad/8bfc1c93d4cc565e5069162f610ba2f48ff39b7de4b5b8d93f69f30c4bed/kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:bfc08add558155345129c7803b3671cf195e6a56e7a12f3dde7c57d9b417f525", size = 1294482, upload-time = "2025-08-10T21:26:32.721Z" }, - { url = "https://files.pythonhosted.org/packages/da/f1/6aca55ff798901d8ce403206d00e033191f63d82dd708a186e0ed2067e9c/kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:40092754720b174e6ccf9e845d0d8c7d8e12c3d71e7fc35f55f3813e96376f78", size = 1343720, upload-time = "2025-08-10T21:26:34.032Z" }, - { url = "https://files.pythonhosted.org/packages/d1/91/eed031876c595c81d90d0f6fc681ece250e14bf6998c3d7c419466b523b7/kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:497d05f29a1300d14e02e6441cf0f5ee81c1ff5a304b0d9fb77423974684e08b", size = 2224907, upload-time = "2025-08-10T21:26:35.824Z" }, - { url = "https://files.pythonhosted.org/packages/e9/ec/4d1925f2e49617b9cca9c34bfa11adefad49d00db038e692a559454dfb2e/kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:bdd1a81a1860476eb41ac4bc1e07b3f07259e6d55bbf739b79c8aaedcf512799", size = 2321334, upload-time = "2025-08-10T21:26:37.534Z" }, - { url = "https://files.pythonhosted.org/packages/43/cb/450cd4499356f68802750c6ddc18647b8ea01ffa28f50d20598e0befe6e9/kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:e6b93f13371d341afee3be9f7c5964e3fe61d5fa30f6a30eb49856935dfe4fc3", size = 2488313, upload-time = "2025-08-10T21:26:39.191Z" }, - { url = "https://files.pythonhosted.org/packages/71/67/fc76242bd99f885651128a5d4fa6083e5524694b7c88b489b1b55fdc491d/kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d75aa530ccfaa593da12834b86a0724f58bff12706659baa9227c2ccaa06264c", size = 2291970, upload-time = "2025-08-10T21:26:40.828Z" }, - { url = "https://files.pythonhosted.org/packages/75/bd/f1a5d894000941739f2ae1b65a32892349423ad49c2e6d0771d0bad3fae4/kiwisolver-1.4.9-cp313-cp313-win_amd64.whl", hash = "sha256:dd0a578400839256df88c16abddf9ba14813ec5f21362e1fe65022e00c883d4d", size = 73894, upload-time = "2025-08-10T21:26:42.33Z" }, - { url = "https://files.pythonhosted.org/packages/95/38/dce480814d25b99a391abbddadc78f7c117c6da34be68ca8b02d5848b424/kiwisolver-1.4.9-cp313-cp313-win_arm64.whl", hash = "sha256:d4188e73af84ca82468f09cadc5ac4db578109e52acb4518d8154698d3a87ca2", size = 64995, upload-time = "2025-08-10T21:26:43.889Z" }, - { url = "https://files.pythonhosted.org/packages/e2/37/7d218ce5d92dadc5ebdd9070d903e0c7cf7edfe03f179433ac4d13ce659c/kiwisolver-1.4.9-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:5a0f2724dfd4e3b3ac5a82436a8e6fd16baa7d507117e4279b660fe8ca38a3a1", size = 126510, upload-time = "2025-08-10T21:26:44.915Z" }, - { url = "https://files.pythonhosted.org/packages/23/b0/e85a2b48233daef4b648fb657ebbb6f8367696a2d9548a00b4ee0eb67803/kiwisolver-1.4.9-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:1b11d6a633e4ed84fc0ddafd4ebfd8ea49b3f25082c04ad12b8315c11d504dc1", size = 67903, upload-time = "2025-08-10T21:26:45.934Z" }, - { url = "https://files.pythonhosted.org/packages/44/98/f2425bc0113ad7de24da6bb4dae1343476e95e1d738be7c04d31a5d037fd/kiwisolver-1.4.9-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61874cdb0a36016354853593cffc38e56fc9ca5aa97d2c05d3dcf6922cd55a11", size = 66402, upload-time = "2025-08-10T21:26:47.101Z" }, - { url = "https://files.pythonhosted.org/packages/98/d8/594657886df9f34c4177cc353cc28ca7e6e5eb562d37ccc233bff43bbe2a/kiwisolver-1.4.9-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:60c439763a969a6af93b4881db0eed8fadf93ee98e18cbc35bc8da868d0c4f0c", size = 1582135, upload-time = "2025-08-10T21:26:48.665Z" }, - { url = "https://files.pythonhosted.org/packages/5c/c6/38a115b7170f8b306fc929e166340c24958347308ea3012c2b44e7e295db/kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92a2f997387a1b79a75e7803aa7ded2cfbe2823852ccf1ba3bcf613b62ae3197", size = 1389409, upload-time = "2025-08-10T21:26:50.335Z" }, - { url = "https://files.pythonhosted.org/packages/bf/3b/e04883dace81f24a568bcee6eb3001da4ba05114afa622ec9b6fafdc1f5e/kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a31d512c812daea6d8b3be3b2bfcbeb091dbb09177706569bcfc6240dcf8b41c", size = 1401763, upload-time = "2025-08-10T21:26:51.867Z" }, - { url = "https://files.pythonhosted.org/packages/9f/80/20ace48e33408947af49d7d15c341eaee69e4e0304aab4b7660e234d6288/kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:52a15b0f35dad39862d376df10c5230155243a2c1a436e39eb55623ccbd68185", size = 1453643, upload-time = "2025-08-10T21:26:53.592Z" }, - { url = "https://files.pythonhosted.org/packages/64/31/6ce4380a4cd1f515bdda976a1e90e547ccd47b67a1546d63884463c92ca9/kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a30fd6fdef1430fd9e1ba7b3398b5ee4e2887783917a687d86ba69985fb08748", size = 2330818, upload-time = "2025-08-10T21:26:55.051Z" }, - { url = "https://files.pythonhosted.org/packages/fa/e9/3f3fcba3bcc7432c795b82646306e822f3fd74df0ee81f0fa067a1f95668/kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cc9617b46837c6468197b5945e196ee9ca43057bb7d9d1ae688101e4e1dddf64", size = 2419963, upload-time = "2025-08-10T21:26:56.421Z" }, - { url = "https://files.pythonhosted.org/packages/99/43/7320c50e4133575c66e9f7dadead35ab22d7c012a3b09bb35647792b2a6d/kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:0ab74e19f6a2b027ea4f845a78827969af45ce790e6cb3e1ebab71bdf9f215ff", size = 2594639, upload-time = "2025-08-10T21:26:57.882Z" }, - { url = "https://files.pythonhosted.org/packages/65/d6/17ae4a270d4a987ef8a385b906d2bdfc9fce502d6dc0d3aea865b47f548c/kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dba5ee5d3981160c28d5490f0d1b7ed730c22470ff7f6cc26cfcfaacb9896a07", size = 2391741, upload-time = "2025-08-10T21:26:59.237Z" }, - { url = "https://files.pythonhosted.org/packages/2a/8f/8f6f491d595a9e5912971f3f863d81baddccc8a4d0c3749d6a0dd9ffc9df/kiwisolver-1.4.9-cp313-cp313t-win_arm64.whl", hash = "sha256:0749fd8f4218ad2e851e11cc4dc05c7cbc0cbc4267bdfdb31782e65aace4ee9c", size = 68646, upload-time = "2025-08-10T21:27:00.52Z" }, - { url = "https://files.pythonhosted.org/packages/6b/32/6cc0fbc9c54d06c2969faa9c1d29f5751a2e51809dd55c69055e62d9b426/kiwisolver-1.4.9-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:9928fe1eb816d11ae170885a74d074f57af3a0d65777ca47e9aeb854a1fba386", size = 123806, upload-time = "2025-08-10T21:27:01.537Z" }, - { url = "https://files.pythonhosted.org/packages/b2/dd/2bfb1d4a4823d92e8cbb420fe024b8d2167f72079b3bb941207c42570bdf/kiwisolver-1.4.9-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d0005b053977e7b43388ddec89fa567f43d4f6d5c2c0affe57de5ebf290dc552", size = 66605, upload-time = "2025-08-10T21:27:03.335Z" }, - { url = "https://files.pythonhosted.org/packages/f7/69/00aafdb4e4509c2ca6064646cba9cd4b37933898f426756adb2cb92ebbed/kiwisolver-1.4.9-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2635d352d67458b66fd0667c14cb1d4145e9560d503219034a18a87e971ce4f3", size = 64925, upload-time = "2025-08-10T21:27:04.339Z" }, - { url = "https://files.pythonhosted.org/packages/43/dc/51acc6791aa14e5cb6d8a2e28cefb0dc2886d8862795449d021334c0df20/kiwisolver-1.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:767c23ad1c58c9e827b649a9ab7809fd5fd9db266a9cf02b0e926ddc2c680d58", size = 1472414, upload-time = "2025-08-10T21:27:05.437Z" }, - { url = "https://files.pythonhosted.org/packages/3d/bb/93fa64a81db304ac8a246f834d5094fae4b13baf53c839d6bb6e81177129/kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72d0eb9fba308b8311685c2268cf7d0a0639a6cd027d8128659f72bdd8a024b4", size = 1281272, upload-time = "2025-08-10T21:27:07.063Z" }, - { url = "https://files.pythonhosted.org/packages/70/e6/6df102916960fb8d05069d4bd92d6d9a8202d5a3e2444494e7cd50f65b7a/kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f68e4f3eeca8fb22cc3d731f9715a13b652795ef657a13df1ad0c7dc0e9731df", size = 1298578, upload-time = "2025-08-10T21:27:08.452Z" }, - { url = "https://files.pythonhosted.org/packages/7c/47/e142aaa612f5343736b087864dbaebc53ea8831453fb47e7521fa8658f30/kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d84cd4061ae292d8ac367b2c3fa3aad11cb8625a95d135fe93f286f914f3f5a6", size = 1345607, upload-time = "2025-08-10T21:27:10.125Z" }, - { url = "https://files.pythonhosted.org/packages/54/89/d641a746194a0f4d1a3670fb900d0dbaa786fb98341056814bc3f058fa52/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a60ea74330b91bd22a29638940d115df9dc00af5035a9a2a6ad9399ffb4ceca5", size = 2230150, upload-time = "2025-08-10T21:27:11.484Z" }, - { url = "https://files.pythonhosted.org/packages/aa/6b/5ee1207198febdf16ac11f78c5ae40861b809cbe0e6d2a8d5b0b3044b199/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ce6a3a4e106cf35c2d9c4fa17c05ce0b180db622736845d4315519397a77beaf", size = 2325979, upload-time = "2025-08-10T21:27:12.917Z" }, - { url = "https://files.pythonhosted.org/packages/fc/ff/b269eefd90f4ae14dcc74973d5a0f6d28d3b9bb1afd8c0340513afe6b39a/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:77937e5e2a38a7b48eef0585114fe7930346993a88060d0bf886086d2aa49ef5", size = 2491456, upload-time = "2025-08-10T21:27:14.353Z" }, - { url = "https://files.pythonhosted.org/packages/fc/d4/10303190bd4d30de547534601e259a4fbf014eed94aae3e5521129215086/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:24c175051354f4a28c5d6a31c93906dc653e2bf234e8a4bbfb964892078898ce", size = 2294621, upload-time = "2025-08-10T21:27:15.808Z" }, - { url = "https://files.pythonhosted.org/packages/28/e0/a9a90416fce5c0be25742729c2ea52105d62eda6c4be4d803c2a7be1fa50/kiwisolver-1.4.9-cp314-cp314-win_amd64.whl", hash = "sha256:0763515d4df10edf6d06a3c19734e2566368980d21ebec439f33f9eb936c07b7", size = 75417, upload-time = "2025-08-10T21:27:17.436Z" }, - { url = "https://files.pythonhosted.org/packages/1f/10/6949958215b7a9a264299a7db195564e87900f709db9245e4ebdd3c70779/kiwisolver-1.4.9-cp314-cp314-win_arm64.whl", hash = "sha256:0e4e2bf29574a6a7b7f6cb5fa69293b9f96c928949ac4a53ba3f525dffb87f9c", size = 66582, upload-time = "2025-08-10T21:27:18.436Z" }, - { url = "https://files.pythonhosted.org/packages/ec/79/60e53067903d3bc5469b369fe0dfc6b3482e2133e85dae9daa9527535991/kiwisolver-1.4.9-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d976bbb382b202f71c67f77b0ac11244021cfa3f7dfd9e562eefcea2df711548", size = 126514, upload-time = "2025-08-10T21:27:19.465Z" }, - { url = "https://files.pythonhosted.org/packages/25/d1/4843d3e8d46b072c12a38c97c57fab4608d36e13fe47d47ee96b4d61ba6f/kiwisolver-1.4.9-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2489e4e5d7ef9a1c300a5e0196e43d9c739f066ef23270607d45aba368b91f2d", size = 67905, upload-time = "2025-08-10T21:27:20.51Z" }, - { url = "https://files.pythonhosted.org/packages/8c/ae/29ffcbd239aea8b93108de1278271ae764dfc0d803a5693914975f200596/kiwisolver-1.4.9-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:e2ea9f7ab7fbf18fffb1b5434ce7c69a07582f7acc7717720f1d69f3e806f90c", size = 66399, upload-time = "2025-08-10T21:27:21.496Z" }, - { url = "https://files.pythonhosted.org/packages/a1/ae/d7ba902aa604152c2ceba5d352d7b62106bedbccc8e95c3934d94472bfa3/kiwisolver-1.4.9-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b34e51affded8faee0dfdb705416153819d8ea9250bbbf7ea1b249bdeb5f1122", size = 1582197, upload-time = "2025-08-10T21:27:22.604Z" }, - { url = "https://files.pythonhosted.org/packages/f2/41/27c70d427eddb8bc7e4f16420a20fefc6f480312122a59a959fdfe0445ad/kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8aacd3d4b33b772542b2e01beb50187536967b514b00003bdda7589722d2a64", size = 1390125, upload-time = "2025-08-10T21:27:24.036Z" }, - { url = "https://files.pythonhosted.org/packages/41/42/b3799a12bafc76d962ad69083f8b43b12bf4fe78b097b12e105d75c9b8f1/kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7cf974dd4e35fa315563ac99d6287a1024e4dc2077b8a7d7cd3d2fb65d283134", size = 1402612, upload-time = "2025-08-10T21:27:25.773Z" }, - { url = "https://files.pythonhosted.org/packages/d2/b5/a210ea073ea1cfaca1bb5c55a62307d8252f531beb364e18aa1e0888b5a0/kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:85bd218b5ecfbee8c8a82e121802dcb519a86044c9c3b2e4aef02fa05c6da370", size = 1453990, upload-time = "2025-08-10T21:27:27.089Z" }, - { url = "https://files.pythonhosted.org/packages/5f/ce/a829eb8c033e977d7ea03ed32fb3c1781b4fa0433fbadfff29e39c676f32/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0856e241c2d3df4efef7c04a1e46b1936b6120c9bcf36dd216e3acd84bc4fb21", size = 2331601, upload-time = "2025-08-10T21:27:29.343Z" }, - { url = "https://files.pythonhosted.org/packages/e0/4b/b5e97eb142eb9cd0072dacfcdcd31b1c66dc7352b0f7c7255d339c0edf00/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:9af39d6551f97d31a4deebeac6f45b156f9755ddc59c07b402c148f5dbb6482a", size = 2422041, upload-time = "2025-08-10T21:27:30.754Z" }, - { url = "https://files.pythonhosted.org/packages/40/be/8eb4cd53e1b85ba4edc3a9321666f12b83113a178845593307a3e7891f44/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:bb4ae2b57fc1d8cbd1cf7b1d9913803681ffa903e7488012be5b76dedf49297f", size = 2594897, upload-time = "2025-08-10T21:27:32.803Z" }, - { url = "https://files.pythonhosted.org/packages/99/dd/841e9a66c4715477ea0abc78da039832fbb09dac5c35c58dc4c41a407b8a/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:aedff62918805fb62d43a4aa2ecd4482c380dc76cd31bd7c8878588a61bd0369", size = 2391835, upload-time = "2025-08-10T21:27:34.23Z" }, - { url = "https://files.pythonhosted.org/packages/0c/28/4b2e5c47a0da96896fdfdb006340ade064afa1e63675d01ea5ac222b6d52/kiwisolver-1.4.9-cp314-cp314t-win_amd64.whl", hash = "sha256:1fa333e8b2ce4d9660f2cda9c0e1b6bafcfb2457a9d259faa82289e73ec24891", size = 79988, upload-time = "2025-08-10T21:27:35.587Z" }, - { url = "https://files.pythonhosted.org/packages/80/be/3578e8afd18c88cdf9cb4cffde75a96d2be38c5a903f1ed0ceec061bd09e/kiwisolver-1.4.9-cp314-cp314t-win_arm64.whl", hash = "sha256:4a48a2ce79d65d363597ef7b567ce3d14d68783d2b2263d98db3d9477805ba32", size = 70260, upload-time = "2025-08-10T21:27:36.606Z" }, -] - -[[package]] -name = "lark" -version = "1.2.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/af/60/bc7622aefb2aee1c0b4ba23c1446d3e30225c8770b38d7aedbfb65ca9d5a/lark-1.2.2.tar.gz", hash = "sha256:ca807d0162cd16cef15a8feecb862d7319e7a09bdb13aef927968e45040fed80", size = 252132, upload-time = "2024-08-13T19:49:00.652Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2d/00/d90b10b962b4277f5e64a78b6609968859ff86889f5b898c1a778c06ec00/lark-1.2.2-py3-none-any.whl", hash = "sha256:c2276486b02f0f1b90be155f2c8ba4a8e194d42775786db622faccd652d8e80c", size = 111036, upload-time = "2024-08-13T19:48:58.603Z" }, -] - -[[package]] -name = "llvmlite" -version = "0.44.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/89/6a/95a3d3610d5c75293d5dbbb2a76480d5d4eeba641557b69fe90af6c5b84e/llvmlite-0.44.0.tar.gz", hash = "sha256:07667d66a5d150abed9157ab6c0b9393c9356f229784a4385c02f99e94fc94d4", size = 171880, upload-time = "2025-01-20T11:14:41.342Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/15/86/e3c3195b92e6e492458f16d233e58a1a812aa2bfbef9bdd0fbafcec85c60/llvmlite-0.44.0-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:1d671a56acf725bf1b531d5ef76b86660a5ab8ef19bb6a46064a705c6ca80aad", size = 28132297, upload-time = "2025-01-20T11:13:32.57Z" }, - { url = "https://files.pythonhosted.org/packages/d6/53/373b6b8be67b9221d12b24125fd0ec56b1078b660eeae266ec388a6ac9a0/llvmlite-0.44.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5f79a728e0435493611c9f405168682bb75ffd1fbe6fc360733b850c80a026db", size = 26201105, upload-time = "2025-01-20T11:13:38.744Z" }, - { url = "https://files.pythonhosted.org/packages/cb/da/8341fd3056419441286c8e26bf436923021005ece0bff5f41906476ae514/llvmlite-0.44.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0143a5ef336da14deaa8ec26c5449ad5b6a2b564df82fcef4be040b9cacfea9", size = 42361901, upload-time = "2025-01-20T11:13:46.711Z" }, - { url = "https://files.pythonhosted.org/packages/53/ad/d79349dc07b8a395a99153d7ce8b01d6fcdc9f8231355a5df55ded649b61/llvmlite-0.44.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d752f89e31b66db6f8da06df8b39f9b91e78c5feea1bf9e8c1fba1d1c24c065d", size = 41184247, upload-time = "2025-01-20T11:13:56.159Z" }, - { url = "https://files.pythonhosted.org/packages/e2/3b/a9a17366af80127bd09decbe2a54d8974b6d8b274b39bf47fbaedeec6307/llvmlite-0.44.0-cp312-cp312-win_amd64.whl", hash = "sha256:eae7e2d4ca8f88f89d315b48c6b741dcb925d6a1042da694aa16ab3dd4cbd3a1", size = 30332380, upload-time = "2025-01-20T11:14:02.442Z" }, - { url = "https://files.pythonhosted.org/packages/89/24/4c0ca705a717514c2092b18476e7a12c74d34d875e05e4d742618ebbf449/llvmlite-0.44.0-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:319bddd44e5f71ae2689859b7203080716448a3cd1128fb144fe5c055219d516", size = 28132306, upload-time = "2025-01-20T11:14:09.035Z" }, - { url = "https://files.pythonhosted.org/packages/01/cf/1dd5a60ba6aee7122ab9243fd614abcf22f36b0437cbbe1ccf1e3391461c/llvmlite-0.44.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9c58867118bad04a0bb22a2e0068c693719658105e40009ffe95c7000fcde88e", size = 26201090, upload-time = "2025-01-20T11:14:15.401Z" }, - { url = "https://files.pythonhosted.org/packages/d2/1b/656f5a357de7135a3777bd735cc7c9b8f23b4d37465505bd0eaf4be9befe/llvmlite-0.44.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46224058b13c96af1365290bdfebe9a6264ae62fb79b2b55693deed11657a8bf", size = 42361904, upload-time = "2025-01-20T11:14:22.949Z" }, - { url = "https://files.pythonhosted.org/packages/d8/e1/12c5f20cb9168fb3464a34310411d5ad86e4163c8ff2d14a2b57e5cc6bac/llvmlite-0.44.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa0097052c32bf721a4efc03bd109d335dfa57d9bffb3d4c24cc680711b8b4fc", size = 41184245, upload-time = "2025-01-20T11:14:31.731Z" }, - { url = "https://files.pythonhosted.org/packages/d0/81/e66fc86539293282fd9cb7c9417438e897f369e79ffb62e1ae5e5154d4dd/llvmlite-0.44.0-cp313-cp313-win_amd64.whl", hash = "sha256:2fb7c4f2fb86cbae6dca3db9ab203eeea0e22d73b99bc2341cdf9de93612e930", size = 30331193, upload-time = "2025-01-20T11:14:38.578Z" }, -] - -[[package]] -name = "markdown" -version = "3.8.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/c2/4ab49206c17f75cb08d6311171f2d65798988db4360c4d1485bd0eedd67c/markdown-3.8.2.tar.gz", hash = "sha256:247b9a70dd12e27f67431ce62523e675b866d254f900c4fe75ce3dda62237c45", size = 362071, upload-time = "2025-06-19T17:12:44.483Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/96/2b/34cc11786bc00d0f04d0f5fdc3a2b1ae0b6239eef72d3d345805f9ad92a1/markdown-3.8.2-py3-none-any.whl", hash = "sha256:5c83764dbd4e00bdd94d85a19b8d55ccca20fe35b2e678a1422b380324dd5f24", size = 106827, upload-time = "2025-06-19T17:12:42.994Z" }, -] - -[[package]] -name = "markupsafe" -version = "3.0.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537, upload-time = "2024-10-18T15:21:54.129Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274, upload-time = "2024-10-18T15:21:13.777Z" }, - { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348, upload-time = "2024-10-18T15:21:14.822Z" }, - { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149, upload-time = "2024-10-18T15:21:15.642Z" }, - { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118, upload-time = "2024-10-18T15:21:17.133Z" }, - { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993, upload-time = "2024-10-18T15:21:18.064Z" }, - { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178, upload-time = "2024-10-18T15:21:18.859Z" }, - { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319, upload-time = "2024-10-18T15:21:19.671Z" }, - { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352, upload-time = "2024-10-18T15:21:20.971Z" }, - { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097, upload-time = "2024-10-18T15:21:22.646Z" }, - { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601, upload-time = "2024-10-18T15:21:23.499Z" }, - { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274, upload-time = "2024-10-18T15:21:24.577Z" }, - { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352, upload-time = "2024-10-18T15:21:25.382Z" }, - { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122, upload-time = "2024-10-18T15:21:26.199Z" }, - { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085, upload-time = "2024-10-18T15:21:27.029Z" }, - { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978, upload-time = "2024-10-18T15:21:27.846Z" }, - { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208, upload-time = "2024-10-18T15:21:28.744Z" }, - { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357, upload-time = "2024-10-18T15:21:29.545Z" }, - { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344, upload-time = "2024-10-18T15:21:30.366Z" }, - { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101, upload-time = "2024-10-18T15:21:31.207Z" }, - { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603, upload-time = "2024-10-18T15:21:32.032Z" }, - { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510, upload-time = "2024-10-18T15:21:33.625Z" }, - { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486, upload-time = "2024-10-18T15:21:34.611Z" }, - { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480, upload-time = "2024-10-18T15:21:35.398Z" }, - { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914, upload-time = "2024-10-18T15:21:36.231Z" }, - { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796, upload-time = "2024-10-18T15:21:37.073Z" }, - { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473, upload-time = "2024-10-18T15:21:37.932Z" }, - { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114, upload-time = "2024-10-18T15:21:39.799Z" }, - { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098, upload-time = "2024-10-18T15:21:40.813Z" }, - { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208, upload-time = "2024-10-18T15:21:41.814Z" }, - { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739, upload-time = "2024-10-18T15:21:42.784Z" }, -] - -[[package]] -name = "matplotlib" -version = "3.10.5" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "contourpy" }, - { name = "cycler" }, - { name = "fonttools" }, - { name = "kiwisolver" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "pillow" }, - { name = "pyparsing" }, - { name = "python-dateutil" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/43/91/f2939bb60b7ebf12478b030e0d7f340247390f402b3b189616aad790c366/matplotlib-3.10.5.tar.gz", hash = "sha256:352ed6ccfb7998a00881692f38b4ca083c691d3e275b4145423704c34c909076", size = 34804044, upload-time = "2025-07-31T18:09:33.805Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/66/1e/c6f6bcd882d589410b475ca1fc22e34e34c82adff519caf18f3e6dd9d682/matplotlib-3.10.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:00b6feadc28a08bd3c65b2894f56cf3c94fc8f7adcbc6ab4516ae1e8ed8f62e2", size = 8253056, upload-time = "2025-07-31T18:08:05.385Z" }, - { url = "https://files.pythonhosted.org/packages/53/e6/d6f7d1b59413f233793dda14419776f5f443bcccb2dfc84b09f09fe05dbe/matplotlib-3.10.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ee98a5c5344dc7f48dc261b6ba5d9900c008fc12beb3fa6ebda81273602cc389", size = 8110131, upload-time = "2025-07-31T18:08:07.293Z" }, - { url = "https://files.pythonhosted.org/packages/66/2b/bed8a45e74957549197a2ac2e1259671cd80b55ed9e1fe2b5c94d88a9202/matplotlib-3.10.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a17e57e33de901d221a07af32c08870ed4528db0b6059dce7d7e65c1122d4bea", size = 8669603, upload-time = "2025-07-31T18:08:09.064Z" }, - { url = "https://files.pythonhosted.org/packages/7e/a7/315e9435b10d057f5e52dfc603cd353167ae28bb1a4e033d41540c0067a4/matplotlib-3.10.5-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97b9d6443419085950ee4a5b1ee08c363e5c43d7176e55513479e53669e88468", size = 9508127, upload-time = "2025-07-31T18:08:10.845Z" }, - { url = "https://files.pythonhosted.org/packages/7f/d9/edcbb1f02ca99165365d2768d517898c22c6040187e2ae2ce7294437c413/matplotlib-3.10.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ceefe5d40807d29a66ae916c6a3915d60ef9f028ce1927b84e727be91d884369", size = 9566926, upload-time = "2025-07-31T18:08:13.186Z" }, - { url = "https://files.pythonhosted.org/packages/3b/d9/6dd924ad5616c97b7308e6320cf392c466237a82a2040381163b7500510a/matplotlib-3.10.5-cp312-cp312-win_amd64.whl", hash = "sha256:c04cba0f93d40e45b3c187c6c52c17f24535b27d545f757a2fffebc06c12b98b", size = 8107599, upload-time = "2025-07-31T18:08:15.116Z" }, - { url = "https://files.pythonhosted.org/packages/0e/f3/522dc319a50f7b0279fbe74f86f7a3506ce414bc23172098e8d2bdf21894/matplotlib-3.10.5-cp312-cp312-win_arm64.whl", hash = "sha256:a41bcb6e2c8e79dc99c5511ae6f7787d2fb52efd3d805fff06d5d4f667db16b2", size = 7978173, upload-time = "2025-07-31T18:08:21.518Z" }, - { url = "https://files.pythonhosted.org/packages/8d/05/4f3c1f396075f108515e45cb8d334aff011a922350e502a7472e24c52d77/matplotlib-3.10.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:354204db3f7d5caaa10e5de74549ef6a05a4550fdd1c8f831ab9bca81efd39ed", size = 8253586, upload-time = "2025-07-31T18:08:23.107Z" }, - { url = "https://files.pythonhosted.org/packages/2f/2c/e084415775aac7016c3719fe7006cdb462582c6c99ac142f27303c56e243/matplotlib-3.10.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b072aac0c3ad563a2b3318124756cb6112157017f7431626600ecbe890df57a1", size = 8110715, upload-time = "2025-07-31T18:08:24.675Z" }, - { url = "https://files.pythonhosted.org/packages/52/1b/233e3094b749df16e3e6cd5a44849fd33852e692ad009cf7de00cf58ddf6/matplotlib-3.10.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d52fd5b684d541b5a51fb276b2b97b010c75bee9aa392f96b4a07aeb491e33c7", size = 8669397, upload-time = "2025-07-31T18:08:26.778Z" }, - { url = "https://files.pythonhosted.org/packages/e8/ec/03f9e003a798f907d9f772eed9b7c6a9775d5bd00648b643ebfb88e25414/matplotlib-3.10.5-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee7a09ae2f4676276f5a65bd9f2bd91b4f9fbaedf49f40267ce3f9b448de501f", size = 9508646, upload-time = "2025-07-31T18:08:28.848Z" }, - { url = "https://files.pythonhosted.org/packages/91/e7/c051a7a386680c28487bca27d23b02d84f63e3d2a9b4d2fc478e6a42e37e/matplotlib-3.10.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ba6c3c9c067b83481d647af88b4e441d532acdb5ef22178a14935b0b881188f4", size = 9567424, upload-time = "2025-07-31T18:08:30.726Z" }, - { url = "https://files.pythonhosted.org/packages/36/c2/24302e93ff431b8f4173ee1dd88976c8d80483cadbc5d3d777cef47b3a1c/matplotlib-3.10.5-cp313-cp313-win_amd64.whl", hash = "sha256:07442d2692c9bd1cceaa4afb4bbe5b57b98a7599de4dabfcca92d3eea70f9ebe", size = 8107809, upload-time = "2025-07-31T18:08:33.928Z" }, - { url = "https://files.pythonhosted.org/packages/0b/33/423ec6a668d375dad825197557ed8fbdb74d62b432c1ed8235465945475f/matplotlib-3.10.5-cp313-cp313-win_arm64.whl", hash = "sha256:48fe6d47380b68a37ccfcc94f009530e84d41f71f5dae7eda7c4a5a84aa0a674", size = 7978078, upload-time = "2025-07-31T18:08:36.764Z" }, - { url = "https://files.pythonhosted.org/packages/51/17/521fc16ec766455c7bb52cc046550cf7652f6765ca8650ff120aa2d197b6/matplotlib-3.10.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b80eb8621331449fc519541a7461987f10afa4f9cfd91afcd2276ebe19bd56c", size = 8295590, upload-time = "2025-07-31T18:08:38.521Z" }, - { url = "https://files.pythonhosted.org/packages/f8/12/23c28b2c21114c63999bae129fce7fd34515641c517ae48ce7b7dcd33458/matplotlib-3.10.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:47a388908e469d6ca2a6015858fa924e0e8a2345a37125948d8e93a91c47933e", size = 8158518, upload-time = "2025-07-31T18:08:40.195Z" }, - { url = "https://files.pythonhosted.org/packages/81/f8/aae4eb25e8e7190759f3cb91cbeaa344128159ac92bb6b409e24f8711f78/matplotlib-3.10.5-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8b6b49167d208358983ce26e43aa4196073b4702858670f2eb111f9a10652b4b", size = 8691815, upload-time = "2025-07-31T18:08:42.238Z" }, - { url = "https://files.pythonhosted.org/packages/d0/ba/450c39ebdd486bd33a359fc17365ade46c6a96bf637bbb0df7824de2886c/matplotlib-3.10.5-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8a8da0453a7fd8e3da114234ba70c5ba9ef0e98f190309ddfde0f089accd46ea", size = 9522814, upload-time = "2025-07-31T18:08:44.914Z" }, - { url = "https://files.pythonhosted.org/packages/89/11/9c66f6a990e27bb9aa023f7988d2d5809cb98aa39c09cbf20fba75a542ef/matplotlib-3.10.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:52c6573dfcb7726a9907b482cd5b92e6b5499b284ffacb04ffbfe06b3e568124", size = 9573917, upload-time = "2025-07-31T18:08:47.038Z" }, - { url = "https://files.pythonhosted.org/packages/b3/69/8b49394de92569419e5e05e82e83df9b749a0ff550d07631ea96ed2eb35a/matplotlib-3.10.5-cp313-cp313t-win_amd64.whl", hash = "sha256:a23193db2e9d64ece69cac0c8231849db7dd77ce59c7b89948cf9d0ce655a3ce", size = 8181034, upload-time = "2025-07-31T18:08:48.943Z" }, - { url = "https://files.pythonhosted.org/packages/47/23/82dc435bb98a2fc5c20dffcac8f0b083935ac28286413ed8835df40d0baa/matplotlib-3.10.5-cp313-cp313t-win_arm64.whl", hash = "sha256:56da3b102cf6da2776fef3e71cd96fcf22103a13594a18ac9a9b31314e0be154", size = 8023337, upload-time = "2025-07-31T18:08:50.791Z" }, - { url = "https://files.pythonhosted.org/packages/ac/e0/26b6cfde31f5383503ee45dcb7e691d45dadf0b3f54639332b59316a97f8/matplotlib-3.10.5-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:96ef8f5a3696f20f55597ffa91c28e2e73088df25c555f8d4754931515512715", size = 8253591, upload-time = "2025-07-31T18:08:53.254Z" }, - { url = "https://files.pythonhosted.org/packages/c1/89/98488c7ef7ea20ea659af7499628c240a608b337af4be2066d644cfd0a0f/matplotlib-3.10.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:77fab633e94b9da60512d4fa0213daeb76d5a7b05156840c4fd0399b4b818837", size = 8112566, upload-time = "2025-07-31T18:08:55.116Z" }, - { url = "https://files.pythonhosted.org/packages/52/67/42294dfedc82aea55e1a767daf3263aacfb5a125f44ba189e685bab41b6f/matplotlib-3.10.5-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:27f52634315e96b1debbfdc5c416592edcd9c4221bc2f520fd39c33db5d9f202", size = 9513281, upload-time = "2025-07-31T18:08:56.885Z" }, - { url = "https://files.pythonhosted.org/packages/e7/68/f258239e0cf34c2cbc816781c7ab6fca768452e6bf1119aedd2bd4a882a3/matplotlib-3.10.5-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:525f6e28c485c769d1f07935b660c864de41c37fd716bfa64158ea646f7084bb", size = 9780873, upload-time = "2025-07-31T18:08:59.241Z" }, - { url = "https://files.pythonhosted.org/packages/89/64/f4881554006bd12e4558bd66778bdd15d47b00a1f6c6e8b50f6208eda4b3/matplotlib-3.10.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:1f5f3ec4c191253c5f2b7c07096a142c6a1c024d9f738247bfc8e3f9643fc975", size = 9568954, upload-time = "2025-07-31T18:09:01.244Z" }, - { url = "https://files.pythonhosted.org/packages/06/f8/42779d39c3f757e1f012f2dda3319a89fb602bd2ef98ce8faf0281f4febd/matplotlib-3.10.5-cp314-cp314-win_amd64.whl", hash = "sha256:707f9c292c4cd4716f19ab8a1f93f26598222cd931e0cd98fbbb1c5994bf7667", size = 8237465, upload-time = "2025-07-31T18:09:03.206Z" }, - { url = "https://files.pythonhosted.org/packages/cf/f8/153fd06b5160f0cd27c8b9dd797fcc9fb56ac6a0ebf3c1f765b6b68d3c8a/matplotlib-3.10.5-cp314-cp314-win_arm64.whl", hash = "sha256:21a95b9bf408178d372814de7baacd61c712a62cae560b5e6f35d791776f6516", size = 8108898, upload-time = "2025-07-31T18:09:05.231Z" }, - { url = "https://files.pythonhosted.org/packages/9a/ee/c4b082a382a225fe0d2a73f1f57cf6f6f132308805b493a54c8641006238/matplotlib-3.10.5-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a6b310f95e1102a8c7c817ef17b60ee5d1851b8c71b63d9286b66b177963039e", size = 8295636, upload-time = "2025-07-31T18:09:07.306Z" }, - { url = "https://files.pythonhosted.org/packages/30/73/2195fa2099718b21a20da82dfc753bf2af58d596b51aefe93e359dd5915a/matplotlib-3.10.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:94986a242747a0605cb3ff1cb98691c736f28a59f8ffe5175acaeb7397c49a5a", size = 8158575, upload-time = "2025-07-31T18:09:09.083Z" }, - { url = "https://files.pythonhosted.org/packages/f6/e9/a08cdb34618a91fa08f75e6738541da5cacde7c307cea18ff10f0d03fcff/matplotlib-3.10.5-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ff10ea43288f0c8bab608a305dc6c918cc729d429c31dcbbecde3b9f4d5b569", size = 9522815, upload-time = "2025-07-31T18:09:11.191Z" }, - { url = "https://files.pythonhosted.org/packages/4e/bb/34d8b7e0d1bb6d06ef45db01dfa560d5a67b1c40c0b998ce9ccde934bb09/matplotlib-3.10.5-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f6adb644c9d040ffb0d3434e440490a66cf73dbfa118a6f79cd7568431f7a012", size = 9783514, upload-time = "2025-07-31T18:09:13.307Z" }, - { url = "https://files.pythonhosted.org/packages/12/09/d330d1e55dcca2e11b4d304cc5227f52e2512e46828d6249b88e0694176e/matplotlib-3.10.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:4fa40a8f98428f789a9dcacd625f59b7bc4e3ef6c8c7c80187a7a709475cf592", size = 9573932, upload-time = "2025-07-31T18:09:15.335Z" }, - { url = "https://files.pythonhosted.org/packages/eb/3b/f70258ac729aa004aca673800a53a2b0a26d49ca1df2eaa03289a1c40f81/matplotlib-3.10.5-cp314-cp314t-win_amd64.whl", hash = "sha256:95672a5d628b44207aab91ec20bf59c26da99de12b88f7e0b1fb0a84a86ff959", size = 8322003, upload-time = "2025-07-31T18:09:17.416Z" }, - { url = "https://files.pythonhosted.org/packages/5b/60/3601f8ce6d76a7c81c7f25a0e15fde0d6b66226dd187aa6d2838e6374161/matplotlib-3.10.5-cp314-cp314t-win_arm64.whl", hash = "sha256:2efaf97d72629e74252e0b5e3c46813e9eeaa94e011ecf8084a971a31a97f40b", size = 8153849, upload-time = "2025-07-31T18:09:19.673Z" }, -] - -[[package]] -name = "matplotlib-inline" -version = "0.1.7" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159, upload-time = "2024-04-15T13:44:44.803Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899, upload-time = "2024-04-15T13:44:43.265Z" }, -] - -[[package]] -name = "mergedeep" -version = "1.3.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661, upload-time = "2021-02-05T18:55:30.623Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354, upload-time = "2021-02-05T18:55:29.583Z" }, -] - -[[package]] -name = "mistune" -version = "3.1.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c4/79/bda47f7dd7c3c55770478d6d02c9960c430b0cf1773b72366ff89126ea31/mistune-3.1.3.tar.gz", hash = "sha256:a7035c21782b2becb6be62f8f25d3df81ccb4d6fa477a6525b15af06539f02a0", size = 94347, upload-time = "2025-03-19T14:27:24.955Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/01/4d/23c4e4f09da849e127e9f123241946c23c1e30f45a88366879e064211815/mistune-3.1.3-py3-none-any.whl", hash = "sha256:1a32314113cff28aa6432e99e522677c8587fd83e3d51c29b82a52409c842bd9", size = 53410, upload-time = "2025-03-19T14:27:23.451Z" }, -] - -[[package]] -name = "mkdocs" -version = "1.6.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click" }, - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "ghp-import" }, - { name = "jinja2" }, - { name = "markdown" }, - { name = "markupsafe" }, - { name = "mergedeep" }, - { name = "mkdocs-get-deps" }, - { name = "packaging" }, - { name = "pathspec" }, - { name = "pyyaml" }, - { name = "pyyaml-env-tag" }, - { name = "watchdog" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159, upload-time = "2024-08-30T12:24:06.899Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451, upload-time = "2024-08-30T12:24:05.054Z" }, -] - -[[package]] -name = "mkdocs-autorefs" -version = "1.4.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "markdown" }, - { name = "markupsafe" }, - { name = "mkdocs" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/47/0c/c9826f35b99c67fa3a7cddfa094c1a6c43fafde558c309c6e4403e5b37dc/mkdocs_autorefs-1.4.2.tar.gz", hash = "sha256:e2ebe1abd2b67d597ed19378c0fff84d73d1dbce411fce7a7cc6f161888b6749", size = 54961, upload-time = "2025-05-20T13:09:09.886Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/87/dc/fc063b78f4b769d1956319351704e23ebeba1e9e1d6a41b4b602325fd7e4/mkdocs_autorefs-1.4.2-py3-none-any.whl", hash = "sha256:83d6d777b66ec3c372a1aad4ae0cf77c243ba5bcda5bf0c6b8a2c5e7a3d89f13", size = 24969, upload-time = "2025-05-20T13:09:08.237Z" }, -] - -[[package]] -name = "mkdocs-get-deps" -version = "0.2.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mergedeep" }, - { name = "platformdirs" }, - { name = "pyyaml" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/98/f5/ed29cd50067784976f25ed0ed6fcd3c2ce9eb90650aa3b2796ddf7b6870b/mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c", size = 10239, upload-time = "2023-11-20T17:51:09.981Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9f/d4/029f984e8d3f3b6b726bd33cafc473b75e9e44c0f7e80a5b29abc466bdea/mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134", size = 9521, upload-time = "2023-11-20T17:51:08.587Z" }, -] - -[[package]] -name = "mkdocs-include-markdown-plugin" -version = "7.1.6" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mkdocs" }, - { name = "wcmatch" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/2c/17/988d97ac6849b196f54d45ca9c60ca894880c160a512785f03834704b3d9/mkdocs_include_markdown_plugin-7.1.6.tar.gz", hash = "sha256:a0753cb82704c10a287f1e789fc9848f82b6beb8749814b24b03dd9f67816677", size = 23391, upload-time = "2025-06-13T18:25:51.193Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/a1/6cf1667a05e5f468e1263fcf848772bca8cc9e358cd57ae19a01f92c9f6f/mkdocs_include_markdown_plugin-7.1.6-py3-none-any.whl", hash = "sha256:7975a593514887c18ecb68e11e35c074c5499cfa3e51b18cd16323862e1f7345", size = 27161, upload-time = "2025-06-13T18:25:49.847Z" }, -] - -[[package]] -name = "mkdocs-macros-plugin" -version = "1.3.9" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "hjson" }, - { name = "jinja2" }, - { name = "mkdocs" }, - { name = "packaging" }, - { name = "pathspec" }, - { name = "python-dateutil" }, - { name = "pyyaml" }, - { name = "super-collections" }, - { name = "termcolor" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f0/4f/c1c0b258d39739d25d9259d7379fdd016a893e4370734b1843cef6c90f2d/mkdocs_macros_plugin-1.3.9.tar.gz", hash = "sha256:01b6003fbe9b55fdc97c0abb66f811d65abfd291dcf70f277990165553faa99a", size = 33990, upload-time = "2025-08-12T13:08:02.116Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/75/d6/18f19261f44813be207c46fb80da9ca13cb397aae5944b2b30c9eb1ebe3f/mkdocs_macros_plugin-1.3.9-py3-none-any.whl", hash = "sha256:c52351295efdbdbb37a9f0ea639719055ddb64a00115457289940e85696a81d9", size = 38219, upload-time = "2025-08-12T13:08:00.676Z" }, -] - -[[package]] -name = "mkdocs-material" -version = "9.6.18" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "babel" }, - { name = "backrefs" }, - { name = "click" }, - { name = "colorama" }, - { name = "jinja2" }, - { name = "markdown" }, - { name = "mkdocs" }, - { name = "mkdocs-material-extensions" }, - { name = "paginate" }, - { name = "pygments" }, - { name = "pymdown-extensions" }, - { name = "requests" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e6/46/db0d78add5aac29dfcd0a593bcc6049c86c77ba8a25b3a5b681c190d5e99/mkdocs_material-9.6.18.tar.gz", hash = "sha256:a2eb253bcc8b66f8c6eaf8379c10ed6e9644090c2e2e9d0971c7722dc7211c05", size = 4034856, upload-time = "2025-08-22T08:21:47.575Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/22/0b/545a4f8d4f9057e77f1d99640eb09aaae40c4f9034707f25636caf716ff9/mkdocs_material-9.6.18-py3-none-any.whl", hash = "sha256:dbc1e146a0ecce951a4d84f97b816a54936cdc9e1edd1667fc6868878ac06701", size = 9232642, upload-time = "2025-08-22T08:21:44.52Z" }, -] - -[[package]] -name = "mkdocs-material-extensions" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/79/9b/9b4c96d6593b2a541e1cb8b34899a6d021d208bb357042823d4d2cabdbe7/mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", size = 11847, upload-time = "2023-11-22T19:09:45.208Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31", size = 8728, upload-time = "2023-11-22T19:09:43.465Z" }, -] - -[[package]] -name = "mkdocs-minify-plugin" -version = "0.8.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "csscompressor" }, - { name = "htmlmin2" }, - { name = "jsmin" }, - { name = "mkdocs" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/52/67/fe4b77e7a8ae7628392e28b14122588beaf6078b53eb91c7ed000fd158ac/mkdocs-minify-plugin-0.8.0.tar.gz", hash = "sha256:bc11b78b8120d79e817308e2b11539d790d21445eb63df831e393f76e52e753d", size = 8366, upload-time = "2024-01-29T16:11:32.982Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1b/cd/2e8d0d92421916e2ea4ff97f10a544a9bd5588eb747556701c983581df13/mkdocs_minify_plugin-0.8.0-py3-none-any.whl", hash = "sha256:5fba1a3f7bd9a2142c9954a6559a57e946587b21f133165ece30ea145c66aee6", size = 6723, upload-time = "2024-01-29T16:11:31.851Z" }, -] - -[[package]] -name = "mkdocs-plotly-plugin" -version = "0.1.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "beautifulsoup4" }, - { name = "flatten-dict" }, - { name = "mkdocs" }, - { name = "pymdown-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/df/21/01431251720764246970a0bb9359fd8734007b518773a5102b089c46aec2/mkdocs-plotly-plugin-0.1.3.tar.gz", hash = "sha256:86a133ecef92da2d41045cfa6f143fd77f7e064d7a1558d7fb764e1efb82dbca", size = 10686, upload-time = "2023-07-24T15:09:42.418Z" } - -[[package]] -name = "mkdocs-redirects" -version = "1.2.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mkdocs" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f1/a8/6d44a6cf07e969c7420cb36ab287b0669da636a2044de38a7d2208d5a758/mkdocs_redirects-1.2.2.tar.gz", hash = "sha256:3094981b42ffab29313c2c1b8ac3969861109f58b2dd58c45fc81cd44bfa0095", size = 7162, upload-time = "2024-11-07T14:57:21.109Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c4/ec/38443b1f2a3821bbcb24e46cd8ba979154417794d54baf949fefde1c2146/mkdocs_redirects-1.2.2-py3-none-any.whl", hash = "sha256:7dbfa5647b79a3589da4401403d69494bd1f4ad03b9c15136720367e1f340ed5", size = 6142, upload-time = "2024-11-07T14:57:19.143Z" }, -] - -[[package]] -name = "mkdocstrings" -version = "0.30.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jinja2" }, - { name = "markdown" }, - { name = "markupsafe" }, - { name = "mkdocs" }, - { name = "mkdocs-autorefs" }, - { name = "pymdown-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e2/0a/7e4776217d4802009c8238c75c5345e23014a4706a8414a62c0498858183/mkdocstrings-0.30.0.tar.gz", hash = "sha256:5d8019b9c31ddacd780b6784ffcdd6f21c408f34c0bd1103b5351d609d5b4444", size = 106597, upload-time = "2025-07-22T23:48:45.998Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/de/b4/3c5eac68f31e124a55d255d318c7445840fa1be55e013f507556d6481913/mkdocstrings-0.30.0-py3-none-any.whl", hash = "sha256:ae9e4a0d8c1789697ac776f2e034e2ddd71054ae1cf2c2bb1433ccfd07c226f2", size = 36579, upload-time = "2025-07-22T23:48:44.152Z" }, -] - -[[package]] -name = "mkdocstrings-python" -version = "1.17.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "griffe" }, - { name = "mkdocs-autorefs" }, - { name = "mkdocstrings" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/39/7c/6dfd8ad59c0eebae167168528ed6cad00116f58ef2327686149f7b25d175/mkdocstrings_python-1.17.0.tar.gz", hash = "sha256:c6295962b60542a9c7468a3b515ce8524616ca9f8c1a38c790db4286340ba501", size = 200408, upload-time = "2025-08-14T21:18:14.568Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/ac/b1fcc937f4ecd372f3e857162dea67c45c1e2eedbac80447be516e3372bb/mkdocstrings_python-1.17.0-py3-none-any.whl", hash = "sha256:49903fa355dfecc5ad0b891e78ff5d25d30ffd00846952801bbe8331e123d4b0", size = 124778, upload-time = "2025-08-14T21:18:12.821Z" }, -] - -[[package]] -name = "multitasking" -version = "0.0.12" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/17/0d/74f0293dfd7dcc3837746d0138cbedd60b31701ecc75caec7d3f281feba0/multitasking-0.0.12.tar.gz", hash = "sha256:2fba2fa8ed8c4b85e227c5dd7dc41c7d658de3b6f247927316175a57349b84d1", size = 19984, upload-time = "2025-07-20T21:27:51.636Z" } - -[[package]] -name = "narwhals" -version = "2.2.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/01/8f/6b3d8c19540eaaa50778a8bbbe54e025d3f93aca6cdd5a4de3044c36f83c/narwhals-2.2.0.tar.gz", hash = "sha256:f6a34f2699acabe2c17339c104f0bec28b9f7a55fbc7f8d485d49bea72d12b8a", size = 547070, upload-time = "2025-08-25T07:51:58.904Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/dd/54/1ecca75e51d7da8ca53d1ffa8636ef9077a6eaa31f43ade71360b3e6449a/narwhals-2.2.0-py3-none-any.whl", hash = "sha256:2b5e3d61a486fa4328c286b0c8018b3e781a964947ff725d66ba12f6d5ca3d2a", size = 401021, upload-time = "2025-08-25T07:51:56.97Z" }, -] - -[[package]] -name = "nbclient" -version = "0.10.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jupyter-client" }, - { name = "jupyter-core" }, - { name = "nbformat" }, - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/87/66/7ffd18d58eae90d5721f9f39212327695b749e23ad44b3881744eaf4d9e8/nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193", size = 62424, upload-time = "2024-12-19T10:32:27.164Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/34/6d/e7fa07f03a4a7b221d94b4d586edb754a9b0dc3c9e2c93353e9fa4e0d117/nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d", size = 25434, upload-time = "2024-12-19T10:32:24.139Z" }, -] - -[[package]] -name = "nbconvert" -version = "7.16.6" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "beautifulsoup4" }, - { name = "bleach", extra = ["css"] }, - { name = "defusedxml" }, - { name = "jinja2" }, - { name = "jupyter-core" }, - { name = "jupyterlab-pygments" }, - { name = "markupsafe" }, - { name = "mistune" }, - { name = "nbclient" }, - { name = "nbformat" }, - { name = "packaging" }, - { name = "pandocfilters" }, - { name = "pygments" }, - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a3/59/f28e15fc47ffb73af68a8d9b47367a8630d76e97ae85ad18271b9db96fdf/nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582", size = 857715, upload-time = "2025-01-28T09:29:14.724Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/9a/cd673b2f773a12c992f41309ef81b99da1690426bd2f96957a7ade0d3ed7/nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b", size = 258525, upload-time = "2025-01-28T09:29:12.551Z" }, -] - -[[package]] -name = "nbformat" -version = "5.10.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "fastjsonschema" }, - { name = "jsonschema" }, - { name = "jupyter-core" }, - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/6d/fd/91545e604bc3dad7dca9ed03284086039b294c6b3d75c0d2fa45f9e9caf3/nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a", size = 142749, upload-time = "2024-04-04T11:20:37.371Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a9/82/0340caa499416c78e5d8f5f05947ae4bc3cba53c9f038ab6e9ed964e22f1/nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b", size = 78454, upload-time = "2024-04-04T11:20:34.895Z" }, -] - -[[package]] -name = "nest-asyncio" -version = "1.6.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418, upload-time = "2024-01-21T14:25:19.227Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195, upload-time = "2024-01-21T14:25:17.223Z" }, -] - -[[package]] -name = "notebook-shim" -version = "0.2.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jupyter-server" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/54/d2/92fa3243712b9a3e8bafaf60aac366da1cada3639ca767ff4b5b3654ec28/notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb", size = 13167, upload-time = "2024-02-14T23:35:18.353Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef", size = 13307, upload-time = "2024-02-14T23:35:16.286Z" }, -] - -[[package]] -name = "numba" -version = "0.61.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "llvmlite" }, - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/1c/a0/e21f57604304aa03ebb8e098429222722ad99176a4f979d34af1d1ee80da/numba-0.61.2.tar.gz", hash = "sha256:8750ee147940a6637b80ecf7f95062185ad8726c8c28a2295b8ec1160a196f7d", size = 2820615, upload-time = "2025-04-09T02:58:07.659Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b4/a0/c6b7b9c615cfa3b98c4c63f4316e3f6b3bbe2387740277006551784218cd/numba-0.61.2-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:34fba9406078bac7ab052efbf0d13939426c753ad72946baaa5bf9ae0ebb8dd2", size = 2776626, upload-time = "2025-04-09T02:57:51.857Z" }, - { url = "https://files.pythonhosted.org/packages/92/4a/fe4e3c2ecad72d88f5f8cd04e7f7cff49e718398a2fac02d2947480a00ca/numba-0.61.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4ddce10009bc097b080fc96876d14c051cc0c7679e99de3e0af59014dab7dfe8", size = 2779287, upload-time = "2025-04-09T02:57:53.658Z" }, - { url = "https://files.pythonhosted.org/packages/9a/2d/e518df036feab381c23a624dac47f8445ac55686ec7f11083655eb707da3/numba-0.61.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5b1bb509d01f23d70325d3a5a0e237cbc9544dd50e50588bc581ba860c213546", size = 3885928, upload-time = "2025-04-09T02:57:55.206Z" }, - { url = "https://files.pythonhosted.org/packages/10/0f/23cced68ead67b75d77cfcca3df4991d1855c897ee0ff3fe25a56ed82108/numba-0.61.2-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:48a53a3de8f8793526cbe330f2a39fe9a6638efcbf11bd63f3d2f9757ae345cd", size = 3577115, upload-time = "2025-04-09T02:57:56.818Z" }, - { url = "https://files.pythonhosted.org/packages/68/1d/ddb3e704c5a8fb90142bf9dc195c27db02a08a99f037395503bfbc1d14b3/numba-0.61.2-cp312-cp312-win_amd64.whl", hash = "sha256:97cf4f12c728cf77c9c1d7c23707e4d8fb4632b46275f8f3397de33e5877af18", size = 2831929, upload-time = "2025-04-09T02:57:58.45Z" }, - { url = "https://files.pythonhosted.org/packages/0b/f3/0fe4c1b1f2569e8a18ad90c159298d862f96c3964392a20d74fc628aee44/numba-0.61.2-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:3a10a8fc9afac40b1eac55717cece1b8b1ac0b946f5065c89e00bde646b5b154", size = 2771785, upload-time = "2025-04-09T02:57:59.96Z" }, - { url = "https://files.pythonhosted.org/packages/e9/71/91b277d712e46bd5059f8a5866862ed1116091a7cb03bd2704ba8ebe015f/numba-0.61.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7d3bcada3c9afba3bed413fba45845f2fb9cd0d2b27dd58a1be90257e293d140", size = 2773289, upload-time = "2025-04-09T02:58:01.435Z" }, - { url = "https://files.pythonhosted.org/packages/0d/e0/5ea04e7ad2c39288c0f0f9e8d47638ad70f28e275d092733b5817cf243c9/numba-0.61.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bdbca73ad81fa196bd53dc12e3aaf1564ae036e0c125f237c7644fe64a4928ab", size = 3893918, upload-time = "2025-04-09T02:58:02.933Z" }, - { url = "https://files.pythonhosted.org/packages/17/58/064f4dcb7d7e9412f16ecf80ed753f92297e39f399c905389688cf950b81/numba-0.61.2-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:5f154aaea625fb32cfbe3b80c5456d514d416fcdf79733dd69c0df3a11348e9e", size = 3584056, upload-time = "2025-04-09T02:58:04.538Z" }, - { url = "https://files.pythonhosted.org/packages/af/a4/6d3a0f2d3989e62a18749e1e9913d5fa4910bbb3e3311a035baea6caf26d/numba-0.61.2-cp313-cp313-win_amd64.whl", hash = "sha256:59321215e2e0ac5fa928a8020ab00b8e57cda8a97384963ac0dfa4d4e6aa54e7", size = 2831846, upload-time = "2025-04-09T02:58:06.125Z" }, -] - -[[package]] -name = "numpy" -version = "2.2.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348, upload-time = "2025-05-17T21:34:39.648Z" }, - { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362, upload-time = "2025-05-17T21:35:01.241Z" }, - { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103, upload-time = "2025-05-17T21:35:10.622Z" }, - { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382, upload-time = "2025-05-17T21:35:21.414Z" }, - { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462, upload-time = "2025-05-17T21:35:42.174Z" }, - { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618, upload-time = "2025-05-17T21:36:06.711Z" }, - { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511, upload-time = "2025-05-17T21:36:29.965Z" }, - { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783, upload-time = "2025-05-17T21:36:56.883Z" }, - { url = "https://files.pythonhosted.org/packages/57/0a/72d5a3527c5ebffcd47bde9162c39fae1f90138c961e5296491ce778e682/numpy-2.2.6-cp312-cp312-win32.whl", hash = "sha256:4eeaae00d789f66c7a25ac5f34b71a7035bb474e679f410e5e1a94deb24cf2d4", size = 6246506, upload-time = "2025-05-17T21:37:07.368Z" }, - { url = "https://files.pythonhosted.org/packages/36/fa/8c9210162ca1b88529ab76b41ba02d433fd54fecaf6feb70ef9f124683f1/numpy-2.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:c1f9540be57940698ed329904db803cf7a402f3fc200bfe599334c9bd84a40b2", size = 12614190, upload-time = "2025-05-17T21:37:26.213Z" }, - { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828, upload-time = "2025-05-17T21:37:56.699Z" }, - { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006, upload-time = "2025-05-17T21:38:18.291Z" }, - { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765, upload-time = "2025-05-17T21:38:27.319Z" }, - { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736, upload-time = "2025-05-17T21:38:38.141Z" }, - { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719, upload-time = "2025-05-17T21:38:58.433Z" }, - { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072, upload-time = "2025-05-17T21:39:22.638Z" }, - { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213, upload-time = "2025-05-17T21:39:45.865Z" }, - { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632, upload-time = "2025-05-17T21:40:13.331Z" }, - { url = "https://files.pythonhosted.org/packages/f0/3b/5cba2b1d88760ef86596ad0f3d484b1cbff7c115ae2429678465057c5155/numpy-2.2.6-cp313-cp313-win32.whl", hash = "sha256:5beb72339d9d4fa36522fc63802f469b13cdbe4fdab4a288f0c441b74272ebfd", size = 6244532, upload-time = "2025-05-17T21:43:46.099Z" }, - { url = "https://files.pythonhosted.org/packages/cb/3b/d58c12eafcb298d4e6d0d40216866ab15f59e55d148a5658bb3132311fcf/numpy-2.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:b0544343a702fa80c95ad5d3d608ea3599dd54d4632df855e4c8d24eb6ecfa1c", size = 12610885, upload-time = "2025-05-17T21:44:05.145Z" }, - { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467, upload-time = "2025-05-17T21:40:44Z" }, - { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144, upload-time = "2025-05-17T21:41:05.695Z" }, - { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217, upload-time = "2025-05-17T21:41:15.903Z" }, - { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014, upload-time = "2025-05-17T21:41:27.321Z" }, - { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935, upload-time = "2025-05-17T21:41:49.738Z" }, - { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122, upload-time = "2025-05-17T21:42:14.046Z" }, - { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143, upload-time = "2025-05-17T21:42:37.464Z" }, - { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260, upload-time = "2025-05-17T21:43:05.189Z" }, - { url = "https://files.pythonhosted.org/packages/09/04/f2f83279d287407cf36a7a8053a5abe7be3622a4363337338f2585e4afda/numpy-2.2.6-cp313-cp313t-win32.whl", hash = "sha256:038613e9fb8c72b0a41f025a7e4c3f0b7a1b5d768ece4796b674c8f3fe13efff", size = 6377225, upload-time = "2025-05-17T21:43:16.254Z" }, - { url = "https://files.pythonhosted.org/packages/67/0e/35082d13c09c02c011cf21570543d202ad929d961c02a147493cb0c2bdf5/numpy-2.2.6-cp313-cp313t-win_amd64.whl", hash = "sha256:6031dd6dfecc0cf9f668681a37648373bddd6421fff6c66ec1624eed0180ee06", size = 12771374, upload-time = "2025-05-17T21:43:35.479Z" }, -] - -[[package]] -name = "packaging" -version = "25.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload-time = "2025-04-19T11:48:59.673Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, -] - -[[package]] -name = "paginate" -version = "0.5.7" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ec/46/68dde5b6bc00c1296ec6466ab27dddede6aec9af1b99090e1107091b3b84/paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945", size = 19252, upload-time = "2024-08-25T14:17:24.139Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591", size = 13746, upload-time = "2024-08-25T14:17:22.55Z" }, -] - -[[package]] -name = "pandas" -version = "2.3.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, - { name = "python-dateutil" }, - { name = "pytz" }, - { name = "tzdata" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/79/8e/0e90233ac205ad182bd6b422532695d2b9414944a280488105d598c70023/pandas-2.3.2.tar.gz", hash = "sha256:ab7b58f8f82706890924ccdfb5f48002b83d2b5a3845976a9fb705d36c34dcdb", size = 4488684, upload-time = "2025-08-21T10:28:29.257Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/db/614c20fb7a85a14828edd23f1c02db58a30abf3ce76f38806155d160313c/pandas-2.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fbb977f802156e7a3f829e9d1d5398f6192375a3e2d1a9ee0803e35fe70a2b9", size = 11587652, upload-time = "2025-08-21T10:27:15.888Z" }, - { url = "https://files.pythonhosted.org/packages/99/b0/756e52f6582cade5e746f19bad0517ff27ba9c73404607c0306585c201b3/pandas-2.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1b9b52693123dd234b7c985c68b709b0b009f4521000d0525f2b95c22f15944b", size = 10717686, upload-time = "2025-08-21T10:27:18.486Z" }, - { url = "https://files.pythonhosted.org/packages/37/4c/dd5ccc1e357abfeee8353123282de17997f90ff67855f86154e5a13b81e5/pandas-2.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bd281310d4f412733f319a5bc552f86d62cddc5f51d2e392c8787335c994175", size = 11278722, upload-time = "2025-08-21T10:27:21.149Z" }, - { url = "https://files.pythonhosted.org/packages/d3/a4/f7edcfa47e0a88cda0be8b068a5bae710bf264f867edfdf7b71584ace362/pandas-2.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96d31a6b4354e3b9b8a2c848af75d31da390657e3ac6f30c05c82068b9ed79b9", size = 11987803, upload-time = "2025-08-21T10:27:23.767Z" }, - { url = "https://files.pythonhosted.org/packages/f6/61/1bce4129f93ab66f1c68b7ed1c12bac6a70b1b56c5dab359c6bbcd480b52/pandas-2.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:df4df0b9d02bb873a106971bb85d448378ef14b86ba96f035f50bbd3688456b4", size = 12766345, upload-time = "2025-08-21T10:27:26.6Z" }, - { url = "https://files.pythonhosted.org/packages/8e/46/80d53de70fee835531da3a1dae827a1e76e77a43ad22a8cd0f8142b61587/pandas-2.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:213a5adf93d020b74327cb2c1b842884dbdd37f895f42dcc2f09d451d949f811", size = 13439314, upload-time = "2025-08-21T10:27:29.213Z" }, - { url = "https://files.pythonhosted.org/packages/28/30/8114832daff7489f179971dbc1d854109b7f4365a546e3ea75b6516cea95/pandas-2.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:8c13b81a9347eb8c7548f53fd9a4f08d4dfe996836543f805c987bafa03317ae", size = 10983326, upload-time = "2025-08-21T10:27:31.901Z" }, - { url = "https://files.pythonhosted.org/packages/27/64/a2f7bf678af502e16b472527735d168b22b7824e45a4d7e96a4fbb634b59/pandas-2.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0c6ecbac99a354a051ef21c5307601093cb9e0f4b1855984a084bfec9302699e", size = 11531061, upload-time = "2025-08-21T10:27:34.647Z" }, - { url = "https://files.pythonhosted.org/packages/54/4c/c3d21b2b7769ef2f4c2b9299fcadd601efa6729f1357a8dbce8dd949ed70/pandas-2.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c6f048aa0fd080d6a06cc7e7537c09b53be6642d330ac6f54a600c3ace857ee9", size = 10668666, upload-time = "2025-08-21T10:27:37.203Z" }, - { url = "https://files.pythonhosted.org/packages/50/e2/f775ba76ecfb3424d7f5862620841cf0edb592e9abd2d2a5387d305fe7a8/pandas-2.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0064187b80a5be6f2f9c9d6bdde29372468751dfa89f4211a3c5871854cfbf7a", size = 11332835, upload-time = "2025-08-21T10:27:40.188Z" }, - { url = "https://files.pythonhosted.org/packages/8f/52/0634adaace9be2d8cac9ef78f05c47f3a675882e068438b9d7ec7ef0c13f/pandas-2.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ac8c320bded4718b298281339c1a50fb00a6ba78cb2a63521c39bec95b0209b", size = 12057211, upload-time = "2025-08-21T10:27:43.117Z" }, - { url = "https://files.pythonhosted.org/packages/0b/9d/2df913f14b2deb9c748975fdb2491da1a78773debb25abbc7cbc67c6b549/pandas-2.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:114c2fe4f4328cf98ce5716d1532f3ab79c5919f95a9cfee81d9140064a2e4d6", size = 12749277, upload-time = "2025-08-21T10:27:45.474Z" }, - { url = "https://files.pythonhosted.org/packages/87/af/da1a2417026bd14d98c236dba88e39837182459d29dcfcea510b2ac9e8a1/pandas-2.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:48fa91c4dfb3b2b9bfdb5c24cd3567575f4e13f9636810462ffed8925352be5a", size = 13415256, upload-time = "2025-08-21T10:27:49.885Z" }, - { url = "https://files.pythonhosted.org/packages/22/3c/f2af1ce8840ef648584a6156489636b5692c162771918aa95707c165ad2b/pandas-2.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:12d039facec710f7ba305786837d0225a3444af7bbd9c15c32ca2d40d157ed8b", size = 10982579, upload-time = "2025-08-21T10:28:08.435Z" }, - { url = "https://files.pythonhosted.org/packages/f3/98/8df69c4097a6719e357dc249bf437b8efbde808038268e584421696cbddf/pandas-2.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:c624b615ce97864eb588779ed4046186f967374185c047070545253a52ab2d57", size = 12028163, upload-time = "2025-08-21T10:27:52.232Z" }, - { url = "https://files.pythonhosted.org/packages/0e/23/f95cbcbea319f349e10ff90db488b905c6883f03cbabd34f6b03cbc3c044/pandas-2.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0cee69d583b9b128823d9514171cabb6861e09409af805b54459bd0c821a35c2", size = 11391860, upload-time = "2025-08-21T10:27:54.673Z" }, - { url = "https://files.pythonhosted.org/packages/ad/1b/6a984e98c4abee22058aa75bfb8eb90dce58cf8d7296f8bc56c14bc330b0/pandas-2.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2319656ed81124982900b4c37f0e0c58c015af9a7bbc62342ba5ad07ace82ba9", size = 11309830, upload-time = "2025-08-21T10:27:56.957Z" }, - { url = "https://files.pythonhosted.org/packages/15/d5/f0486090eb18dd8710bf60afeaf638ba6817047c0c8ae5c6a25598665609/pandas-2.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b37205ad6f00d52f16b6d09f406434ba928c1a1966e2771006a9033c736d30d2", size = 11883216, upload-time = "2025-08-21T10:27:59.302Z" }, - { url = "https://files.pythonhosted.org/packages/10/86/692050c119696da19e20245bbd650d8dfca6ceb577da027c3a73c62a047e/pandas-2.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:837248b4fc3a9b83b9c6214699a13f069dc13510a6a6d7f9ba33145d2841a012", size = 12699743, upload-time = "2025-08-21T10:28:02.447Z" }, - { url = "https://files.pythonhosted.org/packages/cd/d7/612123674d7b17cf345aad0a10289b2a384bff404e0463a83c4a3a59d205/pandas-2.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d2c3554bd31b731cd6490d94a28f3abb8dd770634a9e06eb6d2911b9827db370", size = 13186141, upload-time = "2025-08-21T10:28:05.377Z" }, -] - -[[package]] -name = "pandas-ta" -version = "0.4.71b0" -source = { editable = "." } -dependencies = [ - { name = "numba" }, - { name = "numpy" }, - { name = "pandas" }, - { name = "tqdm" }, -] - -[package.dev-dependencies] -dev = [ - { name = "bokeh" }, - { name = "cryptography" }, - { name = "ipython" }, - { name = "jupyterlab" }, - { name = "matplotlib" }, - { name = "pytest" }, - { name = "requests" }, - { name = "ta-lib" }, - { name = "yfinance" }, -] -docs = [ - { name = "mkdocs" }, - { name = "mkdocs-include-markdown-plugin" }, - { name = "mkdocs-macros-plugin" }, - { name = "mkdocs-material" }, - { name = "mkdocs-minify-plugin" }, - { name = "mkdocs-plotly-plugin" }, - { name = "mkdocs-redirects" }, - { name = "mkdocstrings-python" }, - { name = "ruff" }, -] - -[package.metadata] -requires-dist = [ - { name = "numba", specifier = "==0.61.2" }, - { name = "numpy", specifier = ">=2.2.6" }, - { name = "pandas", specifier = ">=2.3.2" }, - { name = "tqdm", specifier = ">=4.67.1" }, -] - -[package.metadata.requires-dev] -dev = [ - { name = "bokeh", specifier = ">=3.7.3" }, - { name = "cryptography", specifier = ">=45.0.6" }, - { name = "ipython", specifier = ">=9.4.0" }, - { name = "jupyterlab", specifier = ">=4.4.6" }, - { name = "matplotlib", specifier = ">=3.10.5" }, - { name = "pytest", specifier = ">=8.4.1" }, - { name = "requests", specifier = ">=2.32.5" }, - { name = "ta-lib", specifier = "==0.6.4" }, - { name = "yfinance", specifier = ">=0.2.65" }, -] -docs = [ - { name = "mkdocs", specifier = ">=1.6.1" }, - { name = "mkdocs-include-markdown-plugin", specifier = ">=7.1.6" }, - { name = "mkdocs-macros-plugin", specifier = ">=1.3.9" }, - { name = "mkdocs-material", specifier = ">=9.6.18" }, - { name = "mkdocs-minify-plugin", specifier = ">=0.8.0" }, - { name = "mkdocs-plotly-plugin", specifier = ">=0.1.3" }, - { name = "mkdocs-redirects", specifier = ">=1.2.2" }, - { name = "mkdocstrings-python", specifier = ">=1.17.0" }, - { name = "ruff", specifier = ">=0.12.10" }, -] - -[[package]] -name = "pandocfilters" -version = "1.5.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/70/6f/3dd4940bbe001c06a65f88e36bad298bc7a0de5036115639926b0c5c0458/pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e", size = 8454, upload-time = "2024-01-18T20:08:13.726Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/af/4fbc8cab944db5d21b7e2a5b8e9211a03a79852b1157e2c102fcc61ac440/pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc", size = 8663, upload-time = "2024-01-18T20:08:11.28Z" }, -] - -[[package]] -name = "parso" -version = "0.8.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d4/de/53e0bcf53d13e005bd8c92e7855142494f41171b34c2536b86187474184d/parso-0.8.5.tar.gz", hash = "sha256:034d7354a9a018bdce352f48b2a8a450f05e9d6ee85db84764e9b6bd96dafe5a", size = 401205, upload-time = "2025-08-23T15:15:28.028Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/16/32/f8e3c85d1d5250232a5d3477a2a28cc291968ff175caeadaf3cc19ce0e4a/parso-0.8.5-py2.py3-none-any.whl", hash = "sha256:646204b5ee239c396d040b90f9e272e9a8017c630092bf59980beb62fd033887", size = 106668, upload-time = "2025-08-23T15:15:25.663Z" }, -] - -[[package]] -name = "pathspec" -version = "0.12.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043, upload-time = "2023-12-10T22:30:45Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload-time = "2023-12-10T22:30:43.14Z" }, -] - -[[package]] -name = "peewee" -version = "3.18.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/04/89/76f6f1b744c8608e0d416b588b9d63c2a500ff800065ae610f7c80f532d6/peewee-3.18.2.tar.gz", hash = "sha256:77a54263eb61aff2ea72f63d2eeb91b140c25c1884148e28e4c0f7c4f64996a0", size = 949220, upload-time = "2025-07-08T12:52:03.941Z" } - -[[package]] -name = "pexpect" -version = "4.9.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "ptyprocess" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload-time = "2023-11-25T09:07:26.339Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload-time = "2023-11-25T06:56:14.81Z" }, -] - -[[package]] -name = "pillow" -version = "11.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/d0d6dea55cd152ce3d6767bb38a8fc10e33796ba4ba210cbab9354b6d238/pillow-11.3.0.tar.gz", hash = "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523", size = 47113069, upload-time = "2025-07-01T09:16:30.666Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/40/fe/1bc9b3ee13f68487a99ac9529968035cca2f0a51ec36892060edcc51d06a/pillow-11.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdae223722da47b024b867c1ea0be64e0df702c5e0a60e27daad39bf960dd1e4", size = 5278800, upload-time = "2025-07-01T09:14:17.648Z" }, - { url = "https://files.pythonhosted.org/packages/2c/32/7e2ac19b5713657384cec55f89065fb306b06af008cfd87e572035b27119/pillow-11.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:921bd305b10e82b4d1f5e802b6850677f965d8394203d182f078873851dada69", size = 4686296, upload-time = "2025-07-01T09:14:19.828Z" }, - { url = "https://files.pythonhosted.org/packages/8e/1e/b9e12bbe6e4c2220effebc09ea0923a07a6da1e1f1bfbc8d7d29a01ce32b/pillow-11.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb76541cba2f958032d79d143b98a3a6b3ea87f0959bbe256c0b5e416599fd5d", size = 5871726, upload-time = "2025-07-03T13:10:04.448Z" }, - { url = "https://files.pythonhosted.org/packages/8d/33/e9200d2bd7ba00dc3ddb78df1198a6e80d7669cce6c2bdbeb2530a74ec58/pillow-11.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67172f2944ebba3d4a7b54f2e95c786a3a50c21b88456329314caaa28cda70f6", size = 7644652, upload-time = "2025-07-03T13:10:10.391Z" }, - { url = "https://files.pythonhosted.org/packages/41/f1/6f2427a26fc683e00d985bc391bdd76d8dd4e92fac33d841127eb8fb2313/pillow-11.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f07ed9f56a3b9b5f49d3661dc9607484e85c67e27f3e8be2c7d28ca032fec7", size = 5977787, upload-time = "2025-07-01T09:14:21.63Z" }, - { url = "https://files.pythonhosted.org/packages/e4/c9/06dd4a38974e24f932ff5f98ea3c546ce3f8c995d3f0985f8e5ba48bba19/pillow-11.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:676b2815362456b5b3216b4fd5bd89d362100dc6f4945154ff172e206a22c024", size = 6645236, upload-time = "2025-07-01T09:14:23.321Z" }, - { url = "https://files.pythonhosted.org/packages/40/e7/848f69fb79843b3d91241bad658e9c14f39a32f71a301bcd1d139416d1be/pillow-11.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3e184b2f26ff146363dd07bde8b711833d7b0202e27d13540bfe2e35a323a809", size = 6086950, upload-time = "2025-07-01T09:14:25.237Z" }, - { url = "https://files.pythonhosted.org/packages/0b/1a/7cff92e695a2a29ac1958c2a0fe4c0b2393b60aac13b04a4fe2735cad52d/pillow-11.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6be31e3fc9a621e071bc17bb7de63b85cbe0bfae91bb0363c893cbe67247780d", size = 6723358, upload-time = "2025-07-01T09:14:27.053Z" }, - { url = "https://files.pythonhosted.org/packages/26/7d/73699ad77895f69edff76b0f332acc3d497f22f5d75e5360f78cbcaff248/pillow-11.3.0-cp312-cp312-win32.whl", hash = "sha256:7b161756381f0918e05e7cb8a371fff367e807770f8fe92ecb20d905d0e1c149", size = 6275079, upload-time = "2025-07-01T09:14:30.104Z" }, - { url = "https://files.pythonhosted.org/packages/8c/ce/e7dfc873bdd9828f3b6e5c2bbb74e47a98ec23cc5c74fc4e54462f0d9204/pillow-11.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a6444696fce635783440b7f7a9fc24b3ad10a9ea3f0ab66c5905be1c19ccf17d", size = 6986324, upload-time = "2025-07-01T09:14:31.899Z" }, - { url = "https://files.pythonhosted.org/packages/16/8f/b13447d1bf0b1f7467ce7d86f6e6edf66c0ad7cf44cf5c87a37f9bed9936/pillow-11.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:2aceea54f957dd4448264f9bf40875da0415c83eb85f55069d89c0ed436e3542", size = 2423067, upload-time = "2025-07-01T09:14:33.709Z" }, - { url = "https://files.pythonhosted.org/packages/1e/93/0952f2ed8db3a5a4c7a11f91965d6184ebc8cd7cbb7941a260d5f018cd2d/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:1c627742b539bba4309df89171356fcb3cc5a9178355b2727d1b74a6cf155fbd", size = 2128328, upload-time = "2025-07-01T09:14:35.276Z" }, - { url = "https://files.pythonhosted.org/packages/4b/e8/100c3d114b1a0bf4042f27e0f87d2f25e857e838034e98ca98fe7b8c0a9c/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:30b7c02f3899d10f13d7a48163c8969e4e653f8b43416d23d13d1bbfdc93b9f8", size = 2170652, upload-time = "2025-07-01T09:14:37.203Z" }, - { url = "https://files.pythonhosted.org/packages/aa/86/3f758a28a6e381758545f7cdb4942e1cb79abd271bea932998fc0db93cb6/pillow-11.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7859a4cc7c9295f5838015d8cc0a9c215b77e43d07a25e460f35cf516df8626f", size = 2227443, upload-time = "2025-07-01T09:14:39.344Z" }, - { url = "https://files.pythonhosted.org/packages/01/f4/91d5b3ffa718df2f53b0dc109877993e511f4fd055d7e9508682e8aba092/pillow-11.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ec1ee50470b0d050984394423d96325b744d55c701a439d2bd66089bff963d3c", size = 5278474, upload-time = "2025-07-01T09:14:41.843Z" }, - { url = "https://files.pythonhosted.org/packages/f9/0e/37d7d3eca6c879fbd9dba21268427dffda1ab00d4eb05b32923d4fbe3b12/pillow-11.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7db51d222548ccfd274e4572fdbf3e810a5e66b00608862f947b163e613b67dd", size = 4686038, upload-time = "2025-07-01T09:14:44.008Z" }, - { url = "https://files.pythonhosted.org/packages/ff/b0/3426e5c7f6565e752d81221af9d3676fdbb4f352317ceafd42899aaf5d8a/pillow-11.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2d6fcc902a24ac74495df63faad1884282239265c6839a0a6416d33faedfae7e", size = 5864407, upload-time = "2025-07-03T13:10:15.628Z" }, - { url = "https://files.pythonhosted.org/packages/fc/c1/c6c423134229f2a221ee53f838d4be9d82bab86f7e2f8e75e47b6bf6cd77/pillow-11.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0f5d8f4a08090c6d6d578351a2b91acf519a54986c055af27e7a93feae6d3f1", size = 7639094, upload-time = "2025-07-03T13:10:21.857Z" }, - { url = "https://files.pythonhosted.org/packages/ba/c9/09e6746630fe6372c67c648ff9deae52a2bc20897d51fa293571977ceb5d/pillow-11.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c37d8ba9411d6003bba9e518db0db0c58a680ab9fe5179f040b0463644bc9805", size = 5973503, upload-time = "2025-07-01T09:14:45.698Z" }, - { url = "https://files.pythonhosted.org/packages/d5/1c/a2a29649c0b1983d3ef57ee87a66487fdeb45132df66ab30dd37f7dbe162/pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13f87d581e71d9189ab21fe0efb5a23e9f28552d5be6979e84001d3b8505abe8", size = 6642574, upload-time = "2025-07-01T09:14:47.415Z" }, - { url = "https://files.pythonhosted.org/packages/36/de/d5cc31cc4b055b6c6fd990e3e7f0f8aaf36229a2698501bcb0cdf67c7146/pillow-11.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:023f6d2d11784a465f09fd09a34b150ea4672e85fb3d05931d89f373ab14abb2", size = 6084060, upload-time = "2025-07-01T09:14:49.636Z" }, - { url = "https://files.pythonhosted.org/packages/d5/ea/502d938cbaeec836ac28a9b730193716f0114c41325db428e6b280513f09/pillow-11.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:45dfc51ac5975b938e9809451c51734124e73b04d0f0ac621649821a63852e7b", size = 6721407, upload-time = "2025-07-01T09:14:51.962Z" }, - { url = "https://files.pythonhosted.org/packages/45/9c/9c5e2a73f125f6cbc59cc7087c8f2d649a7ae453f83bd0362ff7c9e2aee2/pillow-11.3.0-cp313-cp313-win32.whl", hash = "sha256:a4d336baed65d50d37b88ca5b60c0fa9d81e3a87d4a7930d3880d1624d5b31f3", size = 6273841, upload-time = "2025-07-01T09:14:54.142Z" }, - { url = "https://files.pythonhosted.org/packages/23/85/397c73524e0cd212067e0c969aa245b01d50183439550d24d9f55781b776/pillow-11.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bce5c4fd0921f99d2e858dc4d4d64193407e1b99478bc5cacecba2311abde51", size = 6978450, upload-time = "2025-07-01T09:14:56.436Z" }, - { url = "https://files.pythonhosted.org/packages/17/d2/622f4547f69cd173955194b78e4d19ca4935a1b0f03a302d655c9f6aae65/pillow-11.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:1904e1264881f682f02b7f8167935cce37bc97db457f8e7849dc3a6a52b99580", size = 2423055, upload-time = "2025-07-01T09:14:58.072Z" }, - { url = "https://files.pythonhosted.org/packages/dd/80/a8a2ac21dda2e82480852978416cfacd439a4b490a501a288ecf4fe2532d/pillow-11.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4c834a3921375c48ee6b9624061076bc0a32a60b5532b322cc0ea64e639dd50e", size = 5281110, upload-time = "2025-07-01T09:14:59.79Z" }, - { url = "https://files.pythonhosted.org/packages/44/d6/b79754ca790f315918732e18f82a8146d33bcd7f4494380457ea89eb883d/pillow-11.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5e05688ccef30ea69b9317a9ead994b93975104a677a36a8ed8106be9260aa6d", size = 4689547, upload-time = "2025-07-01T09:15:01.648Z" }, - { url = "https://files.pythonhosted.org/packages/49/20/716b8717d331150cb00f7fdd78169c01e8e0c219732a78b0e59b6bdb2fd6/pillow-11.3.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1019b04af07fc0163e2810167918cb5add8d74674b6267616021ab558dc98ced", size = 5901554, upload-time = "2025-07-03T13:10:27.018Z" }, - { url = "https://files.pythonhosted.org/packages/74/cf/a9f3a2514a65bb071075063a96f0a5cf949c2f2fce683c15ccc83b1c1cab/pillow-11.3.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f944255db153ebb2b19c51fe85dd99ef0ce494123f21b9db4877ffdfc5590c7c", size = 7669132, upload-time = "2025-07-03T13:10:33.01Z" }, - { url = "https://files.pythonhosted.org/packages/98/3c/da78805cbdbee9cb43efe8261dd7cc0b4b93f2ac79b676c03159e9db2187/pillow-11.3.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f85acb69adf2aaee8b7da124efebbdb959a104db34d3a2cb0f3793dbae422a8", size = 6005001, upload-time = "2025-07-01T09:15:03.365Z" }, - { url = "https://files.pythonhosted.org/packages/6c/fa/ce044b91faecf30e635321351bba32bab5a7e034c60187fe9698191aef4f/pillow-11.3.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f6ecbeff5005399bb48d198f098a9b4b6bdf27b8487c7f38ca16eeb070cd59", size = 6668814, upload-time = "2025-07-01T09:15:05.655Z" }, - { url = "https://files.pythonhosted.org/packages/7b/51/90f9291406d09bf93686434f9183aba27b831c10c87746ff49f127ee80cb/pillow-11.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a7bc6e6fd0395bc052f16b1a8670859964dbd7003bd0af2ff08342eb6e442cfe", size = 6113124, upload-time = "2025-07-01T09:15:07.358Z" }, - { url = "https://files.pythonhosted.org/packages/cd/5a/6fec59b1dfb619234f7636d4157d11fb4e196caeee220232a8d2ec48488d/pillow-11.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:83e1b0161c9d148125083a35c1c5a89db5b7054834fd4387499e06552035236c", size = 6747186, upload-time = "2025-07-01T09:15:09.317Z" }, - { url = "https://files.pythonhosted.org/packages/49/6b/00187a044f98255225f172de653941e61da37104a9ea60e4f6887717e2b5/pillow-11.3.0-cp313-cp313t-win32.whl", hash = "sha256:2a3117c06b8fb646639dce83694f2f9eac405472713fcb1ae887469c0d4f6788", size = 6277546, upload-time = "2025-07-01T09:15:11.311Z" }, - { url = "https://files.pythonhosted.org/packages/e8/5c/6caaba7e261c0d75bab23be79f1d06b5ad2a2ae49f028ccec801b0e853d6/pillow-11.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:857844335c95bea93fb39e0fa2726b4d9d758850b34075a7e3ff4f4fa3aa3b31", size = 6985102, upload-time = "2025-07-01T09:15:13.164Z" }, - { url = "https://files.pythonhosted.org/packages/f3/7e/b623008460c09a0cb38263c93b828c666493caee2eb34ff67f778b87e58c/pillow-11.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:8797edc41f3e8536ae4b10897ee2f637235c94f27404cac7297f7b607dd0716e", size = 2424803, upload-time = "2025-07-01T09:15:15.695Z" }, - { url = "https://files.pythonhosted.org/packages/73/f4/04905af42837292ed86cb1b1dabe03dce1edc008ef14c473c5c7e1443c5d/pillow-11.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d9da3df5f9ea2a89b81bb6087177fb1f4d1c7146d583a3fe5c672c0d94e55e12", size = 5278520, upload-time = "2025-07-01T09:15:17.429Z" }, - { url = "https://files.pythonhosted.org/packages/41/b0/33d79e377a336247df6348a54e6d2a2b85d644ca202555e3faa0cf811ecc/pillow-11.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0b275ff9b04df7b640c59ec5a3cb113eefd3795a8df80bac69646ef699c6981a", size = 4686116, upload-time = "2025-07-01T09:15:19.423Z" }, - { url = "https://files.pythonhosted.org/packages/49/2d/ed8bc0ab219ae8768f529597d9509d184fe8a6c4741a6864fea334d25f3f/pillow-11.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0743841cabd3dba6a83f38a92672cccbd69af56e3e91777b0ee7f4dba4385632", size = 5864597, upload-time = "2025-07-03T13:10:38.404Z" }, - { url = "https://files.pythonhosted.org/packages/b5/3d/b932bb4225c80b58dfadaca9d42d08d0b7064d2d1791b6a237f87f661834/pillow-11.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2465a69cf967b8b49ee1b96d76718cd98c4e925414ead59fdf75cf0fd07df673", size = 7638246, upload-time = "2025-07-03T13:10:44.987Z" }, - { url = "https://files.pythonhosted.org/packages/09/b5/0487044b7c096f1b48f0d7ad416472c02e0e4bf6919541b111efd3cae690/pillow-11.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41742638139424703b4d01665b807c6468e23e699e8e90cffefe291c5832b027", size = 5973336, upload-time = "2025-07-01T09:15:21.237Z" }, - { url = "https://files.pythonhosted.org/packages/a8/2d/524f9318f6cbfcc79fbc004801ea6b607ec3f843977652fdee4857a7568b/pillow-11.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:93efb0b4de7e340d99057415c749175e24c8864302369e05914682ba642e5d77", size = 6642699, upload-time = "2025-07-01T09:15:23.186Z" }, - { url = "https://files.pythonhosted.org/packages/6f/d2/a9a4f280c6aefedce1e8f615baaa5474e0701d86dd6f1dede66726462bbd/pillow-11.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7966e38dcd0fa11ca390aed7c6f20454443581d758242023cf36fcb319b1a874", size = 6083789, upload-time = "2025-07-01T09:15:25.1Z" }, - { url = "https://files.pythonhosted.org/packages/fe/54/86b0cd9dbb683a9d5e960b66c7379e821a19be4ac5810e2e5a715c09a0c0/pillow-11.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:98a9afa7b9007c67ed84c57c9e0ad86a6000da96eaa638e4f8abe5b65ff83f0a", size = 6720386, upload-time = "2025-07-01T09:15:27.378Z" }, - { url = "https://files.pythonhosted.org/packages/e7/95/88efcaf384c3588e24259c4203b909cbe3e3c2d887af9e938c2022c9dd48/pillow-11.3.0-cp314-cp314-win32.whl", hash = "sha256:02a723e6bf909e7cea0dac1b0e0310be9d7650cd66222a5f1c571455c0a45214", size = 6370911, upload-time = "2025-07-01T09:15:29.294Z" }, - { url = "https://files.pythonhosted.org/packages/2e/cc/934e5820850ec5eb107e7b1a72dd278140731c669f396110ebc326f2a503/pillow-11.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:a418486160228f64dd9e9efcd132679b7a02a5f22c982c78b6fc7dab3fefb635", size = 7117383, upload-time = "2025-07-01T09:15:31.128Z" }, - { url = "https://files.pythonhosted.org/packages/d6/e9/9c0a616a71da2a5d163aa37405e8aced9a906d574b4a214bede134e731bc/pillow-11.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:155658efb5e044669c08896c0c44231c5e9abcaadbc5cd3648df2f7c0b96b9a6", size = 2511385, upload-time = "2025-07-01T09:15:33.328Z" }, - { url = "https://files.pythonhosted.org/packages/1a/33/c88376898aff369658b225262cd4f2659b13e8178e7534df9e6e1fa289f6/pillow-11.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:59a03cdf019efbfeeed910bf79c7c93255c3d54bc45898ac2a4140071b02b4ae", size = 5281129, upload-time = "2025-07-01T09:15:35.194Z" }, - { url = "https://files.pythonhosted.org/packages/1f/70/d376247fb36f1844b42910911c83a02d5544ebd2a8bad9efcc0f707ea774/pillow-11.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f8a5827f84d973d8636e9dc5764af4f0cf2318d26744b3d902931701b0d46653", size = 4689580, upload-time = "2025-07-01T09:15:37.114Z" }, - { url = "https://files.pythonhosted.org/packages/eb/1c/537e930496149fbac69efd2fc4329035bbe2e5475b4165439e3be9cb183b/pillow-11.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ee92f2fd10f4adc4b43d07ec5e779932b4eb3dbfbc34790ada5a6669bc095aa6", size = 5902860, upload-time = "2025-07-03T13:10:50.248Z" }, - { url = "https://files.pythonhosted.org/packages/bd/57/80f53264954dcefeebcf9dae6e3eb1daea1b488f0be8b8fef12f79a3eb10/pillow-11.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c96d333dcf42d01f47b37e0979b6bd73ec91eae18614864622d9b87bbd5bbf36", size = 7670694, upload-time = "2025-07-03T13:10:56.432Z" }, - { url = "https://files.pythonhosted.org/packages/70/ff/4727d3b71a8578b4587d9c276e90efad2d6fe0335fd76742a6da08132e8c/pillow-11.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c96f993ab8c98460cd0c001447bff6194403e8b1d7e149ade5f00594918128b", size = 6005888, upload-time = "2025-07-01T09:15:39.436Z" }, - { url = "https://files.pythonhosted.org/packages/05/ae/716592277934f85d3be51d7256f3636672d7b1abfafdc42cf3f8cbd4b4c8/pillow-11.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41342b64afeba938edb034d122b2dda5db2139b9a4af999729ba8818e0056477", size = 6670330, upload-time = "2025-07-01T09:15:41.269Z" }, - { url = "https://files.pythonhosted.org/packages/e7/bb/7fe6cddcc8827b01b1a9766f5fdeb7418680744f9082035bdbabecf1d57f/pillow-11.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:068d9c39a2d1b358eb9f245ce7ab1b5c3246c7c8c7d9ba58cfa5b43146c06e50", size = 6114089, upload-time = "2025-07-01T09:15:43.13Z" }, - { url = "https://files.pythonhosted.org/packages/8b/f5/06bfaa444c8e80f1a8e4bff98da9c83b37b5be3b1deaa43d27a0db37ef84/pillow-11.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a1bc6ba083b145187f648b667e05a2534ecc4b9f2784c2cbe3089e44868f2b9b", size = 6748206, upload-time = "2025-07-01T09:15:44.937Z" }, - { url = "https://files.pythonhosted.org/packages/f0/77/bc6f92a3e8e6e46c0ca78abfffec0037845800ea38c73483760362804c41/pillow-11.3.0-cp314-cp314t-win32.whl", hash = "sha256:118ca10c0d60b06d006be10a501fd6bbdfef559251ed31b794668ed569c87e12", size = 6377370, upload-time = "2025-07-01T09:15:46.673Z" }, - { url = "https://files.pythonhosted.org/packages/4a/82/3a721f7d69dca802befb8af08b7c79ebcab461007ce1c18bd91a5d5896f9/pillow-11.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8924748b688aa210d79883357d102cd64690e56b923a186f35a82cbc10f997db", size = 7121500, upload-time = "2025-07-01T09:15:48.512Z" }, - { url = "https://files.pythonhosted.org/packages/89/c7/5572fa4a3f45740eaab6ae86fcdf7195b55beac1371ac8c619d880cfe948/pillow-11.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:79ea0d14d3ebad43ec77ad5272e6ff9bba5b679ef73375ea760261207fa8e0aa", size = 2512835, upload-time = "2025-07-01T09:15:50.399Z" }, -] - -[[package]] -name = "platformdirs" -version = "4.3.8" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fe/8b/3c73abc9c759ecd3f1f7ceff6685840859e8070c4d947c93fae71f6a0bf2/platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", size = 21362, upload-time = "2025-05-07T22:47:42.121Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4", size = 18567, upload-time = "2025-05-07T22:47:40.376Z" }, -] - -[[package]] -name = "pluggy" -version = "1.6.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, -] - -[[package]] -name = "prometheus-client" -version = "0.22.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5e/cf/40dde0a2be27cc1eb41e333d1a674a74ce8b8b0457269cc640fd42b07cf7/prometheus_client-0.22.1.tar.gz", hash = "sha256:190f1331e783cf21eb60bca559354e0a4d4378facecf78f5428c39b675d20d28", size = 69746, upload-time = "2025-06-02T14:29:01.152Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/32/ae/ec06af4fe3ee72d16973474f122541746196aaa16cea6f66d18b963c6177/prometheus_client-0.22.1-py3-none-any.whl", hash = "sha256:cca895342e308174341b2cbf99a56bef291fbc0ef7b9e5412a0f26d653ba7094", size = 58694, upload-time = "2025-06-02T14:29:00.068Z" }, -] - -[[package]] -name = "prompt-toolkit" -version = "3.0.51" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "wcwidth" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/bb/6e/9d084c929dfe9e3bfe0c6a47e31f78a25c54627d64a66e884a8bf5474f1c/prompt_toolkit-3.0.51.tar.gz", hash = "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed", size = 428940, upload-time = "2025-04-15T09:18:47.731Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ce/4f/5249960887b1fbe561d9ff265496d170b55a735b76724f10ef19f9e40716/prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07", size = 387810, upload-time = "2025-04-15T09:18:44.753Z" }, -] - -[[package]] -name = "protobuf" -version = "6.32.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c0/df/fb4a8eeea482eca989b51cffd274aac2ee24e825f0bf3cbce5281fa1567b/protobuf-6.32.0.tar.gz", hash = "sha256:a81439049127067fc49ec1d36e25c6ee1d1a2b7be930675f919258d03c04e7d2", size = 440614, upload-time = "2025-08-14T21:21:25.015Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/33/18/df8c87da2e47f4f1dcc5153a81cd6bca4e429803f4069a299e236e4dd510/protobuf-6.32.0-cp310-abi3-win32.whl", hash = "sha256:84f9e3c1ff6fb0308dbacb0950d8aa90694b0d0ee68e75719cb044b7078fe741", size = 424409, upload-time = "2025-08-14T21:21:12.366Z" }, - { url = "https://files.pythonhosted.org/packages/e1/59/0a820b7310f8139bd8d5a9388e6a38e1786d179d6f33998448609296c229/protobuf-6.32.0-cp310-abi3-win_amd64.whl", hash = "sha256:a8bdbb2f009cfc22a36d031f22a625a38b615b5e19e558a7b756b3279723e68e", size = 435735, upload-time = "2025-08-14T21:21:15.046Z" }, - { url = "https://files.pythonhosted.org/packages/cc/5b/0d421533c59c789e9c9894683efac582c06246bf24bb26b753b149bd88e4/protobuf-6.32.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:d52691e5bee6c860fff9a1c86ad26a13afbeb4b168cd4445c922b7e2cf85aaf0", size = 426449, upload-time = "2025-08-14T21:21:16.687Z" }, - { url = "https://files.pythonhosted.org/packages/ec/7b/607764ebe6c7a23dcee06e054fd1de3d5841b7648a90fd6def9a3bb58c5e/protobuf-6.32.0-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:501fe6372fd1c8ea2a30b4d9be8f87955a64d6be9c88a973996cef5ef6f0abf1", size = 322869, upload-time = "2025-08-14T21:21:18.282Z" }, - { url = "https://files.pythonhosted.org/packages/40/01/2e730bd1c25392fc32e3268e02446f0d77cb51a2c3a8486b1798e34d5805/protobuf-6.32.0-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:75a2aab2bd1aeb1f5dc7c5f33bcb11d82ea8c055c9becbb41c26a8c43fd7092c", size = 322009, upload-time = "2025-08-14T21:21:19.893Z" }, - { url = "https://files.pythonhosted.org/packages/9c/f2/80ffc4677aac1bc3519b26bc7f7f5de7fce0ee2f7e36e59e27d8beb32dd1/protobuf-6.32.0-py3-none-any.whl", hash = "sha256:ba377e5b67b908c8f3072a57b63e2c6a4cbd18aea4ed98d2584350dbf46f2783", size = 169287, upload-time = "2025-08-14T21:21:23.515Z" }, -] - -[[package]] -name = "psutil" -version = "7.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2a/80/336820c1ad9286a4ded7e845b2eccfcb27851ab8ac6abece774a6ff4d3de/psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", size = 497003, upload-time = "2025-02-13T21:54:07.946Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ed/e6/2d26234410f8b8abdbf891c9da62bee396583f713fb9f3325a4760875d22/psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", size = 238051, upload-time = "2025-02-13T21:54:12.36Z" }, - { url = "https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", size = 239535, upload-time = "2025-02-13T21:54:16.07Z" }, - { url = "https://files.pythonhosted.org/packages/2a/ed/d362e84620dd22876b55389248e522338ed1bf134a5edd3b8231d7207f6d/psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", size = 275004, upload-time = "2025-02-13T21:54:18.662Z" }, - { url = "https://files.pythonhosted.org/packages/bf/b9/b0eb3f3cbcb734d930fdf839431606844a825b23eaf9a6ab371edac8162c/psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", size = 277986, upload-time = "2025-02-13T21:54:21.811Z" }, - { url = "https://files.pythonhosted.org/packages/eb/a2/709e0fe2f093556c17fbafda93ac032257242cabcc7ff3369e2cb76a97aa/psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", size = 279544, upload-time = "2025-02-13T21:54:24.68Z" }, - { url = "https://files.pythonhosted.org/packages/50/e6/eecf58810b9d12e6427369784efe814a1eec0f492084ce8eb8f4d89d6d61/psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99", size = 241053, upload-time = "2025-02-13T21:54:34.31Z" }, - { url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", size = 244885, upload-time = "2025-02-13T21:54:37.486Z" }, -] - -[[package]] -name = "ptyprocess" -version = "0.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762, upload-time = "2020-12-28T15:15:30.155Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993, upload-time = "2020-12-28T15:15:28.35Z" }, -] - -[[package]] -name = "pure-eval" -version = "0.2.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752, upload-time = "2024-07-21T12:58:21.801Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" }, -] - -[[package]] -name = "pycparser" -version = "2.22" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736, upload-time = "2024-03-30T13:22:22.564Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552, upload-time = "2024-03-30T13:22:20.476Z" }, -] - -[[package]] -name = "pygments" -version = "2.19.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, -] - -[[package]] -name = "pymdown-extensions" -version = "10.16.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "markdown" }, - { name = "pyyaml" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/55/b3/6d2b3f149bc5413b0a29761c2c5832d8ce904a1d7f621e86616d96f505cc/pymdown_extensions-10.16.1.tar.gz", hash = "sha256:aace82bcccba3efc03e25d584e6a22d27a8e17caa3f4dd9f207e49b787aa9a91", size = 853277, upload-time = "2025-07-28T16:19:34.167Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e4/06/43084e6cbd4b3bc0e80f6be743b2e79fbc6eed8de9ad8c629939fa55d972/pymdown_extensions-10.16.1-py3-none-any.whl", hash = "sha256:d6ba157a6c03146a7fb122b2b9a121300056384eafeec9c9f9e584adfdb2a32d", size = 266178, upload-time = "2025-07-28T16:19:31.401Z" }, -] - -[[package]] -name = "pyparsing" -version = "3.2.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bb/22/f1129e69d94ffff626bdb5c835506b3a5b4f3d070f17ea295e12c2c6f60f/pyparsing-3.2.3.tar.gz", hash = "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be", size = 1088608, upload-time = "2025-03-25T05:01:28.114Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl", hash = "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf", size = 111120, upload-time = "2025-03-25T05:01:24.908Z" }, -] - -[[package]] -name = "pytest" -version = "8.4.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "iniconfig" }, - { name = "packaging" }, - { name = "pluggy" }, - { name = "pygments" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/08/ba/45911d754e8eba3d5a841a5ce61a65a685ff1798421ac054f85aa8747dfb/pytest-8.4.1.tar.gz", hash = "sha256:7c67fd69174877359ed9371ec3af8a3d2b04741818c51e5e99cc1742251fa93c", size = 1517714, upload-time = "2025-06-18T05:48:06.109Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl", hash = "sha256:539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7", size = 365474, upload-time = "2025-06-18T05:48:03.955Z" }, -] - -[[package]] -name = "python-dateutil" -version = "2.9.0.post0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "six" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, -] - -[[package]] -name = "python-json-logger" -version = "3.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9e/de/d3144a0bceede957f961e975f3752760fbe390d57fbe194baf709d8f1f7b/python_json_logger-3.3.0.tar.gz", hash = "sha256:12b7e74b17775e7d565129296105bbe3910842d9d0eb083fc83a6a617aa8df84", size = 16642, upload-time = "2025-03-07T07:08:27.301Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/08/20/0f2523b9e50a8052bc6a8b732dfc8568abbdc42010aef03a2d750bdab3b2/python_json_logger-3.3.0-py3-none-any.whl", hash = "sha256:dd980fae8cffb24c13caf6e158d3d61c0d6d22342f932cb6e9deedab3d35eec7", size = 15163, upload-time = "2025-03-07T07:08:25.627Z" }, -] - -[[package]] -name = "pytz" -version = "2025.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884, upload-time = "2025-03-25T02:25:00.538Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225, upload-time = "2025-03-25T02:24:58.468Z" }, -] - -[[package]] -name = "pywin32" -version = "311" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/ab/01ea1943d4eba0f850c3c61e78e8dd59757ff815ff3ccd0a84de5f541f42/pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31", size = 8706543, upload-time = "2025-07-14T20:13:20.765Z" }, - { url = "https://files.pythonhosted.org/packages/d1/a8/a0e8d07d4d051ec7502cd58b291ec98dcc0c3fff027caad0470b72cfcc2f/pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067", size = 9495040, upload-time = "2025-07-14T20:13:22.543Z" }, - { url = "https://files.pythonhosted.org/packages/ba/3a/2ae996277b4b50f17d61f0603efd8253cb2d79cc7ae159468007b586396d/pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852", size = 8710102, upload-time = "2025-07-14T20:13:24.682Z" }, - { url = "https://files.pythonhosted.org/packages/a5/be/3fd5de0979fcb3994bfee0d65ed8ca9506a8a1260651b86174f6a86f52b3/pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d", size = 8705700, upload-time = "2025-07-14T20:13:26.471Z" }, - { url = "https://files.pythonhosted.org/packages/e3/28/e0a1909523c6890208295a29e05c2adb2126364e289826c0a8bc7297bd5c/pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d", size = 9494700, upload-time = "2025-07-14T20:13:28.243Z" }, - { url = "https://files.pythonhosted.org/packages/04/bf/90339ac0f55726dce7d794e6d79a18a91265bdf3aa70b6b9ca52f35e022a/pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a", size = 8709318, upload-time = "2025-07-14T20:13:30.348Z" }, - { url = "https://files.pythonhosted.org/packages/c9/31/097f2e132c4f16d99a22bfb777e0fd88bd8e1c634304e102f313af69ace5/pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee", size = 8840714, upload-time = "2025-07-14T20:13:32.449Z" }, - { url = "https://files.pythonhosted.org/packages/90/4b/07c77d8ba0e01349358082713400435347df8426208171ce297da32c313d/pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87", size = 9656800, upload-time = "2025-07-14T20:13:34.312Z" }, - { url = "https://files.pythonhosted.org/packages/c0/d2/21af5c535501a7233e734b8af901574572da66fcc254cb35d0609c9080dd/pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42", size = 8932540, upload-time = "2025-07-14T20:13:36.379Z" }, -] - -[[package]] -name = "pywinpty" -version = "3.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/06/df/429cc505dc5f77ab0612c4b60bca2e3dcc81f6c321844ee017d6dc0f4a95/pywinpty-3.0.0.tar.gz", hash = "sha256:68f70e68a9f0766ffdea3fc500351cb7b9b012bcb8239a411f7ff0fc8f86dcb1", size = 28551, upload-time = "2025-08-12T20:33:46.506Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/76/d9/bd2249815c305ef8f879b326db1fe1effc8e5f22bd88e522b4b55231aa6f/pywinpty-3.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:1e0c4b01e5b03b1531d7c5d0e044b8c66dd0288c6d2b661820849f2a8d91aec3", size = 2051564, upload-time = "2025-08-12T20:37:09.128Z" }, - { url = "https://files.pythonhosted.org/packages/e2/77/358b1a97c1d0714f288949372ec64a70884a7eceb3f887042b9ae0bea388/pywinpty-3.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:828cbe756b7e3d25d886fbd5691a1d523cd59c5fb79286bb32bb75c5221e7ba1", size = 2050856, upload-time = "2025-08-12T20:36:09.117Z" }, - { url = "https://files.pythonhosted.org/packages/8f/6c/4249cfb4eb4fdad2c76bc96db0642a40111847c375b92e5b9f4bf289ddd6/pywinpty-3.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:de0cbe27b96e5a2cebd86c4a6b8b4139f978d9c169d44a8edc7e30e88e5d7a69", size = 2050082, upload-time = "2025-08-12T20:36:28.591Z" }, -] - -[[package]] -name = "pyyaml" -version = "6.0.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631, upload-time = "2024-08-06T20:33:50.674Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873, upload-time = "2024-08-06T20:32:25.131Z" }, - { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302, upload-time = "2024-08-06T20:32:26.511Z" }, - { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154, upload-time = "2024-08-06T20:32:28.363Z" }, - { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223, upload-time = "2024-08-06T20:32:30.058Z" }, - { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542, upload-time = "2024-08-06T20:32:31.881Z" }, - { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164, upload-time = "2024-08-06T20:32:37.083Z" }, - { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611, upload-time = "2024-08-06T20:32:38.898Z" }, - { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591, upload-time = "2024-08-06T20:32:40.241Z" }, - { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338, upload-time = "2024-08-06T20:32:41.93Z" }, - { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309, upload-time = "2024-08-06T20:32:43.4Z" }, - { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679, upload-time = "2024-08-06T20:32:44.801Z" }, - { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428, upload-time = "2024-08-06T20:32:46.432Z" }, - { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361, upload-time = "2024-08-06T20:32:51.188Z" }, - { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523, upload-time = "2024-08-06T20:32:53.019Z" }, - { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660, upload-time = "2024-08-06T20:32:54.708Z" }, - { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597, upload-time = "2024-08-06T20:32:56.985Z" }, - { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527, upload-time = "2024-08-06T20:33:03.001Z" }, - { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446, upload-time = "2024-08-06T20:33:04.33Z" }, -] - -[[package]] -name = "pyyaml-env-tag" -version = "1.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pyyaml" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737, upload-time = "2025-05-13T15:24:01.64Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload-time = "2025-05-13T15:23:59.629Z" }, -] - -[[package]] -name = "pyzmq" -version = "27.0.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cffi", marker = "implementation_name == 'pypy'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f8/66/159f38d184f08b5f971b467f87b1ab142ab1320d5200825c824b32b84b66/pyzmq-27.0.2.tar.gz", hash = "sha256:b398dd713b18de89730447347e96a0240225e154db56e35b6bb8447ffdb07798", size = 281440, upload-time = "2025-08-21T04:23:26.334Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/68/69/b3a729e7b03e412bee2b1823ab8d22e20a92593634f664afd04c6c9d9ac0/pyzmq-27.0.2-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:5da05e3c22c95e23bfc4afeee6ff7d4be9ff2233ad6cb171a0e8257cd46b169a", size = 1305910, upload-time = "2025-08-21T04:21:27.609Z" }, - { url = "https://files.pythonhosted.org/packages/15/b7/f6a6a285193d489b223c340b38ee03a673467cb54914da21c3d7849f1b10/pyzmq-27.0.2-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:4e4520577971d01d47e2559bb3175fce1be9103b18621bf0b241abe0a933d040", size = 895507, upload-time = "2025-08-21T04:21:29.005Z" }, - { url = "https://files.pythonhosted.org/packages/17/e6/c4ed2da5ef9182cde1b1f5d0051a986e76339d71720ec1a00be0b49275ad/pyzmq-27.0.2-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56d7de7bf73165b90bd25a8668659ccb134dd28449116bf3c7e9bab5cf8a8ec9", size = 652670, upload-time = "2025-08-21T04:21:30.71Z" }, - { url = "https://files.pythonhosted.org/packages/0e/66/d781ab0636570d32c745c4e389b1c6b713115905cca69ab6233508622edd/pyzmq-27.0.2-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:340e7cddc32f147c6c00d116a3f284ab07ee63dbd26c52be13b590520434533c", size = 840581, upload-time = "2025-08-21T04:21:32.008Z" }, - { url = "https://files.pythonhosted.org/packages/a6/df/f24790caf565d72544f5c8d8500960b9562c1dc848d6f22f3c7e122e73d4/pyzmq-27.0.2-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ba95693f9df8bb4a9826464fb0fe89033936f35fd4a8ff1edff09a473570afa0", size = 1641931, upload-time = "2025-08-21T04:21:33.371Z" }, - { url = "https://files.pythonhosted.org/packages/65/65/77d27b19fc5e845367f9100db90b9fce924f611b14770db480615944c9c9/pyzmq-27.0.2-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:ca42a6ce2d697537da34f77a1960d21476c6a4af3e539eddb2b114c3cf65a78c", size = 2021226, upload-time = "2025-08-21T04:21:35.301Z" }, - { url = "https://files.pythonhosted.org/packages/5b/65/1ed14421ba27a4207fa694772003a311d1142b7f543179e4d1099b7eb746/pyzmq-27.0.2-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3e44e665d78a07214b2772ccbd4b9bcc6d848d7895f1b2d7653f047b6318a4f6", size = 1878047, upload-time = "2025-08-21T04:21:36.749Z" }, - { url = "https://files.pythonhosted.org/packages/dd/dc/e578549b89b40dc78a387ec471c2a360766690c0a045cd8d1877d401012d/pyzmq-27.0.2-cp312-abi3-win32.whl", hash = "sha256:272d772d116615397d2be2b1417b3b8c8bc8671f93728c2f2c25002a4530e8f6", size = 558757, upload-time = "2025-08-21T04:21:38.2Z" }, - { url = "https://files.pythonhosted.org/packages/b5/89/06600980aefcc535c758414da969f37a5194ea4cdb73b745223f6af3acfb/pyzmq-27.0.2-cp312-abi3-win_amd64.whl", hash = "sha256:734be4f44efba0aa69bf5f015ed13eb69ff29bf0d17ea1e21588b095a3147b8e", size = 619281, upload-time = "2025-08-21T04:21:39.909Z" }, - { url = "https://files.pythonhosted.org/packages/30/84/df8a5c089552d17c9941d1aea4314b606edf1b1622361dae89aacedc6467/pyzmq-27.0.2-cp312-abi3-win_arm64.whl", hash = "sha256:41f0bd56d9279392810950feb2785a419c2920bbf007fdaaa7f4a07332ae492d", size = 552680, upload-time = "2025-08-21T04:21:41.571Z" }, - { url = "https://files.pythonhosted.org/packages/b4/7b/b79e976508517ab80dc800f7021ef1fb602a6d55e4caa2d47fb3dca5d8b6/pyzmq-27.0.2-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:7f01118133427cd7f34ee133b5098e2af5f70303fa7519785c007bca5aa6f96a", size = 1122259, upload-time = "2025-08-21T04:21:43.063Z" }, - { url = "https://files.pythonhosted.org/packages/2b/1c/777217b9940ebcb7e71c924184ca5f31e410580a58d9fd93798589f0d31c/pyzmq-27.0.2-cp313-cp313-android_24_x86_64.whl", hash = "sha256:e4b860edf6379a7234ccbb19b4ed2c57e3ff569c3414fadfb49ae72b61a8ef07", size = 1156113, upload-time = "2025-08-21T04:21:44.566Z" }, - { url = "https://files.pythonhosted.org/packages/59/7d/654657a4c6435f41538182e71b61eac386a789a2bbb6f30171915253a9a7/pyzmq-27.0.2-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:cb77923ea163156da14295c941930bd525df0d29c96c1ec2fe3c3806b1e17cb3", size = 1341437, upload-time = "2025-08-21T04:21:46.019Z" }, - { url = "https://files.pythonhosted.org/packages/20/a0/5ed7710037f9c096017adc748bcb1698674a2d297f8b9422d38816f7b56a/pyzmq-27.0.2-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:61678b7407b04df8f9423f188156355dc94d0fb52d360ae79d02ed7e0d431eea", size = 897888, upload-time = "2025-08-21T04:21:47.362Z" }, - { url = "https://files.pythonhosted.org/packages/2c/8a/6e4699a60931c17e7406641d201d7f2c121e2a38979bc83226a6d8f1ba32/pyzmq-27.0.2-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e3c824b70925963bdc8e39a642672c15ffaa67e7d4b491f64662dd56d6271263", size = 660727, upload-time = "2025-08-21T04:21:48.734Z" }, - { url = "https://files.pythonhosted.org/packages/7b/d8/d761e438c186451bd89ce63a665cde5690c084b61cd8f5d7b51e966e875a/pyzmq-27.0.2-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c4833e02fcf2751975457be1dfa2f744d4d09901a8cc106acaa519d868232175", size = 848136, upload-time = "2025-08-21T04:21:50.416Z" }, - { url = "https://files.pythonhosted.org/packages/43/f1/a0f31684efdf3eb92f46b7dd2117e752208115e89d278f8ca5f413c5bb85/pyzmq-27.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b18045668d09cf0faa44918af2a67f0dbbef738c96f61c2f1b975b1ddb92ccfc", size = 1650402, upload-time = "2025-08-21T04:21:52.235Z" }, - { url = "https://files.pythonhosted.org/packages/41/fd/0d7f2a1732812df02c85002770da4a7864c79b210084bcdab01ea57e8d92/pyzmq-27.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:bbbb7e2f3ac5a22901324e7b086f398b8e16d343879a77b15ca3312e8cd8e6d5", size = 2024587, upload-time = "2025-08-21T04:21:54.07Z" }, - { url = "https://files.pythonhosted.org/packages/f1/73/358be69e279a382dd09e46dda29df8446365cddee4f79ef214e71e5b2b5a/pyzmq-27.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:b751914a73604d40d88a061bab042a11d4511b3ddbb7624cd83c39c8a498564c", size = 1885493, upload-time = "2025-08-21T04:21:55.588Z" }, - { url = "https://files.pythonhosted.org/packages/c5/7b/e9951ad53b3dfed8cfb4c2cfd6e0097c9b454e5c0d0e6df5f2b60d7c8c3d/pyzmq-27.0.2-cp313-cp313t-win32.whl", hash = "sha256:3e8f833dd82af11db5321c414638045c70f61009f72dd61c88db4a713c1fb1d2", size = 574934, upload-time = "2025-08-21T04:21:57.52Z" }, - { url = "https://files.pythonhosted.org/packages/55/33/1a7fc3a92f2124a63e6e2a6afa0af471a5c0c713e776b476d4eda5111b13/pyzmq-27.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:5b45153cb8eadcab14139970643a84f7a7b08dda541fbc1f6f4855c49334b549", size = 640932, upload-time = "2025-08-21T04:21:59.527Z" }, - { url = "https://files.pythonhosted.org/packages/2a/52/2598a94ac251a7c83f3887866225eea1952b0d4463a68df5032eb00ff052/pyzmq-27.0.2-cp313-cp313t-win_arm64.whl", hash = "sha256:86898f5c9730df23427c1ee0097d8aa41aa5f89539a79e48cd0d2c22d059f1b7", size = 561315, upload-time = "2025-08-21T04:22:01.295Z" }, - { url = "https://files.pythonhosted.org/packages/42/7d/10ef02ea36590b29d48ef88eb0831f0af3eb240cccca2752556faec55f59/pyzmq-27.0.2-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:d2b4b261dce10762be5c116b6ad1f267a9429765b493c454f049f33791dd8b8a", size = 1341463, upload-time = "2025-08-21T04:22:02.712Z" }, - { url = "https://files.pythonhosted.org/packages/94/36/115d18dade9a3d4d3d08dd8bfe5459561b8e02815f99df040555fdd7768e/pyzmq-27.0.2-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:4e4d88b6cff156fed468903006b24bbd85322612f9c2f7b96e72d5016fd3f543", size = 897840, upload-time = "2025-08-21T04:22:04.845Z" }, - { url = "https://files.pythonhosted.org/packages/39/66/083b37839b95c386a95f1537bb41bdbf0c002b7c55b75ee737949cecb11f/pyzmq-27.0.2-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8426c0ebbc11ed8416a6e9409c194142d677c2c5c688595f2743664e356d9e9b", size = 660704, upload-time = "2025-08-21T04:22:06.389Z" }, - { url = "https://files.pythonhosted.org/packages/76/5a/196ab46e549ba35bf3268f575e10cfac0dc86b78dcaa7a3e36407ecda752/pyzmq-27.0.2-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:565bee96a155fe6452caed5fb5f60c9862038e6b51a59f4f632562081cdb4004", size = 848037, upload-time = "2025-08-21T04:22:07.817Z" }, - { url = "https://files.pythonhosted.org/packages/70/ea/a27b9eb44b2e615a9ecb8510ebb023cc1d2d251181e4a1e50366bfbf94d6/pyzmq-27.0.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5de735c745ca5cefe9c2d1547d8f28cfe1b1926aecb7483ab1102fd0a746c093", size = 1650278, upload-time = "2025-08-21T04:22:09.269Z" }, - { url = "https://files.pythonhosted.org/packages/62/ac/3e9af036bfaf718ab5e69ded8f6332da392c5450ad43e8e3ca66797f145a/pyzmq-27.0.2-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:ea4f498f8115fd90d7bf03a3e83ae3e9898e43362f8e8e8faec93597206e15cc", size = 2024504, upload-time = "2025-08-21T04:22:10.778Z" }, - { url = "https://files.pythonhosted.org/packages/ae/e9/3202d31788df8ebaa176b23d846335eb9c768d8b43c0506bbd6265ad36a0/pyzmq-27.0.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d00e81cb0afd672915257a3927124ee2ad117ace3c256d39cd97ca3f190152ad", size = 1885381, upload-time = "2025-08-21T04:22:12.718Z" }, - { url = "https://files.pythonhosted.org/packages/4b/ed/42de80b7ab4e8fcf13376f81206cf8041740672ac1fd2e1c598d63f595bf/pyzmq-27.0.2-cp314-cp314t-win32.whl", hash = "sha256:0f6e9b00d81b58f859fffc112365d50413954e02aefe36c5b4c8fb4af79f8cc3", size = 587526, upload-time = "2025-08-21T04:22:14.18Z" }, - { url = "https://files.pythonhosted.org/packages/ed/c8/8f3c72d6f0bfbf090aa5e283576073ca5c59839b85a5cc8c66ddb9b59801/pyzmq-27.0.2-cp314-cp314t-win_amd64.whl", hash = "sha256:2e73cf3b127a437fef4100eb3ac2ebe6b49e655bb721329f667f59eca0a26221", size = 661368, upload-time = "2025-08-21T04:22:15.677Z" }, - { url = "https://files.pythonhosted.org/packages/69/a4/7ee652ea1c77d872f5d99ed937fa8bbd1f6f4b7a39a6d3a0076c286e0c3e/pyzmq-27.0.2-cp314-cp314t-win_arm64.whl", hash = "sha256:4108785f2e5ac865d06f678a07a1901e3465611356df21a545eeea8b45f56265", size = 574901, upload-time = "2025-08-21T04:22:17.423Z" }, -] - -[[package]] -name = "referencing" -version = "0.36.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "attrs" }, - { name = "rpds-py" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744, upload-time = "2025-01-25T08:48:16.138Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775, upload-time = "2025-01-25T08:48:14.241Z" }, -] - -[[package]] -name = "requests" -version = "2.32.5" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "charset-normalizer" }, - { name = "idna" }, - { name = "urllib3" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" }, -] - -[[package]] -name = "rfc3339-validator" -version = "0.1.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "six" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/28/ea/a9387748e2d111c3c2b275ba970b735e04e15cdb1eb30693b6b5708c4dbd/rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b", size = 5513, upload-time = "2021-05-12T16:37:54.178Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa", size = 3490, upload-time = "2021-05-12T16:37:52.536Z" }, -] - -[[package]] -name = "rfc3986-validator" -version = "0.1.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/da/88/f270de456dd7d11dcc808abfa291ecdd3f45ff44e3b549ffa01b126464d0/rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055", size = 6760, upload-time = "2019-10-28T16:00:19.144Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/51/17023c0f8f1869d8806b979a2bffa3f861f26a3f1a66b094288323fba52f/rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9", size = 4242, upload-time = "2019-10-28T16:00:13.976Z" }, -] - -[[package]] -name = "rfc3987-syntax" -version = "1.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "lark" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/2c/06/37c1a5557acf449e8e406a830a05bf885ac47d33270aec454ef78675008d/rfc3987_syntax-1.1.0.tar.gz", hash = "sha256:717a62cbf33cffdd16dfa3a497d81ce48a660ea691b1ddd7be710c22f00b4a0d", size = 14239, upload-time = "2025-07-18T01:05:05.015Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/71/44ce230e1b7fadd372515a97e32a83011f906ddded8d03e3c6aafbdedbb7/rfc3987_syntax-1.1.0-py3-none-any.whl", hash = "sha256:6c3d97604e4c5ce9f714898e05401a0445a641cfa276432b0a648c80856f6a3f", size = 8046, upload-time = "2025-07-18T01:05:03.843Z" }, -] - -[[package]] -name = "rpds-py" -version = "0.27.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1e/d9/991a0dee12d9fc53ed027e26a26a64b151d77252ac477e22666b9688bc16/rpds_py-0.27.0.tar.gz", hash = "sha256:8b23cf252f180cda89220b378d917180f29d313cd6a07b2431c0d3b776aae86f", size = 27420, upload-time = "2025-08-07T08:26:39.624Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cd/17/e67309ca1ac993fa1888a0d9b2f5ccc1f67196ace32e76c9f8e1dbbbd50c/rpds_py-0.27.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:19c990fdf5acecbf0623e906ae2e09ce1c58947197f9bced6bbd7482662231c4", size = 362611, upload-time = "2025-08-07T08:23:44.773Z" }, - { url = "https://files.pythonhosted.org/packages/93/2e/28c2fb84aa7aa5d75933d1862d0f7de6198ea22dfd9a0cca06e8a4e7509e/rpds_py-0.27.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6c27a7054b5224710fcfb1a626ec3ff4f28bcb89b899148c72873b18210e446b", size = 347680, upload-time = "2025-08-07T08:23:46.014Z" }, - { url = "https://files.pythonhosted.org/packages/44/3e/9834b4c8f4f5fe936b479e623832468aa4bd6beb8d014fecaee9eac6cdb1/rpds_py-0.27.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09965b314091829b378b60607022048953e25f0b396c2b70e7c4c81bcecf932e", size = 384600, upload-time = "2025-08-07T08:23:48Z" }, - { url = "https://files.pythonhosted.org/packages/19/78/744123c7b38865a965cd9e6f691fde7ef989a00a256fa8bf15b75240d12f/rpds_py-0.27.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:14f028eb47f59e9169bfdf9f7ceafd29dd64902141840633683d0bad5b04ff34", size = 400697, upload-time = "2025-08-07T08:23:49.407Z" }, - { url = "https://files.pythonhosted.org/packages/32/97/3c3d32fe7daee0a1f1a678b6d4dfb8c4dcf88197fa2441f9da7cb54a8466/rpds_py-0.27.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6168af0be75bba990a39f9431cdfae5f0ad501f4af32ae62e8856307200517b8", size = 517781, upload-time = "2025-08-07T08:23:50.557Z" }, - { url = "https://files.pythonhosted.org/packages/b2/be/28f0e3e733680aa13ecec1212fc0f585928a206292f14f89c0b8a684cad1/rpds_py-0.27.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ab47fe727c13c09d0e6f508e3a49e545008e23bf762a245b020391b621f5b726", size = 406449, upload-time = "2025-08-07T08:23:51.732Z" }, - { url = "https://files.pythonhosted.org/packages/95/ae/5d15c83e337c082d0367053baeb40bfba683f42459f6ebff63a2fd7e5518/rpds_py-0.27.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fa01b3d5e3b7d97efab65bd3d88f164e289ec323a8c033c5c38e53ee25c007e", size = 386150, upload-time = "2025-08-07T08:23:52.822Z" }, - { url = "https://files.pythonhosted.org/packages/bf/65/944e95f95d5931112829e040912b25a77b2e7ed913ea5fe5746aa5c1ce75/rpds_py-0.27.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:6c135708e987f46053e0a1246a206f53717f9fadfba27174a9769ad4befba5c3", size = 406100, upload-time = "2025-08-07T08:23:54.339Z" }, - { url = "https://files.pythonhosted.org/packages/21/a4/1664b83fae02894533cd11dc0b9f91d673797c2185b7be0f7496107ed6c5/rpds_py-0.27.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc327f4497b7087d06204235199daf208fd01c82d80465dc5efa4ec9df1c5b4e", size = 421345, upload-time = "2025-08-07T08:23:55.832Z" }, - { url = "https://files.pythonhosted.org/packages/7c/26/b7303941c2b0823bfb34c71378249f8beedce57301f400acb04bb345d025/rpds_py-0.27.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e57906e38583a2cba67046a09c2637e23297618dc1f3caddbc493f2be97c93f", size = 561891, upload-time = "2025-08-07T08:23:56.951Z" }, - { url = "https://files.pythonhosted.org/packages/9b/c8/48623d64d4a5a028fa99576c768a6159db49ab907230edddc0b8468b998b/rpds_py-0.27.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f4f69d7a4300fbf91efb1fb4916421bd57804c01ab938ab50ac9c4aa2212f03", size = 591756, upload-time = "2025-08-07T08:23:58.146Z" }, - { url = "https://files.pythonhosted.org/packages/b3/51/18f62617e8e61cc66334c9fb44b1ad7baae3438662098efbc55fb3fda453/rpds_py-0.27.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b4c4fbbcff474e1e5f38be1bf04511c03d492d42eec0babda5d03af3b5589374", size = 557088, upload-time = "2025-08-07T08:23:59.6Z" }, - { url = "https://files.pythonhosted.org/packages/bd/4c/e84c3a276e2496a93d245516be6b49e20499aa8ca1c94d59fada0d79addc/rpds_py-0.27.0-cp312-cp312-win32.whl", hash = "sha256:27bac29bbbf39601b2aab474daf99dbc8e7176ca3389237a23944b17f8913d97", size = 221926, upload-time = "2025-08-07T08:24:00.695Z" }, - { url = "https://files.pythonhosted.org/packages/83/89/9d0fbcef64340db0605eb0a0044f258076f3ae0a3b108983b2c614d96212/rpds_py-0.27.0-cp312-cp312-win_amd64.whl", hash = "sha256:8a06aa1197ec0281eb1d7daf6073e199eb832fe591ffa329b88bae28f25f5fe5", size = 233235, upload-time = "2025-08-07T08:24:01.846Z" }, - { url = "https://files.pythonhosted.org/packages/c9/b0/e177aa9f39cbab060f96de4a09df77d494f0279604dc2f509263e21b05f9/rpds_py-0.27.0-cp312-cp312-win_arm64.whl", hash = "sha256:e14aab02258cb776a108107bd15f5b5e4a1bbaa61ef33b36693dfab6f89d54f9", size = 223315, upload-time = "2025-08-07T08:24:03.337Z" }, - { url = "https://files.pythonhosted.org/packages/81/d2/dfdfd42565a923b9e5a29f93501664f5b984a802967d48d49200ad71be36/rpds_py-0.27.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:443d239d02d9ae55b74015234f2cd8eb09e59fbba30bf60baeb3123ad4c6d5ff", size = 362133, upload-time = "2025-08-07T08:24:04.508Z" }, - { url = "https://files.pythonhosted.org/packages/ac/4a/0a2e2460c4b66021d349ce9f6331df1d6c75d7eea90df9785d333a49df04/rpds_py-0.27.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b8a7acf04fda1f30f1007f3cc96d29d8cf0a53e626e4e1655fdf4eabc082d367", size = 347128, upload-time = "2025-08-07T08:24:05.695Z" }, - { url = "https://files.pythonhosted.org/packages/35/8d/7d1e4390dfe09d4213b3175a3f5a817514355cb3524593380733204f20b9/rpds_py-0.27.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d0f92b78cfc3b74a42239fdd8c1266f4715b573204c234d2f9fc3fc7a24f185", size = 384027, upload-time = "2025-08-07T08:24:06.841Z" }, - { url = "https://files.pythonhosted.org/packages/c1/65/78499d1a62172891c8cd45de737b2a4b84a414b6ad8315ab3ac4945a5b61/rpds_py-0.27.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ce4ed8e0c7dbc5b19352b9c2c6131dd23b95fa8698b5cdd076307a33626b72dc", size = 399973, upload-time = "2025-08-07T08:24:08.143Z" }, - { url = "https://files.pythonhosted.org/packages/10/a1/1c67c1d8cc889107b19570bb01f75cf49852068e95e6aee80d22915406fc/rpds_py-0.27.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fde355b02934cc6b07200cc3b27ab0c15870a757d1a72fd401aa92e2ea3c6bfe", size = 515295, upload-time = "2025-08-07T08:24:09.711Z" }, - { url = "https://files.pythonhosted.org/packages/df/27/700ec88e748436b6c7c4a2262d66e80f8c21ab585d5e98c45e02f13f21c0/rpds_py-0.27.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13bbc4846ae4c993f07c93feb21a24d8ec637573d567a924b1001e81c8ae80f9", size = 406737, upload-time = "2025-08-07T08:24:11.182Z" }, - { url = "https://files.pythonhosted.org/packages/33/cc/6b0ee8f0ba3f2df2daac1beda17fde5cf10897a7d466f252bd184ef20162/rpds_py-0.27.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be0744661afbc4099fef7f4e604e7f1ea1be1dd7284f357924af12a705cc7d5c", size = 385898, upload-time = "2025-08-07T08:24:12.798Z" }, - { url = "https://files.pythonhosted.org/packages/e8/7e/c927b37d7d33c0a0ebf249cc268dc2fcec52864c1b6309ecb960497f2285/rpds_py-0.27.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:069e0384a54f427bd65d7fda83b68a90606a3835901aaff42185fcd94f5a9295", size = 405785, upload-time = "2025-08-07T08:24:14.906Z" }, - { url = "https://files.pythonhosted.org/packages/5b/d2/8ed50746d909dcf402af3fa58b83d5a590ed43e07251d6b08fad1a535ba6/rpds_py-0.27.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4bc262ace5a1a7dc3e2eac2fa97b8257ae795389f688b5adf22c5db1e2431c43", size = 419760, upload-time = "2025-08-07T08:24:16.129Z" }, - { url = "https://files.pythonhosted.org/packages/d3/60/2b2071aee781cb3bd49f94d5d35686990b925e9b9f3e3d149235a6f5d5c1/rpds_py-0.27.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2fe6e18e5c8581f0361b35ae575043c7029d0a92cb3429e6e596c2cdde251432", size = 561201, upload-time = "2025-08-07T08:24:17.645Z" }, - { url = "https://files.pythonhosted.org/packages/98/1f/27b67304272521aaea02be293fecedce13fa351a4e41cdb9290576fc6d81/rpds_py-0.27.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d93ebdb82363d2e7bec64eecdc3632b59e84bd270d74fe5be1659f7787052f9b", size = 591021, upload-time = "2025-08-07T08:24:18.999Z" }, - { url = "https://files.pythonhosted.org/packages/db/9b/a2fadf823164dd085b1f894be6443b0762a54a7af6f36e98e8fcda69ee50/rpds_py-0.27.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0954e3a92e1d62e83a54ea7b3fdc9efa5d61acef8488a8a3d31fdafbfb00460d", size = 556368, upload-time = "2025-08-07T08:24:20.54Z" }, - { url = "https://files.pythonhosted.org/packages/24/f3/6d135d46a129cda2e3e6d4c5e91e2cc26ea0428c6cf152763f3f10b6dd05/rpds_py-0.27.0-cp313-cp313-win32.whl", hash = "sha256:2cff9bdd6c7b906cc562a505c04a57d92e82d37200027e8d362518df427f96cd", size = 221236, upload-time = "2025-08-07T08:24:22.144Z" }, - { url = "https://files.pythonhosted.org/packages/c5/44/65d7494f5448ecc755b545d78b188440f81da98b50ea0447ab5ebfdf9bd6/rpds_py-0.27.0-cp313-cp313-win_amd64.whl", hash = "sha256:dc79d192fb76fc0c84f2c58672c17bbbc383fd26c3cdc29daae16ce3d927e8b2", size = 232634, upload-time = "2025-08-07T08:24:23.642Z" }, - { url = "https://files.pythonhosted.org/packages/70/d9/23852410fadab2abb611733933401de42a1964ce6600a3badae35fbd573e/rpds_py-0.27.0-cp313-cp313-win_arm64.whl", hash = "sha256:5b3a5c8089eed498a3af23ce87a80805ff98f6ef8f7bdb70bd1b7dae5105f6ac", size = 222783, upload-time = "2025-08-07T08:24:25.098Z" }, - { url = "https://files.pythonhosted.org/packages/15/75/03447917f78512b34463f4ef11066516067099a0c466545655503bed0c77/rpds_py-0.27.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:90fb790138c1a89a2e58c9282fe1089638401f2f3b8dddd758499041bc6e0774", size = 359154, upload-time = "2025-08-07T08:24:26.249Z" }, - { url = "https://files.pythonhosted.org/packages/6b/fc/4dac4fa756451f2122ddaf136e2c6aeb758dc6fdbe9ccc4bc95c98451d50/rpds_py-0.27.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:010c4843a3b92b54373e3d2291a7447d6c3fc29f591772cc2ea0e9f5c1da434b", size = 343909, upload-time = "2025-08-07T08:24:27.405Z" }, - { url = "https://files.pythonhosted.org/packages/7b/81/723c1ed8e6f57ed9d8c0c07578747a2d3d554aaefc1ab89f4e42cfeefa07/rpds_py-0.27.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9ce7a9e967afc0a2af7caa0d15a3e9c1054815f73d6a8cb9225b61921b419bd", size = 379340, upload-time = "2025-08-07T08:24:28.714Z" }, - { url = "https://files.pythonhosted.org/packages/98/16/7e3740413de71818ce1997df82ba5f94bae9fff90c0a578c0e24658e6201/rpds_py-0.27.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa0bf113d15e8abdfee92aa4db86761b709a09954083afcb5bf0f952d6065fdb", size = 391655, upload-time = "2025-08-07T08:24:30.223Z" }, - { url = "https://files.pythonhosted.org/packages/e0/63/2a9f510e124d80660f60ecce07953f3f2d5f0b96192c1365443859b9c87f/rpds_py-0.27.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb91d252b35004a84670dfeafadb042528b19842a0080d8b53e5ec1128e8f433", size = 513017, upload-time = "2025-08-07T08:24:31.446Z" }, - { url = "https://files.pythonhosted.org/packages/2c/4e/cf6ff311d09776c53ea1b4f2e6700b9d43bb4e99551006817ade4bbd6f78/rpds_py-0.27.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:db8a6313dbac934193fc17fe7610f70cd8181c542a91382531bef5ed785e5615", size = 402058, upload-time = "2025-08-07T08:24:32.613Z" }, - { url = "https://files.pythonhosted.org/packages/88/11/5e36096d474cb10f2a2d68b22af60a3bc4164fd8db15078769a568d9d3ac/rpds_py-0.27.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce96ab0bdfcef1b8c371ada2100767ace6804ea35aacce0aef3aeb4f3f499ca8", size = 383474, upload-time = "2025-08-07T08:24:33.767Z" }, - { url = "https://files.pythonhosted.org/packages/db/a2/3dff02805b06058760b5eaa6d8cb8db3eb3e46c9e452453ad5fc5b5ad9fe/rpds_py-0.27.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:7451ede3560086abe1aa27dcdcf55cd15c96b56f543fb12e5826eee6f721f858", size = 400067, upload-time = "2025-08-07T08:24:35.021Z" }, - { url = "https://files.pythonhosted.org/packages/67/87/eed7369b0b265518e21ea836456a4ed4a6744c8c12422ce05bce760bb3cf/rpds_py-0.27.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:32196b5a99821476537b3f7732432d64d93a58d680a52c5e12a190ee0135d8b5", size = 412085, upload-time = "2025-08-07T08:24:36.267Z" }, - { url = "https://files.pythonhosted.org/packages/8b/48/f50b2ab2fbb422fbb389fe296e70b7a6b5ea31b263ada5c61377e710a924/rpds_py-0.27.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a029be818059870664157194e46ce0e995082ac49926f1423c1f058534d2aaa9", size = 555928, upload-time = "2025-08-07T08:24:37.573Z" }, - { url = "https://files.pythonhosted.org/packages/98/41/b18eb51045d06887666c3560cd4bbb6819127b43d758f5adb82b5f56f7d1/rpds_py-0.27.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3841f66c1ffdc6cebce8aed64e36db71466f1dc23c0d9a5592e2a782a3042c79", size = 585527, upload-time = "2025-08-07T08:24:39.391Z" }, - { url = "https://files.pythonhosted.org/packages/be/03/a3dd6470fc76499959b00ae56295b76b4bdf7c6ffc60d62006b1217567e1/rpds_py-0.27.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:42894616da0fc0dcb2ec08a77896c3f56e9cb2f4b66acd76fc8992c3557ceb1c", size = 554211, upload-time = "2025-08-07T08:24:40.6Z" }, - { url = "https://files.pythonhosted.org/packages/bf/d1/ee5fd1be395a07423ac4ca0bcc05280bf95db2b155d03adefeb47d5ebf7e/rpds_py-0.27.0-cp313-cp313t-win32.whl", hash = "sha256:b1fef1f13c842a39a03409e30ca0bf87b39a1e2a305a9924deadb75a43105d23", size = 216624, upload-time = "2025-08-07T08:24:42.204Z" }, - { url = "https://files.pythonhosted.org/packages/1c/94/4814c4c858833bf46706f87349c37ca45e154da7dbbec9ff09f1abeb08cc/rpds_py-0.27.0-cp313-cp313t-win_amd64.whl", hash = "sha256:183f5e221ba3e283cd36fdfbe311d95cd87699a083330b4f792543987167eff1", size = 230007, upload-time = "2025-08-07T08:24:43.329Z" }, - { url = "https://files.pythonhosted.org/packages/0e/a5/8fffe1c7dc7c055aa02df310f9fb71cfc693a4d5ccc5de2d3456ea5fb022/rpds_py-0.27.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:f3cd110e02c5bf17d8fb562f6c9df5c20e73029d587cf8602a2da6c5ef1e32cb", size = 362595, upload-time = "2025-08-07T08:24:44.478Z" }, - { url = "https://files.pythonhosted.org/packages/bc/c7/4e4253fd2d4bb0edbc0b0b10d9f280612ca4f0f990e3c04c599000fe7d71/rpds_py-0.27.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:8d0e09cf4863c74106b5265c2c310f36146e2b445ff7b3018a56799f28f39f6f", size = 347252, upload-time = "2025-08-07T08:24:45.678Z" }, - { url = "https://files.pythonhosted.org/packages/f3/c8/3d1a954d30f0174dd6baf18b57c215da03cf7846a9d6e0143304e784cddc/rpds_py-0.27.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64f689ab822f9b5eb6dfc69893b4b9366db1d2420f7db1f6a2adf2a9ca15ad64", size = 384886, upload-time = "2025-08-07T08:24:46.86Z" }, - { url = "https://files.pythonhosted.org/packages/e0/52/3c5835f2df389832b28f9276dd5395b5a965cea34226e7c88c8fbec2093c/rpds_py-0.27.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e36c80c49853b3ffda7aa1831bf175c13356b210c73128c861f3aa93c3cc4015", size = 399716, upload-time = "2025-08-07T08:24:48.174Z" }, - { url = "https://files.pythonhosted.org/packages/40/73/176e46992461a1749686a2a441e24df51ff86b99c2d34bf39f2a5273b987/rpds_py-0.27.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6de6a7f622860af0146cb9ee148682ff4d0cea0b8fd3ad51ce4d40efb2f061d0", size = 517030, upload-time = "2025-08-07T08:24:49.52Z" }, - { url = "https://files.pythonhosted.org/packages/79/2a/7266c75840e8c6e70effeb0d38922a45720904f2cd695e68a0150e5407e2/rpds_py-0.27.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4045e2fc4b37ec4b48e8907a5819bdd3380708c139d7cc358f03a3653abedb89", size = 408448, upload-time = "2025-08-07T08:24:50.727Z" }, - { url = "https://files.pythonhosted.org/packages/e6/5f/a7efc572b8e235093dc6cf39f4dbc8a7f08e65fdbcec7ff4daeb3585eef1/rpds_py-0.27.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9da162b718b12c4219eeeeb68a5b7552fbc7aadedf2efee440f88b9c0e54b45d", size = 387320, upload-time = "2025-08-07T08:24:52.004Z" }, - { url = "https://files.pythonhosted.org/packages/a2/eb/9ff6bc92efe57cf5a2cb74dee20453ba444b6fdc85275d8c99e0d27239d1/rpds_py-0.27.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:0665be515767dc727ffa5f74bd2ef60b0ff85dad6bb8f50d91eaa6b5fb226f51", size = 407414, upload-time = "2025-08-07T08:24:53.664Z" }, - { url = "https://files.pythonhosted.org/packages/fb/bd/3b9b19b00d5c6e1bd0f418c229ab0f8d3b110ddf7ec5d9d689ef783d0268/rpds_py-0.27.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:203f581accef67300a942e49a37d74c12ceeef4514874c7cede21b012613ca2c", size = 420766, upload-time = "2025-08-07T08:24:55.917Z" }, - { url = "https://files.pythonhosted.org/packages/17/6b/521a7b1079ce16258c70805166e3ac6ec4ee2139d023fe07954dc9b2d568/rpds_py-0.27.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7873b65686a6471c0037139aa000d23fe94628e0daaa27b6e40607c90e3f5ec4", size = 562409, upload-time = "2025-08-07T08:24:57.17Z" }, - { url = "https://files.pythonhosted.org/packages/8b/bf/65db5bfb14ccc55e39de8419a659d05a2a9cd232f0a699a516bb0991da7b/rpds_py-0.27.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:249ab91ceaa6b41abc5f19513cb95b45c6f956f6b89f1fe3d99c81255a849f9e", size = 590793, upload-time = "2025-08-07T08:24:58.388Z" }, - { url = "https://files.pythonhosted.org/packages/db/b8/82d368b378325191ba7aae8f40f009b78057b598d4394d1f2cdabaf67b3f/rpds_py-0.27.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d2f184336bc1d6abfaaa1262ed42739c3789b1e3a65a29916a615307d22ffd2e", size = 558178, upload-time = "2025-08-07T08:24:59.756Z" }, - { url = "https://files.pythonhosted.org/packages/f6/ff/f270bddbfbc3812500f8131b1ebbd97afd014cd554b604a3f73f03133a36/rpds_py-0.27.0-cp314-cp314-win32.whl", hash = "sha256:d3c622c39f04d5751408f5b801ecb527e6e0a471b367f420a877f7a660d583f6", size = 222355, upload-time = "2025-08-07T08:25:01.027Z" }, - { url = "https://files.pythonhosted.org/packages/bf/20/fdab055b1460c02ed356a0e0b0a78c1dd32dc64e82a544f7b31c9ac643dc/rpds_py-0.27.0-cp314-cp314-win_amd64.whl", hash = "sha256:cf824aceaeffff029ccfba0da637d432ca71ab21f13e7f6f5179cd88ebc77a8a", size = 234007, upload-time = "2025-08-07T08:25:02.268Z" }, - { url = "https://files.pythonhosted.org/packages/4d/a8/694c060005421797a3be4943dab8347c76c2b429a9bef68fb2c87c9e70c7/rpds_py-0.27.0-cp314-cp314-win_arm64.whl", hash = "sha256:86aca1616922b40d8ac1b3073a1ead4255a2f13405e5700c01f7c8d29a03972d", size = 223527, upload-time = "2025-08-07T08:25:03.45Z" }, - { url = "https://files.pythonhosted.org/packages/1e/f9/77f4c90f79d2c5ca8ce6ec6a76cb4734ee247de6b3a4f337e289e1f00372/rpds_py-0.27.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:341d8acb6724c0c17bdf714319c393bb27f6d23d39bc74f94221b3e59fc31828", size = 359469, upload-time = "2025-08-07T08:25:04.648Z" }, - { url = "https://files.pythonhosted.org/packages/c0/22/b97878d2f1284286fef4172069e84b0b42b546ea7d053e5fb7adb9ac6494/rpds_py-0.27.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6b96b0b784fe5fd03beffff2b1533dc0d85e92bab8d1b2c24ef3a5dc8fac5669", size = 343960, upload-time = "2025-08-07T08:25:05.863Z" }, - { url = "https://files.pythonhosted.org/packages/b1/b0/dfd55b5bb480eda0578ae94ef256d3061d20b19a0f5e18c482f03e65464f/rpds_py-0.27.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c431bfb91478d7cbe368d0a699978050d3b112d7f1d440a41e90faa325557fd", size = 380201, upload-time = "2025-08-07T08:25:07.513Z" }, - { url = "https://files.pythonhosted.org/packages/28/22/e1fa64e50d58ad2b2053077e3ec81a979147c43428de9e6de68ddf6aff4e/rpds_py-0.27.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:20e222a44ae9f507d0f2678ee3dd0c45ec1e930f6875d99b8459631c24058aec", size = 392111, upload-time = "2025-08-07T08:25:09.149Z" }, - { url = "https://files.pythonhosted.org/packages/49/f9/43ab7a43e97aedf6cea6af70fdcbe18abbbc41d4ae6cdec1bfc23bbad403/rpds_py-0.27.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:184f0d7b342967f6cda94a07d0e1fae177d11d0b8f17d73e06e36ac02889f303", size = 515863, upload-time = "2025-08-07T08:25:10.431Z" }, - { url = "https://files.pythonhosted.org/packages/38/9b/9bd59dcc636cd04d86a2d20ad967770bf348f5eb5922a8f29b547c074243/rpds_py-0.27.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a00c91104c173c9043bc46f7b30ee5e6d2f6b1149f11f545580f5d6fdff42c0b", size = 402398, upload-time = "2025-08-07T08:25:11.819Z" }, - { url = "https://files.pythonhosted.org/packages/71/bf/f099328c6c85667aba6b66fa5c35a8882db06dcd462ea214be72813a0dd2/rpds_py-0.27.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7a37dd208f0d658e0487522078b1ed68cd6bce20ef4b5a915d2809b9094b410", size = 384665, upload-time = "2025-08-07T08:25:13.194Z" }, - { url = "https://files.pythonhosted.org/packages/a9/c5/9c1f03121ece6634818490bd3c8be2c82a70928a19de03467fb25a3ae2a8/rpds_py-0.27.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:92f3b3ec3e6008a1fe00b7c0946a170f161ac00645cde35e3c9a68c2475e8156", size = 400405, upload-time = "2025-08-07T08:25:14.417Z" }, - { url = "https://files.pythonhosted.org/packages/b5/b8/e25d54af3e63ac94f0c16d8fe143779fe71ff209445a0c00d0f6984b6b2c/rpds_py-0.27.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a1b3db5fae5cbce2131b7420a3f83553d4d89514c03d67804ced36161fe8b6b2", size = 413179, upload-time = "2025-08-07T08:25:15.664Z" }, - { url = "https://files.pythonhosted.org/packages/f9/d1/406b3316433fe49c3021546293a04bc33f1478e3ec7950215a7fce1a1208/rpds_py-0.27.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5355527adaa713ab693cbce7c1e0ec71682f599f61b128cf19d07e5c13c9b1f1", size = 556895, upload-time = "2025-08-07T08:25:17.061Z" }, - { url = "https://files.pythonhosted.org/packages/5f/bc/3697c0c21fcb9a54d46ae3b735eb2365eea0c2be076b8f770f98e07998de/rpds_py-0.27.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:fcc01c57ce6e70b728af02b2401c5bc853a9e14eb07deda30624374f0aebfe42", size = 585464, upload-time = "2025-08-07T08:25:18.406Z" }, - { url = "https://files.pythonhosted.org/packages/63/09/ee1bb5536f99f42c839b177d552f6114aa3142d82f49cef49261ed28dbe0/rpds_py-0.27.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3001013dae10f806380ba739d40dee11db1ecb91684febb8406a87c2ded23dae", size = 555090, upload-time = "2025-08-07T08:25:20.461Z" }, - { url = "https://files.pythonhosted.org/packages/7d/2c/363eada9e89f7059199d3724135a86c47082cbf72790d6ba2f336d146ddb/rpds_py-0.27.0-cp314-cp314t-win32.whl", hash = "sha256:0f401c369186a5743694dd9fc08cba66cf70908757552e1f714bfc5219c655b5", size = 218001, upload-time = "2025-08-07T08:25:21.761Z" }, - { url = "https://files.pythonhosted.org/packages/e2/3f/d6c216ed5199c9ef79e2a33955601f454ed1e7420a93b89670133bca5ace/rpds_py-0.27.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8a1dca5507fa1337f75dcd5070218b20bc68cf8844271c923c1b79dfcbc20391", size = 230993, upload-time = "2025-08-07T08:25:23.34Z" }, -] - -[[package]] -name = "ruff" -version = "0.12.10" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3b/eb/8c073deb376e46ae767f4961390d17545e8535921d2f65101720ed8bd434/ruff-0.12.10.tar.gz", hash = "sha256:189ab65149d11ea69a2d775343adf5f49bb2426fc4780f65ee33b423ad2e47f9", size = 5310076, upload-time = "2025-08-21T18:23:22.595Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/24/e7/560d049d15585d6c201f9eeacd2fd130def3741323e5ccf123786e0e3c95/ruff-0.12.10-py3-none-linux_armv6l.whl", hash = "sha256:8b593cb0fb55cc8692dac7b06deb29afda78c721c7ccfed22db941201b7b8f7b", size = 11935161, upload-time = "2025-08-21T18:22:26.965Z" }, - { url = "https://files.pythonhosted.org/packages/d1/b0/ad2464922a1113c365d12b8f80ed70fcfb39764288ac77c995156080488d/ruff-0.12.10-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ebb7333a45d56efc7c110a46a69a1b32365d5c5161e7244aaf3aa20ce62399c1", size = 12660884, upload-time = "2025-08-21T18:22:30.925Z" }, - { url = "https://files.pythonhosted.org/packages/d7/f1/97f509b4108d7bae16c48389f54f005b62ce86712120fd8b2d8e88a7cb49/ruff-0.12.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d59e58586829f8e4a9920788f6efba97a13d1fa320b047814e8afede381c6839", size = 11872754, upload-time = "2025-08-21T18:22:34.035Z" }, - { url = "https://files.pythonhosted.org/packages/12/ad/44f606d243f744a75adc432275217296095101f83f966842063d78eee2d3/ruff-0.12.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:822d9677b560f1fdeab69b89d1f444bf5459da4aa04e06e766cf0121771ab844", size = 12092276, upload-time = "2025-08-21T18:22:36.764Z" }, - { url = "https://files.pythonhosted.org/packages/06/1f/ed6c265e199568010197909b25c896d66e4ef2c5e1c3808caf461f6f3579/ruff-0.12.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:37b4a64f4062a50c75019c61c7017ff598cb444984b638511f48539d3a1c98db", size = 11734700, upload-time = "2025-08-21T18:22:39.822Z" }, - { url = "https://files.pythonhosted.org/packages/63/c5/b21cde720f54a1d1db71538c0bc9b73dee4b563a7dd7d2e404914904d7f5/ruff-0.12.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2c6f4064c69d2542029b2a61d39920c85240c39837599d7f2e32e80d36401d6e", size = 13468783, upload-time = "2025-08-21T18:22:42.559Z" }, - { url = "https://files.pythonhosted.org/packages/02/9e/39369e6ac7f2a1848f22fb0b00b690492f20811a1ac5c1fd1d2798329263/ruff-0.12.10-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:059e863ea3a9ade41407ad71c1de2badfbe01539117f38f763ba42a1206f7559", size = 14436642, upload-time = "2025-08-21T18:22:45.612Z" }, - { url = "https://files.pythonhosted.org/packages/e3/03/5da8cad4b0d5242a936eb203b58318016db44f5c5d351b07e3f5e211bb89/ruff-0.12.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1bef6161e297c68908b7218fa6e0e93e99a286e5ed9653d4be71e687dff101cf", size = 13859107, upload-time = "2025-08-21T18:22:48.886Z" }, - { url = "https://files.pythonhosted.org/packages/19/19/dd7273b69bf7f93a070c9cec9494a94048325ad18fdcf50114f07e6bf417/ruff-0.12.10-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4f1345fbf8fb0531cd722285b5f15af49b2932742fc96b633e883da8d841896b", size = 12886521, upload-time = "2025-08-21T18:22:51.567Z" }, - { url = "https://files.pythonhosted.org/packages/c0/1d/b4207ec35e7babaee62c462769e77457e26eb853fbdc877af29417033333/ruff-0.12.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f68433c4fbc63efbfa3ba5db31727db229fa4e61000f452c540474b03de52a9", size = 13097528, upload-time = "2025-08-21T18:22:54.609Z" }, - { url = "https://files.pythonhosted.org/packages/ff/00/58f7b873b21114456e880b75176af3490d7a2836033779ca42f50de3b47a/ruff-0.12.10-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:141ce3d88803c625257b8a6debf4a0473eb6eed9643a6189b68838b43e78165a", size = 13080443, upload-time = "2025-08-21T18:22:57.413Z" }, - { url = "https://files.pythonhosted.org/packages/12/8c/9e6660007fb10189ccb78a02b41691288038e51e4788bf49b0a60f740604/ruff-0.12.10-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:f3fc21178cd44c98142ae7590f42ddcb587b8e09a3b849cbc84edb62ee95de60", size = 11896759, upload-time = "2025-08-21T18:23:00.473Z" }, - { url = "https://files.pythonhosted.org/packages/67/4c/6d092bb99ea9ea6ebda817a0e7ad886f42a58b4501a7e27cd97371d0ba54/ruff-0.12.10-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:7d1a4e0bdfafcd2e3e235ecf50bf0176f74dd37902f241588ae1f6c827a36c56", size = 11701463, upload-time = "2025-08-21T18:23:03.211Z" }, - { url = "https://files.pythonhosted.org/packages/59/80/d982c55e91df981f3ab62559371380616c57ffd0172d96850280c2b04fa8/ruff-0.12.10-py3-none-musllinux_1_2_i686.whl", hash = "sha256:e67d96827854f50b9e3e8327b031647e7bcc090dbe7bb11101a81a3a2cbf1cc9", size = 12691603, upload-time = "2025-08-21T18:23:06.935Z" }, - { url = "https://files.pythonhosted.org/packages/ad/37/63a9c788bbe0b0850611669ec6b8589838faf2f4f959647f2d3e320383ae/ruff-0.12.10-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:ae479e1a18b439c59138f066ae79cc0f3ee250712a873d00dbafadaad9481e5b", size = 13164356, upload-time = "2025-08-21T18:23:10.225Z" }, - { url = "https://files.pythonhosted.org/packages/47/d4/1aaa7fb201a74181989970ebccd12f88c0fc074777027e2a21de5a90657e/ruff-0.12.10-py3-none-win32.whl", hash = "sha256:9de785e95dc2f09846c5e6e1d3a3d32ecd0b283a979898ad427a9be7be22b266", size = 11896089, upload-time = "2025-08-21T18:23:14.232Z" }, - { url = "https://files.pythonhosted.org/packages/ad/14/2ad38fd4037daab9e023456a4a40ed0154e9971f8d6aed41bdea390aabd9/ruff-0.12.10-py3-none-win_amd64.whl", hash = "sha256:7837eca8787f076f67aba2ca559cefd9c5cbc3a9852fd66186f4201b87c1563e", size = 13004616, upload-time = "2025-08-21T18:23:17.422Z" }, - { url = "https://files.pythonhosted.org/packages/24/3c/21cf283d67af33a8e6ed242396863af195a8a6134ec581524fd22b9811b6/ruff-0.12.10-py3-none-win_arm64.whl", hash = "sha256:cc138cc06ed9d4bfa9d667a65af7172b47840e1a98b02ce7011c391e54635ffc", size = 12074225, upload-time = "2025-08-21T18:23:20.137Z" }, -] - -[[package]] -name = "send2trash" -version = "1.8.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fd/3a/aec9b02217bb79b87bbc1a21bc6abc51e3d5dcf65c30487ac96c0908c722/Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf", size = 17394, upload-time = "2024-04-07T00:01:09.267Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/40/b0/4562db6223154aa4e22f939003cb92514c79f3d4dccca3444253fd17f902/Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9", size = 18072, upload-time = "2024-04-07T00:01:07.438Z" }, -] - -[[package]] -name = "setuptools" -version = "80.9.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/18/5d/3bf57dcd21979b887f014ea83c24ae194cfcd12b9e0fda66b957c69d1fca/setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c", size = 1319958, upload-time = "2025-05-27T00:56:51.443Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", size = 1201486, upload-time = "2025-05-27T00:56:49.664Z" }, -] - -[[package]] -name = "six" -version = "1.17.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, -] - -[[package]] -name = "sniffio" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, -] - -[[package]] -name = "soupsieve" -version = "2.7" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418, upload-time = "2025-04-20T18:50:08.518Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677, upload-time = "2025-04-20T18:50:07.196Z" }, -] - -[[package]] -name = "stack-data" -version = "0.6.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "asttokens" }, - { name = "executing" }, - { name = "pure-eval" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707, upload-time = "2023-09-30T13:58:05.479Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload-time = "2023-09-30T13:58:03.53Z" }, -] - -[[package]] -name = "super-collections" -version = "0.5.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "hjson" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b8/05/d1b50919a0d206d77255217d96dea9ab34bd1eb965a21559380c48f9517e/super_collections-0.5.3.tar.gz", hash = "sha256:94c1ec96c0a0d5e8e7d389ed8cde6882ac246940507c5e6b86e91945c2968d46", size = 10178, upload-time = "2024-10-12T05:11:19.888Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/07/6d/58de58c521e7fb79bceb4da90d55250070bb4adfa3c870b82519a561c79d/super_collections-0.5.3-py3-none-any.whl", hash = "sha256:907d35b25dc4070910e8254bf2f5c928348af1cf8a1f1e8259e06c666e902cff", size = 8436, upload-time = "2024-10-12T05:11:18.626Z" }, -] - -[[package]] -name = "ta-lib" -version = "0.6.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, - { name = "setuptools" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ba/97/a49816dd468a18ee080cf3a04640772a9f6321790d4049cece2490c4b7ad/ta_lib-0.6.4.tar.gz", hash = "sha256:08f55bc5771a6d1ceb1a2b713aad7b05f04eb0061e980c9113571c532d32e9cb", size = 381774, upload-time = "2025-06-08T15:28:15.452Z" } - -[[package]] -name = "termcolor" -version = "3.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ca/6c/3d75c196ac07ac8749600b60b03f4f6094d54e132c4d94ebac6ee0e0add0/termcolor-3.1.0.tar.gz", hash = "sha256:6a6dd7fbee581909eeec6a756cff1d7f7c376063b14e4a298dc4980309e55970", size = 14324, upload-time = "2025-04-30T11:37:53.791Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4f/bd/de8d508070629b6d84a30d01d57e4a65c69aa7f5abe7560b8fad3b50ea59/termcolor-3.1.0-py3-none-any.whl", hash = "sha256:591dd26b5c2ce03b9e43f391264626557873ce1d379019786f99b0c2bee140aa", size = 7684, upload-time = "2025-04-30T11:37:52.382Z" }, -] - -[[package]] -name = "terminado" -version = "0.18.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "ptyprocess", marker = "os_name != 'nt'" }, - { name = "pywinpty", marker = "os_name == 'nt'" }, - { name = "tornado" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/8a/11/965c6fd8e5cc254f1fe142d547387da17a8ebfd75a3455f637c663fb38a0/terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e", size = 32701, upload-time = "2024-03-12T14:34:39.026Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/9e/2064975477fdc887e47ad42157e214526dcad8f317a948dee17e1659a62f/terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0", size = 14154, upload-time = "2024-03-12T14:34:36.569Z" }, -] - -[[package]] -name = "tinycss2" -version = "1.4.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "webencodings" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/7a/fd/7a5ee21fd08ff70d3d33a5781c255cbe779659bd03278feb98b19ee550f4/tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7", size = 87085, upload-time = "2024-10-24T14:58:29.895Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/34/ebdc18bae6aa14fbee1a08b63c015c72b64868ff7dae68808ab500c492e2/tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289", size = 26610, upload-time = "2024-10-24T14:58:28.029Z" }, -] - -[[package]] -name = "tornado" -version = "6.5.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/09/ce/1eb500eae19f4648281bb2186927bb062d2438c2e5093d1360391afd2f90/tornado-6.5.2.tar.gz", hash = "sha256:ab53c8f9a0fa351e2c0741284e06c7a45da86afb544133201c5cc8578eb076a0", size = 510821, upload-time = "2025-08-08T18:27:00.78Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f6/48/6a7529df2c9cc12efd2e8f5dd219516184d703b34c06786809670df5b3bd/tornado-6.5.2-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:2436822940d37cde62771cff8774f4f00b3c8024fe482e16ca8387b8a2724db6", size = 442563, upload-time = "2025-08-08T18:26:42.945Z" }, - { url = "https://files.pythonhosted.org/packages/f2/b5/9b575a0ed3e50b00c40b08cbce82eb618229091d09f6d14bce80fc01cb0b/tornado-6.5.2-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:583a52c7aa94ee046854ba81d9ebb6c81ec0fd30386d96f7640c96dad45a03ef", size = 440729, upload-time = "2025-08-08T18:26:44.473Z" }, - { url = "https://files.pythonhosted.org/packages/1b/4e/619174f52b120efcf23633c817fd3fed867c30bff785e2cd5a53a70e483c/tornado-6.5.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0fe179f28d597deab2842b86ed4060deec7388f1fd9c1b4a41adf8af058907e", size = 444295, upload-time = "2025-08-08T18:26:46.021Z" }, - { url = "https://files.pythonhosted.org/packages/95/fa/87b41709552bbd393c85dd18e4e3499dcd8983f66e7972926db8d96aa065/tornado-6.5.2-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b186e85d1e3536d69583d2298423744740986018e393d0321df7340e71898882", size = 443644, upload-time = "2025-08-08T18:26:47.625Z" }, - { url = "https://files.pythonhosted.org/packages/f9/41/fb15f06e33d7430ca89420283a8762a4e6b8025b800ea51796ab5e6d9559/tornado-6.5.2-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e792706668c87709709c18b353da1f7662317b563ff69f00bab83595940c7108", size = 443878, upload-time = "2025-08-08T18:26:50.599Z" }, - { url = "https://files.pythonhosted.org/packages/11/92/fe6d57da897776ad2e01e279170ea8ae726755b045fe5ac73b75357a5a3f/tornado-6.5.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:06ceb1300fd70cb20e43b1ad8aaee0266e69e7ced38fa910ad2e03285009ce7c", size = 444549, upload-time = "2025-08-08T18:26:51.864Z" }, - { url = "https://files.pythonhosted.org/packages/9b/02/c8f4f6c9204526daf3d760f4aa555a7a33ad0e60843eac025ccfd6ff4a93/tornado-6.5.2-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:74db443e0f5251be86cbf37929f84d8c20c27a355dd452a5cfa2aada0d001ec4", size = 443973, upload-time = "2025-08-08T18:26:53.625Z" }, - { url = "https://files.pythonhosted.org/packages/ae/2d/f5f5707b655ce2317190183868cd0f6822a1121b4baeae509ceb9590d0bd/tornado-6.5.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b5e735ab2889d7ed33b32a459cac490eda71a1ba6857b0118de476ab6c366c04", size = 443954, upload-time = "2025-08-08T18:26:55.072Z" }, - { url = "https://files.pythonhosted.org/packages/e8/59/593bd0f40f7355806bf6573b47b8c22f8e1374c9b6fd03114bd6b7a3dcfd/tornado-6.5.2-cp39-abi3-win32.whl", hash = "sha256:c6f29e94d9b37a95013bb669616352ddb82e3bfe8326fccee50583caebc8a5f0", size = 445023, upload-time = "2025-08-08T18:26:56.677Z" }, - { url = "https://files.pythonhosted.org/packages/c7/2a/f609b420c2f564a748a2d80ebfb2ee02a73ca80223af712fca591386cafb/tornado-6.5.2-cp39-abi3-win_amd64.whl", hash = "sha256:e56a5af51cc30dd2cae649429af65ca2f6571da29504a07995175df14c18f35f", size = 445427, upload-time = "2025-08-08T18:26:57.91Z" }, - { url = "https://files.pythonhosted.org/packages/5e/4f/e1f65e8f8c76d73658b33d33b81eed4322fb5085350e4328d5c956f0c8f9/tornado-6.5.2-cp39-abi3-win_arm64.whl", hash = "sha256:d6c33dc3672e3a1f3618eb63b7ef4683a7688e7b9e6e8f0d9aa5726360a004af", size = 444456, upload-time = "2025-08-08T18:26:59.207Z" }, -] - -[[package]] -name = "tqdm" -version = "4.67.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737, upload-time = "2024-11-24T20:12:22.481Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540, upload-time = "2024-11-24T20:12:19.698Z" }, -] - -[[package]] -name = "traitlets" -version = "5.14.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621, upload-time = "2024-04-19T11:11:49.746Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload-time = "2024-04-19T11:11:46.763Z" }, -] - -[[package]] -name = "types-python-dateutil" -version = "2.9.0.20250822" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0c/0a/775f8551665992204c756be326f3575abba58c4a3a52eef9909ef4536428/types_python_dateutil-2.9.0.20250822.tar.gz", hash = "sha256:84c92c34bd8e68b117bff742bc00b692a1e8531262d4507b33afcc9f7716cd53", size = 16084, upload-time = "2025-08-22T03:02:00.613Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ab/d9/a29dfa84363e88b053bf85a8b7f212a04f0d7343a4d24933baa45c06e08b/types_python_dateutil-2.9.0.20250822-py3-none-any.whl", hash = "sha256:849d52b737e10a6dc6621d2bd7940ec7c65fcb69e6aa2882acf4e56b2b508ddc", size = 17892, upload-time = "2025-08-22T03:01:59.436Z" }, -] - -[[package]] -name = "typing-extensions" -version = "4.15.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, -] - -[[package]] -name = "tzdata" -version = "2025.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/95/32/1a225d6164441be760d75c2c42e2780dc0873fe382da3e98a2e1e48361e5/tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9", size = 196380, upload-time = "2025-03-23T13:54:43.652Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8", size = 347839, upload-time = "2025-03-23T13:54:41.845Z" }, -] - -[[package]] -name = "uri-template" -version = "1.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/31/c7/0336f2bd0bcbada6ccef7aaa25e443c118a704f828a0620c6fa0207c1b64/uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7", size = 21678, upload-time = "2023-06-21T01:49:05.374Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363", size = 11140, upload-time = "2023-06-21T01:49:03.467Z" }, -] - -[[package]] -name = "urllib3" -version = "2.5.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload-time = "2025-06-18T14:07:41.644Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" }, -] - -[[package]] -name = "watchdog" -version = "6.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload-time = "2024-11-01T14:07:13.037Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/39/ea/3930d07dafc9e286ed356a679aa02d777c06e9bfd1164fa7c19c288a5483/watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948", size = 96471, upload-time = "2024-11-01T14:06:37.745Z" }, - { url = "https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860", size = 88449, upload-time = "2024-11-01T14:06:39.748Z" }, - { url = "https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0", size = 89054, upload-time = "2024-11-01T14:06:41.009Z" }, - { url = "https://files.pythonhosted.org/packages/68/98/b0345cabdce2041a01293ba483333582891a3bd5769b08eceb0d406056ef/watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c", size = 96480, upload-time = "2024-11-01T14:06:42.952Z" }, - { url = "https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134", size = 88451, upload-time = "2024-11-01T14:06:45.084Z" }, - { url = "https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b", size = 89057, upload-time = "2024-11-01T14:06:47.324Z" }, - { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079, upload-time = "2024-11-01T14:06:59.472Z" }, - { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078, upload-time = "2024-11-01T14:07:01.431Z" }, - { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076, upload-time = "2024-11-01T14:07:02.568Z" }, - { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077, upload-time = "2024-11-01T14:07:03.893Z" }, - { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078, upload-time = "2024-11-01T14:07:05.189Z" }, - { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077, upload-time = "2024-11-01T14:07:06.376Z" }, - { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078, upload-time = "2024-11-01T14:07:07.547Z" }, - { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065, upload-time = "2024-11-01T14:07:09.525Z" }, - { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070, upload-time = "2024-11-01T14:07:10.686Z" }, - { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload-time = "2024-11-01T14:07:11.845Z" }, -] - -[[package]] -name = "wcmatch" -version = "10.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "bracex" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/79/3e/c0bdc27cf06f4e47680bd5803a07cb3dfd17de84cde92dd217dcb9e05253/wcmatch-10.1.tar.gz", hash = "sha256:f11f94208c8c8484a16f4f48638a85d771d9513f4ab3f37595978801cb9465af", size = 117421, upload-time = "2025-06-22T19:14:02.49Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/d8/0d1d2e9d3fabcf5d6840362adcf05f8cf3cd06a73358140c3a97189238ae/wcmatch-10.1-py3-none-any.whl", hash = "sha256:5848ace7dbb0476e5e55ab63c6bbd529745089343427caa5537f230cc01beb8a", size = 39854, upload-time = "2025-06-22T19:14:00.978Z" }, -] - -[[package]] -name = "wcwidth" -version = "0.2.13" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301, upload-time = "2024-01-06T02:10:57.829Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166, upload-time = "2024-01-06T02:10:55.763Z" }, -] - -[[package]] -name = "webcolors" -version = "24.11.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7b/29/061ec845fb58521848f3739e466efd8250b4b7b98c1b6c5bf4d40b419b7e/webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6", size = 45064, upload-time = "2024-11-11T07:43:24.224Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9", size = 14934, upload-time = "2024-11-11T07:43:22.529Z" }, -] - -[[package]] -name = "webencodings" -version = "0.5.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721, upload-time = "2017-04-05T20:21:34.189Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774, upload-time = "2017-04-05T20:21:32.581Z" }, -] - -[[package]] -name = "websocket-client" -version = "1.8.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e6/30/fba0d96b4b5fbf5948ed3f4681f7da2f9f64512e1d303f94b4cc174c24a5/websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da", size = 54648, upload-time = "2024-04-23T22:16:16.976Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5a/84/44687a29792a70e111c5c477230a72c4b957d88d16141199bf9acb7537a3/websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526", size = 58826, upload-time = "2024-04-23T22:16:14.422Z" }, -] - -[[package]] -name = "websockets" -version = "15.0.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/21/e6/26d09fab466b7ca9c7737474c52be4f76a40301b08362eb2dbc19dcc16c1/websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", size = 177016, upload-time = "2025-03-05T20:03:41.606Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/51/6b/4545a0d843594f5d0771e86463606a3988b5a09ca5123136f8a76580dd63/websockets-15.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3", size = 175437, upload-time = "2025-03-05T20:02:16.706Z" }, - { url = "https://files.pythonhosted.org/packages/f4/71/809a0f5f6a06522af902e0f2ea2757f71ead94610010cf570ab5c98e99ed/websockets-15.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665", size = 173096, upload-time = "2025-03-05T20:02:18.832Z" }, - { url = "https://files.pythonhosted.org/packages/3d/69/1a681dd6f02180916f116894181eab8b2e25b31e484c5d0eae637ec01f7c/websockets-15.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2", size = 173332, upload-time = "2025-03-05T20:02:20.187Z" }, - { url = "https://files.pythonhosted.org/packages/a6/02/0073b3952f5bce97eafbb35757f8d0d54812b6174ed8dd952aa08429bcc3/websockets-15.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215", size = 183152, upload-time = "2025-03-05T20:02:22.286Z" }, - { url = "https://files.pythonhosted.org/packages/74/45/c205c8480eafd114b428284840da0b1be9ffd0e4f87338dc95dc6ff961a1/websockets-15.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5", size = 182096, upload-time = "2025-03-05T20:02:24.368Z" }, - { url = "https://files.pythonhosted.org/packages/14/8f/aa61f528fba38578ec553c145857a181384c72b98156f858ca5c8e82d9d3/websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65", size = 182523, upload-time = "2025-03-05T20:02:25.669Z" }, - { url = "https://files.pythonhosted.org/packages/ec/6d/0267396610add5bc0d0d3e77f546d4cd287200804fe02323797de77dbce9/websockets-15.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe", size = 182790, upload-time = "2025-03-05T20:02:26.99Z" }, - { url = "https://files.pythonhosted.org/packages/02/05/c68c5adbf679cf610ae2f74a9b871ae84564462955d991178f95a1ddb7dd/websockets-15.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4", size = 182165, upload-time = "2025-03-05T20:02:30.291Z" }, - { url = "https://files.pythonhosted.org/packages/29/93/bb672df7b2f5faac89761cb5fa34f5cec45a4026c383a4b5761c6cea5c16/websockets-15.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597", size = 182160, upload-time = "2025-03-05T20:02:31.634Z" }, - { url = "https://files.pythonhosted.org/packages/ff/83/de1f7709376dc3ca9b7eeb4b9a07b4526b14876b6d372a4dc62312bebee0/websockets-15.0.1-cp312-cp312-win32.whl", hash = "sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9", size = 176395, upload-time = "2025-03-05T20:02:33.017Z" }, - { url = "https://files.pythonhosted.org/packages/7d/71/abf2ebc3bbfa40f391ce1428c7168fb20582d0ff57019b69ea20fa698043/websockets-15.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7", size = 176841, upload-time = "2025-03-05T20:02:34.498Z" }, - { url = "https://files.pythonhosted.org/packages/cb/9f/51f0cf64471a9d2b4d0fc6c534f323b664e7095640c34562f5182e5a7195/websockets-15.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931", size = 175440, upload-time = "2025-03-05T20:02:36.695Z" }, - { url = "https://files.pythonhosted.org/packages/8a/05/aa116ec9943c718905997412c5989f7ed671bc0188ee2ba89520e8765d7b/websockets-15.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675", size = 173098, upload-time = "2025-03-05T20:02:37.985Z" }, - { url = "https://files.pythonhosted.org/packages/ff/0b/33cef55ff24f2d92924923c99926dcce78e7bd922d649467f0eda8368923/websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151", size = 173329, upload-time = "2025-03-05T20:02:39.298Z" }, - { url = "https://files.pythonhosted.org/packages/31/1d/063b25dcc01faa8fada1469bdf769de3768b7044eac9d41f734fd7b6ad6d/websockets-15.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22", size = 183111, upload-time = "2025-03-05T20:02:40.595Z" }, - { url = "https://files.pythonhosted.org/packages/93/53/9a87ee494a51bf63e4ec9241c1ccc4f7c2f45fff85d5bde2ff74fcb68b9e/websockets-15.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f", size = 182054, upload-time = "2025-03-05T20:02:41.926Z" }, - { url = "https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8", size = 182496, upload-time = "2025-03-05T20:02:43.304Z" }, - { url = "https://files.pythonhosted.org/packages/98/41/e7038944ed0abf34c45aa4635ba28136f06052e08fc2168520bb8b25149f/websockets-15.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375", size = 182829, upload-time = "2025-03-05T20:02:48.812Z" }, - { url = "https://files.pythonhosted.org/packages/e0/17/de15b6158680c7623c6ef0db361da965ab25d813ae54fcfeae2e5b9ef910/websockets-15.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d", size = 182217, upload-time = "2025-03-05T20:02:50.14Z" }, - { url = "https://files.pythonhosted.org/packages/33/2b/1f168cb6041853eef0362fb9554c3824367c5560cbdaad89ac40f8c2edfc/websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4", size = 182195, upload-time = "2025-03-05T20:02:51.561Z" }, - { url = "https://files.pythonhosted.org/packages/86/eb/20b6cdf273913d0ad05a6a14aed4b9a85591c18a987a3d47f20fa13dcc47/websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa", size = 176393, upload-time = "2025-03-05T20:02:53.814Z" }, - { url = "https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", size = 176837, upload-time = "2025-03-05T20:02:55.237Z" }, - { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743, upload-time = "2025-03-05T20:03:39.41Z" }, -] - -[[package]] -name = "xyzservices" -version = "2025.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/00/af/c0f7f97bb320d14c089476f487b81f733238cc5603e0914f2e409f49d589/xyzservices-2025.4.0.tar.gz", hash = "sha256:6fe764713648fac53450fbc61a3c366cb6ae5335a1b2ae0c3796b495de3709d8", size = 1134722, upload-time = "2025-04-25T10:38:09.669Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d6/7d/b77455d7c7c51255b2992b429107fab811b2e36ceaf76da1e55a045dc568/xyzservices-2025.4.0-py3-none-any.whl", hash = "sha256:8d4db9a59213ccb4ce1cf70210584f30b10795bff47627cdfb862b39ff6e10c9", size = 90391, upload-time = "2025-04-25T10:38:08.468Z" }, -] - -[[package]] -name = "yfinance" -version = "0.2.65" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "beautifulsoup4" }, - { name = "curl-cffi" }, - { name = "frozendict" }, - { name = "multitasking" }, - { name = "numpy" }, - { name = "pandas" }, - { name = "peewee" }, - { name = "platformdirs" }, - { name = "protobuf" }, - { name = "pytz" }, - { name = "requests" }, - { name = "websockets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a3/c1/2ef5acda45a71297f4be22e205359e0f93b0171f2b6ebdd681362e725686/yfinance-0.2.65.tar.gz", hash = "sha256:3d465e58c49be9d61f9862829de3e00bef6b623809f32f4efb5197b62fc60485", size = 128666, upload-time = "2025-07-06T16:20:12.769Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c9/1e/631c80e0f97aef46eb73549b9b0f60d94057294e040740f4cad0cb1f48e4/yfinance-0.2.65-py2.py3-none-any.whl", hash = "sha256:7be13abb0d80a17230bf798e9c6a324fa2bef0846684a6d4f7fa2abd21938963", size = 119438, upload-time = "2025-07-06T16:20:11.251Z" }, -] diff --git a/temp_pandas_ta/pandas_ta.tar.gz b/temp_pandas_ta/pandas_ta.tar.gz deleted file mode 100644 index ec1922aa..00000000 Binary files a/temp_pandas_ta/pandas_ta.tar.gz and /dev/null differ